๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ๏ธ Today I Learned(TIL)/๐ŸŒฑ ์ŠคํŒŒ๋ฅดํƒ€ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

[ TIL ] Kotlin ๋ฌธ๋ฒ• ๊ธฐ์ดˆ/์‹ฌํ™”_Day 1

by carrot0911 2025. 1. 21.

์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง 

๊ฐœ์ธ ๊ณต๋ถ€ (BaseEntity, GlobalExceptionHandler)

  • BaseEntity
    • ์—”ํ‹ฐํ‹ฐ(Entity) : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ด๊ฐ€ ํŽธํ•˜๋‹ค.
    • ์ธ์Šคํ„ด์Šค(Instance) : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๋‚ด์šฉ์˜ ์ „์ฒด ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค.
    • ์†์„ฑ(Attribute) : ์ธ์Šคํ„ด์Šค์˜ ๊ตฌ์„ฑ์š”์†Œ๋กœ์จ ๋” ์ด์ƒ ๋ถ„๋ฆฌ๋˜์ง€ ์•Š๋Š” ๋‹จ์œ„๋กœ, ์—…๋ฌด์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
    • JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ๊ณตํ†ต ์†์„ฑ์ธ created_at, updated_at ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์†Œ์œ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋ณด์—ฌ ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ฆฌํ•œ ๊ฒƒ์ด๋‹ค.
    • ์ƒ์„ฑ์ผ, ์ˆ˜์ •์ผ์ด ๊ณตํ†ต ์†์„ฑ์œผ๋กœ ํ•ด๋‹นํ•œ๋‹ค. ์ด ์ฝ”๋“œ๋“ค์„ ์—”ํ‹ฐํ‹ฐ์— ๋ชจ๋‘ ์ ์–ด์ค„ ๊ฒฝ์šฐ ์ฝ”๋“œ์˜ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Ÿฐ ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ BaseEntity๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • GlobalExceptionHandler
    • Spring Boot ๊ธฐ๋ฐ˜์˜ RESTful API์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ํ–ฅ์ƒํ•˜๋ฉฐ, ๋ช…ํ™•ํ•œ ์—๋Ÿฌ ๋ฉ”์„œ์ง€๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ๋„์™€์ค€๋‹ค. ์—๋Ÿฌ์ฝ”๋“œ์™€ ๋ฉ”์‹œ์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ GlobalExceptionHandler๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์˜ˆ์™ธ๋“ค์„ ์ค‘์•™์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•ด์ค€๋‹ค.
    •  @ControllerAdvice
      • @Controller๋กœ ์„ ์–ธํ•œ ์ง€์ ์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋ฅผ ๋„์ค‘์— @ControllerAdvice๋กœ ์„ ์–ธํ•œ ํด๋ž˜์Šค ๋‚ด์—์„œ ์ด๋ฅผ ์บ์น˜ํ•˜์—ฌ Controller ๋‚ด์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.
      • @ControllerAdvice๋Š” Spring AOP๋ฅผ ์ด์šฉํ•œ ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.
    • @RestControllerAdvice (@ControllerAdvice + @ResponseBody) 
      • @RestControllerAdvice๋กœ ์„ ์–ธํ•œ ์ง€์ ์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋ฅผ ๋„์ค‘์— @RestControllerAdvice๋กœ ์„ ์–ธํ•œ ํด๋ž˜์Šค ๋‚ด์—์„œ ์ด๋ฅผ ์บ์น˜ํ•˜์—ฌ Controller ๋‚ด์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.
      • @RestControllerAdvice๋Š” Spring AOP๋ฅผ ์ด์šฉํ•œ ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.
    • ์ฐจ์ด์ 
      • @RestControllerAdvice๋Š” @ResponseBody ์–ด๋…ธํ…Œ์ด์…˜์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด์„œ ์‘๋‹ต(Response)์„ JSON์œผ๋กœ ์ œ๊ณต์„ ํ•ด์ค€๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค.
    • @ExceptionHandler
      • ํŠน์ • ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ Controller์— ๋ฐœ์ƒํ•˜์˜€์„ ๊ฒฝ์šฐ ํ•ด๋‹น ์—๋Ÿฌ๋ฅผ ์บ์น˜ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๋กœ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
      • @Controller, @RestController๊ฐ€ ์ ์šฉ๋œ Bean ๋‚ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์žก์•„์„œ ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.
      • Controller ๋‚ด๋ถ€์—์„œ ํ˜ธ์ถœํ•œ Service์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์žก์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

์˜ค๋Š˜ ํ•˜๋ฃจ ์ •๋ฆฌ โœ๏ธ

์˜ค๋Š˜์€ ํ•˜๋ฃจ์ข…์ผ ๋‚ด์ผ ๋ฐœํ‘œํ•œ ๋ฏธ๋‹ˆ ์„ธ์…˜ ์ค€๋น„๋ฅผ ํ–ˆ๋‹ค.

BaseEntity์™€ GlobalExceptionHandler์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ณ  ์ •๋ฆฌํ•œ ํ›„ PPT๊นŒ์ง€ ๋งŒ๋“ค๊ณ  ๋‚˜๋‹ˆ ํ•˜๋ฃจ๊ฐ€ ๋š๋”ฑ ์ง€๋‚˜๊ฐ”๋‹ค..

๋‚ด์ผ ๋ฐœํ‘œ ์ž˜ํ•˜๊ณ  ๊ณต๋ถ€๋„ ์ด์–ด์„œ ์—ด์‹ฌํžˆ ํ•ด๋ณด์ž!!

 

๋‚ด์ผ ๊ณ„ํš โฐ

  • ์„ธ์…˜ ๋“ฃ๊ธฐ
  • ๋ฏธ๋‹ˆ ์„ธ์…˜ ๋ฐœํ‘œ
  • ๊ณผ์ œ ์ง„ํ–‰

+ ์ถ”๊ฐ€ ๊ณ„ํš์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ์Šด๋‹น~_~