https://www.jetbrains.com/ko-kr/idea/download/
IntelliJ IDEA 다운로드
www.jetbrains.com
프로젝트 만들기
Intellij 에 Google Java Style 적용 시키기
- https://github.com/google/styleguide 페이지 에서 intellij-java-google-style.xml 파일을 다운로드
- File > Settings > Editor > Code Style > Java (Window)
- Intellij > Settings > Editor > Code Style > Java (Mac)
CH03. 클린 아키텍처를 활용한 커뮤니티 피드 서비스 설계
01. 도메인과 클린 아키텍처
소프트웨어 아키텍트란?
소프트웨어 아키텍트는 시스템의 전체적인 구조를 설계하고, 기술적 방향을 이끄는 역할을 합니다. 이 과정에서 ‘클린 아키텍처(Clean Architecture)’는 유지보수와 확장성을 고려한 핵심 설계 방식으로 주목받고 있습니다.
클린 아키텍처의 핵심: 유연성과 비용 절감
클린 아키텍처는 개발 비용을 줄여줍니다.
그 비결은 바로 ‘선택지를 넓히는 설계’ 에 있습니다.
유연성 있는 아키텍처는 다양한 변화 상황에 효과적으로 대응할 수 있게 도와줍니다.
즉, 특정 기술에 종속되지 않고, 변경에 강한 구조를 만드는 것이 핵심입니다.
컴포넌트(Component)란?
컴포넌트는 시스템을 구성하는 배포 가능한 최소 단위입니다.
- 실행 가능한 JAR 파일
- 실행 불가능한 라이브러리 JAR 파일
두 가지 형태로 나눌 수 있습니다.
고수준 vs 저수준 컴포넌트
고수준 컴포넌트 | 핵심 비즈니스 로직을 포함 | 서비스, 도메인 레이어 |
저수준 컴포넌트 | 입출력, 외부와의 연결 중심 | 컨트롤러, 레포지토리 등 |
고수준 컴포넌트는 저수준 컴포넌트에 의존해서는 안 됩니다.
이유는? 저수준은 변화가 잦기 때문입니다.
예를 들어, 커뮤니티 피드 서비스에서 핵심 기능인 “글 작성”은 자주 바뀌지 않지만,
사용자 수가 늘면서 DB 구조는 캐시 도입, 테이블 분할 등으로 빈번히 바뀔 수 있습니다.
의존성과 DIP (Dependency Inversion Principle)
- A → B 는 A 클래스가 B 클래스에 의존한다는 의미입니다.
- 클린 아키텍처에서는 의존성이 반대로 흐르도록 설계해야 합니다.
즉, 저수준이 고수준을 의존하게 만드는 구조로 바꾸어야 합니다.
이때 사용하는 것이 인터페이스(interface) 입니다.
이를 통해, 비즈니스 로직은 어떤 DB를 쓰든 영향받지 않게 됩니다.
즉, 설계 단계에서 비즈니스 로직을 먼저 만들고, 나중에 DB를 자유롭게 선택할 수 있게 되는 구조입니다.
의존성은 ‘밖에서 안으로’ 흐른다
클린 아키텍처의 규칙:
의존성은 항상 바깥 계층에서 안쪽 계층으로 흐른다.
반대로 흐르면, 유연성과 유지보수성이 크게 떨어집니다.