GithubHelp home page GithubHelp logo

meet-coder-study / get-your-hands-dirty-on-clean-architecture Goto Github PK

View Code? Open in Web Editor NEW
54.0 54.0 8.0 8.6 MB

๐Ÿ“” ๋งŒ๋“ค๋ฉด์„œ ๋ฐฐ์šฐ๋Š” ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ : ์ž๋ฐ” ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ฆฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฑ… ์Šคํ„ฐ๋””

get-your-hands-dirty-on-clean-architecture's People

Contributors

bluewow avatar emkong2210 avatar jiaekim123 avatar kooku0 avatar ksy90101 avatar pkch93 avatar v0o0v avatar wave1994-hoon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

get-your-hands-dirty-on-clean-architecture's Issues

[4์ฃผ์ฐจ] 7์žฅ. ์•„ํ‚คํ…์ฒ˜ ์š”์†Œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ- ๊น€๋ฏผ์„

  • ํšŒ์‚ฌ์—์„œ ๊ฐœ๋ฐœ ์‹œ ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ์ฒดํฌํ•˜๋‚˜์š”? ํ˜น์‹œ ์ปค๋ฒ„๋ฆฌ์ง€ ๊ธฐ์ค€ ๊ฐ™์€ ๊ฒƒ์ด ์žˆ๋Š”์ง€? ์ปค๋ฒ„๋ฆฌ์ง€ ๊ณ„์‚ฐ์€ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€? ์ฝ”๋“œ๋ฆฌ๋ทฐํ• ๋•Œ ํ…Œ์ŠคํŠธ ๋‚ด์šฉ๋„ ๊ฐ™์ด ๋ณด๋Š”์ง€? ์ „์ฒด์ ์œผ๋กœ ๊ฒฝํ—˜์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

[4์ฃผ์ฐจ] 7์žฅ. ์•„ํ‚คํ…์ฒ˜ ์š”์†Œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ-๊น€์ง€์• 

Q1.
์˜์†์„ฑ ์–ด๋Œ‘ํ„ฐ ํ…Œ์ŠคํŠธ๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. Testcontainers ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š”ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์— ๋„์šธ ์ˆ˜ ์ž‡๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์ธก๋ฉด์—์„œ ์•„์ฃผ ์œ ์šฉํ•˜๋‹ค.

Testcontainers ์‚ฌ์šฉํ•ด๋ณด์‹  ๋ถ„๋“ค ์žˆ์„๊นŒ์š”? ๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์˜์†์„ฑ ์–ด๋Œ‘ํ„ฐ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์–ด๋–ค์‹์œผ๋กœ ํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

[1์ฃผ์ฐจ]_1์žฅ_๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์˜ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ผ๊นŒ_๊น€๊ด‘ํ›ˆ

๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฃผ๋„ ์„ค๊ณ„๋ฅผ ์œ ๋„ํ•œ๋‹ค.

์ฑ… ๋‚ด์šฉ

  • ORM ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์™€ ๊ฒฐํ•ฉํ•˜๋ฉด ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ์˜์†์„ฑ ๊ด€์ ๊ณผ ์„ž๊ณ  ์‹ถ์€ ์œ ํ˜น์„ ์‰ฝ๊ฒŒ ๋ฐ›๋Š”๋‹ค. (p. 3)

์งˆ๋ฌธ

  • ์ฑ… ๋‚ด์šฉ์—์„œ ์˜์†์„ฑ ๊ด€์ ์ด๋ผ๋Š” ๊ฒƒ์ด ์ •ํ™•ํžˆ ์–ด๋–ค ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š”์ง€๊ฐ€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

[1์ฃผ์ฐจ]_2์žฅ_์˜์กด์„ฑ ์—ญ์ „ํ•˜๊ธฐ_๊น€๊ด‘ํ›ˆ

ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜

์ฑ… ๋‚ด์šฉ

  • ๊ฐ€๋ น Java Persistence API ์—์„œ๋Š” ORM ์ด ๊ด€๋ฆฌํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ์— ์ธ์ž๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋„๋ก ๊ฐ•์ œํ•œ๋‹ค.
  • ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋„๋ฉ”์ธ ๋ชจ๋ธ์—๋Š” ํฌํ•จํ•ด์„œ๋Š” ์•ˆ ๋  ํ”„๋ ˆ์ž„์›Œํฌ์— ํŠนํ™”๋œ ๊ฒฐํ•ฉ์˜ ์˜ˆ๋‹ค.

์˜๋ฌธ์ 

  • ์˜์†์„ฑ ๊ณ„์ธต๊ณผ, ๋„๋ฉ”์ธ ๊ณ„์ธต์ด ํ•˜๋‚˜์˜ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ณต์œ ํ•˜๋ฉด @entity, @NoArgsConstructor(access = AccessLevel.PROTECTED) ๋“ฑ์˜ ์• ๋…ธํ…Œ์ด์…˜๋“ค์ด ๋„๋ฉ”์ธ ๊ณ„์ธต์— ์นจํˆฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ €๋Ÿฐ ๊ฒƒ๋“ค์„ ๋„๋ฉ”์ธ ๊ณ„์ธต์—์„œ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์œ ์ง€๋ณด์ˆ˜ํ• ๋•Œ ๊ณผ์—ฐ ํšจ์œจ์ ์ธ์ง€ ์ƒ๊ฐํ•ด ๋ณผ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์งˆ๋ฌธ

  • (1) ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•˜์—ฌ ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
  • (2) ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค๋ฉด JPA ์™€ ๊ฐ™์€ ORM ์„ ์‚ฌ์šฉํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋˜๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

[๊น€๋ฏผ์„] 10์žฅ. ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„ ๊ฐ•์ œํ•˜๊ธฐ

์ฑ…์—์„œ๋Š” ์•„ํ‹ฐํŒฉํŠธ ๋ถ„๋ฆฌ๋กœ ์ธํ•ด ์ˆ˜๋งŽ์€ ์žฅ์ ์ด ์žˆ์ง€๋งŒ ์œ ์ง€๋ณด์ˆ˜ํ•˜๋Š” ๋น„์šฉ๋„ ๊ทธ์— ๋”ฐ๋ผ ์ฆ๊ฐ€ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ € ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋ถ„๋ฆฌํ–ˆ๋‹ค๊ฐ€ ๊ฐ๊ฐ์˜ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋”ฐ๋กœ ๋ฒ„์ „๊ด€๋ฆฌํ•˜๋Š๋ผ ์–˜๋ฅผ ๋งŽ์ด ๋จน์—ˆ๋˜ ๊ธฐ์–ต์ด ๋‚˜๋Š”๋ฐ์š”

๊ณผ์—ฐ ์•„ํ‹ฐํŒฉํŠธ ๋ถ„๋ฆฌ๋Š” ์–ด๋Š ์ •๋„๊ฐ€ ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”?

๋‹ค๋“ค ํšŒ์‚ฌ๋‚˜ ํŒ€ ๋‚ด ์ •์ฑ… ๊ฐ™์€ ๊ฒƒ์ด ์žˆ๋‚˜์š”?

[1์ฃผ์ฐจ]_1์žฅ_๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์˜ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ผ๊นŒ_๊ณต์€๋ฏธ

์งˆ๋ฌธ

  • ๊ณ„์ธก์ • ๊ตฌ์กฐ๋ž€ ๋ฌด์—‡์ผ๊นŒ?
  • ORM ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์™œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ค‘์‹ฌ์ ์ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์ผ๊นŒ? ORM ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ค‘์‹์ ์ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ๋กœ ๋ถ€ํ„ฐ ํ•ด๋ฐฉ์ด ๋ ๊นŒ?
  • ์˜์†์„ ๋ชจ๋ธ๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ์˜ ์ฐจ์ด๋Š”?
  • ์ƒ์œ„ ๊ณ„์ธต์„ ์•„๋ž˜๋กœ ๋‚ด๋ ค๋ฒ„๋ฆฐ๋‹ค๋Š”๊ฑฐ ์ •ํ™•ํžˆ ์–ด๋–ค์˜๋ฏธ์ธ์ง€ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค... ํ•ฉ์ณ๋ฒ„๋ฆฐ๋‹ค๋Š”๊ฑด๊ฐ€?

[๋ฐ•๊ฒฝ์ฒ ] 9์žฅ. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์กฐ๋ฆฝํ•˜๊ธฐ

