현재 해외에서는 C#의 차세대 트랜디한 아키텍쳐에 대한 토론이 활발함.

JVM 생태계가 전부인 한국에서는 뭐 알 필요도 없는 정보임.

  

  

 

 

기존 - Clean Architecture (Uncle Bob, 2012)

 

Domain → Application → Infrastructure → Presentation 

4개 레이어를 프로젝트 단위로 분리하는 구조 ㅇㅇ.

 

의존성 방향을 안쪽으로만 강제하는 게 핵심임.

이건 스프링의 정석 계층형 구조랑 철학이 비슷함.

(요즘은 도메인 피쳐 단위 묶는게 추세이긴 하다만)

  

  

 

요즘 - Vertical Slice Architecture (Jimmy Bogard)

 

지미 보가드라는 이 양반이 밀고있는 방식임.

이 양반 C# 생태계에서 유명한 사람이고 MediatR 라이브러리 만들었음. 

  

 

핵심 주장이 "레이어 나누기 ㄴㄴ링", "기능 나누기 ㅇㅇ링"임.

Controller에 뭐 GetGallery, PutGallery ... 이렇게 많은 메소드들 있잖우?

이거 자체가 기능 단위니까 걍 컨트롤러 클래스 없이 플레이 즐기자는 말임.



GetGallery라는 기능 하나를 수직으로 잘라서 그 안에 필요한 거 전부 넣음. 

서버리스 느낌으로 애저 펑션이랑 비슷한 느낌 ㅇㅇ.

 

펑션 하나가 트리거, 로직, 바인딩 다 처리하는 것 마냥 슬라이스 하나가

Endpoint/Command/Handler/Response를 다 가지고 있는 구조 ㅇㅇ.

 

  


이 양반의 철학은 결국 컨트롤러의 소멸임;;;;

이 양반이 사짜일지 아닐지는 모르나 일단 철학 자체는 간지임.

 

근데 이거도 C# 진영에서 오바 떨지말라고 하기도 하고 말 많은 구조임.

 

 

AI 딸깍 시각화 ㄱㄱ

   

     

 

 

(Clean Architecture)

2eae8168efc23f8650bbd58b36897d6b89fb

 

레이어가 폴더가 아니라 ".csproj" 프로젝트 단위로 분리됨. 

Domain -> Application -> Infrastructure 의존성 방향.

근데 이걸 컴파일 타임에 물리적으로 강제하는 구조 ㅋㅋ.

 

엔티티는 아무것도 모르는 순수 C# 클래스로 Domain 프로젝트에만 격리.

 

 


(VSA)

2eae8268efc23f8650bbd58b3680756dfe96e9

 

레이어 개념 없음. 

GetGallery, CreateGallery 같은 기능 하나가 슬라이스 하나. Endpoint/Command/Handler/Response가 한 폴더 안에 수직으로 묶임. 

 

엔티티는 슬라이스들이 공유하는 도메인 폴더 바로 아래에 위치.

(주황색 글자)

 

  


근데 VSA 이게 "갤러리에서 뭐 포스트를 참조한다거나 그러면 어케 할건데? ㅡㅡ"

뭐 이런거 커뮤 논쟁에서 이야기 많이 나오고 그럼.

 

그래서 지금 흐름은 타협한 방식으로 Entities는 기존처럼 다른곳 빼두는 형태로 가는중임.

해외는 C# 쓰는 곳이 많다보니 신규 플젝에 VSA 도입하는 곳 심심찮게 있긴함.

 

아직 까지는 얼리어답터로 신규 프로젝트 위주로 퍼지는 중인데 이게 레거시 대형 기업에도 넘어갈지가 관전 포인트임.

 

이런거 도입하다 만약 실제 사용해봤더니 편하거나 좋으면 좋겠다만,

만약 개구리(점프하는 그 양서류 ㄴㄴ)면 그냥 회사에서 트롤되는거임 ㅋㅋ