Skip to content

jin3378s/portfolio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

정진석 - 포트폴리였

κ²½λ ₯ 사항은 μ—¬κΈ°μ—μ„œ 확인 ν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ³Έ λ ˆν¬μ§€ν† λ¦¬μ— μ–ΈκΈ‰λœ λ‚΄μš©μ€ ν•΄λ‹Ή λ ˆν¬μ§€ν† λ¦¬μ˜ κΉŠμ€ 영ν–₯을 λ°›μ•˜μŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή λ‚΄μš©μ„ μ‹€μ œλ‘œ 이행 ν–ˆλ˜ κ°œλ°œμžλ‘œμ„œ 이해 ν•˜κ³  느꼈던 점을 μ΅œλŒ€ν•œ μ •λ¦¬ν•˜μ—¬ μž‘μ„± ν•˜κ³ μž ν•©λ‹ˆλ‹€.

μŠ€νƒ€νŠΈμ—…μ˜ 초기 개발자둜 ν•©λ₯˜ν•΄ transactional script λ°©μ‹μœΌλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ˜ μ €λŠ” 이후 νŒ€μ˜ 규λͺ¨ 컀지고, λΉ„μ§€λ‹ˆμŠ€κ°€ λ³΅μž‘ν•΄ 짐에 따라 μ½”λ“œλ₯Ό λ§₯락에 따라 λΆ„λ¦¬ν•˜κ³ , μ—­ν• κ³Ό μ±…μž„μ— λ”°λ₯Έ μ½”λ“œ 뢄리가 ν•„μš”ν•˜λ‹€ 느꼈고 κ·Έκ°„ μ—¬λŸ¬ λ…Όμ˜μ™€ 배움을 ν† λŒ€λ‘œ μ§€ν–₯ν•˜κ³ μž ν•˜λŠ” 아킀텍쳐와 μ‚¬μš© κ°€λŠ₯ν•œ 기법듀을 정리 ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 기법은 쑰직의 규λͺ¨μ™€ λ§ˆμ£Όν•˜κ³  μžˆλŠ” λΉ„μ§€λ‹ˆμŠ€ λ³΅μž‘λ„μ— λ”°λΌμ„œ 적합 ν• μˆ˜λ„, μ ν•©ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ—¬νƒœκΉŒμ§€μ˜ κ²½ν—˜μ„ ν† λŒ€λ‘œ ν•  λ•Œ μ΄λŸ¬ν•œ 기법은 단일 μŠ€μΏΌλ“œ νŒ€ 규λͺ¨(μ œν’ˆνŒ€ 전체 10인 미만)μ—λŠ” μ ν•©ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΅œμ†Œ 2개의 μŠ€μΏΌλ“œκ°€ λ™μ‹œ 운영 될 λ•Œ 적합 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ³ μˆ˜μ€€ μ•„ν‚€ν…μ²˜

μ„œλ²„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ³ μˆ˜μ€€ μ•„ν‚€ν…μ³λŠ” λ‹€μŒκ³Ό 같은 λͺ¨λ“ˆλ‘œ ꡬ성 λ©λ‹ˆλ‹€.

  • domain-models
  • gateways
  • foundation

domain-models

μ‹œμŠ€ν…œμ˜ 도메인 λͺ¨λΈμ΄ 포함 λ©λ‹ˆλ‹€. 각 λͺ¨λΈμ€ 단일 ν˜ΈμŠ€νŒ… μ „λž΅μ„ μ±„νƒν•˜κ±°λ‚˜ 곡유 ν˜ΈμŠ€νŒ… μ „λž΅μ„ 채택 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

도메인 λͺ¨λΈ

도메인 λͺ¨λΈμ€ μ„ΈλΆ€ λͺ¨λ“ˆλ‘œ ꡬ성 λ©λ‹ˆλ‹€.

