기본적인 CI/CD 구축에 앞서, 서버에서 사용할 MySQL 컨테이너를 EC2 Linux 서버에 띄우고 Spring Application과의 Connection을 확인할 것입니다. MySQL 컨테이너 실행 MySQL 컨테이너를 실행하기 위하여 최신 버전을 pull
Reach Rich 프로젝트에선 MSA 환경에서 효율적으로 사용자의 세션을 관리할 수 있도록 Redis를 Session Storage로 이용합니다. (CQRS 패턴을 사용할 것이기 때문에 Cache로 이용할지 여부는 아직 미정...) 따라서 Redis 컨테이너를 실행시켜 Spring Application과 연결시켜봅니다. Redis 컨테이너 실행 Re...
PR 시 해당 커밋이 반영될때 빌드 가능함을 확인할 수 있다면, Merge 시킬지 여부를 판단할 수 있는 좋은 지표가 될 것입니다. 따라서 저는 GitHub Action을 사용하여 Reach Rich 프로젝트에 PR 시 빌드시키는 Action을 추가하여 성공, 실패 여부를 확인 가능하게 구현하려 합니다. Secret Yaml과 같은 특정 Config ...
이번 시간에는 GitHub Action과 Docker를 사용한 CD를 구축하겠습니다. Deploy는 EC2 Linux 서버에 진행됩니다. 하나의 서버에 각 Micro Service Container를 띄우는 형식의 MSA를 구축할 것이므로 앞단에 SSL(TLS)을 적용하고 각 컨테이너에 요청을 분배하는 무언가를 붙여야되지만, 우선 사용자 애그리거트를 개...
어느정도 CI/CD 구축이 끝났고 본격적인 개발의 첫 단추로 로그인 기능을 구현해보겠습니다. Spring Security와 Redis Session을 이용한 로그인, 로그아웃, 회원가입 등을 개발해봅시다! Spring Redis Session 설정 RedisConfig.java @EnableRedisHttpSession 어노테이션을 통해 Redis를...
이전 시간에 로그인 관련 기능들을 개발했습니다. Filter 단에서 세션 인가에 성공하지 못하면 Filter Chain에 등록해준 Denied Handler에 의해 Error Response가 나가겠지만, Spring 내부에선 단순 RuntimeException을 던져줬기 때문에 500 에러가 발생할 것입니다. Exception이 발생할 수 있는 모든 ...
Reach Rich 프로젝트의 서버 개발과 인프라의 모든 것을 혼자서 해결하고 있기 때문에 Pull Request 절차 없이 Push해도 아무도 절 막을 수 없습니다...ㅎㅎ 하지만 Issue에 대한 Self PR을 진행하면서 약간의 자기 회고를 곁들인다면, 나중에 참고할 수 있으므로 개발 과정에서 혼자 놀기 장인의 면모를 보여주기로 했습니다 :D 그래...
이메일을 아이디처럼 사용하는 서비스에서 이메일 인증 없이 계정 생성이 가능하다면, 무분별한 계정 생성이 가능할 수 있습니다. 따라서 회원가입 기능에 이메일 인증을 붙여보고자 합니다. 사용한 기술 스택은 Redis Session, spring-boot-starter-mail, Google SMTP Server 입니다. 이메일 전송을 위한 Config ...
Reach Rich 프로젝트에서 Redis Session을 사용한 인증/인가를 구현한 뒤, 이 방법이 정말 효율적일까? 라는 의문이 들었습니다. 각 MS가 모두 Spring Security 의존성을 가져야 한다는 점 결국 Stateless 하지 않아 REST API라 해도 될지? 요즘 아주 핫한 ChatGPT에게도 물어봤습니다. 의문과 별개로 동일한 ...
전통적인 계층형 아키텍처의 문제점 전통적인 계층형 아키텍처의 경우 데이터베이스 주도 설계를 유도합니다. 이는 의존성이 영속성 레이어로 향하기 때문인데요, 웹 레이어는 도메인 레이어에, 도메인 레이어는 영속성 레이어에 의존성을 갖습니다. > 또한 의존성이 아래로 흐