1. 들어가며최근 회사에서 선박 단말(클라이언트)이 보낸 요청을 육상에 있는 해양 서비스(외부 API)의 HTTP 인터페이스로 중계하는게이트웨이 서비스 개발 중 발생한 이슈와 이를 해결하며 알게된 점을 정리해보려고 합니다.어느 날 "요청한 데이터와 다른 데이터가 온다"는 제보를 받았는데, 로그를 아무리 들여다봐도 어느 요청의 로그인지 알 수가 없었습니다.동시에 여러 요청이 처리되는 줄이 뒤섞이고, 어느 응답이 어느 요청의 것인지 짝지을 방법이 없었습니다.이 글은 그 문제를 어떻게 풀었는지에 대한 기록입니다. 2. 게이트웨이 서비스 소개이 게이트웨이는 성격이 다른 두 프로토콜을 잇는 중계자 역할을 합니다.클라이언트 사이드: 선박 단말과는 websocket 기반의 binary format으로 이루어진 메시징..
마이크로 서비스 아키텍처를 처음 설계해보면서 많은 시행착오를 겪었다.1편의 초기 설계 당시(현재는 수정되었지만) auth service는 존재하지 않았지만 추가되었다.이번 글에서는 어떤 이유로 auth service를 추가하여 keycloak을 내부로 숨기는 구조를 만들었는지에 대해 정리해보려고 한다. 1. 초기 설계이 프로젝트의 초기 설계 당시에는 위의 다이어그램에서 볼 수 있듯클라이언트가 로그인이 필요할 때 Keycloak의 로그인 페이지로 직접 리다이렉트되고Keycloak이 토큰을 발급하면 클라이언트가 이를 받아 각 서비스에 요청을 보내는 구조였다. 구현이 단순하고 Keycloak이 제공하는 기능을 그대로 활용할 수 있다는 장점이 있었다. 2. 문제를 느끼기 시작한 순간실제로 구현을 시작하면서 몇..
지난 글의 마지막에 마이크로서비스 아키텍처에서 서비스와 서비스 간의 데이터 교환 및 처리에 대한 부분을 문제로 남겼다.이번 글에서는 플랫폼 내의 이벤트 흐름을 소개하고 선택 가능한 기술들, 특정 기술의 선택 이유와적용 방법에 대해 다뤄보려고 한다. 1. 이벤트 흐름 플랫폼의 서비스 간 이벤트는 크게 네 가지 흐름으로 구성된다. 이메일 인증 완료 이벤트사용자가 회원가입 후 이메일 인증을 완료하면 Keycloak 내부에서 이메일 인증 완료 이벤트가 발생한다.Keycloak SPI가 이 이벤트를 감지하여 keycloak.email.verified 토픽으로 이벤트를 발행하고 Auth Service가 이를 구독하여 처리한다. 사용자 등록 이벤트Auth Service는 keycloak.email.verified 이..
KeycloakKeycloak은 OAuth2.0 / OIDC 기반의 오픈소스 인증 서버로SSO, MFA, Social Login 등을 쉽게 구현할 수 있다.Keycloak을 선택한 이유는 우선 Java라는 언어로 쓰여진 오픈소스기 때문에 Java Backend 개발자인 나에게 조금 더 익숙한언어로 쓰여 있고 무엇보다 인증/인가라는 시스템을 외부로 분리하고 각 서비스에서는 로그인, MFA, Social Login, 세션 관리와 같은 문제를 개별 서비스가 구현하지 않아도 되기 때문이다. 프로젝트 목표이 프로젝트의 목표는 단순히 Keycloak을 통한 인증, 인가, SSO, MFA, Social Login 적용이 아니라더 나아가 Keycloak이라는 인증/인가 시스템과 여러 서비스가 어떻게 분리되고 협력할 수..