본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.



패스트캠퍼스의 '9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online' 강의 수강 41일차!
오늘은 동영상 컨텐츠 서비스 개발 강의의 프로젝트 구조 및 필요한 기술과 의존성에 대한 학습을 진행하였다.

도메인 로직을 중심에 두고, 외부 의존성을 입출력 포트와 어댑터로 분리하는 헥사고날 아키텍처로 설계하였다.
외부 요청(API 등)이 어댑터(컨트롤러)를 통해 들어오고, 이 어댑터는 애플리케이션 계층의 유즈케이스를 실행한다. 유즈케이스는 도메인 모델과 협력하며 필요한 작업을 처리하고, 데이터 저장이나 외부 API 호출이 필요한 경우에는 아웃포트 인터페이스를 통해 퍼시스턴스 어댑터(JPA, Redis, Kafka 등)를 호출한다.

프로세스 흐름
Redis에 먼저 요청을 보내어 데이터가 있으면 바로 반환하고, 캐시에 저장된 데이터가 없는 경우에는 RDBMS에서 조회하여 Redis에 저장을 시킨 후에 반환이 되도록 한다.
cache hit / miss에 대한 처리는 Spring에서 제공하는 Spring Cache를 이용하면 편리하게 구현할 수 있다.
이번 강의에서는 수동으로 캐시 처리를 구현하는 것과 스프링을 이용하는 것 두 가지 방법을 모두 사용할 예정이다.
주요 기술
Spring + Redis (SpringDataRedis를 구현하여 사용)
- RedisTempate
: Redis Operation에 대응되는 method 제공
- RedisRepository
: Spring Data에서 제공하는 interface로 접근
- @RedisHash
: Spring Data에서 사용하는 Redis에 hash로 저장될 데이터 (JPA의 Entity와 비슷한 개념)
필요한 의존성
- web
- jpa
- redis
- mongodb
- mysql
- (test) test
- (test) h2
- (test) mongodb
- (test) redis
그동안 항상 급하게 시작해서 그런지(ㅎㅎ;;) 프로젝트를 시작하기 전에 이렇게 자세하게 기술과 의존성에 대해 알아보는 건 처음이다.
간단하게나마 배경지식을 깔고 시작하는 것이 좋은 것 같다.