λͺ¨λ“ˆ μ„€λͺ…
application μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν”„λ‘œμ„ΈμŠ€μ— 올릴 수 μžˆλŠ” μ½”λ“œκ°€ μœ„μΉ˜ ν•©λ‹ˆλ‹€. SpringBootApplication의 λ©”μΈν•¨μˆ˜, HttpServer, GrpcServer 등이 μœ„μΉ˜ ν•©λ‹ˆλ‹€.
api 도메인 λͺ¨λΈμ„ μ™ΈλΆ€ ν”„λ‘œμ„ΈμŠ€μ—μ„œ ν˜ΈμΆœν•˜κΈ° μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. RestController 등을 포함 ν•©λ‹ˆλ‹€.
models 도메인을 좔상화 ν•œ λͺ¨λΈμ„ 포함 ν•©λ‹ˆλ‹€. ν•΄λ‹Ή λͺ¨λ“ˆμ— ν¬ν•¨λœ λͺ¨λΈμ€ μ™ΈλΆ€λ‘œ 직접 λ…ΈμΆœ λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ™ΈλΆ€ λ…ΈμΆœμ΄ ν•„μš”ν•œ 경우라면 contracts λͺ¨λ“ˆμ„ 톡해 λ…ΈμΆœ λ©λ‹ˆλ‹€.
contracts 도메인 λͺ¨λΈ 쀑 μ™ΈλΆ€λ‘œ λ…ΈμΆœ 될 λͺ¨λΈμ„ 포함 ν•©λ‹ˆλ‹€. λͺ…λ Ή λͺ¨λΈ, μ—΄κ±°ν˜• νƒ€μž… 등이 포함 될 수 μžˆμŠ΅λ‹ˆλ‹€.
adapters 도메인 λͺ¨λΈμ˜ 좔상화 쀑 ꡬ체적인 κ΅¬ν˜„μ„ 포함 ν•©λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€ κ΅¬ν˜„μ²΄, μ™ΈλΆ€ μ„œλΉ„μŠ€ SDK 등이 포함 될 수 μžˆμŠ΅λ‹ˆλ‹€.
unit-tests μ‹€μ œ 배포 ν™˜κ²½μ΄ μ•„λ‹Œ, μ½”λ“œ 쑰각을 λŒ€μƒμœΌλ‘œ μž‘μ„±ν•˜λŠ” ν…ŒμŠ€νŠΈμ˜ λͺ¨μŒμž…λ‹ˆλ‹€. μ„œλΉ„μŠ€λ ˆμ΄μ–΄ ν…ŒμŠ€νŠΈ, adapter κ΅¬ν˜„μ²΄ ν…ŒμŠ€νŠΈ 등이 μΆ”κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

단일 ν˜ΈμŠ€νŒ… μ „λž΅

λͺ¨λΈμ— λŒ€ν•œ μ˜€ν”ˆλœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ…λ¦½λœ ν”„λ‘œμ„ΈμŠ€μ— ν˜ΈμŠ€νŒ… ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. 단일 ν˜ΈμŠ€νŒ… μ „λž΅μ„ μ·¨ν•˜λŠ” 도메인 λͺ¨λΈμ€ λ‹€μŒκ³Ό 같은 λͺ¨λ“ˆ ꡬ쑰λ₯Ό κ°€μ§‘λ‹ˆλ‹€

μ—¬κΈ°μ—μ„œ 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- domain-model
  - application
  - api
  - contracts
  - models
  - adapters
  - unit-tests

곡유 ν˜ΈμŠ€νŒ… μ „λž΅

ꡬ뢄 된 λ§₯락 μ—¬λŸ¬κ°œλ₯Ό ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€μ— ν˜ΈμŠ€νŒ… ν•˜λŠ” 방식 μž…λ‹ˆλ‹€. 아직 단일 ν˜ΈμŠ€νŒ… μ „λž΅μ΄ ν•„μš”ν•˜μ§€ μ•Šμ€ κ²½μš°μ— ν™œμš© ν•©λ‹ˆλ‹€. λ…Όλ¦¬μ μœΌλ‘œ κ΅¬λΆ„λœ λ§₯락은 ν•„μš”μ— 따라 μ–Έμ œλ“ μ§€ 호슀트λ₯Ό 뢄리할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ—¬κΈ°μ—μ„œ 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- domain-model
    - api
    - contracts
    - models
    - adapters
    - unit-tests
- shared-hosts
    - application

Gateways

도메인 λͺ¨λΈμ„ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ œκ³΅ν•˜κΈ° μœ„ν•΄ κ²Œμ΄νŠΈμ›¨μ΄ νŒ¨ν„΄μ„ ν™œμš© ν•©λ‹ˆλ‹€. κ²Œμ΄νŠΈμ›¨μ΄λŠ” ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ μ ˆν•œ μ„œλΉ„μŠ€μ˜ μœ„μΉ˜λ₯Ό μ•ˆλ‚΄ ν•  수 μžˆλ„λ‘ Gateway Routing Pattern을 κ΅¬ν˜„ν•˜κ³ , 각 ν˜ΈμŠ€νŠΈλ³„ 쀑볡 κ΅¬ν˜„ λ˜μ–΄ μžˆλŠ” κΈ°λŠ₯을 곡톡화 ν•˜λŠ” Gateway Offloading Pattern을 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 각 ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μœ„ν•œ BFF와 μ™ΈλΆ€μ‹œμŠ€ν…œ 연동을 μœ„ν•œ Gateway λ“±μœΌλ‘œ ꡬ성 될 수 μžˆμŠ΅λ‹ˆλ‹€.

BFF(Backend For Frontend)

UI μ‹œμŠ€ν…œμ„ μœ„ν•œ λ°±μ—”λ“œ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” κ²Œμ΄νŠΈμ›¨μ΄ μ„±κ²©μ˜ μ„œλΉ„μŠ€ μž…λ‹ˆλ‹€. BFFλŠ” λΆ„μ‚°ν™˜κ²½ λ°±μ—”λ“œλ₯Ό μΊ‘μŠν™” ν•˜μ—¬ λ°±μ—”λ“œμ˜ 변경이 ν”„λ‘ νŠΈμ—”λ“œλ‘œ μ „νŒŒ λ˜λŠ”κ²ƒμ„ μ΅œλŒ€ν•œ λ°©μ§€ ν•©λ‹ˆλ‹€.