๋‹ค๋“ค Gradle ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์‹œ๋‚˜์š”? Gradle ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ์—์„œ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๊ตฐ์„ ๋‘๋Š” ๊ฒฝ์šฐ์—๋Š” application ๋ ˆ์ด์–ด์—์„œ ์ „ ์„œ๋ฒ„๊ตฐ์— ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  UseCase๊ฐ€ ๊ตฌํ˜„๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ ๋ชจ๋“  ์„œ๋ฒ„๊ตฐ์— ์–ด๋Žํ„ฐ ๊ตฌํ˜„์ฒด๋ฅผ ์กฐ๋ฆฝํ•ด์•ผํ•˜๋”๋ผ๊ตฌ์š”..

๊ทธ๋ž˜์„œ application์˜ port๋ฅผ ๋ณ„๋„ ๋ชจ๋“ˆ๋กœ ๋นผ๋‚ด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ๋Š”๋ฐ ํ˜น์‹œ ์ข‹์€ ์•„์ด๋””์–ด ์žˆ์œผ์‹ ๋ถ„ ์žˆ์„๊นŒ์š”?

[3์ฃผ์ฐจ] 6์žฅ. ์˜์†์„ฑ ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜์€ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ? ์—์„œ ์ €์ž๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ๊ฒฐ๊ตญ ์˜์†์„ฑ ์˜์—ญ์€ ์–ธ์ œ ํŠธ๋žœ์žญ์…˜์„ ์—ด๊ณ  ๋‹ซ์„์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜์—ญ์—์„œ @Transactional์„ ์‚ฌ์šฉํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ์š”.

์ €์ž๋Š” ๋งˆ์ง€๋ง‰์— AspectJ๋ฅผ ํ™œ์šฉํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜์—ญ์— @Transactional์„ ์—†์•จ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•˜๋„ค์š”. ์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ฐ์ด ์•ˆ์˜ค๋Š”๋ฐ ํ˜น์‹œ ๊ฐ์˜ค์‹œ๋Š” ๋ถ„ ๊ณ„์‹ค๊นŒ์š”? ์•„๋‹ˆ๋ฉด ์ €์ž๊ฐ€ ์•ฝํŒŒ๋Š” ๊ฑธ๊นŒ์š”?

[3์ฃผ์ฐจ] 5์žฅ. ์›น ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ

5์žฅ์—์„œ ์ €์ž๋Š” ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•ด์„œ๋„ UseCase์˜ ์ด๋ฆ„์— ๋งž์ถฐ์„œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์‚ฌ์‹ค์ƒ ์ปจํŠธ๋กค๋Ÿฌ - UseCase๊ฐ€ 1:1์ธ ์ƒํƒœ๊ฐ€ ๋  ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š”๋ฐ์š”. ํด๋ž˜์Šค๋ฅผ ์ž˜๊ฒŒ ์ชผ๊ฐ ๋‹ค๋Š” ์ ์—์„œ ์ข‹์•„๋ณด์ด๊ธด ํ•˜์ง€๋งŒ ๊ทธ๋งŒํผ ๊ด€๋ฆฌํ•ด์•ผํ•  ํด๋ž˜์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ง€๋Š” ๊ฒƒ์œผ๋กœ๋„ ๋ณด์—ฌ์„œ์š”.

๋„๋ฉ”์ธ ๋ณ„๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ์–ด๋–จ๊นŒ ์‹ถ๊ธฐ๋„ ํ•œ๋ฐ ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”?

[5์ฃผ์ฐจ] 10์žฅ. ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„ ๊ฐ•์ œํ•˜๊ธฐ - ๊ณต์€๋ฏธ

์•„ํ‚คํ…์ฒ˜๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ถ„๋ฆฌ๋œ ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ๋กœ ๋‚˜๋ˆ„๋Š” ๋ถ€๋ถ„์ด ๋‚˜์˜ค๋Š”๋ฐ
MSA๋ž‘ ๋น„์Šทํ•œ ์˜๋ฏธ๋กœ ๋Š๊ปด์ง€๋Š”๋ฐ.... ๊ฐ™์€ ์˜๋ฏธ๋กœ ๋ด๋„ ๋ ๊นŒ์š”?

[1์ฃผ์ฐจ]_2์žฅ_์˜์กด์„ฑ ์—ญ์ „ํ•˜๊ธฐ_๊น€๊ธฐํ˜„

์งˆ๋ฌธ
์ €๋Š” ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด์„œ DDD Lite@Spring session ์—์„œ ์ฒ˜์Œ ์ ‘ํ–ˆ์—ˆ๋Š”๋ฐ์š”. ์•„์ง ํšŒ์‚ฌ ํ”„๋กœ์ ํŠธ์ค‘์—๋Š” ๊ฒช์–ด๋ณด์ง€ ๋ชปํ–ˆ๋„ค์š”. ๊ทธ๋งŒํผ ๋Ÿฐ๋‹์ปค๋ธŒ์™€ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๋ฌธ์ œ์ผ๊บผ๋ผ ์ƒ๊ฐํ•ด์š”

  1. ํ˜น์‹œ ์‹ค๋ฌด์—์„œ ํ•ด๋‹น ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ ์šฉํ•œ ๊ฒฝ์šฐ๋ฅผ ๊ฒช์–ด๋ณด์…จ๋‹ค๋ฉด ํ›„๊ธฐ๋ฅผ ์•Œ์ˆ˜ ์žˆ์„๊นŒ์š”?
  2. open source ๋กœ ๊ฒ€์ƒ‰์„ ํ•ด๋ณด์•˜๋˜ ์ ์ด ์žˆ๋Š”๋ฐ ๋„ˆ๋ฌด ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋กœ ํฌ์ง„๋˜์–ด์žˆ์–ด์„œ ์ ๋‹นํ•œ ํ”Œ์ ์„ ์„ ์ •ํ•˜์ง€ ๋ชปํ–ˆ๋Š”๋ฐ, ํ˜น์‹œ ๊ดœ์ฐฎ์€ source code ๊ฐ€ ์žˆ์„๊นŒ์š”?

[1์ฃผ์ฐจ]_2์žฅ_์˜์กด์„ฑ ์—ญ์ „ํ•˜๊ธฐ_๊น€์ง€์• 

์ฑ… ๋‚ด์šฉ

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—”ํ‹ฐํ‹ฐ์— ๋Œ€ํ•œ ๋ชจ๋ธ์„ ๊ฐ ๊ณ„์ธต์—์„œ ์œ ์ง€๋ณด์ˆ˜ ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋„๋ฉ”์ธ ๊ฒŒ์ธต์€ ์˜์†์„ฑ ๊ณ„์ธต์„ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋„๋ฉ”์ธ ๊ณ„์ธต์—์„œ ์‚ฌ์šฉํ•œ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์˜์†์„ฑ ๊ณ„์ธต์—์„œ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  ๋‘ ๊ณ„์ธต์—์„œ ๊ฐ๊ฐ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

์งˆ๋ฌธ

DTO
VO
Entity
Req/Res Param

๋‹ค๋ฅธ ๋ถ„๋“ค์€ ๊ฐ ๋ ˆ์ด์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ค ์‹์œผ๋กœ ๋‚˜๋ˆ„์—ˆ๊ณ , ์–ด๋–ค ๋ช…์นญ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์‹ ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

[3์ฃผ์ฐจ] 6์žฅ ์˜์†์„ฑ ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ - ๊น€์„ธ์œค

๋ณด๋‹ค๊ฐ€ ๊ถ๊ธˆํ•ด์ง„ ๋‚ด์šฉ์ด ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” Entity๋ฅผ ๋‹ค ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”.
QueryDSL์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์˜์†์„ฑ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋ ์ง€ ์กฐ๊ธˆ ๊ถ๊ธˆํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ํ˜น์‹œ, ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„์ง€ ์„ค๋ช… ํ•ด์ฃผ์‹ค๋ถ„์ด ์žˆ๋‚˜์š” ใ… ใ… 

[๊น€๋ฏผ์„] 9์žฅ. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์กฐ๋ฆฝํ•˜๊ธฐ

์ฑ…์—์„œ ์Šคํ”„๋ง Bean ์ƒ์„ฑ ๋ฐฉ๋ฒ•์œผ๋กœ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค.

  1. ํด๋ž˜์ŠคํŒจ์Šค ์Šค์บ๋‹ - @component
  2. ์Šคํ”„๋ง ์ž๋ฐ” ์ปจํ”ผ๊ทธ - @configuration + @bean

๊ฐ์ž ์„ ํ˜ธํ•˜์‹œ๋Š” ์Šคํƒ€์ผ์ด ์žˆ๋Š”์ง€? ๊ทธ ์ด์œ ๋ฅผ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํšŒ์‚ฌ์—์„œ ํŒ€๋ณ„๋กœ ํ•ด๋‹น ๊ด€๋ จ๋œ ์ •์ฑ… ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ๋Š”์ง€๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

