๐Ÿ“– TIL - ์Šคํ”„๋ง ์ž…๋ฌธ ์›น ๊ฐœ๋ฐœ ๊ธฐ์ดˆ์— ์ž…๋ฌธํ•˜๊ธฐ

์Š˜ยท2026๋…„ 3์›” 18์ผ

๐Ÿ“– TIL

๋ชฉ๋ก ๋ณด๊ธฐ
90/90

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์ค‘์‹ฌ์œผ๋กœ ์ปค๋ฆฌ์–ด๋ฅผ ์ด์–ด์˜ค๋‹ค๊ฐ€, ํ’€์Šคํƒ ์—ญ๋Ÿ‰์ด ์ ์  ์ค‘์š”ํ•ด์ง€๋Š” ํ๋ฆ„์„ ๋А๋ผ๋ฉฐ ๋ฐฑ์—”๋“œ๊นŒ์ง€ ์˜์—ญ์„ ๋„“ํ˜€๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.
์ธํ”„๋Ÿฐ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ์˜ค๋žœ๋งŒ์— ์ž๋ฐ”์™€ ๋ฐฑ์—”๋“œ๋ฅผ ๋‹ค์‹œ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ํ•™์Šต๊ณผ์ •์—์„œ ์ƒ๊ธด ๊ถ๊ธˆ์ฆ๋“ค์„ ์‚ฌ์†Œํ•œ ๊ฒƒ๊นŒ์ง€ ํ•˜๋‚˜์”ฉ ์ •๋ฆฌํ•ด๋ณด์ž!

Hello, World ... 

java๋ฅผ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋‹ค๋ค„๋ณธ๊ฑด.. ํ•™๋ถ€์ƒ์‹œ์ ˆ. ํ”„๋ก ํŠธ๋กœ ์‚ด์•„๊ฐ€๋ฉด์„œ ๋‹ค์‹œ ๋งŒ๋‚˜๊ฒŒ ๋  ์ค„ ์•Œ์•˜์„๊นŒ!

๋ฌธ์ œ ์ƒํ™ฉ

์Šคํ”„๋ง ์ž…๋ฌธ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด Member, Repository, Service ๊ตฌ์กฐ์™€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ•™์Šตํ•˜๋Š” ๊ณผ์ •์—์„œ
๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐœ๋…๋“ค์ด ๋ช…ํ™•ํžˆ ์ดํ•ด๋˜์ง€ ์•Š์•˜๋‹ค.

  • ์ž๋ฐ”์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹ (new ํ‚ค์›Œ๋“œ)
  • import์™€ ๊ฐ์ฒด ์ƒ์„ฑ์˜ ์ฐจ์ด
  • Optional๊ณผ get()์˜ ์˜๋ฏธ
  • assertThrows ๋ฐ ๋žŒ๋‹ค์‹ ๋ฌธ๋ฒ•
  • ์˜ˆ์™ธ ํด๋ž˜์Šค (IllegalStateException ๋“ฑ)์˜ ์‚ฌ์šฉ ๊ธฐ์ค€
  • Service์™€ Repository์˜ ์—ญํ•  ๊ฒฝ๊ณ„
  • ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ์‹ (DI)์˜ ํ•„์š”์„ฑ

ํŠนํžˆ ํ”„๋ก ํŠธ์—”๋“œ ๊ฒฝํ—˜์„ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ–ˆ์„ ๋•Œ,
์ž๋ฐ”์˜ ๊ฐ์ฒด์ง€ํ–ฅ ๊ตฌ์กฐ์™€ ํ…Œ์ŠคํŠธ ๋ฐฉ์‹์ด ๋‚ฏ์„ค๊ฒŒ ๋А๊ปด์กŒ๋‹ค.


๋ฌธ์ œ ์ ‘๊ทผ

๊ธฐ์กด ํ”„๋ก ํŠธ์—”๋“œ ๊ด€์ ์—์„œ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ๋‹ค.

  • JS์—์„œ๋Š” import ํ›„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ
  • ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ util ํ•จ์ˆ˜ ์ค‘์‹ฌ ๊ตฌ์กฐ
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋„ ๋‹จ์ˆœ throw Error ์ˆ˜์ค€

