토이프로젝트 발자취(2_0.구현 계획)

0
post-thumbnail

구현 계획

사전 설계는 잠정 종료로 이제는 실제 개발 단계로 넘어갈 차례가 되었다.
구현에 앞서서 몇가지 계획과 그 이유를 적어보려고 한다.

인증 & 인가 구현

회원가입과 로그인에 관련된 부분은 전적으로 Oauth2.0을 사용한다. 요즘 많은 사이트들이 자체 회원 가입기능이 없는 추세이며, 간편회원 가입을 지향, 개인정보수집은 지양 하고 있는 상황이다. 그리고 기능 개발적인 측면에서 어느사이트나 비슷한 회원가입 로직을 또 만들 필요는 없다는 내 생각이다. 그리고 Java에서 인증과 인가에 관련된 기능은 Spring Security에 이미 다 구현이 되어있다. 이 Spring Security에서 Oauth2.0를 통한 인증도 비교적 쉽게 구현 할 수 있다.
Oauth2.0을 사용하면 Access Token이라는 것을 발급 받고, 이를 검증 해서 접근이 가능한지 여부를 판단 할 수 있다. 이 정보를 서버측에서 관리하게 된다면 안전하게 처리 할 수는 있지만 마이크로 서비스와 같은 경우는 이런 데이터를 모두 공유할 필요가 생기며, 따라서 이것을 한 곳에서 관리 할 수 있게 할 인증과 인가를 위한 별도의 중앙 서버가 필요하다. 마이크로서비스이거나 서버간 통신이 잦은 경우 결국 서버의 과부하가 발생할 수도 있어 이 해결책으로 JWT(JSON Web Token)를 통한 방식을 사용한다고 한다.

나의 이전 실무 경험에서는 JWT를 굳이 구현할 필요가 있나라는 생각이 들었는데, 통합 플랫폼에서의 공통 인증 & 인가를 구현 하거나, 마이크로 서비스의 구조나 많은 사용자가 접속하는 사이트와 같은 경우라면 JWT가 합리적인 선택지라는 생각이 들었다.
이전까지는 단순 세션방식을 통한 기능밖에 사용해 보지 않았었다. Redis를 연습해 보면서 Redis를 세션서버로 쓰고, 나름의 토큰 방식을 통한 인증 구현 정도는 연습 해 보았는데 JWT를 통한 방식은 한 번도 구현 해 본적은 없어서 더 사용해 보고 싶은 마음이 생겼다.
그리고 어느 순간부터 JWT가 백엔드에서 인증 & 인가는 기본기인것 처럼 블로그 글들을 많이 보기도 했다.

MSA 구조 및 내부 설계구조

사용자, 관리자, 챌린지, 소셜 이라는 4개의 바운디드 컨택스트를 나누고, 이 경계대로 4개의 서비스를 만들고 구현하려고 한다. 우선은 이 경계를 나눈 것 자체가 나 조차 경계가 명확하게 인식을 하고 나눈건 아니라서, 아마도 소셜 서비스는 다른 곳에 흡수될 가능성도 예상한다.
DDD에서 애그리거트 루트 개념과 트랜잭션 처리의 용이성 등을 구현 시점에서 다시 판단하면서 경계를 고민해 볼 예정이다.

그리고 코드 구조는 사용자 서비스의 경우는 레이어드 아키텍처로, 챌린지 서비스의 경우는 헥사고날 아키텍처로의 구현을 예정하고 있다.
사용자 서비스의 경우는 회원 가입과 로그인, 프로필 기능 등을 담당하는데, 처음의 정책과 로직이 큰 변경점 없이 그대로 이어질 가능성이 아주 높기 때문에 레이어드 아키텍처를 상정했다.
챌린지 서비스의 경우는 원래 같으면 동일하게 레이어드 아키텍처로 구현 해도 전혀 문제가 없겠지만 (복잡도가 높지 않다) 사전 기획때의 인지 했던 것 처럼 학습 목적으로 헥사고날 아키텍처로 과도한 설계와 그 구조로 구현할 예정이다.
나머지 서비스인 관리자와 소셜 부분은 먼저 2개의 서비스를 구현 해보고 어떤 구조로 만들지 나중에 고민 해 볼 예정이다.

운영환경 구축

최종 목표는 Kubernetes 환경에서의 배포를 한다.
하지만 나에게 비교적 익숙한 AWS 환경에서의 운영 환경에서 선 배포 및 운영을 거치고, 이후에 쿠버네티스로의 환경 구축으로 점진적으로 넘어가려고 하고 있다. 아무래도 관련 지식이나 경험이 적은편이기도 하고, 상대적으로 저렴한 DigitalOcean에서의 쿠버네티스 클러스터를 통한 운영을 예상하지만, 최대한 운영 비용을 줄이고, 지불 시점을 늦추려는 목적이 있다.
그래서 우선은 SpringCloud를 통해 비교적 쉽게 MSA구조를 완성시키고자 한다.
예전에 MSA와 관련된 강의를 보면서 연습용 프로젝트를 만들어본적이 있는데 마침 최근의 SpringBoot와 SpringCloud 버전으로 강의가 업데이트 되었다.
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) [인프런- Dowon Lee ]

해당 강의를 리마인드 하는 겸, 우선은 SpringCloud로 MSA를 먼저 구축 해 보기로 하고, 서비스를 선 배포 후, 추후 관리형 쿠버네티스 서비스로 다시 배포 및 모의 운영을 하는 것을 목표로 하고자 한다.

profile
오늘도 머릿속에 인덱스를 새겨넣는 개발자

0개의 댓글

관련 채용 정보