[2์ฃผ์ฐจ] 4์žฅ. ์œ ์Šค์ผ€์ด์Šค ๊ตฌํ˜„ํ•˜๊ธฐ_๊น€๊ธฐํ˜„

  1. ํ’๋ถ€ํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ vs ๋นˆ์•ฝํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๋ณด๊ณ  ์ „ ์ ์ ˆํžˆ ์„ž์–ด์„œ ์“ฐ๊ณ  ์žˆ๋Š”๊ฑธ ํ™•์ธํ–ˆ๋Š”๋ฐ์š”. ๋‹ค๋ฅธ๋ถ„๋“ค์€ ์–ด๋– ์‹ ๊ฐ€์š”??
    (๋นˆ์•ฝํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ์€ transaction script ๋ฅผ ์„ค๋ช…ํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ ์ดํ•ดํ•œ๊ฒŒ ๋งž์„๊นŒ์š”??)

  2. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ถ€๋ถ„ ์ฝ์œผ๋ฉด์„œ Service layer ์—์„œ @Valid ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ? ์ฐพ์•„๋ณด๋‹ˆ ์ด๋Ÿฐ ๊ธ€์ด ์žˆ๋„ค์š”
    (https://meetup.toast.com/posts/223)

[3์ฃผ์ฐจ] 5์žฅ ์›น์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ - ๊น€๊ธฐํ˜„

  1. ์›น์–ด๋Œ‘ํ„ฐ์˜ ์ž…๋ ฅ๋ชจ๋ธ์€ ์–ด๋””์— ์œ„์น˜ํ•˜๊ฒŒ ๋˜๋‚˜์š”? buckpal ์˜ ์˜ˆ์ œ๋กœ ๋ณธ๋‹ค๋ฉด in/Web ์— controller ์™€ ๊ฐ™์ด ์žˆ์œผ๋ฉด ๋ ๊นŒ์š”??

image

  1. ์›น์–ด๋Œ‘ํ„ฐ์—์„œ client ์˜ ์ž…๋ ฅ์„ requestbody ๋กœ ๋ฐ›์•˜๋‹ค๊ณ ํ•˜๊ณ  requestModel ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ application ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์ฃผ๊ธฐ์œ„ํ•ด requestCommand ๋ผ๋Š” model ์„ ๋˜ ๋งŒ๋“œ๋Š”๊ฒŒ ๋งž๋Š”๊ฑธ๊นŒ์š”? ์ฑ…์„ ์ฝ๋‹ค๋ณด๋‹ˆ web ๊ณผ application ์˜ model ์„ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์ ธ๊ฐ€๋Š”๊ฒƒ ๊ฐ™์€๋ฐ ๋น„ํšจ์œจ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (์˜ˆ์ œ์—์„œ๋Š” ์ด๋ถ€๋ถ„์„ ์ถฉ๋ถ„ํžˆ ํ‘œํ˜„ํ•ด์ฃผ์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋„ค์š” ใ…œ)

  2. ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋‹ˆ๊น ์‚ฌ์‹ค layered ์™€ hexagonal ์ด ํฌ๊ฒŒ ์ฐจ์ด์ ์ด ์—†๋Š”๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜์ž ํ•˜๊ณ  ๋‚ด๋ ค๋‹ค ๋ณด๋‹ˆ๊น ๊ฒฐ๊ตญ์€ ๋‘˜๋‹ค application ์„ ๋ณดํ˜ธํ•˜๋Š”๊ฑด ๊ฐ™์€ ๋งฅ๋ฝ์ธ๊ฒƒ ๊ฐ™๋”๋ผ๊ณ ์š”. ๋‹จ hexagonal ์€ port ๋ฅผ interface ๋กœ ๊ฐ•์ œํ™”ํ•ด์„œ ํ”„๋กœ์ ํŠธ ๋ฉ์น˜๊ฐ€ ํฌ๋”๋ผ๋„ ํ•ญ์ƒ ๊ฐ™์€ ํŒจํ„ด์„ ์œ ์ง€ํ•˜๊ฒŒ๋” ํ•œ๋‹ค๋Š” ์ด์ ์ด ์žˆ๋Š”๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค! ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐํ•ด ๋ณด๊ณ  ์‹ถ์–ด์š”

  3. ์ด๊ฑด ์กฐ๊ธˆ ๋‹ค๋ฅธ ์ฃผ์ œ์ธ๋ฐ ๋ฌธ๋“ ๊ถ๊ธˆํ•ด์„œ ์งˆ๋ฌธ๋“œ๋ ค๋ณด์•„์š”. ์„œ๋กœ๋‹ค๋ฅธ domain ์˜ service ์—์„œ ๋‹ค๋ฅธ domain ์ •๋ณด๊ฐ€ ํ•„์š”ํ• ๋–„, ์˜ˆ๋ฅผ ๋“ค๋ฉด article ์—์„œ ๊ธ€์„ ์“ฐ๊ธฐ์œ„ํ•ด user ์ •๋ณด๊ฐ€ ํ•„์š”ํ• ๋•Œ user ์˜ repository ์— ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ , user ์˜ service layer ์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ด€๋ จ์ด ์—†๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด์™€๊ฐ™์€ ๋ฉ”์„œ๋“œ๋Š” ์–ด๋””์— ์œ„์น˜ํ•˜๋Š”๊ฒŒ ๋งž๊ณ , ์–ด๋–ค ์ด๋ฆ„์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ์•ผ ํ• ๊นŒ์š”? (์ตœ๋ฒ”๊ท ๋‹˜์˜ DDD start ์— ์–ธ๊ธ‰๋œ ๋‚ด์šฉ domainService)

[3์ฃผ์ฐจ] 6์žฅ. ์˜์†์„ฑ ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ - ๊ตฌ๋ฏผ๊ทœ

์˜์†์„ฑ ๊ณ„์ธต์€ ์ ‘ํ•ด๋ณธ์ ์ด ์—†์–ด ์งˆ๋ฌธ์„ ํ•˜๊ธฐ ์–ด๋ ต๋„ค์š” ใ…Ž;;
์˜์†์„ฑ ๊ณ„์ธต์˜ jpaEntity ์™€ Repository ์ฝ”๋“œ๋ณด๋ฉด์„œ ์ด๋ ‡๊ฒŒ ์ฟผ๋ฆฌ ๋‚ ๋ฆฌ๋Š” ๊ตฌ๋‚˜.. ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ใ…Žใ…Ž

[4์ฃผ์ฐจ] 8์žฅ. ๊ฒฝ๊ณ„ ๊ฐ„ ๋งคํ•‘ํ•˜๊ธฐ_๊น€์ง€์• 

ํŒ€ ๋‚ด์—์„œ ์ปจ๋ฒค์…˜์„ ์ •ํ•  ๋•Œ ๋งคํ•‘์— ์ฐฌ์„ฑํ•˜๋Š” ๊ฐœ๋ฐœ์ž vs ๋งคํ•‘์— ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ๋…ผ์Ÿ์„ ํ–ˆ๋˜ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹น์‹œ์—๋Š” ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ์ด ํŒ€๋‚ด ์ •์ฑ…์ด ๋˜์–ด ๊ณตํ†ต์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์ด ์ข‹์ง€ ์•Š๋‚˜ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์ด๋ฒˆ ์žฅ์€ ์ฝ์œผ๋ฉด์„œ ๋ฐ˜์„ฑ์„ ๋งŽ์ด ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ๋‹ค๋ฅธ ๋ถ„๋“ค์€ ํŒ€ ๋ณ„ ๋งคํ•‘ ์ „๋žต์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•˜๋„ค์š”.

[5์ฃผ์ฐจ] 9์žฅ. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์กฐ๋ฆฝํ•˜๊ธฐ - ๊น€๊ด‘ํ›ˆ

[์งˆ๋ฌธ]

  • ํด๋ž˜์Šค์— ํ”„๋ ˆ์ž„์›Œํฌ์— ํŠนํ™”๋œ ์• ๋„ˆํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์ ์—์„œ ์นจํˆฌ์ ์ด๋‹ค. (p. 114)
  • ์œ„ ๋ฌธ์žฅ์—์„œ ์นจํˆฌ์ ์ด๋ผ๋‹ค๋Š” ๋‹จ์–ด๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ, ํ‰์†Œ ์นจํˆฌ์ ์ธ ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹œ๋ฉด์„œ ๊ฐœ๋ฐœ์„ ํ•˜์‹œ๋‚˜์š” ??
  • ์นจํˆฌ์ ์ธ๊ฒƒ์ด ๋‚˜์œ ๊ฒƒ์ธ์ง€ ?? ์˜๊ฒฌ์„ ๋‚˜๋ˆ„๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

[์ฐธ๊ณ ]
image

[1์ฃผ์ฐจ]_2์žฅ_์˜์กด์„ฑ ์—ญ์ „ํ•˜๊ธฐ_๊ตฌ๋ฏผ๊ทœ

์˜์กด์„ฑ ์—ญ์ „ ์›์น™

์˜์กด์„ฑ์€ ์–‘์ชฝ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๋งŒ ์˜์กด์„ฑ์„ ์—ญ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กด์„ฑ์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์˜์กด์„ฑ์„ ์—ญ์ „์‹œํ‚ฌ ์ˆ˜ ์—†๋‹ค.

  • ํ”„๋กœ์ ํŠธ์—์„œ ์„œ๋“œํŒŒํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์„œ๋“œํŒŒํ‹ฐ๋ฅผ ์ปจํŠธ๋กคํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋žฉํ•‘ํ•˜๊ณ  ์ปดํฌ๋„ŒํŠธ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์„œ๋“œํŒŒํ‹ฐ์—์„œ์˜ ์›ํ•˜๋Š” ๋™์ž‘๋งŒ ๊ฐ€์ ธ๊ฐ€๋Š”๋ฐ์š”. (์ด๋ ‡๊ฒŒ ํ•ด์•ผ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์งค๋•Œ mocking ํ•˜๊ธฐ๋„ ์‰ฝ๊ณ  ์„œ๋“œํŒŒํ‹ฐ์— ๋Œ€ํ•œ ์˜์กด์„ฑ๋„ ๋–จ์–ด์ ธ์„œ) ์ฑ…์—์„œ ๋งํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

[2์ฃผ์ฐจ] 3์žฅ_์ฝ”๋“œ ๊ตฌ์„ฑํ•˜๊ธฐ_๊ตฌ๋ฏผ๊ทœ

  1. ์‹ค์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด best-practice ๊ฐ€ ๋ฌด์—‡์ผ์ง€ ๋งŽ์ด ์ฐพ์•„๋ณด๊ธฐ๋„ ํ•˜๊ณ  ํŒ€ ๋‚ด์—์„œ ๊ทœ์น™์„ ์ •ํ•ด ํด๋”๋ง์„ ํ•˜๊ฒŒ๋˜๋Š”๋ฐ์š”. ์ฑ…์—์„œ๋Š” ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŒจํ‚ค์ง€ ๊ธฐ์ค€์„ ๊ฐ€์ ธ๊ฐ”๊ณ  ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋งค์šฐ ์ค‘์š”ํ•˜๊ฒŒ ๋‹ค๋ค˜๋Š”๋ฐ. ๊ฐ์ž ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ ธ๊ฐ€์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
  2. ์ฑ…์—์„œ ์˜์กด์„ฑ ์ฃผ์ž…์˜ ์—ญํ• (p.30)์—์„œ ์ค‘๋ฆฝ์ ์ธ ์˜์กด์„ฑ ์ฃผ์ž… ์ปดํฌ๋„ŒํŠธ์˜ ์˜ˆ์‹œ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋“ค์—ˆ๋Š”๋ฐ ์ค‘๋ฆฝ์ ์ธ ์˜์กด์„ฑ ์ฃผ์ž… ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ๋Š” ๋ฌด์—‡์ด ์žˆ์„์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ–ˆ๋˜ ์‚ฌ๋ก€๋“ค๋„ ๊ถ๊ธˆํ•˜๊ตฌ์š”.

[3์ฃผ์ฐจ] 5์žฅ ์›น์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ - ๊น€์„ธ์œค

์ปจํŠธ๋กค๋Ÿฌ ๋‚˜๋ˆ„๊ธฐ

ํด๋ž˜์Šค๋งˆ๋‹ค ์ฝ”๋“œ๋Š” ์ ์„ ์ˆ˜๋ก ์ข‹๋‹ค. ์ฝ”๋“œ๊ฐ€ ์ ์œผ๋ฉด ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์— ๋‚œ์ด๋„๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค.

๋ชจ๋“  ์—ฐ์‚ฐ์„ ๋‹จ์ผ ์ปจํŠธ๋กค๋Ÿฌ์— ๋„ฃ๋Š” ๊ฒƒ์ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ์žฌํ™œ์šฉ์„ ์ด‰์ง„ํ•œ๋‹ค๋Š” ๋ฐ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒŒ ์ข‹์„๊นŒ? ํ—ท๊ฐˆ๋ฆผ๋งŒ ๊ฐ€์ง€๊ฒŒ ๋ ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ ์—ฐ์‚ฐ์— ๋Œ€ํ•ด ๊ฐ€๊ธ‰์ ์ด๋ฉด ๋ณ„๋„์˜ ํŒจํ‚ค์ง€ ์•ˆ์— ๋ณ„๋„์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค๋ฉฐ ๊ฐ€๊ธ‰์  ๋ฉ”์„œ๋“œ์™€ ํด๋ž˜์Šค๋ช…์€ ์œ ์Šค์ผ€์ด์Šค๋ฅผ ์ตœ๋Œ€ํ•œ ๋ฐ˜์˜ํ•ด์„œ ์ง€์–ด์•ผ ํ•œ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ๋™์‹œ ์ž‘์—…์ด ์‰ฌ์›Œ์ง„๋‹ค๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ์žฅ์ ์ด๋‹ค.

์ฑ…์—์„œ๋Š” ์œ„์™€๊ฐ™์ด, ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋‚˜๋ˆ„๋Š” ์ž‘์—…์„ ์ด์•ผ๊ธฐ ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์„œ๋น„์Šค๋„ ๊ทธ๋ ‡๊ณ  ์ปจํŠธ๋กค๋Ÿฌ๋„ ๊ทธ๋ ‡๊ณ , ๊ฐ„๋‹จํ•œ CRUD๋Š” ํ•œ๊ณณ์— ๋ชจ์•„๋‘๊ณ , ๊ทธ ์™ธ์ ์ธ ์œ ์ฆˆ์ผ€์ด์Šค๊ฐ€ ์ƒ๊ธธ๋•Œ, ๋ถ„๋ฆฌํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“œ๋Š”๋ฐ์š”. ๋˜ํ•œ ์œ ์ฆˆ์ผ€์ด์Šค๊ฐ€ ์—ฐ๊ด€์ด ์žˆ๋‹ค๋ฉด (์˜ˆ๋ฅผ๋“ค๋ฉด, ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ) ๋ฌถ๋Š”๊ฒŒ ๋” ์ข‹๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ค์–ด์š”.

์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ์ด ๋ถ€๋ถ„์œผ ๋ดค์„๋•Œ ์–ด๋–ป๊ฒŒ ๋Š๊ผˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค :)