๋ฐ˜๋ฉด ์ž๋ฐ”๋Š”

  • ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ
  • ๊ฐ์ฒด ์ƒ์„ฑ ํ•„์š”
  • ๊ณ„์ธต ๋ถ„๋ฆฌ (Controller / Service / Repository)
  • ๋ช…ํ™•ํ•œ ํƒ€์ž…๊ณผ ์˜ˆ์™ธ ๊ตฌ์กฐ

์ด ์ฐจ์ด๋กœ ์ธํ•ด ๋™์ผํ•œ ๊ฐœ๋…์ด๋ผ๋„ ์ดํ•ด๊ฐ€ ์–ด๋ ค์› ๋‹ค.


ํ•™์Šต ๋‚ด์šฉ

1. ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ import์˜ ์ฐจ์ด

์ž๋ฐ”์—์„œ import๋Š” ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ผ ๋ฟ์ด๋ฉฐ,
์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” new๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

์ฆ‰,

  • import: ์„ค๊ณ„๋„ ๊ฐ€์ ธ์˜ค๊ธฐ
  • new: ์‹ค์ œ ๊ฐ์ฒด ์ƒ์„ฑ

JS์—์„œ ๊ฐ์ฒด๋‚˜ ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ exportํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋‹ค๋ฅด๋‹ค๋Š” ์ ์„ ์ดํ•ดํ–ˆ๋‹ค.


2. Optional๊ณผ get()

Optional์€ ๊ฐ’์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์—†์„ ์ˆ˜๋„ ์žˆ๋Š” ๊ฐ์ฒด์ด๋‹ค.

  • findById() ๋“ฑ์˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋จ
  • get()์€ ๋‚ด๋ถ€ ๊ฐ’์„ ๊บผ๋‚ด๋Š” ์—ญํ• 

๋‹จ, ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
์‹ค๋ฌด์—์„œ๋Š” orElse, orElseThrow ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.


3. assertThrows์™€ ๋žŒ๋‹ค์‹

assertThrows๋Š” ํŠน์ • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

๋žŒ๋‹ค์‹ () -> memberService.join(member2)๋Š”
ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ฆ‰์‹œ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  โ€œ์‹คํ–‰ํ•  ์ฝ”๋“œโ€๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์ฆ‰,

  • ๋ฐ”๋กœ ์‹คํ–‰ โŒ
  • ์‹คํ–‰์„ ๋„˜๊น€ โญ•

ํ”„๋ก ํŠธ์˜ () => ํ•จ์ˆ˜์™€ ๋™์ผํ•œ ๊ฐœ๋…์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.


4. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐฉ์‹

๊ธฐ์กด try-catch ๋ฐฉ์‹๊ณผ assertThrows ๋ฐฉ์‹์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ–ˆ๋‹ค.

  • try-catch: ์ง์ ‘ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
  • assertThrows: ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์˜ˆ์™ธ ๊ฒ€์ฆ

๋˜ํ•œ ๋‹จ์ˆœ ๊ฐ’ ๋น„๊ต ํ…Œ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ
โ€œ์ €์žฅ โ†’ ์กฐํšŒโ€ ํ๋ฆ„์„ ๊ฒ€์ฆํ•˜๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ๋” ์˜๋ฏธ ์žˆ๋‹ค๋Š” ์ ์„ ์ดํ•ดํ–ˆ๋‹ค.


5. ์˜ˆ์™ธ ํด๋ž˜์Šค ์‚ฌ์šฉ ๊ธฐ์ค€

IllegalStateException, IllegalArgumentException ๋“ฑ์˜ ์˜ˆ์™ธ๋Š”
์™ธ์šฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ž„์„ ์ดํ•ดํ–ˆ๋‹ค.

  • ๊ฐ’์ด ์ž˜๋ชป๋จ โ†’ IllegalArgumentException
  • ์ƒํƒœ๊ฐ€ ์ž˜๋ชป๋จ โ†’ IllegalStateException

