서비스의 확장을 고려하여 욜로가 서비스의 기능과 인증의 기능을 아예 분리했었다. 로그인을 OAuth 만으로 구성할 계획이었기 때문에, 클라이언트가 가장 처음 접속할 때 인증 서버에서 OAuth 로그인을 진행하고 이후의 서비스는 각각의 서비스를 제공하는 서버에게 요청하는 과정으로 설계를 했었다.

하지만 예상과는 달리 서비스의 코드와 인증 코드가 완벽하게 분리되지 않았다. 처음 접속하는 사용자는 로그인이 아닌 회원가입을 진행해야 하기 때문에 토큰을 발급받고 MySQL 의 사용자 테이블에 데이터를 생성한다. 또한 로그인 이후 서비스 API 를 요청하면 요청할 때 사용한 토큰이 올바른지 검증해야 한다. 즉, 서비스 서버에서 토큰을 저장하는 Redis 에 접근해야 하고, 인증 서버에서 사용자 정보를 저장하기 위해 MySQL 에 접근해야 한다. 완벽한 역할 분리를 위해 각각의 서버에 또 다른 API 를 구현하여 호출하는 방법도 있지만, 로그인이라는 서비스에 접속하는 가장 첫 단계인데 요청에 대한 응답이 불필요하게 길어질 수 있다는 단점이 있었다.

또한 욜로가 서비스가 아닌 또 다른 서비스가 확장된다면 모든 서비스에서 토큰을 검증해야 한다. 간단한 코드이지만 서비스가 확장되면 확장될 수록 중복되는 코드가 증가한다. 결국 역할도 제대로 분리되지 않았고, 코드의 중복도 빈번하게 발생하는 셈이었다.

따라서 두 가지의 변화점을 두었다.

  1. 인증 파트만 분리하는 것이 아닌 사용자 파트를 분리
  2. 멀티 모듈을 적용
    1. 외부 서버가 아닌 하나의 서버에서 공통적인 부분만 이식하여 사용
    2. 별도의 인증 서버를 구축할 필요가 없어 자원 낭비 최소화
    3. 사용자 관련 모듈은 서브모듈로 관리하기 때문에 중복 코드 최소화

멀티 모듈 적용하기

(작성 필요)