[1์ฃผ์ฐจ]_1์žฅ_๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์˜ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ผ๊นŒ_๊ตฌ๋ฏผ๊ทœ

๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฃผ๋„ ์„ค๊ณ„๋ฅผ ์œ ๋„ํ•œ๋‹ค.

  • ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ๋„๋ฉ”์ธ ๊ณ„์ธต์€ ์˜์†์„ฑ ๊ณ„์ธต์— ์˜์กดํ•˜๊ฒŒ ๋•Œ๋ฌธ์—, ์œ ์Šค์ผ€์ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ๋ฅผ ์งœ๊ณ (table์„ ๋งŒ๋“ค๊ณ ) ๋„๋ฉ”์ธ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๋ฐ˜๋ฉด, ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋‚˜ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋Š” ๋„๋ฉ”์ธ์ด ์ค‘์‹ฌ์ด๊ธฐ์— ๋„๋ฉ”์ธ ๋กœ์ง์„ ๋จผ์ € ์งœ๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ๋ฅผ ์งœ๋Š” ๊ฑธ๋กœ ์ดํ•ดํ–ˆ๋Š”๋ฐ์š”. ์‹ค์ œ๋กœ ์ž‘์—…ํ•˜์‹ค ๋•Œ ์–ด๋–ป๊ฒŒ ์ž‘์—…ํ•˜์‹œ๋‚˜์š”?? ์ฑ…์—์„œ ๋งํ•˜๋Š” ์ด์ƒํ–ฅ์€ ๋„๋ฉ”์ธ ๋กœ์ง์„ ๋จผ์ € ์งœ๋Š”๊ฑฐ๋ผ๊ณ ๋Š” ํ•˜์ง€๋งŒ ํ•ญ์ƒ ์ด์ƒํ–ฅ๋Œ€๋กœ ํ•˜๋Š”๊ฒŒ ์‰ฝ์ง€๋งŒ์€ ์•Š์œผ๋‹ˆ๊น์š”.