Gateway

Foundation

도메인 λͺ¨λΈμ—μ„œ κ³΅ν†΅μœΌλ‘œ μ‚¬μš© ν•  수 μžˆλŠ” 좔상화 ν˜Ήμ€ 라이브러리 등이 ν¬ν•¨λ©λ‹ˆλ‹€.

λ©€ν‹°λͺ¨λ“ˆ λ°±μ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜

λ©€ν‹° λͺ¨λ“ˆ λ°±μ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ§€ν–₯ν•˜λŠ” μ΄μœ λŠ” 단일 λͺ¨λ“ˆ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ°œμƒ ν•  수 μžˆλŠ” μ—¬λŸ¬ λ¬Έμ œλ“€μ„ ꡬ쑰적으둜 λ°©μ§€ν•˜κΈ° μœ„ν•¨ μž…λ‹ˆλ‹€.

μš°μ„ , λ°±μ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 역할에 따라 μ—¬λŸ¬ κ³„μΈ΅μœΌλ‘œ λ‚˜λ‰˜κ²Œ λ©λ‹ˆλ‹€. hexagonal architecture λ“±κ³Ό 같이 ν”„λ ˆμ  ν…Œμ΄μ…˜ λ ˆμ΄μ–΄μ—μ„œ 도메인 λ ˆμ΄μ–΄λ‘œ 덜 μ€‘μš”ν•œ 것듀이 더 μ€‘μš”ν•œ 것에 μ˜μ‘΄ν•˜κ²Œ 되고 μΈν”„λΌμŠ€νŠΈλŸ­μ³ κ³„μΈ΅μ˜ κ²½μš°μ—λŠ” μ œμ–΄μ˜ μ—­μ „(IoC)을 톡해 도메인 지식이 뢀가적인 지식에 μ˜μ‘΄ν•˜μ§€ μ•Šλ„λ‘ ν•©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜, 단일λͺ¨λ“ˆ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ κ°œλ°œμžκ°€ μž‘μ„±ν•œ 도메인 지식이 μΈν”„λΌμŠ€νŠΈλŸ­μ³μ˜ ꡬ체적인 κ΅¬ν˜„μ²΄λ₯Ό 의쑴 ν•˜λŠ” 경우λ₯Ό 컴파일 λ‹¨κ³„μ—μ„œ μ œν•œ ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€. λ˜ν•œ IDE의 νŽΈλ¦¬ν•œ μžλ™μ™„μ„± κΈ°λŠ₯λ“±μ˜ 도움을 λ°›μ•˜μ„ λ•Œ λ‚˜λ„ λͺ¨λ₯΄κ²Œ μ˜μ‘΄μ„±μ΄ 잘λͺ» μ„€μ • λ˜μ–΄λ²„λ¦¬λŠ” λ¬Έμ œκ°€ λ°œμƒ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ, μ„œλ‘œ λ‹€λ₯Έ λ§₯락을 κ°€μ§„ 도메인 λͺ¨λΈκ°„ μ½”λ“œ 직접 μ°Έμ‘°λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€. μ•Œκ²Œλͺ¨λ₯΄κ²Œ μ„€μ •ν•œ μ˜μ‘΄μ„±μ΄ μ„œλΉ„μŠ€κ°„ 독립성을 λ–¨μ–΄λœ¨λ¦½λ‹ˆλ‹€.

λ©€ν‹°λͺ¨λ“ˆ λ°±μ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μœ„μ™€ 같은 문제λ₯Ό 높은 ν™•λ₯ λ‘œ 차단 ν•©λ‹ˆλ‹€. λͺ¨λ“ˆ 관리 λͺ…세에 μ˜μ‘΄μ„± λͺ¨λ“ˆλ‘œ λŒ€μƒ λͺ¨λ“ˆμ„ μΆ”κ°€ν•œ κ²½μš°μ—λ§Œ μ°Έμ‘° ν•  수 있으며 μ΄λŠ” μ½”λ“œλ₯Ό μ½λŠ” μ‚¬λžŒμœΌλ‘œ ν•˜μ—¬κΈˆ λͺ¨λ“ˆκ°„ μ˜μ‘΄μ„±μ— λŒ€ν•œ 높은 κ°€μ‹œμ„±μ„ 제곡 ν•©λ‹ˆλ‹€.

λ©€ν‹°λͺ¨λ“ˆ λ°±μ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ gradle둜 κ΅¬μ„±ν•˜λŠ” 방법은 μ—¬κΈ°μ—μ„œ 확인 ν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

이벀트 μ†Œμ‹±

μ΄λ²€νŠΈμ†Œμ‹±κ³Ό κ΄€λ ¨λœ κ²½ν—˜μ€ μ—¬κΈ°μ„œ 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages