현재 컴퓨터공학과 4학년에 재학중인 나는 캡스톤디자인을 진행하고 있다.
알고리즘 문제풀이를 제외한 마지막으로 블로그를 작성한 지 엄청 오래됐는데 이제 부터 블로그를 통해 내가 학습한 것들을 기록하고자 한다.
원래 Notion을 통해 블로그를 작성하려고도 생각해봤는데 무료 버전은 5MB가 최대라고 해서 그냥 velog를 통해 블로그를 작성하기로 했다!
현재 진행하고 있는 프로젝트는 MSA를 적용한 클라우드 기반 온라인 소셜 네트워크 플랫폼이다.
아직 기존 MA 방식의 프로젝트도 한번도 해본적이 없는데 처음부터 MSA 기반의 프로젝트를 진행하는게 맞나 싶긴하다.
아무튼 현재 나는 이 프로젝트에서 백엔드 파트를 맡았다.
일단 위의 그림과 같이 애플리케이션을 구성할라고 생각한다. 사용해야될 기술들이 참 많다.. MSA를 구성하기 위해 Spring Cloud를 사용할 것이며 개발이 완료되면 CI/CD 무중단 배포도 한번 도전해보고자 한다.
현재 4학년 18학점 전공 6개를 듣고 있는 나로써는 정신이 나갈 것 같지만 2023년은 그냥 죽었다 생각하고 개발에 몰두하고자 한다..
기초적인 REST API 명세서, ERD 작업을 해놨다.
이런 팀 프로젝트가 처음인지라 REST API, ERD 모두 개발을 진행하면서 계속 변경이 이뤄지고있다..
요구사항을 명확히 하고 개발을 진행했어야 했는데, 우리 팀원 모두 이런 팀 프로젝트가 익숙하지 않은 탓에 이런 시행착오가 생기는 것 같다. 이렇게 성장해 나가는거 겠지..?
위에서 말했다 싶이 Spring Cloud를 통해 MSA를 구축하고 있다.
현재 MSA를 구축하기 위해 사용한 기술은 크게 3개가 있다고 볼 수 있다.
물론 분산 처리 모니터링 메시지 큐잉 서비스를 통한 데이터 동기화 등 다른 기술들도 있겠지만 내가 생각했을 때 핵심은 아래 3가지라고 생각한다!
먼저 Spring Cloud Eureka는 마이서비스들의 레지스트리 역할을 한다. 즉 마이크로서비스들이 자신의 정보를 Eureka 서버에 등록하면, 클라이언트는 Eureka 서버를 통해 필요한 마이크로서비스를 찾아 사용할 수 있다.
다음으로, Gateway는 마이크로서비스들을 외부로 노출시켜주는 역할을 한다. 클라이언트는 Gateway를 통해 필요한 마이크로서비스로 접근할 수 있다. 이를 통해 클라이언트와 마이크로 서비스간의 직접적인 통신이 아닌, Gateway를 통한 간접적인 통신을 통해 보안성과 확장성을 높일 수 있다.
💡 Gateway를 통해 Load Balancing 기능을 쉽게 적용할 수 있다. 클라이언트가 요청한 API를 처리할 수 있는 여러 대의 마이크로서비스가 있다면, Gateway는 이러한 마이크로서비스들 중에서 가장 적합한 서비스를 선택하여 해당 서비스로 요청을 전달한다.
마지막으로, Config는 마이크로서비스의 설정 정보를 중앙에서 관리하는 역할을 한다. 각 마이크로서비스들은 Config 서버에서 설정 정보를 가져와 사용하게 되며, 이를 통해 설정 정보의 일관성을 유지할 수 있고, 각 마이크로서비스가 독립적으로 동작하게 할 수 있다.
💡 설정 정보를 업데이트할 시 RabbitMQ를 통해 서버 재실행 없이 설정 정보를 적용할 수 있다!
현재 apigateway-service, discovery-service, config-service를 구축해 놓은 상태이다.
새로운 마이크로서비스를 추가할 때 마다 Eureka에 등록을 하고 위의 apigateway-service의 application.yml 파일에 해당 서비스를 등록할 수 있다!
일단 지금 진행하고 있는 캡스톤은 대략 이렇게 진행하고 있다.
캡스톤은 3월달 부터 시작을 했는데, 기록없이 공부 -> 기능 구현 -> 공부 -> 기능 구현을 하다보니 남는게 없는 느낌이 들었다..
제대로 된 프로젝트가 없는 나로써는 이번 캡스톤디자인이 상당히 중요하기 때문에 이제부터라도 캡스톤디자인을 하면서 공부한 것들 트러블슈팅들을 기록하고자 한다!
다음 글은 아마 이미 구현은 완료한 user-service에 대해 리뷰하고자 한다. Spring Boot, Spring Security, JWT, Redis를 통해 사용자 인증을 해나갔던 이야기들을 풀 것이다.