[๋ฐ•๊ฒฝ์ฒ ] 10์žฅ. ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„ ๊ฐ•์ œํ•˜๊ธฐ

์ €๋Š” Gradle ๋ชจ๋“ˆ ์„ค์ •์œผ๋กœ ๊ฒฝ๊ณ„๋ฅผ ์ชผ๊ฐœ์„œ ์•„์˜ˆ ์ž˜๋ชป๋œ ๋ฐฉํ–ฅ์œผ๋กœ (์˜ˆ๋ฅผ๋“ค์–ด ๋„๋ฉ”์ธ์—์„œ ์„œ๋น„์Šค(UseCase)๋ฅผ ์‚ฌ์šฉ) ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ตœ์„ ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ์š”. ๋‹ค๋งŒ, ๋ชจ๋“ˆ์ด ํŒจํ‚ค์ง€๋Š” ์•„๋‹ˆ๋ผ์„œ ArchUnit๊ณผ ํ•จ๊ป˜ ์ฒดํฌ๋ฅผ ํ•ด์ฃผ๋Š”๊ฒŒ ์ข‹์„๊ฑฐ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ค์—ˆ์–ด์š”.

๋‹ค๋ฅธ๋ถ„๋“ค์ด ์ƒ๊ฐํ•˜์‹œ๋Š” ์ตœ์„ ์˜ ๋ฐฉ์•ˆ์€ ์–ด๋–ค๊ฑธ๊นŒ์š”?

[2์ฃผ์ฐจ] 3์žฅ ์ฝ”๋“œ ๊ตฌ์„ฑํ•˜๊ธฐ_๊น€๋ฏผ์„

p.30 ์ฒซ๋ฒˆ์งธ ๋‹จ๋ฝ์— ๋ณด๋ฉด
"ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ๊ฐ€์žฅ ๋ณธ์งˆ์ ์ธ ์š”๊ฑด์€ 2์žฅ์—์„œ ๋ฐฐ์› ๋“ฏ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์ด ์ธ์ปค๋ฐ/์•„์›ƒ๊ณ ์ž‰ ์–ด๋Œ‘ํ„ฐ์— ์˜์กด์„ฑ์„ ๊ฐ–์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.
์˜ˆ์ œ ์ฝ”๋“œ์˜ ์›น ์–ด๋Œ‘ํ„ฐ์™€ ๊ฐ™์ด ์ธ์ปค๋ฐ ์–ด๋Œ‘ํ„ฐ์— ๋Œ€ํ•ด์„œ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ๊ฐ€ ์‰ฝ๋‹ค. ์ œ์–ด ํ๋ฆ„์˜ ๋ฐฉํ–ฅ์ด ์–ด๋Œ‘ํ„ฐ์™€ ๋„๋ฉ”์ธ ์ฝ”๋“œ๊ฐ„์˜ ์˜์กด์„ฑ ๋ฐฉํ–ฅ๊ณผ ๊ฐ™์€ ๋ฐฉํ–ฅ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค."

์ด ๋‚ด์šฉ์ด ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋Š”๋ฐ ์„ค๋ช… ์ข€ ํ•ด์ฃผ์‹ค๋ถ„?

[6์ฃผ์ฐจ] 11์žฅ. ์˜์‹์ ์œผ๋กœ ์ง€๋ฆ„๊ธธ ์‚ฌ์šฉํ•˜๊ธฐ - ๊น€์ง€์• 

ํšŒ์‚ฌ admin์ฝ”๋“œ์—์„œ๋Š” ์ฑ…์—์„œ ๋งํ•œ ์ง€๋ฆ„๊ธธ์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•ด์•ผ ํ•˜๋Š” ์ผ€์ด์Šค๋“ค์ด ์™•์™• ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. (๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ž…์ถœ๋ ฅ ๋ชจ๋ธ๋กœ ์‚ฌ์šฉํ–ˆ๊ฑฐ๋‚˜, ์ปจํŠธ๋กค๋Ÿฌ ๋‹จ์—์„œ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ผ€์ด์Šค)

์ฒ˜์Œ์— ๋ดค์„ ๋•Œ์—๋Š” ๋ ˆ๊ฑฐ์‹œ๋ผ๊ณ ๋งŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ์ง€๊ธˆ ๋Œ์ด์ผœ๋ณด๋ฉด ๊ฒฐ๊ตญ ์ฒ˜์Œ์—๋Š” ํ•ด๋‹น ์ฝ”๋“œ๋“ค๋„ ๋‹จ์ˆœ CRUD๋งŒ ํ•˜๋Š” ์ฝ”๋“œ์ด๊ณ , admin ์˜์†์„ฑ ๊ณ„์ธต๊ณผ ์–ด๋Œ‘ํ„ฐ ๊ณ„์ธต์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ธ์ด ์ผ์น˜ํ•˜๋Š” ์ผ€์ด์Šค๊ฐ€ ๋งŽ์•„ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ง€๋ฆ„๊ธธ์„ ํƒํ–ˆ์ง€ ์•Š๋‚˜ ์‹ถ์Šต๋‹ˆ๋‹ค.

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

[3์ฃผ์ฐจ] 5์žฅ ์›น ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ - ๊น€์ง€์• 

์ฑ…์—์„œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋„ˆ๋ฌด ์ ์€ ๊ฒƒ๋ณด๋‹ค ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒŒ ๋‚ซ๋‹ค. ๋ผ๊ณ  ์ฑ…์—์„œ ํ‘œํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (p57)
ํ•ด๋‹น ๋‚ด์šฉ์„ ์ฝ๋‹ค๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ฒจ ๋‚จ๊ฒจ๋‘ก๋‹ˆ๋‹ค.

  1. ๊ฐ€๋” ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๋‹ค๊ฐ€ ํ•˜๋‚˜์˜ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋„ˆ๋ฌด ๋งŽ์€ ์ฑ…์ž„์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋•Œ ์ชผ๊ฐœ์–ด ๊ฐœ๋ฐœํ•˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ๊ทธ๋•Œ๋งˆ๋‹ค ์ด๊ฑธ ์ชผ๊ฐœ๋Š” ๊ฒƒ์ด ์ข‹์„์ง€ ํ•˜๋‚˜๋กœ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์ด ์ข‹์„์ง€ ๊ณ ๋ฏผํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์–ด๋Š ์ •๋„์˜ ํฌ๊ธฐ๋กœ ๋งŒ๋“œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

  2. ๋น„์Šทํ•œ ๊ตฌ์กฐ์˜ ์„œ๋น„์Šค์—์„œ (์š”์ฒญ๊ณผ ์‘๋‹ต์€ type ๊ฐ’์œผ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ) ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ•˜๋‚˜๋กœ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ์š”, ๊ฐ ํƒ€์ž… ๋ณ„๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ์š”?

[3์ฃผ์ฐจ] 5์žฅ. ์›น ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ - ๊ตฌ๋ฏผ๊ทœ

๋ณดํ†ต ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ๋” ์ถ”์ƒ์ ์ด๋ผ์„œ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์— ๋น„ํ•ด ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์šธ ๋•Œ๊ฐ€ ๋งŽ๋‹ค. ๋”ฐ๋ผ์„œ ํŠน์ • ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์— ํ•ด๋‹นํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ฐพ๊ธฐ ์–ด๋ ต๋‹ค.

๋ผ๋Š” ๊ธ€์ด ์žˆ์—ˆ๋Š”๋ฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์— ๋น„ํ•ด ์ถ”์ƒ์ ์ด๋‹ค ๋ผ๋Š” ๋ง์€ ๊ตฌํ˜„์ด ์—†์–ด์„œ ๊ทธ๋ ‡๊ฒŒ ๋งํ•œ๊ฑฐ๊ฒ ์ฃ ? ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ค๊ฑฐ๋‚˜ ์ฝ๊ธฐ ํž˜๋“ค๋ฉด ์•ˆ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ์š”. ๊ทธ๋ฆฌ๊ณ  ๋‹น์—ฐํžˆ ํ”„๋กœ๋Ž์…˜ ์ฝ”๋“œ๋ณด๋‹ค ํŒŒ์•…ํ•˜๊ธฐ๋„ ์‰ฌ์›Œ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ..

[2์ฃผ์ฐจ] 4์žฅ_์œ ์Šค์ผ€์ด์Šค ๊ตฌํ˜„ํ•˜๊ธฐ_๊ตฌ๋ฏผ๊ทœ

ํ’๋ถ€ํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ vs ๋นˆ์•ฝํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ ์–ด๋–ค๊ฑธ ๋งŽ์ด ์„ ํ˜ธํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
์ฑ…์—์„œ ๋นˆ์•ฝํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…ํ–ˆ๋Š”๋ฐ

