Skip to content
This repository was archived by the owner on Jan 2, 2026. It is now read-only.

Commit 0698a15

Browse files
thelightway24chanbyoungLEELISEHaechangLee
authored
๐Ÿš€ Deploy: Ver1.0.0 ๋ฐฐํฌ
* ๐Ÿ“ฆ Chore: Git-Action ๋“ฑ๋ก (ํ…Œ์ŠคํŠธ ์„œ๋ฒ„ ๋ฐฐํฌ) (#25) * โœจ Feature/#13 ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํ‘œ์ค€ ์‘๋‹ต ํฌ๋งท ๊ธฐ๋Šฅ * โœจ Feat: ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐ ํ‘œ์ค€ ์‘๋‹ต ํฌ๋งท ๊ธฐ๋Šฅ ์ดˆ์•ˆ * โœจ Feat: ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์˜ˆ์‹œ ์ถ”๊ฐ€ * ๐Ÿ’„Style: ์ฃผ์„๋ฌธ ์ˆ˜์ • * โ™ป๏ธ Refactor: ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋กœ์ง ๋ชจ๋“ˆํ™” ๋ฐ BindException ์ฒ˜๋ฆฌ ์ถ”๊ฐ€ * โ™ป๏ธ Refactor: ApiResponse ํด๋ž˜์Šค ๋นŒ๋” ํŒจํ„ด ์ ์šฉ - Lombok์˜ @builder, @Getter, @NoArgsConstructor, @AllArgsConstructor ๋„์ž… - success() ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋“œ ๋Œ€์‹  varargs ๊ธฐ๋ฐ˜ ๋‹จ์ผ ๋ฉ”์„œ๋“œ๋กœ ํ†ตํ•ฉ - SUCCESS_MESSAGE ์ƒ์ˆ˜ํ™”๋กœ ๋ฉ”์‹œ์ง€ ์žฌ์‚ฌ์šฉ์„ฑ ํ–ฅ์ƒ - ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ํ™•์žฅ์„ฑ ๊ฐœ์„  * โœจ Feat: ํ…Œ์ŠคํŠธ API ์ถ”๊ฐ€ * ๐Ÿ’„ Style: ์ฃผ์„๋ฌธ ์ˆ˜์ • * โ™ป๏ธ Refactor: ํ…Œ์ŠคํŠธ๋กœ ์ถ”๊ฐ€ํ–ˆ๋˜ ์ข…์†์„ฑ ์‚ญ์ œ ๋ฐ ์ฝ”๋“œ ์‚ญ์ œ * ๐Ÿ’„ Style: ์ฃผ์„๋ฌธ ํ˜•์‹ ๋ณ€๊ฒฝ --------- Co-authored-by: leelise <jaszzzzz@naver.com> * ๐Ÿšจ Hotfix: #26 ๋ฐฐํฌ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ (#27) * ๐Ÿ“ฆChore: Test ํ™˜๊ฒฝ ์ƒํƒœ ํ™•์ธ ์˜์กด์„ฑ ์ถ”๊ฐ€ (#28) closed #24 * Feature/#16 ๋กœ๊ทธ ๊ธฐ๋Šฅ * โœจ Feat: ๋กœ๊ทธ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ * โ™ป๏ธ Refactor: ๋กœ๊ทธ ์œ ํ‹ธ ๋ฐ Enum ํด๋ž˜์Šค ๋ฆฌํŒฉํ† ๋ง * โ™ป๏ธ Refactor: ๋กœ๊ทธ ์œ ํ‹ธ ํด๋ž˜์Šค ๋„๋ฉ”์ธ ๊ฐ์ฒด ๋‚ด๋ถ€ ๋ฆฌํŒฉํ† ๋ง * โ™ป๏ธ Refactor: ๋กœ๊ทธ ๊ธฐ๋Šฅ ์ „์ฒด ๋ฆฌํŒฉํ† ๋ง - ์บก์Аํ™” ๋ฐ ์ƒ์ˆ˜ ํ™œ์šฉ * ๐Ÿ› Fix: LoggerWithTraceId ๊ฐ์ฒด ๋‚ด๋ถ€ StackTraceElement๋ฐฐ์—ด ์ˆ˜์ • * ๐Ÿ’„ Style: ๋กœ๊ทธ ๊ธฐ๋Šฅ์˜ ๋ชจ๋“  ํด๋ž˜์Šค์— ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. * โ™ป๏ธ Refactor: ์ƒ์ˆ˜๋กœ ์„ ์–ธ๋œ ๋ถ€๋ถ„์„ env ํŒŒ์ผ๊ณผ enumํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. * โœจ Feat: ๊ณต๊ณต๋ฐ์ดํ„ฐ API ํŒŒ์‹ฑ ๊ฐœ๋ฐœ * ๐Ÿ“ฆChore: API ์‘๋‹ต ํŒŒ์‹ฑ์„ ์œ„ํ•œ ์˜์กด์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€ * โœจFeat: API ์š”์ฒญ์šฉ ๊ฐ์ฒด ์ถ”๊ฐ€ * ๐Ÿ“ฆ Chore: ์ฃผ์„ ์ถ”๊ฐ€ * โœจ Feat: ์˜์•ฝํ’ˆ ์ƒ์„ธ์ •๋ณด API ํ˜ธ์ถœ ๊ฐœ๋ฐœ * โœจ Feat: ์ƒ˜ํ”Œ ๊ฒ€์ƒ‰ ๋ฐ์ดํ„ฐ ์ถ”์ถœ ๊ฐœ๋ฐœ * โœจ Feat: ๊ณต๊ณต๋ฐ์ดํ„ฐ API ํŒŒ์‹ฑ ๊ฐœ๋ฐœ * โ™ป๏ธ Refactor: ํŒŒ์‹ฑ์„ ์œ„ํ•œ Wrappeer ํด๋ž˜์Šค ์ •๋ฆฌ (์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€) * โ™ป๏ธ Refactor: ๋ถˆํ•„์š”ํ•œ ์ƒ์„ฑ์ž ์‚ญ์ œ * โ™ป๏ธ Refactor: aricle parsing ๊ฐ€๋…์„ฑ ๊ฐœ์„  * ๐Ÿ› Fix: SectionWrapper parseElement ์˜คํƒ€ ์ˆ˜์ • * โ™ป๏ธ Refactor: ๋กœ์ง ์ˆ˜์ • ๋ฐ ๊ฐ€๋…์„ฑ ๊ฐœ์„  * โ™ป๏ธ Refactor: Paragraph ํŒŒ์‹ฑ ์ˆ˜์ • ๋ฐ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ ์ ์šฉ * โ™ป๏ธ Refactor: ๋„๋ฉ”์ธ ๋ฉ”์†Œ๋“œ ์ ‘๊ทผ์ž ๋ณ€๊ฒฝ * ๐Ÿ“ฆ gitignore ์ˆ˜์ • ๋ฐ ์žฌ ์ปค๋ฐ‹ * โ™ป๏ธ Refactor: ๊ณต๊ณต๋ฐ์ดํ„ฐ ๊ฐœ์š”์ •๋ณด API ํŒŒ์‹ฑ ์ˆ˜์ • * โœจ Feat: API ์ „์ฒด ๋ฐ์ดํ„ฐ ์ €์žฅ * โœจ Feat: api ์ „์ฒด ๋ฐ์ดํ„ฐ ์ €์žฅ * ๐Ÿ› Fix: Xml ํŒŒ์„œ์— null ์ฒดํฌ ๋กœ์ง ์ถ”๊ฐ€ * โœจ Feat: ๊ณต๊ณต๋ฐ์ดํ„ฐ ์ „์ฒด ์ €์žฅ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ * โ™ป๏ธ Refactor: ์ „์ฒด ๋ฐ์ดํ„ฐ ์ €์žฅ ํ•จ์ˆ˜ ๋ฆฌํŒฉํ† ๋ง --------- Co-authored-by: HaechangLee <112938092+HaechangLee@users.noreply.github.com> * โ™ป๏ธ Refactor: ํŒจํ‚ค์ง€๊ตฌ์กฐ ๊ฐœ์„  * ๐Ÿ› Fix: import์—๋Ÿฌ ์ˆ˜์ • --------- Co-authored-by: thelightway <dev@thelightway.kr> * ๐Ÿ“ฆ Chore: Git-Action ์„œ๋ฒ„์ƒํƒœ ์ฒดํฌ ์ถ”๊ฐ€ (#38) * โœจ Feat: JDBC ์ €์žฅ ์ถ”๊ฐ€ (#39) * ๐Ÿšจ Hotfix: ์ธํ„ฐ์…‰ํ„ฐ ์„ค์ • ์˜ค๋ฅ˜ ์ˆ˜์ • (#41) * โœจFeature/#4 ๊ณต๊ณต๋ฐ์ดํ„ฐ ์ €์žฅ * ๐Ÿ“ฆChore: API ์‘๋‹ต ํŒŒ์‹ฑ์„ ์œ„ํ•œ ์˜์กด์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€ * โœจFeat: API ์š”์ฒญ์šฉ ๊ฐ์ฒด ์ถ”๊ฐ€ * ๐Ÿ“ฆ Chore: ์ฃผ์„ ์ถ”๊ฐ€ * โœจ Feat: ์˜์•ฝํ’ˆ ์ƒ์„ธ์ •๋ณด API ํ˜ธ์ถœ ๊ฐœ๋ฐœ * โœจ Feat: ์ƒ˜ํ”Œ ๊ฒ€์ƒ‰ ๋ฐ์ดํ„ฐ ์ถ”์ถœ ๊ฐœ๋ฐœ * โœจ Feat: ๊ณต๊ณต๋ฐ์ดํ„ฐ API ํŒŒ์‹ฑ ๊ฐœ๋ฐœ * โ™ป๏ธ Refactor: ํŒŒ์‹ฑ์„ ์œ„ํ•œ Wrappeer ํด๋ž˜์Šค ์ •๋ฆฌ (์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€) * โ™ป๏ธ Refactor: ๋ถˆํ•„์š”ํ•œ ์ƒ์„ฑ์ž ์‚ญ์ œ * โ™ป๏ธ Refactor: aricle parsing ๊ฐ€๋…์„ฑ ๊ฐœ์„  * ๐Ÿ› Fix: SectionWrapper parseElement ์˜คํƒ€ ์ˆ˜์ • * โ™ป๏ธ Refactor: ๋กœ์ง ์ˆ˜์ • ๋ฐ ๊ฐ€๋…์„ฑ ๊ฐœ์„  * โ™ป๏ธ Refactor: Paragraph ํŒŒ์‹ฑ ์ˆ˜์ • ๋ฐ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ ์ ์šฉ * โ™ป๏ธ Refactor: ๋„๋ฉ”์ธ ๋ฉ”์†Œ๋“œ ์ ‘๊ทผ์ž ๋ณ€๊ฒฝ * ๐Ÿ“ฆ gitignore ์ˆ˜์ • ๋ฐ ์žฌ ์ปค๋ฐ‹ * โ™ป๏ธ Refactor: ๊ณต๊ณต๋ฐ์ดํ„ฐ ๊ฐœ์š”์ •๋ณด API ํŒŒ์‹ฑ ์ˆ˜์ • * โœจ Feat: API ์ „์ฒด ๋ฐ์ดํ„ฐ ์ €์žฅ * โœจ Feat: api ์ „์ฒด ๋ฐ์ดํ„ฐ ์ €์žฅ * ๐Ÿ› Fix: Xml ํŒŒ์„œ์— null ์ฒดํฌ ๋กœ์ง ์ถ”๊ฐ€ * โœจ Feat: ๊ณต๊ณต๋ฐ์ดํ„ฐ ์ „์ฒด ์ €์žฅ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ * โ™ป๏ธ Refactor: ์ „์ฒด ๋ฐ์ดํ„ฐ ์ €์žฅ ํ•จ์ˆ˜ ๋ฆฌํŒฉํ† ๋ง --------- Co-authored-by: HaechangLee <112938092+HaechangLee@users.noreply.github.com> --------- Co-authored-by: HaechangLee <112938092+HaechangLee@users.noreply.github.com> * โœจ Feat: #19 ๊ณต๊ณต๋ฐ์ดํ„ฐ ์ €์žฅ ๊ฐ’ ๋ฐ˜ํ™˜ * ๐Ÿ“ฆChore: API ์‘๋‹ต ํŒŒ์‹ฑ์„ ์œ„ํ•œ ์˜์กด์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€ * โœจFeat: API ์š”์ฒญ์šฉ ๊ฐ์ฒด ์ถ”๊ฐ€ * ๐Ÿ“ฆ Chore: ์ฃผ์„ ์ถ”๊ฐ€ * โœจ Feat: ์˜์•ฝํ’ˆ ์ƒ์„ธ์ •๋ณด API ํ˜ธ์ถœ ๊ฐœ๋ฐœ * โœจ Feat: ์ƒ˜ํ”Œ ๊ฒ€์ƒ‰ ๋ฐ์ดํ„ฐ ์ถ”์ถœ ๊ฐœ๋ฐœ * โœจ Feat: ๊ณต๊ณต๋ฐ์ดํ„ฐ API ํŒŒ์‹ฑ ๊ฐœ๋ฐœ * โ™ป๏ธ Refactor: ํŒŒ์‹ฑ์„ ์œ„ํ•œ Wrappeer ํด๋ž˜์Šค ์ •๋ฆฌ (์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€) * โ™ป๏ธ Refactor: ๋ถˆํ•„์š”ํ•œ ์ƒ์„ฑ์ž ์‚ญ์ œ * โ™ป๏ธ Refactor: aricle parsing ๊ฐ€๋…์„ฑ ๊ฐœ์„  * ๐Ÿ› Fix: SectionWrapper parseElement ์˜คํƒ€ ์ˆ˜์ • * โ™ป๏ธ Refactor: ๋กœ์ง ์ˆ˜์ • ๋ฐ ๊ฐ€๋…์„ฑ ๊ฐœ์„  * โ™ป๏ธ Refactor: Paragraph ํŒŒ์‹ฑ ์ˆ˜์ • ๋ฐ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ ์ ์šฉ * โ™ป๏ธ Refactor: ๋„๋ฉ”์ธ ๋ฉ”์†Œ๋“œ ์ ‘๊ทผ์ž ๋ณ€๊ฒฝ * ๐Ÿ“ฆ gitignore ์ˆ˜์ • ๋ฐ ์žฌ ์ปค๋ฐ‹ * โœจ Feat: api ์ „์ฒด ๋ฐ์ดํ„ฐ ์ €์žฅ * ๐Ÿ› Fix: Xml ํŒŒ์„œ์— null ์ฒดํฌ ๋กœ์ง ์ถ”๊ฐ€ * โœจ Feat: ๊ณต๊ณต๋ฐ์ดํ„ฐ ์ „์ฒด ์ €์žฅ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ * โ™ป๏ธ Refactor: ์ „์ฒด ๋ฐ์ดํ„ฐ ์ €์žฅ ํ•จ์ˆ˜ ๋ฆฌํŒฉํ† ๋ง * โœจ Feat: ๊ณต๊ณต๋ฐ์ดํ„ฐ ๋„๋ฉ”์ธ ๊ฐ์ฒด ์ถ”๊ฐ€ --------- Co-authored-by: HaechangLee <112938092+HaechangLee@users.noreply.github.com> * โ™ป๏ธ Refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ * Feature/ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ * โœจ Feat: ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ * โ™ป๏ธ Refactor: ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ ์ ์šฉ * โ™ป๏ธ Refactor: ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ณ์— ๋งž๊ฒŒ ์ผ๋ถ€ ๊ฐ์ฒด์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค, ์ปจํŠธ๋กค๋Ÿฌ์—์„œ parameter๊ฐ€ ์•„๋‹Œ ๊ฐ์ฒด๋กœ ๊ฐ’์„ ๋ฐ›๋„๋ก ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. * โ™ป๏ธ Refactor: ์ด์ œ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์— ๋”ฐ๋ผ ๋„๋ฉ”์ธ ๊ฐ์ฒด๊ฐ€ ์„œ๋น„์Šค ๊ณ„์ธต ๋‚ด๋ถ€์—๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค, ๊ทœ์น™์— ๋งž์ถ”์–ด Exception์ฒ˜๋ฆฌ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค, ๋ชจ๋“  ํด๋ž˜์Šค์— ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. * โ™ป๏ธ Refactor: Index์™€ Search ๊ธฐ๋Šฅ์ด ๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. * โœจ Feature: ee-doc ๋ฐ์ดํ„ฐ ์ธ๋ฑ์Šค ์ €์žฅ * โœจ Feat: ee_doc ํŒŒ์ผ ์ธ๋ฑ์‹ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * โœจ Feat: ์ž๋™์™„์„ฑ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * โ™ป๏ธ Refactor: ํ•ต์‚ฌ๊ณ ๋‚  ๊ตฌ์กฐ์— ์ ์šฉ * โ™ป๏ธ Refactor: ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ ์•„ํ‚คํ…์ณ ์ ์šฉ ๋ฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ถ”๊ฐ€ * โ™ป๏ธ Refactor: ์ธ๋ฑ์‹ฑ ์ €์žฅ ๋กœ์ง ์ฒญํฌ ๋‹จ์œ„๋กœ ์ €์žฅํ•˜๋„๋ก ๋ณ€๊ฒฝ * โ™ป๏ธ Refactor: List๊ฐ’ ์‘๋‹ต ๊ฐ์ฒด์— ๋‹ด์•„์„œ ๋ณด๋‚ด๋„๋ก ๋ณ€๊ฒฝ * โ™ป๏ธ Refactor: Mapper ํด๋ž˜์Šค ๋ถ„๋ฆฌ * ๐Ÿ’„ Style: JavaDoc ์ฃผ์„๋ฌธ ์ถ”๊ฐ€ * โœจ Feat: ์ฆ์ƒ๊ธฐ๋ฐ˜ ์•ฝํ’ˆ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ * ๐Ÿ’„ Style: Mapper ํด๋ž˜์Šค ์ฃผ์„๋ฌธ ์ถ”๊ฐ€ * โœจ Feature: ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * โœจ Feat: ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ * โ™ป๏ธ Refactor: ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ ์ ์šฉ * โ™ป๏ธ Refactor: ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ณ์— ๋งž๊ฒŒ ์ผ๋ถ€ ๊ฐ์ฒด์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค, ์ปจํŠธ๋กค๋Ÿฌ์—์„œ parameter๊ฐ€ ์•„๋‹Œ ๊ฐ์ฒด๋กœ ๊ฐ’์„ ๋ฐ›๋„๋ก ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. * โ™ป๏ธ Refactor: ์ด์ œ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์— ๋”ฐ๋ผ ๋„๋ฉ”์ธ ๊ฐ์ฒด๊ฐ€ ์„œ๋น„์Šค ๊ณ„์ธต ๋‚ด๋ถ€์—๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค, ๊ทœ์น™์— ๋งž์ถ”์–ด Exception์ฒ˜๋ฆฌ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค, ๋ชจ๋“  ํด๋ž˜์Šค์— ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. * โ™ป๏ธ Refactor: Index์™€ Search ๊ธฐ๋Šฅ์ด ๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. * ๐Ÿšจ Hotfix: gitignore๋ฅผ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค * โ™ป๏ธ Refactor: ๋ณ€๊ฒฝ๋œ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. (#54) * โœจ Feature/#52 ์ฆ์ƒ ์ž๋™์™„์„ฑ ๋ฐ ๊ฒ€์ƒ‰๊ธฐ๋Šฅ ๊ตฌํ˜„ (#55) * โ™ป๏ธ Refactor: Index ํด๋” ๋ฐ tempํŒŒ์ผ ์‚ญ์ œ * โ™ป๏ธ Refactor: Drug ํด๋” tempํŒŒ์ผ ์‚ญ์ œ * โœจ Feat: ์‘๋‹ต ๊ฐ์ฒด ๋ฐ ์—๋Ÿฌ ์ฝ”๋“œ ์ •์˜ * โœจ Feat: ์ฆ์ƒ ์ž๋™์™„์„ฑ API ๊ตฌํ˜„ * โœจ Feat: ์ฆ์ƒ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * โ™ป๏ธ Refactor: ๋ณ€๊ฒฝ๋œ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. * โ™ป๏ธ Refactor: Index ํด๋” ์‚ญ์ œ * โ™ป๏ธ Refactor: ์‘๋‹ต ๊ฐ์ฒด ํ†ต์ผํ™” ๋ฐ Document ํ•„๋“œ ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ์ˆ˜์ • * โœจ Feat: ๋ˆ„๋ฝ๋œ ๋กœ๊ทธ ์ถ”๊ฐ€ * โ™ป๏ธ Refactor: ์•ˆ์“ฐ๋Š” ํŒŒ์ผ ์‚ญ์ œ --------- Co-authored-by: leelise <jaszzzzz@naver.com> * โœจ Feat: ๊ฒ€์ƒ‰๋Œ€์ƒ ES ์ธ๋ฑ์Šค ์ง€์ • (#57) * โœจ Feature: #5 ์•ฝํ’ˆ๋ช… ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ (#58) * โœจ Feat: ์•ฝํ’ˆ๋ช… Document ๊ฐ์ฒด ์ •์˜ * โœจ Feat: ์•ฝํ’ˆ๋ช… ๊ฒ€์ƒ‰ ๋ฐ ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * โ™ป๏ธ Refactor: ๋ฉ”์„œ๋“œ ๋ช… ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ ์ฝ”๋“œ `PathVariable` ์‚ฌ์šฉํ•˜์—ฌ ํ†ตํ•ฉ * โœจ Feat: ์ฃผ์„ ๋ฐ ๋กœ๊ทธ ์ถ”๊ฐ€ * โœจ Feat: ๊ฒ€์ƒ‰ ํƒ€์ž… enum ์ถ”๊ฐ€ * โœจFeature: #59 ์•ฝํ’ˆ id rdb ์กฐํšŒ (#60) * โœจ Feature: ์•ฝํ’ˆid ์กฐํšŒ ์ถ”๊ฐ€ * ๐Ÿ“ฆ Chore: ์ฃผ์„ ์ถ”๊ฐ€ * โ™ป๏ธ Refactor: ์ž์—ฐ์–ด ๊ฒ€์ƒ‰ ๋กœ์ง ๋ฆฌํŒฉํ† ๋ง, ์Šค์œ„์นญ ๋กœ์ง ์ถ”๊ฐ€ * โœจ Feature: #62 ์ฝ”๋“œ ํ†ตํ•ฉ (#64) * โ™ป๏ธ Refactor: ์ž์—ฐ์–ด ๊ฒ€์ƒ‰ ๋กœ์ง์„ ๋ฆฌํŒฉํ† ๋ง ํ•˜์˜€์Šต๋‹ˆ๋‹ค.(ํ—ฅ์‚ฌ๊ณ ๋‚  ๊ตฌ์กฐ ์ ์šฉ ๋ฐ ๋‚ด๋ถ€ ๋ฆฌํŒฉํ† ๋ง), ์Šค์œ„์นญ ๋กœ์ง์„ ๋„์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค. * โœจ Feature: yakplus-batch์˜ ์ฝ”๋“œ ํ†ตํ•ฉ ์ดˆ์•ˆ * ๐Ÿ› Fix: ๋ณ€์ˆ˜ ์„ ์–ธ ์•ˆ๋œ ๋ฌธ์ œ ์ˆ˜์ • * ๐Ÿ› Fix: ์ž„ํฌํŠธ ๋ฌธ์ œ ์ˆ˜์ • * ๐Ÿ› Fix: ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ์ˆ˜์ • * ๐Ÿ“ฆ Chore: ๋ถˆํ•„์š”ํ•œ import ์‚ญ์ œ * ๐Ÿ“ฆ Chore: Swagger ์˜์กด์„ฑ ๋ฐ ์„ค์ • ์ถ”๊ฐ€ * โœจ Feat: ์ปจํŠธ๋กค๋Ÿฌ Swagger ์ ์šฉ * โ™ป๏ธ Refactor: ์ธ๋ฑ์Šค ์ด๋ฆ„ ์ƒ์ˆ˜๋กœ ๋ณ€๊ฒฝ ๋ฐ ๋งคํผ ๋ถ„๋ฆฌ --------- Co-authored-by: leelise <jaszzzzz@naver.com> Co-authored-by: pcb7893@naver.com <122460524+chanbyoung@users.noreply.github.com> * ๐Ÿ› Fix: ์ƒ‰์ธ์„ ์œ„ํ•œ ์–ด๋Œ‘ํ„ฐ ์ด๋ฆ„ ์˜๋ฌธ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ (#66) * โ™ป๏ธ Refactor: ์ž์—ฐ์–ด ๊ฒ€์ƒ‰๋กœ์ง ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ ๊ฐœ์„  * ๐Ÿ› Fix: ์ž„๋ฒ ๋”ฉ adapter ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ์ˆ˜์ • (#70) --------- Co-authored-by: chanbyeong <122460524+chanbyoung@users.noreply.github.com> Co-authored-by: leelise <jaszzzzz@naver.com> Co-authored-by: HaechangLee <112938092+HaechangLee@users.noreply.github.com>
1 parent 2ff9428 commit 0698a15

66 files changed

Lines changed: 3895 additions & 7 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
name: Deploy
2+
3+
on:
4+
push:
5+
branches:
6+
- dev
7+
paths-ignore:
8+
- '.github/workflows/**'
9+
10+
jobs:
11+
deploy:
12+
runs-on: self-hosted
13+
14+
steps:
15+
- name: Checkout code
16+
uses: actions/checkout@v3
17+
18+
- name: Set up Java
19+
uses: actions/setup-java@v3
20+
with:
21+
distribution: 'temurin'
22+
java-version: '21'
23+
24+
- name: Make gradlew executable
25+
run: chmod +x ./gradlew
26+
27+
- name: Build Spring Boot (JAR)
28+
run: ./gradlew bootJar -Penv=test
29+
30+
- name: Copy JAR to shared volume
31+
run: cp build/libs/*.jar /deploy/app.jar
32+
33+
- name: Restart Docker with New JAR
34+
run: |
35+
cd /deploy
36+
docker-compose down
37+
docker-compose up -d --build
38+
39+
- name: Wait for test server to be healthy
40+
run: |
41+
echo "๐Ÿ” Checking https://yakplus-test.techlog.dev/actuator/health ..."
42+
curl --silent --fail \
43+
--retry 5 --retry-connrefused --retry-delay 5 \
44+
https://yakplus-test.techlog.dev/actuator/health

โ€Ž.gitignoreโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ build/
1919
*.iml
2020
*.iws
2121
*.ipr
22-
out/
22+
/out/
2323
.idea/**/
2424
.idea_modules/
2525
.idea/httpRequests

โ€Žbuild.gradleโ€Ž

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,31 @@ dependencies {
3939
// RDB
4040
runtimeOnly 'com.mysql:mysql-connector-j'
4141
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
42+
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml'
43+
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
4244

4345
// Elastic search
4446
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
4547
implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.17.10'
48+
49+
//ai
50+
implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter:1.0.0-M5'
51+
52+
// Swagger ์„ค์น˜
53+
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0'
54+
55+
// build.gradle
56+
if (project.hasProperty('env') && project.env == 'test') {
57+
dependencies {
58+
implementation 'org.springframework.boot:spring-boot-starter-actuator'
59+
}
60+
}
61+
}
62+
63+
dependencyManagement {
64+
imports {
65+
mavenBom "org.springframework.ai:spring-ai-bom:1.0.0-M5"
66+
}
4667
}
4768

4869
tasks.named('test') {
42.7 KB
Binary file not shown.

โ€Žsrc/main/java/com/likelion/backendplus4/yakplus/YakplusApplication.javaโ€Ž

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55

66
@SpringBootApplication
77
public class YakplusApplication {
8-
public static void main(String[] args) {
9-
SpringApplication.run(YakplusApplication.class, args);
10-
11-
}
8+
public static void main(String[] args) {
9+
SpringApplication.run(YakplusApplication.class, args);
10+
}
1211
}
Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
package com.likelion.backendplus4.yakplus.common.configuration;
2+
3+
import java.nio.file.Files;
4+
import java.nio.file.Path;
5+
import java.nio.file.Paths;
6+
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
import org.springframework.beans.factory.annotation.Value;
10+
import org.springframework.context.annotation.Configuration;
11+
12+
import ch.qos.logback.classic.Level;
13+
import ch.qos.logback.classic.LoggerContext;
14+
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
15+
import ch.qos.logback.classic.spi.ILoggingEvent;
16+
import ch.qos.logback.core.ConsoleAppender;
17+
import ch.qos.logback.core.FileAppender;
18+
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
19+
import ch.qos.logback.core.util.FileSize;
20+
import jakarta.annotation.PostConstruct;
21+
22+
/**
23+
* ๋กœ๊น… ์„ค์ •์„ ์œ„ํ•œ ์„ค์ • ํด๋ž˜์Šค
24+
*
25+
* @modified 2025-04-18
26+
* @since 2025-04-16
27+
*/
28+
@Configuration
29+
public class LogbackConfig {
30+
@Value("${log.rolling.directory}")
31+
private String LOG_DIRECTORY;
32+
@Value("${log.rolling.file-name}")
33+
private String LOG_FILE_NAME;
34+
@Value("${log.rolling.pattern}")
35+
private String LOG_PATTERN;
36+
@Value("${log.rolling.max-history}")
37+
private int MAX_HISTORY;
38+
@Value("${log.rolling.total-size-cap}")
39+
private String TOTAL_SIZE_CAP;
40+
41+
/**
42+
* ๋กœ๊น… ์„ค์ •์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฉ”์„œ๋“œ
43+
*
44+
* @author ์ •์•ˆ์‹
45+
* @modified 2025-04-18
46+
* @since 2025-04-16
47+
*/
48+
@PostConstruct
49+
public void configure() {
50+
LoggerContext context = initializeLoggerContext();
51+
createLogDirectory();
52+
53+
ConsoleAppender<ILoggingEvent> consoleAppender = createConsoleAppender(context);
54+
FileAppender<ILoggingEvent> fileAppender = createFileAppender(context);
55+
56+
configureRootLogger(context, consoleAppender, fileAppender);
57+
}
58+
59+
/**
60+
* LoggerContext๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฉ”์„œ๋“œ
61+
*
62+
* @return LoggerContext ์ดˆ๊ธฐํ™”๋œ ๋กœ๊ฑฐ ์ปจํ…์ŠคํŠธ
63+
* @author ์ •์•ˆ์‹
64+
* @modified 2025-04-18
65+
* @since 2025-04-16
66+
*/
67+
private LoggerContext initializeLoggerContext() {
68+
LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory();
69+
context.reset();
70+
return context;
71+
}
72+
73+
/**
74+
* ๋กœ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์„œ๋“œ
75+
*
76+
* @author ์ •์•ˆ์‹
77+
* @modified 2025-04-18
78+
* @since 2025-04-16
79+
*/
80+
private void createLogDirectory() {
81+
Path logPath = Paths.get(LOG_DIRECTORY);
82+
try {
83+
if (!Files.exists(logPath)) {
84+
Files.createDirectories(logPath);
85+
}
86+
} catch (Exception e) {
87+
throw new RuntimeException("๋กœ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ ์‹คํŒจ", e);
88+
}
89+
}
90+
91+
/**
92+
* ์ฝ˜์†” ์–ดํŽœ๋”๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์„œ๋“œ
93+
*
94+
* @param context LoggerContext ๋กœ๊ฑฐ ์ปจํ…์ŠคํŠธ
95+
* @return ConsoleAppender ์ƒ์„ฑ๋œ ์ฝ˜์†” ์–ดํŽœ๋”
96+
* @author ์ •์•ˆ์‹
97+
* @modified 2025-04-18
98+
* @since 2025-04-16
99+
*/
100+
private ConsoleAppender<ILoggingEvent> createConsoleAppender(LoggerContext context) {
101+
ConsoleAppender<ILoggingEvent> appender = new ConsoleAppender<>();
102+
appender.setContext(context);
103+
appender.setEncoder(createEncoder(context));
104+
appender.start();
105+
return appender;
106+
}
107+
108+
/**
109+
* ํŒŒ์ผ ์–ดํŽœ๋”๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์„œ๋“œ
110+
*
111+
* @param context LoggerContext ๋กœ๊ฑฐ ์ปจํ…์ŠคํŠธ
112+
* @return FileAppender ์ƒ์„ฑ๋œ ํŒŒ์ผ ์–ดํŽœ๋”
113+
* @author ์ •์•ˆ์‹
114+
* @modified 2025-04-18
115+
* @since 2025-04-16
116+
*/
117+
private FileAppender<ILoggingEvent> createFileAppender(LoggerContext context) {
118+
FileAppender<ILoggingEvent> appender = new FileAppender<>();
119+
appender.setContext(context);
120+
appender.setFile(LOG_DIRECTORY + "/" + LOG_FILE_NAME);
121+
appender.setAppend(true);
122+
appender.setEncoder(createEncoder(context));
123+
124+
TimeBasedRollingPolicy<ILoggingEvent> rollingPolicy = createRollingPolicy(context, appender);
125+
rollingPolicy.start();
126+
127+
appender.start();
128+
return appender;
129+
}
130+
131+
/**
132+
* ํŒจํ„ด ๋ ˆ์ด์•„์›ƒ ์ธ์ฝ”๋”๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์„œ๋“œ
133+
*
134+
* @param context LoggerContext ๋กœ๊ฑฐ ์ปจํ…์ŠคํŠธ
135+
* @return PatternLayoutEncoder ์ƒ์„ฑ๋œ ํŒจํ„ด ๋ ˆ์ด์•„์›ƒ ์ธ์ฝ”๋”
136+
* @author ์ •์•ˆ์‹
137+
* @modified 2025-04-18
138+
* @since 2025-04-16
139+
*/
140+
private PatternLayoutEncoder createEncoder(LoggerContext context) {
141+
PatternLayoutEncoder encoder = new PatternLayoutEncoder();
142+
encoder.setContext(context);
143+
encoder.setPattern(LOG_PATTERN);
144+
encoder.start();
145+
return encoder;
146+
}
147+
148+
/**
149+
* ๋กค๋ง ์ •์ฑ…์„ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์„œ๋“œ
150+
*
151+
* @param context LoggerContext ๋กœ๊ฑฐ ์ปจํ…์ŠคํŠธ
152+
* @param parent FileAppender ๋ถ€๋ชจ ํŒŒ์ผ ์–ดํŽœ๋”
153+
* @return TimeBasedRollingPolicy ์ƒ์„ฑ๋œ ๋กค๋ง ์ •์ฑ…
154+
* @author ์ •์•ˆ์‹
155+
* @modified 2025-04-18
156+
* @since 2025-04-16
157+
*/
158+
private TimeBasedRollingPolicy<ILoggingEvent> createRollingPolicy(LoggerContext context,
159+
FileAppender<ILoggingEvent> parent) {
160+
TimeBasedRollingPolicy<ILoggingEvent> policy = new TimeBasedRollingPolicy<>();
161+
policy.setContext(context);
162+
policy.setParent(parent);
163+
policy.setFileNamePattern(LOG_DIRECTORY + "/" + LOG_FILE_NAME.replace(".log", ".%d{yyyy-MM-dd}.log"));
164+
policy.setMaxHistory(MAX_HISTORY);
165+
policy.setTotalSizeCap(FileSize.valueOf(TOTAL_SIZE_CAP));
166+
return policy;
167+
}
168+
169+
/**
170+
* ๋ฃจํŠธ ๋กœ๊ฑฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ
171+
*
172+
* @param context LoggerContext ๋กœ๊ฑฐ ์ปจํ…์ŠคํŠธ
173+
* @param consoleAppender ConsoleAppender ์ฝ˜์†” ์–ดํŽœ๋”
174+
* @param fileAppender FileAppender ํŒŒ์ผ ์–ดํŽœ๋”
175+
* @author ์ •์•ˆ์‹
176+
* @since 2025-04-16
177+
*/
178+
private void configureRootLogger(LoggerContext context, ConsoleAppender<ILoggingEvent> consoleAppender,
179+
FileAppender<ILoggingEvent> fileAppender) {
180+
Logger logger = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
181+
if (logger instanceof ch.qos.logback.classic.Logger) {
182+
ch.qos.logback.classic.Logger rootLogger = (ch.qos.logback.classic.Logger)logger;
183+
rootLogger.setLevel(Level.INFO);
184+
rootLogger.addAppender(consoleAppender);
185+
rootLogger.addAppender(fileAppender);
186+
}
187+
}
188+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.likelion.backendplus4.yakplus.common.configuration;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
6+
7+
import io.swagger.v3.oas.models.OpenAPI;
8+
import io.swagger.v3.oas.models.info.Info;
9+
10+
@Configuration
11+
public class SwaggerConfig {
12+
13+
@Bean
14+
public OpenAPI openAPI() {
15+
return new OpenAPI()
16+
.info(new Info()
17+
.title("YakPlus API")
18+
.description("YakPlus ํ”„๋กœ์ ํŠธ์˜ API ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.")
19+
.version("1.0.0"));
20+
}
21+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.likelion.backendplus4.yakplus.common.configuration;
2+
3+
import com.likelion.backendplus4.yakplus.common.interceptor.LogInterceptor;
4+
import lombok.RequiredArgsConstructor;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
8+
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
9+
10+
/**
11+
* ์›น ์„ค์ •์„ ์œ„ํ•œ ์„ค์ • ํด๋ž˜์Šค
12+
*
13+
* @modified 2025-04-18
14+
* @since 2025-04-16
15+
*/
16+
@Configuration
17+
@RequiredArgsConstructor
18+
public class WebConfig implements WebMvcConfigurer {
19+
20+
private static final String ALL_PATTERN = "/**";
21+
22+
private final LogInterceptor logInterceptor;
23+
24+
/**
25+
* ์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฉ”์„œ๋“œ
26+
*
27+
* @param registry InterceptorRegistry ์ธํ„ฐ์…‰ํ„ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ
28+
* @author ์ •์•ˆ์‹
29+
* @modified 2025-04-18
30+
* @since 2025-04-16
31+
*/
32+
@Override
33+
public void addInterceptors(InterceptorRegistry registry) {
34+
// ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด LogInterceptor๋ฅผ ์ ์šฉ
35+
registry.addInterceptor(logInterceptor)
36+
.addPathPatterns(ALL_PATTERN); // ๋ชจ๋“  URL ํŒจํ„ด์— ์ ์šฉ
37+
}
38+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.likelion.backendplus4.yakplus.common.exception;
2+
3+
4+
import com.likelion.backendplus4.yakplus.common.exception.error.ErrorCode;
5+
6+
/**
7+
* ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ์˜ ์ถ”์ƒ ํด๋ž˜์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ณตํ†ต ์˜ˆ์™ธ ์ƒ์œ„ ํƒ€์ž…์ด๋‹ค.
8+
*
9+
* @modified 2025-04-18
10+
* @since 2025-04-16
11+
*/
12+
public abstract class CustomException extends RuntimeException {
13+
14+
/**
15+
* ์ƒ์„ฑ์ž - ErrorCode์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ์„ค์ •ํ•œ๋‹ค.
16+
*
17+
* @param errorCode ErrorCode ๊ฐ์ฒด
18+
* @author ๋ฐ•์ฐฌ๋ณ‘
19+
* @modified 2025-04-18 ๋ฐ•์ฐฌ๋ณ‘
20+
* @since 2025-04-16
21+
*/
22+
public CustomException(ErrorCode errorCode) {
23+
super(errorCode.message());
24+
}
25+
26+
/**
27+
* ErrorCode ๋ฐ˜ํ™˜
28+
*
29+
* @return ErrorCode ๊ฐ์ฒด
30+
* @author ๋ฐ•์ฐฌ๋ณ‘
31+
* @modified 2025-04-18 ๋ฐ•์ฐฌ๋ณ‘
32+
* @since 2025-04-16
33+
*/
34+
public abstract ErrorCode getErrorCode();
35+
}

0 commit comments

Comments
ย (0)