좌충우돌 실전 프로젝트 개발 스토리
우아한형제들의 배민B2C개발팀에서 서비스 개발을 맡고 있는 이수홍입니다. 이번에 제가 맡게된 통합인증 프로젝트를 진행하면서 좌충우돌 겪었던 이야기를 들려 드리고 싶어서 이렇게 글을 적어봅니다.
입사 후 첫 프로젝트
입사 후 드디어 프로젝트를 맡게 되었습니다. 그것은 다름 아닌 통합인증 프로젝트!
이 프로젝트가 진행된 계기가 사내에서 "배달의 민족" 서비스뿐만 아니라 "배민프레시", "배민라이더스", "배민쿡" 등 여러 가지 서비스들이 생기고 성장함에 따라 인증을 통합할 수 있는 서비스의 필요성이 생겼기 때문이었습니다.
저 같은 경우 그전까지는 보통 B2B 시스템 개발과 프로젝트 초기의 애플리케이션 베이스 구성과 공통 개발 등을 담당하는 역할을 했었습니다.
그래서 많은 트래픽이 있는 B2C 서비스의 개발을 실질적으로 처음 맡게 부분이어서 "잘 해야겠다"는 마음과 "잘할 수 있을까"등의 부담을 가졌었습니다.
AWS를 사용하여 인프라 구성, CI 구성, APM 시스템 연동, 기존 시스템 분석, 애플리케이션 설계 및 개발, 관리자 시스템 개발 등 기존에는 딱 정해져 있던 임무에서 범위가 많이 넓어지게 되었습니다.
프로젝트의 시작
처음에는 인증 시스템이라는 부분과 팀장님과 같이 이야기하면서 요구사항 등을 파악했었습니다.
당시 어떤 인증 시스템을 구축할지 의논했을 시 로그인 API와 공통 로그인 화면, 그리고 여러 가지 서비스와의 연동 등을 생각했을 때를 생각해서 OAuth2 형태의 시스템이 가장 최적이라고 생각했었습니다. 그렇게 시스템 형태를 결정한 후 저의 경험대로 프레임워크를 구성 -> (요구 분석에 따른) 데이터 모델링 -> 인증시스템 개발 -> API 개발 순서로 진행했습니다.
프로젝트의 난항
인증 시스템이 만들어지면서 기존 시스템에 연동하는 작업을 시작하게 되었습니다. 문제는 여기서 발생하기 시작했습니다.
기존 시스템의 회원 구조를 분리해서 새로 만들어진 인증 시스템과 연동이 시작되면서 기존 시스템의 보이지 않던 문제가 점점 발견되기 시작했습니다. 현재 설계에서 고쳐지지 않는 구조적 문제를, 정해진 일정 내에서는 해결할 수 없다는 결정이 내려지게 되었습니다. 그렇게 프로젝트는 잠시 중지되고 기존 시스템을 설계 부분을 고치더라도 그 부분을 해결해야 되는 숙제가 생겼습니다.
다시 프로젝트 구성원들이 서로 모여서 왜 그 부분을 미리 발견할 수 없었는지 등 현재 프로젝트가 무엇이 문제였는지 다시 한번 이야기를 하게 되었습니다. 서로 간의 현재 프로젝트의 인식들을 다시 맞추고 새롭게 시작하였습니다.
시스템 오픈
프로젝트 참여원들의 고생과 우여곡절 끝에 기존 인증 부분의 아키텍처를 고치고 나서 프로젝트는 다시 진행하게 되었습니다.
기존 시스템에서 숨겨져 있던 기존 버그까지 수면 위로 올라오는 것을 목격하면서 새롭게 시스템 만드는 것보다 기존 시스템의 변경 비용이 확실히 크다는 것이 몸소 느껴졌습니다.
대부분의 프로젝트가 그렇듯이 막판에는 자잘한 버그와 변경된 정책의 검증, 인증서버 특성상 보안 문제, 현 시스템과 연동 테스트, 기존 회원 정보 이관 문제, 운영서버 환경 결정, 애플리케이션의 성능 테스트, 병목지점에 대한 수정과 캐시 설정, 데이터 이관 등등 바쁜 나날을 보내고 시스템을 (평탄치는 않았지만) 오픈하였습니다.
[보이지는 않지만 중요한 이부분]
회고
우여곡절 끝에 마무리된 프로젝트였지만 지금 생각해보면 미리 초반 생각했었으면 좋았을 것 같은 부분을 적어 보았습니다.
- 첫 번째. 기존 시스템의 대한 분석
- 인증 시스템에서 기존 시스템의 인증 부분만 교체하려는 생각을 했었습니다.
- 기존 시스템의 부분은 최대한 변경하지 않고 해결하려고 했습니다. (작업 범위에 대한 명확하지 않았던 부분)
- 두 번째. 일정과 시스템의 스펙
- 생각해보면 이 일정과 이 인원에서 필요한 스펙이었을까 하는 부분입니다.
- 인증 시스템을 OAuth2로 결정을 하였는데 그 OAuth2가 여러 가지 스펙을 지원을 하지만 그것만큼 신경 쓸 부분이 많습니다.
- 세 번째. 프로젝트 진행에 따른 반복된 피드백
- 초반뿐만 아니라 프로젝트가 진행되면서도 프로젝트 참여자 모두 프로젝트에 대한 눈높이를 자주 맞췄어야 했어야 했다고 생각됩니다.
- 프로젝트는 생물 같아서 처음 정해진 기획대로 가기도 힘들고 환경변수가 많이 있었습니다.
제가 했던 역할에서 현재 와서 보면 정해진 인원과 시간에서 현행 인증 시스템을 개선하는 프로젝트의 목적보다 인증 플랫폼 개발에 치중한 부분이 있었다고 생각되었었습니다. 어느 정도 중간을 잡고 진행을 했어야 했던 부분이 필요했었던 것 같습니다.
마무리
어렵게 프로젝트를 마무리하게 되면서 고생한 동료들의 소중함이 새삼 다가왔었습니다.
지금도 시스템이 어느 정도(몇 번 사고는 있었지만 ㅠㅠ) 문제없이 돌아가는 것을 보면서 놀랍기도 하고 (문제 생길까봐) 무섭기도 합니다. 그래서 현재는 인증시스템의 문제를 측정하여 원인을 알 수 있는 여러가지 도구들을 만들어 가용성을 높게 만들려고 노력 하고 있습니다. 그리고 인증시스템에서 (이왕?!) 만들어둔 스펙들, 우리 회사의 서비스들이 지금보다 많이 흥해서 확장할 때 도움이 되었으면 좋겠다는 생각도 문득 듭니다.(__)
마지막으로 B2C 프로젝트 처음과 끝을 함께한 경험을 가지게 된 것이 큰 행운이라 생각되며 앞으로의 저에게 큰 밑거름이 되지 않을까 생각됩니다.
프로젝트 진행하면서 같이 고생한 팀원들에게 다시 한 번 정말 고맙고 감사하다는 말씀을 드리고 싶습니다.