์ผ๋ฐ˜์ ์œผ๋กœ ์—”ํ‹ฐํ‹ฐ๋Š” ์ƒํƒœ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํ•„๋“œ์™€ ์ด ๊ฐ’์„ ์ฝ๊ณ  ๋ฐ”๊พธ๊ธฐ ์œ„ํ•œ getter, setter ๋ฉ”์„œ๋“œ๋งŒ ํฌํ•จํ•˜๊ณ  ์–ด๋–ค ๋„๋ฉ”์ธ ๋กœ์ง๋„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค.

์š”๊ฒŒ ์ž๋ฃŒ ๊ตฌ์กฐ์ฒด์˜ ํ˜•ํƒœ(DTO)๋ฅผ ๋งํ•˜๋Š”๊ฑด์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. (๋ณ€์ˆ˜๋งŒ ์žˆ๊ณ  ํ•จ์ˆ˜๊ฐ€ ์—†๋Š” ํด๋ž˜์Šค)

4์žฅ ์œ ์Šค์ผ€์ด์Šค ๊ตฌํ˜„ํ•˜๊ธฐ_๊น€๋ฏผ์„

p.42 [์ƒ์„ฑ์ž์˜ ํž˜] ์ ˆ์— ๋‚˜์˜ค๋Š” ๊ฒƒ์ฒ˜๋Ÿผ

์ƒ์„ฑ์ž๋ฅผ ์“ธ์ง€ ๋นŒ๋”ํŒจํ„ด์„ ์“ธ์ง€ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์œ ์ € ๊ฐ™์€ ๊ฒฝ์šฐ์— ์ถ”ํ›„์— ํ•„๋“œ๊ฐ€ ๋Š˜์–ด๋‚  ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ

์ด๋Ÿด ๊ฒฝ์šฐ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด ๋†“์œผ๋ฉด ๋Š˜์–ด๋‚œ ํ•„๋“œ์— ๋Œ€ํ•œ ์ƒ์„ฑ์ž๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ ์žˆ๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š”๋ฐ

์ด๋ฏธ ์žˆ๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฑด ์ข€ ์œ„ํ—˜ํ•˜๊ณ  ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋ฉด ๊ธฐ์กด ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ถ€๋ถ„์„ ๋‹ค ๋‹ค์‹œ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋นŒ๋”๋ฅผ ์“ฐ๋ฉด (๋กฌ๋ณต ์‚ฌ์šฉ) ์ถ”๊ฐ€ ํ•„๋“œ์— ๋Œ€ํ•ด์„œ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„œ๋งŒ ๋‹ค์‹œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋˜๊ธด ํ•˜๋Š”๋ฐ ๋†“์น˜๋Š” ๋ถ€๋ถ„์ด ์ƒ๊ธฐ๋ฉด์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ๋ฐฉ๋ฒ•๋„ ๋”ฑํžˆ ๋ง˜์— ๋“ค์ง€๊ฐ€ ์•Š์€๋ฐ ๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ์–ด๋–ค์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

[1์ฃผ์ฐจ] 2์žฅ. ์˜์กด์„ฑ ์—ญ์ „ํ•˜๊ธฐ_๋ฐ•๊ฒฝ์ฒ 

ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ๋‹จ์ ์œผ๋กœ ๊ฐ ์˜์—ญ์˜ ๋ชจ๋ธ์„ ๊ด€๋ฆฌํ•ด์•ผํ•˜๊ณ  ๋ชจ๋ธ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๋งคํ•‘์ด ๋งŽ์•„์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์žˆ์„ํ…๋ฐ์š”.

๋‹ค๋ฅธ๋ถ„๋“ค์€ ํ˜„์žฌ ์–ด๋Š์ •๋„๊นŒ์ง€ ๋งคํ•‘์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์‹ ์ง€ ๊ถ๊ธˆํ•˜๋„ค์š”.

Request ๊ฐ์ฒด๋ฅผ ๋„๋ฉ”์ธ์˜์—ญ(์„œ๋น„์Šค)์œผ๋กœ ๋Œ์–ด์™€์„œ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š”์ง€? ์•„๋‹ˆ๋ฉด ๊ฐ ๋„๋ฉ”์ธ์˜์—ญ์— ์ ‘๊ทผํ•˜๊ธฐ ์ „์— ๋ณ„๋„ ๊ฐ์ฒด๋กœ ๋งคํ•‘์„ ํ•ด์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š”์ง€ ๋“ฑ๋“ฑ..

[2์ฃผ์ฐจ] 3์žฅ ์ฝ”๋“œ ๊ตฌ์„ฑํ•˜๊ธฐ_๊ณต์€๋ฏธ

  • p.28 ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์‹ํ™”ํ•ด์„œ ํšŒ์˜ ํ•œ๋‹ค๋Š” ๋‚ด์šฉ์ด ์žˆ์–ด์„œ ๊ทธ๋ ค๋ดค๋Š”๋ฐ... ์ œ๊ฐ€ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ/ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ณ  ๊ทธ๋ฆฐ๊ฒŒ ๋งž์„๊นŒ์š”?
    image

  • Hexagonal architecture์—์„œ๋Š” port "ํ•˜๋‚˜" ๋‹น ์–ด๋Œ‘ํ„ฐ "ํ•˜๋‚˜"๋งŒ ์กด์žฌํ•˜๋Š”๊ฑด๊ฐ€์š”??

  • p.30 ํฌํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ๋ˆ„๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์— ์ œ๊ณตํ•ด์•ผ ํ• ๊นŒ?
    ํฌํŠธ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ์•ˆ์—์„œ ์ˆ˜๋™์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์— ์–ด๋Œ‘ํ„ฐ์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์ง€๋Š”
    ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ๋ถ€๋ถ„์—์„œ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ๊ณ„์ธต์— ์˜์กด์„ฑ์„ ๊ฐ€์ง„ ์ค‘๋ฆฝ์ ์ธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•˜๋‚˜ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    ์ด ์ปดํฌ๋„ŒํŠธ๋Š” ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํด๋ž˜์Šค๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    ์ด ๋ถ€๋ถ„์ด ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๋˜๋Š”๋ฐ ์ค‘๋ฆฝ์ ์ธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ด๋–ค๊ฑด์ง€ ๋ชจ๋ฅด๊ฒ ๊ณ  ์ดˆ๊ธฐํ™”ํ•œ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋ญ”์ง€ ์ดํ•ด๊ฐ€ ์•ˆ๋ฉ๋‹ˆ๋‹ค........ใ€’โ–ฝใ€’

[4์ฃผ์ฐจ] 8์žฅ. ๊ฒฝ๊ณ„ ๊ฐ„ ๋งคํ•‘ํ•˜๊ธฐ- ๊น€๊ธฐํ˜„

์ฑ…์—์„œ ์–‘๋ฐฉํ–ฅ ๋งคํ•‘์ „๋žต์—์„œ์˜ ๋ฌธ์ œ์ ์œผ๋กœ

"๋„๋ฉ”์ธ ๋ชจ๋ธ์ด ๊ณ„์ธต ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด์„œ ํ†ต์‹ ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค (ํฌํŠธ๊ฐ€ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ์ž…๋ ฅํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค)"

๋ผ๊ณ  ๋‚˜์™€์žˆ๋Š”๋ฐ ์›น๊ณ„์ธต์ด ์•„๋‹Œ ์›น/์˜์†์„ฑ ๋ชจ๋ธ์ด ๋„๋ฉ”์ธ์œผ๋กœ ๋งคํ•‘ํ•  ์ฑ…์ž„์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด (์›น๋ชจ๋ธ -> ๋„๋ฉ”์ธ)์— ์˜์กด์„ฑ์ด ์ƒ๊ธฐ๋Š” ๊ฑฐ๋‹ˆ๊น ๋ฌธ์ œ์ ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ๊ฑธ๊นŒ์š”?

[1์ฃผ์ฐจ]_1์žฅ_๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์˜ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ผ๊นŒ_๊น€์ง€์• 

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

1. ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฃผ๋„ ์„ค๊ณ„๋ฅผ ์œ ๋„ํ•œ๋‹ค.

์ €๋Š” ๊ธฐํš์•ˆ์„ ๋ฐ›์•˜์„ ๋•Œ ๋‹ค์Œ ์ˆœ์„œ๋กœ ์„œ๋น„์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
(1) ๊ธฐํš์— ํ•„์š”ํ•œ ์„œ๋น„์Šค์™€ ๊ฐ’๋“ค์„ ์ฒดํฌํ•œ๋‹ค.

  • ํ•„์š”ํ•œ ์„œ๋น„์Šค๋“ค์ด ์–ด๋–ค ๊ฒƒ์ธ์ง€ ํŒŒ์•…ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ๋‹จ์— ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ ค์ค„์ง€ ์„ค๊ณ„ํ•œ๋‹ค. (url, req/res param)

