-
[알림 서비스] 클린 아키텍처STOVE DEVCAMP 3기/알림 서비스 2023. 3. 10. 03:35
1) '좋은 아키텍처란 무엇일까?' 에 대해 고민하게 된 배경
- 코드의 가독성을 높이고 싶다.
- 백엔드 팀원들, 멘토님 등 해당 서비스 구현에 참여하지 않은 사람이 봤을 때 쉽게 구조를 파악할 수 있도록 하기 위함
- 확장성 있는 구조 및 코드를 작성 하고 싶다.
- 이번 데브캠프 기간동안의 개인 목표 중 하나로 '기존 선택 및 구현이 최선인지 고민하여 점진적으로 개선해나가는 태도 갖추기'를 선정함
- 이를 실현하기 위한 방안 중 하나가 현재 시스템 설계의 단점을 보완하고 확장 가능한 포인트를 찾아 이후 개선을 수행하는 것이라고 생각했음
- 이러한 점을 고려하면, 데이터베이스 등과 같은 외부 시스템에 의존하지 않고 쉽게 기능 및 구성을 확장할 수 있는 구조가 필요하다고 생각함
- 테스트코드 작성이 편리했으면 좋겠다.
- 이번 데브캠프 기간동안의 개인 목표 중 하나로 '테스트코드를 작성하여 요청에 대한 정확한 응답 보장하기'를 선정함
- 이를 위해 서비스 구현 시 클래스 간의 의존도를 낮춰 테스트코드를 빠르게 작성할 필요가 있다고 생각함
2) 클린 아키텍처 도입 시 고려한 점
- 클린 아키텍처는 추상적인 개념이고 정답은 없다고 생각함
- 처음부터 완벽한 설계는 없고, 점진적으로 리팩토링하며 맞춰가는 것임
- 관련된 코드의 구조를 보고 일단 구성해보자
- 서비스 구현 이후에 구조를 리팩토링하기에는 어려움이 있다고 생각해, 서비스 개발 전 아키텍처를 우선 수립하는 것이 필요하다고 생각함
3) 클린 아키텍처 도입 상세
기본 구성 및 적용 예시
패키지 구조
- 헥사고날 아키텍처를 기반으로 비즈니스 로직을 포함한 내부 영역과 외부 영역을 분리하였고, 이를 기반으로 테스트코드 필수 작성 부분을 지정해 구현해가고 있음
- 포트는 내부 비즈니스 영역을 외부 영역에 노출한 인터페이스로 Input/Output Port로 구분하였고, 어댑터는 외부 서비스와 포트 간 데이터 교환을 조정하는 클래스로 Input/Output으로 구분하였음
- 위와 같은 구조를 바탕으로 이후 알림 서비스 구조 개선 시 비즈니스 로직은 변경하지 않으면서 데이터베이스 등과 같은 외부 시스템에 의존하지 않고 쉽게 기능 및 구성을 확장할 수 있을 것이라고 생각함
참고
http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
https://engineering.linecorp.com/ko/blog/port-and-adapter-architecture/
https://mesh.dev/20210910-dev-notes-007-hexagonal-architecture/
느낀점
- 클린 아키텍처의 목적에 맞게 코드를 의식하면서 작성할 수 있게됨
- 비즈니스 로직과 외부 요소와의 결합도를 낮춰 유지보수와 확장이 쉬운 구조 수립의 중요성을 알게 됨
'STOVE DEVCAMP 3기 > 알림 서비스' 카테고리의 다른 글
[알림 서비스] 테스트 코드 작성 (0) 2023.03.10 [개념] Kafka 컨슈머 (0) 2023.03.10 [개념] Kafka 리밸런싱 (0) 2023.03.10 [알림 서비스] 알림 서비스 구조 개선 방향 수립 (0) 2023.03.10 [알림 서비스] 알림 서비스 구조 개선 - 대량의 알림 데이터 처리를 위한 장기적 관점의 확장 가능한 구조 설계 (0) 2023.03.10 - 코드의 가독성을 높이고 싶다.