6. Service์™€ Repository์˜ ์—ญํ•  ๊ตฌ๋ถ„

  • Repository: ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ์กฐํšŒ
  • Service: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ

์ฆ‰,

  • ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ โ†’ Repository
  • ์กฐ๊ฑด, ๊ฒ€์ฆ, ํ๋ฆ„ ์ œ์–ด โ†’ Service

ํ”„๋ก ํŠธ์˜ util ํ•จ์ˆ˜์™€ ๋‹ฌ๋ฆฌ
๋ฐฑ์—”๋“œ๋Š” ์—ญํ• ์ด ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์„ ์ดํ•ดํ–ˆ๋‹ค.


7. ์ƒ์„ฑ์ž ์ฃผ์ž… (Dependency Injection)

Service์—์„œ Repository๋ฅผ ์ง์ ‘ new๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ 
์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋ฐ›๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ–ˆ๋‹ค.

์ด ๋ฐฉ์‹์˜ ์žฅ์ :

  • ๊ตฌํ˜„์ฒด ๊ต์ฒด ๊ฐ€๋Šฅ (Memory โ†’ DB)
  • ํ…Œ์ŠคํŠธ ์šฉ์ด
  • ๊ฒฐํ•ฉ๋„ ๊ฐ์†Œ

์ฆ‰,

๊ฐ์ฒด๋ฅผ ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ
์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋ฐ›๋Š” ๊ฒƒ์ด ๋” ์œ ์—ฐํ•œ ๊ตฌ์กฐ์ด๋‹ค.


์ •๋ฆฌ

์ด๋ฒˆ ํ•™์Šต์„ ํ†ตํ•ด
ํ”„๋ก ํŠธ์—”๋“œ ์ค‘์‹ฌ์˜ ์‚ฌ๊ณ ์—์„œ ๋ฒ—์–ด๋‚˜
๋ฐฑ์—”๋“œ์˜ ๊ตฌ์กฐ์ ์ธ ์„ค๊ณ„ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

ํŠนํžˆ

  • ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹
  • ๊ณ„์ธต ๋ถ„๋ฆฌ
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐฉ์‹
  • ์˜์กด์„ฑ ์ฃผ์ž… ๊ฐœ๋…

๋“ฑ์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์„ ๋А๊ผˆ๋‹ค.

์•„์ง ์™„์ „ํžˆ ์ต์ˆ™ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ,
ํ”„๋ก ํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ดํ•ดํ•˜๋Š” ๋ฐฉ์‹์ด ํšจ๊ณผ์ ์ด์—ˆ๋‹ค.

์ž๋ฐ” ๊ฐ•์˜๋ฅผ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ˆ˜๊ฐ•ํ•˜๋ฉด์„œ, ๊ฐœ๋ฐœ์„ ์ฒ˜์Œ ์ ‘ํ–ˆ๋˜ ํ•™๋ถ€์ƒ๋•Œ๋กœ ๋Œ์•„๊ฐ„ ๋А๋‚Œ์ด๋‹ค
์‚ฌ์†Œํ•œ ์ฝ”๋“œ ํ•˜๋‚˜์—๋„ ์™œ?๋ฅผ ๋ถ™์ด๋˜ ๊ทธ๋•Œ์ฒ˜๋Ÿผใ…Žใ…Ž
๊ทธ๋ž˜๋„ ์ด๋ ‡๊ฒŒ ํ•˜๋‚˜์”ฉ ์ดํ•ดํ•ด๊ฐ€๋‹ค ๋ณด๋ฉด ์„ฑ์žฅํ•˜๊ฒ ์ง€!!

profile
์ฃผ๋‹ˆ์–ด ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ์žฅ๊ธฐ ๊ธฐ๋ก๊ธฐ๋ก

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2026๋…„ 4์›” 30์ผ

ํ”„๋ก ํŠธ์—”๋“œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐฑ์—”๋“œ ๊นŒ์ง€ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ชจ์Šต์ด ์ธ์ƒ์ ์ด๋„ค์š”! ๊ฐœ๋ฐœ์ž๋‹˜ ํ™”์ดํŒ… :)

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