(2) ํ•„์š”ํ•œ ๊ฐ’์— ๋Œ€ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค.
(3) ๋„๋ฉ”์ธ ๋กœ์ง ์„ค๊ณ„
์ €๋Š” ๋„๋ฉ”์ธ ๋กœ์ง ์„ค๊ณ„ ์ „์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์›น ๊ณ„์ธต์„ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ๋‹น์—ฐํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ž‘์—…ํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ์ •์˜ํ•˜๊ธฐ ์ „์— ๋„๋ฉ”์ธ ๊ณ„์ธต์„ ๋จผ์ € ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์–ด๋–ค ์ˆœ์„œ๋กœ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ๊ณ„์‹ ๊ฐ€์š”?

2. ๋™์‹œ ์ž‘์—…์ด ์–ด๋ ค์›Œ์ง„๋‹ค.

ํ•˜๋‚˜์˜ ์˜์†์„ฑ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋กœ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์˜์†์„ฑ ๋ ˆ์ด์–ด๋ฅผ ํ•œ ์‚ฌ๋žŒ์ด ๋‹ด๋‹นํ•˜๊ณ  ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋ฅผ ๋จธ์ง€ํ•ด์„œ ์ž‘์—…ํ•œ ๊ฒฝ์šฐ๋Š” ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

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

(์ฑ… ๋’ค์— ์ด ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ถ”๊ฐ€์ ์ธ ์„ค๋ช…์ด ๋‚˜์˜ค๋ ค๋‚˜์š”..? ์ฑ…์—์„œ ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜์˜ ๋‹จ์ ์„ ์ด์•ผ๊ธฐ ํ•˜๊ธฐ ์œ„ํ•ด ๊ทน๋‹จ์  ์˜ˆ์‹œ๋ฅผ ๋“ค์—ˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.)

[2์ฃผ์ฐจ] 3์žฅ ์ฝ”๋“œ ๊ตฌ์„ฑํ•˜๊ธฐ_๊น€๊ธฐํ˜„

"package-private ์ ‘๊ทผ ์ˆ˜์ค€์„ ์ด์šฉํ•ด ํŒจํ‚ค์ง€ ๊ฐ„์˜ ๊ฒฝ๊ณ„๋ฅผ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค" ๋ผ๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ธ๋ฐ์š”.

์ €์˜ ๊ฒฝ์šฐ๋Š” ํด๋ž˜์Šค ์ƒ์„ฑ์‹œ์— public ์œผ๋กœ๋งŒ ์ƒ์„ฑํ•˜๋‹ค ๋ณด๋‹ˆ ์–ด๋–ค์‹์œผ๋กœ ํ‘œํ˜„๋ ์ง€ ์„ ๋œป ์™€๋‹ฟ์ง€๊ฐ€ ์•Š๋„ค์š”.

[2์ฃผ์ฐจ] 4์žฅ. ์œ ์Šค์ผ€์ด์Šค ๊ตฌํ˜„ํ•˜๊ธฐ_๊ณต์€๋ฏธ

  • p.43 ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œ ํšจํ•˜์ง€ ์•Š์€ ์ƒํƒœ์˜ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋ ค๋Š” ์‹œ๋„์— ๋Œ€ํ•ด์„œ๋Š” ๊ฒฝ๊ณ ํ•ด์ฃผ์ง€ ๋ชปํ•œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ๊ทธ๋Ÿฌ๋ฉด ๋นŒ๋”๋Š” ์–ธ์ œ ์จ์•ผ ์ข‹์€๊ฑธ๊นŒ์š”? ์ €๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋งŽ์„ ๋•Œ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฑฐ ๊ฐ™์€๋ฐ ์ฑ…์—์„œ๋Š” IDE๊ฐ€ ์ถฉ๋ถ„ํžˆ ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š”๋ฐ ํžŒํŠธ๋ฅผ ์ค€๋‹ค๊ณ  ํ•˜๋‹ˆ ๋นŒ๋”๋ฅผ ๊ตณ์ด ์•ž์œผ๋กœ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋Š”๊ฒƒ์ธ๊ฐ€~ ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

  • p.50 ์ฝ๊ธฐ ์ „์šฉ ์ž‘์—…์„ ์œ ์Šค์ผ€์ด์Šค๋ผ๊ณ  ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์€ ์กฐ๊ธˆ ์ด์ƒํ•˜๋‹ค. ๋ผ๊ณ  ์ฑ…์— ๋‚˜์™€์žˆ๋Š”๋ฐ ์™œ ์ด์ƒํ•˜์ฃ ..?
    ์œ„ํ‚คํ”ผ๋””์•„์— ์จ์žˆ๋Š” ์œ ์Šค์ผ€์ด์Šค์˜ ์ •์˜๋Š” ํ–‰์œ„์ž(์•กํ„ฐ)์™€ ์•กํ„ฐ๊ฐ€ ์š”๊ตฌํ•˜์—ฌ ์‹œ์Šคํ…œ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ผ์˜ ๋ชฉํ‘œ์ธ๋ฐ,
    ๊ณ„์ขŒ ์ž”๊ณ  ๋ณด์—ฌ์ฃผ๊ธฐ๋Š” ๊ณ„์ขŒ ์†Œ์œ ์ž์—๊ฒŒ ๊ฒŒ์ขŒ ์ž”๊ณ ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ๋ฅผ ๋ชฉํ‘œ์ธ ์œ ์Šค์ผ€์ด์Šค๊ฐ€ ๋  ์ˆ˜ ์—†๋Š”๊ฑด๊ฐ€์š”??

[1์ฃผ์ฐจ]_1์žฅ_๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์˜ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ผ๊นŒ_๊น€๊ธฐํ˜„

์งˆ๋ฌธ
p8. ๊ทธ๋ฆผ 1.5 ์—์„œ ํ—ฌํผ์™€ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์˜์†์„ฑ ๋ ˆ์ด์–ด๋กœ ํ‘œ์‹œ๋˜๊ณ  ์žˆ๋Š”๋ฐ ์ž˜ ์™€๋‹ฟ์ง€ ์•Š์•„์„œ ๋‹ค๋ฅธ๋ถ„๋“ค์€ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ„๋Š”์ง€ ์งˆ๋ฌธ๋“œ๋ ค์š”.
์ €๋Š” layer ๋ฅผ ๋‚˜๋ˆŒ๋•Œ ์•„๋ž˜๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค

  • ์›น
  • ์„œ๋น„์Šค
  • ๋„๋ฉ”์ธ
  • ์ธํ”„๋ผ

์—ฌ๊ธฐ์„œ helper ๋ผ ํ•จ์€ utility ์„ฑ์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ์„œ๋น„์Šค ๋ ˆ์ด์–ด๋กœ ๋‚˜๋ˆ„๋Š”๋ฐ, ๊ธฐ๋Šฅ์„ ์ž ๊น ๋ณด์กฐํ•˜๋Š” ์†์„ฑ์˜ class ๋ฅผ ์˜์†์„ฑ์— ๋„ฃ๋Š”๋‹ค๋Š” ๊ฒƒ์ด ์ด์ƒํ•˜๋„ค์š”

p6. ๊ทธ๋ฆผ 1.4์˜ ์˜์†์„ฑ์— ๋Œ€ํ•œ ํ‘œํ˜„์ด JPA ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”. JPA ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์„œ ํŽธ๋ฆฌํ•œ ๋ถ€๋ถ„๋„ ์žˆ์ง€๋งŒ Repository ์™€์˜ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์ด ๋ฌธ์ œ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์•Œ๊ณ  ์žˆ๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ด์•ผ๊ธฐ ํ•ด๋ณด๊ณ  ์‹ถ์–ด์š”

[4์ฃผ์ฐจ] 7์žฅ. ์•„ํ‚คํ…์ฒ˜ ์š”์†Œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ-๊น€๊ด‘ํ›ˆ

[์งˆ๋ฌธ]

  • ์ฑ…์—์„œ @WebMvcTest , @DataJpaTest ๋ฅผ ํ†ตํ•ฉํ…Œ์ŠคํŠธ๋กœ ์†Œ๊ฐœ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ €๋Š” ์œ„ ํ…Œ์ŠคํŠธ๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๊ฐ€์ ธ์˜ค๋Š” Slice ํ…Œ์ŠคํŠธ๋กœ ์•Œ๊ณ ์žˆ๋Š”๋ฐ ... ์ฑ… ๋‚ด์šฉ์ด ๋งž๋Š” ๋‚ด์šฉ์ผ๊นŒ์š” ??
  • (๋Š๋‚Œ์ƒ์œผ๋ก  ์Šคํ”„๋ง์—์„œ ์ •์˜ํ•œ ํ…Œ์ŠคํŠธ์™€ ํ…Œ์ŠคํŠธ ๊ด€๋ จ ๊ฐœ๋…๊ณผ๊ฐ€ ์‚ด์ง ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค๊ณ ๋Š” ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค.)

