2022.04.09
일일 회고 57회차
할일 및 한일
경험 및 배움
논문 세미나 발표
논문 세미나를 준비하면서 진행한 것들에 대해 발표를 했으며, 해당 내용들은 다음과 같다.
Spring Cloud Gateway 공식 도큐먼트 정리
HTTP Caching 정리
졸업 논문의 시스템 아키텍처 및 캐싱 과정 설계
이러한 내용을 토대로 발표를 진행한 후, 교수님이 '아키텍처를 봤을 때 캐싱이 정확하게 어떻게 수행되는지 이해가 잘 안된다' 라고 하시면서 간단하게 프로젝트를 만들어오라는 피드백을 주셨다.
또한 다른 석사생은 'Gateway에서 사용자의 쓰기 요청을 In-Memory DB에 저장하여 RDB로 매핑시키는 것은 API Server의 역할을 하고 있는거 같다' 라고 피드백을 받았다.
해당 질문을 받았을 때는 제대로 답변을 하지 못 했으나, 지금 생각해보니 API Server의 역할이 분할됨으로써 유지보수는 어려워질 수 있으나 성능이 향상되므로 트레이드 오프라는 생각이 들었다.
아키텍처 세미나 청강
이번 아키텍처 세미나 시간에는 졸업하신 선배님이 Hexagonal Architecture 기반으로 예제 프로젝트를 만든 것을 실습을 통해 다같이 구현해보는 것을 진행했다.
해당 실습을 모두 수행한 후 완료된 프로젝트를 GitHub에 올려놨으며, 프로젝트의 저장소는 다음과 같다.
이번 실습을 진행하면서 보통 웹 애플리케이션을 구현할 때의 Architecture와 Hexagonal Architecture의 차이점에 대해 생각해보게 되었다.
내가 구현한 모든 웹 애플리케이션 프로젝트는 Controller가 Service에게 클라이언트의 요청을 전달하고 Service는 Repository를 통해 데이터를 저장하거나 조회하는 형태인 Layered Architecture이다.
Hexagonal Architecture 기반의 예제 프로젝트와 지금까지 구현한 프로젝트를 비교하며 살펴봤을 때 가장 큰 차이점은 다음과 같다.
Layered Architecture를 예로 들면, Controller와 Service 그리고 Repository가 전혀 의존하지 않도록 반드시 중간에 Interface를 두고 요청을 전달하도록 구현
데이터베이스의 테이블과 직접 대응되는 엔티티 클래스와 비즈니스 로직을 처리하는 도메인 클래스를 분리하여 구현
이처럼 구현하면 어떠한 이점이 있을지 고민해본 결과는 다음과 같다.
구현체가 아닌 Interface를 활용하므로 테스트 코드 작성과 협업에 용이하다.
비즈니스 로직을 영속화 객체와 분리시킴으로써 영속화 라이브러리를 교체하기에 용이하며 비즈니스 로직과 데이터베이스의 의존성을 줄일 수 있다.
Hexagonal Architecture은 구조가 복잡해진다는 단점이 존재하지만, 그에 비해 추후의 유지보수를 고려해보면 얻는 이점이 더 크다고 생각이 든다.
배터리 관제 시스템의 백엔드 구현을 진행하게 되면 Hexagonal Architecture를 토대로 구현해볼 예정이다.
개선 및 목표
논문 주제 관련 프로젝트를 간단하게 구현하기
배터리 관제 시스템에 Hexagonal Architecture 적용하기
Last updated