Improving Package Structure - hyeonwoody/hyeonworld GitHub Wiki

νŒ¨ν‚€μ§€ ꡬ쑰 κ°œμ„ 

κΈ°μ‘΄ λ ˆμ΄μ–΄λ³„λ‘œ 폴더λ₯Ό λ‚˜λˆ„λŠ” νŒ¨ν‚€μ§€ κ΅¬μ‘°μ—μ„œ λ„λ©”μΈλ³„λ‘œ 폴더λ₯Ό λ‚˜λˆ„λŠ” νŒ¨ν‚€μ§€ ꡬ쑰둜 λ³€κ²½ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

κΈ°μ‘΄ νŒ¨ν‚€μ§€ ꡬ쑰

β”œβ”€β”€ configuration
β”‚   β”œβ”€β”€ thread
β”‚   └── web
β”œβ”€β”€ controller
β”‚   β”œβ”€β”€ GameController.java
β”‚   β”œβ”€β”€ GameStageController.java
β”‚   β”œβ”€β”€ HelloController.java
β”‚   β”œβ”€β”€ HomeController.java
β”‚   β”œβ”€β”€ InitController.java
β”‚   β”œβ”€β”€ IPController.java
β”‚   β”œβ”€β”€ MainController.java
β”‚   β”œβ”€β”€ MemberController.java
β”‚   β”œβ”€β”€ PartyController.java
β”‚   β”œβ”€β”€ RoundController.java
β”‚   β”œβ”€β”€ sse
β”‚   β”œβ”€β”€ SubmissionController.java
β”‚   └── WebRestController.java
β”œβ”€β”€ DTO
β”‚   β”œβ”€β”€ Game
β”‚   β”œβ”€β”€ Member
β”‚   β”œβ”€β”€ PartyInitDTO.java
β”‚   β”œβ”€β”€ ScoreSource
β”‚   └── Submission
β”œβ”€β”€ entity
β”‚   β”œβ”€β”€ Game.java
β”‚   β”œβ”€β”€ Member.java
β”‚   β”œβ”€β”€ Party.java
β”‚   β”œβ”€β”€ Round.java
β”‚   β”œβ”€β”€ ScoreSource.java
β”‚   └── Submission.java
β”œβ”€β”€ HyeonworldApplication.java
β”œβ”€β”€ InitRunner.java
β”œβ”€β”€ repository
β”‚   β”œβ”€β”€ EmitterRepositoryImpl.java
β”‚   β”œβ”€β”€ EmitterRepository.java
β”‚   β”œβ”€β”€ game
β”‚   β”œβ”€β”€ member
β”‚   β”œβ”€β”€ party
β”‚   β”œβ”€β”€ round
β”‚   β”œβ”€β”€ ScoreSourceRepository.java
β”‚   └── submission
└── service
    β”œβ”€β”€ GameService.java
    β”œβ”€β”€ HomeService.java
    β”œβ”€β”€ InitService.java
    β”œβ”€β”€ MemberService.java
    β”œβ”€β”€ PartyService.java
    β”œβ”€β”€ RoundService.java
    β”œβ”€β”€ SubmissionService.java
    └── ThreadService.java

이유

λ„λ©”μΈλ³„λ‘œ 폴더λ₯Ό λ‚˜λˆ„λŠ” νŒ¨ν‚€μ§€ ꡬ쑰둜 λ³€κ²½ μ‹œ μž₯단점은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

μž₯점:
κ΄€μ‹¬μ‚¬μ˜ 뢄리: 각 λ„λ©”μΈλ³„λ‘œ κ΄€λ ¨ μ½”λ“œκ°€ λͺ¨μ—¬μžˆμ–΄ μ½”λ“œμ˜ 응집도가 λ†’μ•„μ§‘λ‹ˆλ‹€.
μœ μ§€λ³΄μˆ˜μ„± ν–₯상: νŠΉμ • λ„λ©”μΈμ˜ 변경사항이 μžˆμ„ λ•Œ ν•΄λ‹Ή νŒ¨ν‚€μ§€λ§Œ μ§‘μ€‘μ μœΌλ‘œ μ‚΄νŽ΄λ³΄λ©΄ λ˜λ―€λ‘œ μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•΄μ§‘λ‹ˆλ‹€.
ν™•μž₯μ„±: μƒˆλ‘œμš΄ 도메인이 좔가될 λ•Œ κΈ°μ‘΄ ꡬ쑰에 영ν–₯을 주지 μ•Šκ³  μƒˆλ‘œμš΄ νŒ¨ν‚€μ§€λ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ½”λ“œ λ„€λΉ„κ²Œμ΄μ…˜ κ°œμ„ : νŠΉμ • 도메인과 κ΄€λ ¨λœ λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‰½κ²Œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.
도메인 쀑심 섀계: λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ— 더 집쀑할 수 μžˆλŠ” ꡬ쑰λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€