[4์ฃผ์ฐจ] 8์žฅ. ๊ฒฝ๊ณ„ ๊ฐ„ ๋งคํ•‘ํ•˜๊ธฐ- ๊น€๊ด‘ํ›ˆ

[์งˆ๋ฌธ]

  • ์ฑ…์—์„œ ์†Œ๊ฐœํ•˜๋Š” ๋งคํ•‘ ์ „๋žต์€ ์ „ํ†ต์ ์ธ ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜์—์„œ๋„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ๋“ค์–ด Controller, Service, Repository ์— ๊ฐ๊ฐ DTO ํ˜น์€ Entity ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ํ˜„์—…์—์„œ ๋‹ค๋“ค ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

[3์ฃผ์ฐจ] 5์žฅ. ์›น ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ - ๊ณต์€๋ฏธ

p.61 - ์ปจํŠธ๋กค๋Ÿฌ๋ช…๊ณผ ์„œ๋น„์Šค๋ช…์— ๋Œ€ํ•ด์„œ๋„ ์ž˜ ์ƒ๊ฐํ•ด๋ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, CreateAccount๋ณด๋‹ค๋Š” RegisterAccount๊ฐ€ ๋” ๋‚˜์€ ์ด๋ฆ„ ๊ฐ™์ง€ ์•Š์€๊ฐ€?
BuckPal ์˜ˆ์ œ์—์„œ ๊ณ„์ขŒ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉ์ž๊ฐ€ ๊ณ„์ขŒ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฟ์ด๋‹ค.

RegisterAccount๋‚˜ CreateAccount๋‚˜ ๋น„์Šทํ•œ ๊ฑฐ ๊ฐ™์€๋ฐ.. RegisterAccount๊ฐ€ ๋” ๋‚˜์€ ์ด๋ฆ„์ธ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์— ์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ๋™์˜ํ•˜์‹œ๋‚˜์š”??

[1์ฃผ์ฐจ]_1์žฅ_๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์˜ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ผ๊นŒ_๊น€์„ธ์œค

๋ฐœํ‘œ์ž๋ฃŒ๋ฅผ ๋งŒ๋“ค๋‹ค ๋ณด๋‹ˆ, ๊ถ๊ธˆ์ ์ด ์ƒ๊ฒจ ์งˆ๋ฌธ์„ ๊ฐ™์ด ๋‚จ๊ฒจ๋‘ก๋‹ˆ๋‹ค.

์งˆ๋ฌธ

  1. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š”๊ฑด ์œ ํ‹ธ๋ฆฌํ‹ฐ๋‚˜ ํ—ฌํผ๋Š” ๋ฌด์—‡์„ ๋งํ•˜๋Š”๊ฑด์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋„ค์š”.
  2. ์‚ฌ์‹ค ์–ด๋Œ‘ํ„ฐ์™€ ํฌํŠธ๋ผ๋Š” ๊ฒŒ ์–ด์ƒ‰ํ•œ๋ฐ, ํ˜น์‹œ ๋‹ค๋ฅธ ๋ถ„๋“ค์€ ๊ตณ์ด? ์ด๋ ‡๊ฒŒ ๊นŒ์ง€ ํ•ด์•ผํ• ๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์„ ๊ฐ€์ง€์‹ค๊นŒ์š” ใ…Žใ…Ž

[5์ฃผ์ฐจ] 10์žฅ. ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„ ๊ฐ•์ œํ•˜๊ธฐ - ๊น€์ง€์• 

์ฑ…์—์„œ๋Š” ArchUnit๊ฐ€ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์—์„œ ์‚ฌ์šฉ๋œ ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ฃผ์—ˆ์ง€๋งŒ, ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋“ฏ ํ•œ๋ฐ์š”. ํ˜น์‹œ ๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์‚ฌ๋‚ด์—์„œ ์ด๋Ÿฐ ์˜์กด์„ฑ ํ™•์ธ ํˆด ๋“ฑ์„ ์‚ฌ์šฉํ•œ ๊ฒฝํ—˜์ด ์žˆ์„๊นŒ์š”?

[2์ฃผ์ฐจ] 4์žฅ. ์œ ์Šค์ผ€์ด์Šค ๊ตฌํ˜„ํ•˜๊ธฐ_๋ฐ•๊ฒฝ์ฒ 

์ƒ์„ฑ์ž์˜ ํž˜

4์žฅ์˜ ์ƒ์„ฑ์ž์˜ ํž˜์ด๋ผ๋Š” ๋‚ด์šฉ์—์„œ Builder๋ณด๋‹ค๋Š” ์ƒ์„ฑ์ž๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๋‰˜์•™์Šค๋กœ ๋‚˜์˜ค๋Š”๋ฐ์š”. ๋‹ค๋ฅธ๋ถ„๋“ค์€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ค๊นŒ์š”?

ํ’๋ถ€ํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ vs ๋นˆ์•ฝํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ

๋„๋ฉ”์ธ ๋ชจ๋ธ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋„ ๋‚˜์˜ค๋„ค์š”. ํ•ต์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๊ฐ€ DDD์™€ ์ž˜ ๋งž๋‹ค๋Š” ์ €์ž์˜ ์ƒ๊ฐ์— ๋”ฐ๋ผ ์ด๋Ÿฐ ์ฃผ์ œ๊ฐ€ ๋‹ค๋ค„์ง€๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ์š”.
์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋„ ์ด์•ผ๊ธฐ ํ•ด๋ณด๋ฉด ์ข‹์„๊ฑฐ ๊ฐ™์•„ ๋‚จ๊น๋‹ˆ๋‹ค :)

[2์ฃผ์ฐจ] 3์žฅ ์ฝ”๋“œ ๊ตฌ์„ฑํ•˜๊ธฐ_๋ฐ•๊ฒฝ์ฒ 

buckpal
|-- account
		|-- adapter
		|		|-- in
		|		|	|-- web
		|		|		|-- AccountController
		|		|		|
		|		|-- out
		|		|	|-- persistence
	        |		|		|-- AccountPersistenceAdapter
	        |		|		|-- SpringDataAccountRepository
		|		|
		|-- domain
		|		|-- Account
		|		|-- Activity
		|
		|-- application
				|-- SendMoneyService
				|
				|-- port
					|-- in
					|	|-- SendMoneyUseCase
					|
					|-- out
						|-- LoadAccountPort
						|-- UpdateAccountStatePort

์œ„ ๊ตฌ์กฐ์—์„œ domain์€ application์— ์žˆ์–ด์•ผ ํ•˜๋Š”๊ฒŒ ์•„๋‹๊นŒ ์‹ถ์—ˆ๋Š”๋ฐ์š”. ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•œ ์ด์œ ๋Š” ์ €์ž๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ domain ๋ชจ๋ธ์„ ๋‹ค๋ฅธ ์™ธ๋ถ€ ์˜์กด์„ฑ์—์„œ ๋ณดํ˜ธํ•˜๋Š” ์˜๋„๋ผ๋ฉด application ํŒจํ‚ค์ง€ ๋‚ด์— domain ํŒจํ‚ค์ง€๋กœ ์žˆ์–ด์•ผ ๊ทธ ์˜๋„๊ฐ€ ๋“œ๋Ÿฌ๋‚ ๊บผ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด์—์š”.

๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”??

[3์ฃผ์ฐจ] 6์žฅ ์˜์†์„ฑ ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ - ๊น€์ง€์• 

๋งŒ์•ฝ ์„œ๋น„์Šค๊ฐ€ @Transactional ์• ๋„ˆํ…Œ์ด์…˜์œผ๋กœ ์˜ค์—ผ๋˜์ง€ ์•Š๊ณ  ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€๋˜๊ธธ ์›ํ•˜๋ฉด AspectJ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(aspect-oriented programming)์œผ๋กœ ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„๋ฅผ ์ฝ”๋“œ์— ์œ„๋น™(weaving)ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ผ๋Š” ๋ง์ด ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€๋Š”๋ฐ ํ˜น์‹œ ์„ค๋ช… ํ•ด์ฃผ์‹ค ๋ถ„ ๊ณ„์‹ ๊ฐ€์š”?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.