๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

WINK-(Web & App)/Spring Boot ์Šคํ„ฐ๋””

[2025 1ํ•™๊ธฐ ์Šคํ”„๋ง๋ถ€ํŠธ ์Šคํ„ฐ๋””] ์ด์ƒ๋ž˜ #3์ฃผ์ฐจ

๋ฐ˜์‘ํ˜•

๐Ÿ‘€ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ

  • ๋ฐ์ดํ„ฐ: ํšŒ์›ID, ์ด๋ฆ„
  • ๊ธฐ๋Šฅ: ํšŒ์› ๋“ฑ๋ก, ์กฐํšŒ
  • ์•„์ง ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ ์„ ์ •๋˜์ง€ ์•Š์Œ(๊ฐ€์ƒ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค)
์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ๊ตฌ์กฐ

 

  • ์ปจํŠธ๋กค๋Ÿฌ: ์›น MVC์˜ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• 
  • ์„œ๋น„์Šค: ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„
  • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผ, ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ DB์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌ
  • ๋„๋ฉ”์ธ: ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ๊ฐ์ฒด, ์˜ˆ) ํšŒ์›, ์ฃผ๋ฌธ, ์ฟ ํฐ ๋“ฑ๋“ฑ ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌ๋จ
  •  
ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„

 

  • ์•„์ง ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ ์„ ์ •๋˜์ง€ ์•Š์•„์„œ, ์šฐ์„  ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„
  • ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋Š” ๋‹ค์–‘ํ•œ ์ €์žฅ์†Œ๋ฅผ ๊ณ ๋ฏผ์ค‘์ธ ์ƒํ™ฉ์œผ๋กœ ๊ฐ€์ •
  • ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” ๊ตฌํ˜„์ฒด๋กœ ๊ฐ€๋ฒผ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์‚ฌ์šฉ

๐Ÿ‘€ ํšŒ์› ๋„๋ฉ”์ธ๊ณผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐ

ํšŒ์› ๊ฐ์ฒด

  • ๋„๋ฉ”์ธ ๋ชจ๋ธ
  • id, name ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค

  • ํšŒ์› ์ €์žฅ, ์กฐํšŒ, ์ „์ฒด ๋ชฉ๋ก ์กฐํšŒ ๋ฉ”์„œ๋“œ ์ •์˜

ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌํ˜„์ฒด

  • MemberRepository๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„
  • Map<Long, Member>๋กœ ์ €์žฅ์†Œ ์—ญํ•  ์ˆ˜ํ–‰

๐Ÿ‘€ ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

์ง€๊ธˆ๊นŒ์ง€ ์ž‘์„ฑํ•œ ๊ธฐ๋Šฅ๋“ค์ด ์ž˜ ์‹คํ–‰๋˜๋Š”์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์ž~

 

์š”๊ธฐ๊นŒ์ง€๋Š” ์ž˜ ์ž‘๋™ ๋ฉ๋‹ˆ๋‹ค

 

 

ํ•˜๋‹ค๊ฐ€ ๋งŒ๋“  Test๋ฅผ ๋‹ค ๋Œ๋ฆฌ๋ฉด ์ด๋ ‡๊ฒŒ findAll()๋ถ€ํ„ฐ ์‹คํ–‰๋˜์„œ ์ด๋ฏธ spring1์ด๋ž‘ spring2๊ฐ€ ์ €์žฅ๋จ

--> Test๊ฐ€ ๋๋‚˜๋ฉด clear๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•จ!!

 

afeterEach()

 

- ์ˆœ์„œ์™€ ์ƒ๊ด€์—†์ด ์ž‘๋™๋˜๊ฒŒ ์„ค๊ณ„ํ•ด์•ผํ•จ

์ด๋Ÿฐ์‹์œผ๋กœ ๋๋‚œํ›„์— repository๋ฅผ clearํ•ด์ฃผ๋ฉด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค

 


๐Ÿ‘€ ํšŒ์› ์„œ๋น„์Šค ๊ฐœ๋ฐœ

์ด๋ฒˆ์—” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊ฒŒ์—ฌ

 

  • memberRepository: ํšŒ์› ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹น. ์—ฌ๊ธฐ์„œ๋Š” MemoryMemberRepository๋ฅผ ์ง์ ‘ new ํ•ด์„œ ์‚ฌ์šฉ
  • ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ
    • ์ƒˆ๋กœ ๊ฐ€์ž…ํ•œ ํšŒ์› ์ •๋ณด๋ฅผ ๋ฐ›์œผ๋ฉด,
      1. ์ด๋ฆ„ ์ค‘๋ณต ์ฒดํฌ
      2. ์ค‘๋ณต ์•„๋‹ˆ๋ฉด ์ €์žฅ
      3. ์ €์žฅ ํ›„ ID ๋ฐ˜ํ™˜
  • ์ค‘๋ณต ํšŒ์› ๊ฒ€์ฆ
    • ๊ฐ™์€ ์ด๋ฆ„์˜ ํšŒ์›์ด ์ด๋ฏธ ์žˆ๋Š”์ง€ ํ™•์ธ.
    • ์žˆ์œผ๋ฉด IllegalStateException ์˜ˆ์™ธ๋ฅผ ๋˜์ง.
  • ์ „์ฒด ํšŒ์› ์กฐํšŒ
    • ์ €์žฅ๋œ ์ „์ฒด ํšŒ์› ๋ชฉ๋ก์„ ๋ฆฌํ„ด
  • ํŠน์ • ํšŒ์› ์กฐํšŒ
    • ํŠน์ • ID๋กœ ํšŒ์›์„ ์กฐํšŒํ•ด์„œ Optional<Member>๋กœ ๋ฐ˜ํ™˜

 

๐Ÿ‘€ ํšŒ์› ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ

ํšŒ์›๊ฐ€์ž… ํ…Œ์ŠคํŠธ

 

  • ์ด๋ฆ„์„ ํ•œ๊ธ€๋กœ ํ•ด๋„ ๋ฌด๋ฐฉ
  • given,when,then ๊ตฌ์กฐ๋กœ ํ•˜๋Š”๊ฒŒ ์ฒ˜์Œ ๋ฐฐ์šธ๋• ์ข‹์Œ
์ค‘๋ณต ํšŒ์› ์˜ˆ์™ธ 

 

 

  • ๋ฐ‘์— ์ฃผ์„ ์ฒ˜๋ฆฌ๋œ try catch๋กœ ํ•ด๋„ ๋˜์ง€๋งŒ
  • ์œ„์— ์ฝ”๋“œ ์ฒ˜๋Ÿผ ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค

  • ์•„๊นŒ์ฒ˜๋Ÿผ AfterEach ์ฒ˜๋ฆฌ ํ•ด์ฃผ๊ณ 
  • ์ด๋ฒˆ์—๋Š” ์‹คํ–‰ํ•˜๊ธฐ์ „์— BeforeEach๋„ ํ•ด์ค˜์„œ ๋‘ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ๊ฑธ ํ•˜๋‚˜๋กœ ๋งŒ๋“ค์–ด์คŒ

์—„.... ๋ญ”๊ฐ€ ์ด๋ฒˆ์ฃผ๋Š” ๋‚ด์šฉ์ด ๋งŽ์ง„ ์•Š์€๋ฐ ์ข€ ์–ด๋ ค์›Œ์š”....

๋ฐ˜์‘ํ˜•