단점:
초기 μ„€μ •μ˜ λ³΅μž‘μ„±: κΈ°μ‘΄ ꡬ쑰λ₯Ό λ³€κ²½ν•˜λŠ” 데 μ‹œκ°„κ³Ό λ…Έλ ₯이 ν•„μš”ν•©λ‹ˆλ‹€.
쀑볡 μ½”λ“œ λ°œμƒ κ°€λŠ₯μ„±: λ„λ©”μΈλ³„λ‘œ λΆ„λ¦¬ν•˜λ‹€ 보면 μœ μ‚¬ν•œ κΈ°λŠ₯의 μ½”λ“œκ°€ 쀑볡될 수 μžˆμŠ΅λ‹ˆλ‹€.
νŒ¨ν‚€μ§€ κ°„ μ˜μ‘΄μ„± 관리: 도메인 κ°„ μ˜μ‘΄μ„±μ„ 적절히 κ΄€λ¦¬ν•˜μ§€ μ•ŠμœΌλ©΄ λ³΅μž‘ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
μ˜€λ²„μ—”μ§€λ‹ˆμ–΄λ§ μœ„ν—˜: μž‘μ€ ν”„λ‘œμ νŠΈμ˜ 경우 λΆˆν•„μš”ν•˜κ²Œ λ³΅μž‘ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

hyeonworldλŠ” μ›Ή 개발 ν•™μŠ΅μ„ λͺ©μ μœΌλ‘œ μ§„ν–‰ν•˜λŠ” 토이 ν”„λ‘œμ νŠΈλ‘œμ„œ
μž‘μ€ ν”„λ‘œμ νŠΈμ—μ„œ λŒ€ν˜• ν”„λ‘œμ νŠΈλ‘œ λ°œμ „ μ‹œν‚€λŠ” 데에 의의λ₯Ό 두고 μžˆμŠ΅λ‹ˆλ‹€.
ν–₯ν›„ MSA둜의 ν™•μž₯을 μœ„ν•΄μ„œλŠ” λ„λ©”μΈλ³„λ‘œ νŒ¨ν‚€μ§€λ₯Ό ꡬ뢄 ν•˜λŠ” μž‘μ—…μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

초기 νŒ¨ν‚€μ§€ κ΅¬μ‘°λŠ” 클린 μ•„ν‚€ν…μ²˜μ— λŒ€ν•œ 사전 지식 없이 λ§Œλ“€μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.
클린 μ•„ν‚€ν…μ²˜λ₯Ό ν•™μŠ΅ν•˜κ³  μ΄ν•΄ν•œ ν›„, 이λ₯Ό 적용 μ‹œν‚€λ©° μƒˆλ‘­κ²Œ μŠ΅λ“ν•œ 지식과 κΈ°μˆ μ„ ν™œμš©ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

ꡬ쑰 κ°œμ„  과정은 ν˜„μž¬ ν”„λ‘œμ νŠΈλ₯Ό ν–₯μƒμ‹œν‚¬ 뿐만 μ•„λ‹ˆλΌ,
클린 μ•„ν‚€ν…μ²˜ 원칙을 μ‹€μ œ μ‹œλ‚˜λ¦¬μ˜€μ— μ μš©ν•˜λŠ” κ·€μ€‘ν•œ ν•™μŠ΅ κ²½ν—˜μ΄ λ©λ‹ˆλ‹€.

결둠적으둜, νŒ¨ν‚€μ§€ ꡬ쑰 κ°œμ„ μ€ ν–₯ν›„ ν”„λ‘œμ νŠΈ ν™•μž₯μ„± 뿐만 μ•„λ‹ˆλΌ 개인 μ„±μž₯에도 도움이 λ˜λŠ” μž‘μ—…μ΄ 될 κ²ƒμž…λ‹ˆλ‹€.

κ°œμ„  νŒ¨ν‚€μ§€ ꡬ쑰