Osori 권한관리 플랫폼

오소리란?

인증(Authentication)과 인가(Authorization)중 Authorization부분을 담당하며 권한 관리를 쉽게 해주는 플랫폼으로 UI형태의 관리 페이지와 라이브러리를 제공함으로써 최소한의 비용으로 연동할 수 있도록 개발되었습니다. Google Admin Console [Osori-Admin 메인화면]

탄생배경

서비스 아키텍쳐가 모놀리틱 아키텍처에서 마이크로 서비스 아키텍처 (aka. MSA)방식으로 전환되면서 기존 백오피스 어플리케이션도 물리적으로 분리가 불가피했습니다. 여기서 문제는 각 서비스별 백오피스가 떨어져 나오면서 각자 권한을 관리해야하는 이슈가 생겼습니다. 한팀에서 관리하는 어플리케이션이 여러개인 경우가 많아서 물리적으로 떨어져 있지만 공통적으로 관리를 해주는 무언가가 필요하게 되었습니다.

Google Admin Console [마치 이런느낌처럼(?)]

기술구성

  • 언어 : JDK1.8 (클라이언트 JDK1.7)
  • 프레임워크 : Spring Boot 1.4
  • ORM 프레임워크 : Spring Data JPA

모듈구성

Google Admin Console [모듈 구성도] Osori는 총 3개의 모듈로 구성되어있습니다.

  • Osori-Admin
    FreeMarker+SpringBoot+JPA로 만들어진 모듈로써 가장 큰부분을 담당하고있으며 아래와 같은 기능을 담당합니다.
    • UI기반의 관리페이지
    • 관리페이지의 내부 액션을 처리하기위한 API 제공
    • 외부로부터 권한체크 상호작용을 위한 API 제공
  • Osori-Client-Core
    osori-admin과 연동을 담당하는 클라이언트 라이브러리로 URI기반 혹은 osori-admin에서 설정한 URI의 id값으로 권한체크를 지원합니다.
  • Osori-Client-Spring
    Spring기반의 프로젝트를 위한 라이브러리로 Interceptor, Filter형태로 제공되어 osori-admin과 연동을 지원합니다.

동작방식

동작방식은 간단합니다. 서버에 요청을 보내기전에 먼저 Osori에 유저ID와 접근할 URL을 파라미터로 전송하면 Osori에서는 URL에 대한 접근 유효성을 판별후 결과값을 리턴하게됩니다. Google Admin Console [동작흐름도]

개선하고 싶은것

심플함을 지향하면서 개발했지만 기능적으로 부족한 부분이 많습니다. 여유가 생기면 OAuth도 붙이고 LDAP도 붙이고 점점 기능들을 추가해가면서 나중에는 계정을 총괄하는 시스템으로 진화하는게 최종 목표입니다만…개인적으로 먼저 개선하고 싶은건 Osori-Admin에 있는 front layer를 React나 Angular같은 UI프레임워크로 교체를 하고싶네요 (이게 제일 시급합니다ㅜㅜ)

끝으로

Osori는 사내 표준 개발언어가 자바로 바뀐이후로 제가 처음으로 개발한 어플리케이션 입니다. 기획단계때만 해도 복잡한 로직이 필요한게 아니니깐 금방 끝나겠구나 라고 생각했었습니다. 외부 혹은 타팀에 제공목적을 두고 개발을 해야 했기 때문에 특정 플랫폼에 의존성을 낮추고 최소한의 설정으로 구동이 가능하게끔 해야했고 삽질도 많이하다보니 의외로 시간이 걸렸던 프로젝트였습니다. 끝으로 개발하면서 개발방법과 팁 그리고 아낌없는 조언을 해주신 서오석 선임님께 감사하다는 말을 전하고싶습니다 :)

Github