카카오페이 서버 개발자로 일한다는 것 (feat. 연진아 나 지금 되게 신나)

카카오페이 서버 개발자로 일한다는 것 (feat. 연진아 나 지금 되게 신나)

시작하며

🔗 if(kakao) 발표 영상 보러 가기: 카카오페이 서버 개발자로 일한다는 것

안녕하세요. if(kakao)에서 ‘카카오페이 서버 개발자로 일한다는 것’ 세션을 진행한 오프라인결제서비스유닛 백엔드 개발자 해피입니다. 세션 내용과 담지 못했던 비하인드 스토리를 함께 들려 드리려고 합니다. 이 글에서 다루는 내용은 결제 서비스 개발자의 관점에 가깝다는 점을 참고하여 읽어주시면 좋을 것 같습니다.

카카오페이에서의 경험

무에서 유를 창조해낸 2주

제주도에서 프로젝트
제주도에서 프로젝트

입사했던 시기인 2018년 상반기에 카카오페이 오프라인 매장 결제 서비스가 새로 생기면서 이를 정산할 시스템이 필요하게 되었습니다. 난생처음 들어본 PG라는 개념과 구조, 결제/정산 도메인 지식을 학습하고, 입사한 지 3주 만에 정산 시스템을 개발하기 위해 제주도 카카오 본사의 프로젝트 룸으로 보내졌습니다. 다른 업무와 회의, 사적인 스케줄로부터 격리하여 온전히 집중할 수 있도록 말이죠.

당시 상황이 저희에게 유리한 편은 아니었습니다. 정산 업무를 해오던 PM 3명과 정산을 개발해 본 적이 없는 개발자 5명이 모여 2주의 시간 동안 새로운 정산 시스템을 만들어야 했으니까요. 당시 기술 리드였던 마틴의 지휘에 따라 PM과 도메인을 분석하고, 테이블로 설계했습니다. 한 명이 바로 ERD에 반영하고 개발 환경 DB에 적용하고, Entity와 Repository를 만들어 푸시했습니다. 다른 개발자들은 이를 받아 계산 로직을 담은 Service를 만들고, 어드민을 만들었습니다.

많은 사람이 한순간에 모여서 자신의 역할을 찾아 엄청난 생산성을 발휘했습니다. 사택에서 아침 9시에 통근버스를 타고 일하고, 밤 9시 마지막 통근버스를 타고 퇴근했습니다. 2주간의 기간 동안 단 한 번 있는 주말에도 마틴은 출근해 개발을 하고, 쿠는 사택에서, 저는 서귀포 바다가 보이는 곳에서 개발했습니다. (개발은 감성 있게…)

프로젝트 마지막 날 찍은 사진
프로젝트 마지막 날 찍은 사진

김포를 떠날 때는 정산에 대해 잘 몰랐지만 돌아올 때는 시스템을 들고 왔습니다. 오픈 전날 가맹점과 정산 규칙에 대한 데이터를 셋업하느라 새벽까지 쿼리를 만드는 고생을 했지만 정말 보람있는 작업이었습니다. 불가능하리라 생각했던 프로젝트에서부터 크루들이 작은 성공을 거두고, 그 자신감을 바탕으로 더 많은 일들에 도전했던 시기였습니다.

서버 개발자가 개발만 잘하면 되는 게 아니라 도메인에 관해 전문가만큼 알아야 한다는 걸 배웠습니다. 수수료와 세금, 환율 정말 많은 요소들이 정산과 관련이 있었고, 각각의 금액들이 어떤 규칙으로 처리되는지 학습할 수 있었습니다. 정산과 관련된 책을 사서 공부하기도 했는데요. 개발자가 개발 책만 공부하는 게 아니라 자신이 담당하는 서비스의 지식을 위한 책들도 읽어야 한다는 걸 실감했습니다.

비하인드 스토리로, 제주도에 갔을 때 팀원들로부터 놀랐던 점이 2가지 있는데요. 2주 동안 사택에 머물러야 했기에 일요일에 제주도로 이동한 후 다 같이 마트에서 장을 보던 때였습니다. 예산이 충분함에도 장바구니에 담기는 것은 제일 저렴한 천 원짜리 바디워시, 폼클렌징이었어요. 월요일에 바로 프로젝트에 몰입할 수 있도록 업무 외 시간인 일요일에 이동한다는 것과 회사 예산이라도 절약해 사용하는 점이 정말 인상 깊었습니다.

숙소는 1인실이 아닌 아파트 형태의 사택에서 묵는 것이었는데요. 저를 포함한 3명이서 방 3개짜리 사택에 방 배정을 할 때였습니다. 당시 제가 나이로나 연차로나 막내였기 때문에 당연히 가장 작은방을 사용하려고 했는데요. 룸메이트들이 극구 뜯어말리며 가위바위보를 했습니다. 덕분에 창문이 있는 중간 사이즈의 방에서 마음은 불편하지만 몸은 편안하게 지낼 수 있었습니다. 이러한 사람들의 진심과 선한 영향력 덕분에 회사에 더 빨리 적응하고 프로젝트에 더욱 진심으로 임할 수 있었습니다.

페이상품권과 내 주변

제가 자주 사용하는 카카오페이 서비스이자 개발한 프로젝트인데요. 이를 통해서 서버 개발자가 어떤 프로덕트를 개발하고, 어떤 기술을 사용하는지 엿볼 수 있으실 거예요.

페이상품권
페이상품권

카카오톡 친구에게 상품권을 선물하고, 받은 친구는 카카오페이의 모든 온라인/오프라인 매장에서 상품권을 사용할 수 있는 상품권 선물 서비스입니다.

상품권은 결제수단 역할과 사용자의 잔액과 내역을 관리하는 원장의 역할을 모두 가지고 있기에 두 가지 역할에 대해 잘 이해하고 있는 것이 필요했습니다. 이때 코틀린과 Spring MVC를 활용했고, MySQL로 상품권/결제 데이터 저장, Redis로 분산락 관리, Kafka 프로듀서/컨슈머 구현했고 조회성 데이터 저장을 위해 MongoDB를 활용했습니다.

가장 최근에 개발한 프로젝트는 내 주변 서비스입니다. 지도 기반으로 매장, 멤버십, 혜택 정보를 제공하는 서비스입니다. 카카오맵을 통해 지도 데이터를 가져오고, 이에 우리 카카오페이의 다양한 서비스들을 호출해 사용자들에게 지도를 기반으로 결제와 관련된 편리한 서비스들을 연결해 주는 것이 목적이었습니다. 코틀린과 Spring WebFlux를 사용했습니다. 마이크로 서비스들을 비동기로 호출하는 API 서버를 만들었고, 프론트에 이 정보를 모아서 내려주는 BFF 패턴을 사용했습니다. MySQL을 DB로 사용했습니다.

내 주변
내 주변

이 화면이 바로 내 주변 서비스의 모습입니다. 첫 번째 이미지처럼 위치 기반으로 카카오페이 매장들이 보여지게 됩니다. 여기서 매장을 선택하면 두 번째 이미지처럼 매장에서 제공하는 다양한 혜택과 멤버십 정보를 모아서 볼 수 있습니다.

내 주변에 BFF 패턴을 적용하며, 기술 블로그에 글을 남기기도 했습니다.

🔗 WebFlux와 코루틴으로 BFF(Backend For Frontend) 구현하기

이렇듯 많은 서비스들을 연동하다 보면 개발자라는 사람의 역할도 만드는 시스템을 닮아가게 되는 것 같아요. 여러 시스템과 연동되기에 개발자도 여러 시스템을 이해하고, 이를 엮어주는 커뮤니케이션의 게이트웨이 역할을 했던 것 같습니다. 때문에 이 시기에 다른 서비스들의 구조를 많이 배우고 어느 때보다도 많은 개발자들과 함께 협업했습니다.

If Kakaopay

만약 카카오페이 서버 개발자로 일하신다면, 다음의 일들을 경험해 보실 수 있을 것입니다.

  • 인프라가 잘 구축되어 있고, 지원이 잘 된다.
  • 서비스 도메인과 어플리케이션 개발에 집중할 수 있다.
  • k8s 환경에서 MSA 개발을 경험해 볼 수 있다.
  • 결제나 송금 등 돈과 관련된 서비스의 경우, 트랜잭션 처리에 관해 깊게 개발해 볼 수 있다.
  • 금융을 개발해야 하기 때문에 망분리 환경에서 개발해야 한다.
  • 때로 금감원에 제출하는 데이터 작업이 필요하기도 하다.
  • 탈퇴 유저 데이터 분리 보관, 개인 정보 마스킹 등 유저의 개인 정보 보호를 위해 신경써야 할 부분들에 대해 경험할 수 있다.

단단하고 안전한 인프라 환경에서 더 좋은 서비스를 만드는 경험을 할 수 있습니다. 망분리 환경과 금융에 필요한 필수적인 작업들이 있지만 안전함도 사용자에게 제공할 수 있는 가장 큰 경험이기에 감수할 수 있습니다.

개발 언어와 환경

개발 언어
개발 언어

개발 언어로는 주로 Java Kotlin을 사용하고, 새로운 프로젝트는 대부분 Kotlin으로 시작합니다. 이외에 Scala, Go로 된 프로젝트도 있습니다. 프레임워크는 주로 Spring을 많이 사용하고, 데이터베이스로는 MySQL을 많이 사용합니다. 특히 결제나 정산처럼 트랜잭션 관리가 중요한 도메인들은 MySQL을 메인으로 사용합니다. 이외에 NoSQL로 MongoDB도 많이 사용하고, 이를 지원해주는 팀이 있어서 보다 안전하게 운영할 수 있습니다. 전사적으로 메시지 큐는 Kafka를 사용하고, 캐시의 용도로 Redis를 사용합니다. 합리적인 이유라면 새로운 언어와 DB에도 열려있는 편입니다.

어플리케이션 종류
어플리케이션 종류

서버 개발자가 개발하는 어플리케이션은 크게 3가지인데요. (1) 데이터를 서빙하는 API 서버 (2) PM과 운영자들을 위한 백오피스 어드민 (3) 푸시/재처리/대용량 처리 등을 위한 배치입니다. API 서버는 Spring MVC, Spring WebFlux 등을 사용하고, Admin도 Spring을 사용하는데, 인증을 Spring Security를 활용합니다. 어드민의 프론트 페이지는 서버 개발자가 개발하는데요. 취향에 따라 Vue.js 또는 React 등을 사용합니다. 배치는 주로 Spring Batch를 사용해 개발합니다.

모니터링
모니터링

서버 모니터링의 경우 APM , Grafana, Elastic Search를 주로 사용하고 있습니다. APM를 통해서는 요청의 호출 스택과 에러 발생 빈도를 파악할 수 있고, Grafana를 통해서 API endpoint 별 호출 빈도, 레이턴시, 응답 코드 등 다양한 정보를 확인할 수 있습니다. Elastic Search를 활용해 API 서버의 요청/응답 로그를 수집하는데요, 이를 통해 요청과 응답 기록을 확인할 수 있기 때문에 이슈 확인 시 편리합니다.

인프라
인프라

카카오페이에서 일하는 장점으로는 다양한 인프라와 시스템을 활용할 수 있다는 점이에요. 개발 환경에서 서버를 발급받고 싶을 때 Krane을 통해 서버를 생성하여 이용할 수 있습니다. API 테스트를 할 때는 T2라는 시스템을 사용하는데요. T2에서 유저 시나리오에 따라 변수를 활용해 API를 테스트할 수 있기 때문에 End to End 테스트를 편하게 할 수 있습니다. 성능 테스트할 때는 TestLAB을 사용하는데요. 테스트에 사용될 데이터를 파일로 업로드하고 부하 스케일 업 방식과 시간, 가상 유저 수 등을 쉽게 설정해 테스트해 볼 수 있습니다.

기술문화와 스터디

카카오페이 개발자 페스티벌
카카오페이 개발자 페스티벌

카카오페이에는 기술문화를 담당하는 DevRel 팀이 있는데요. 덕분에 한 달에 한 번 팀에서 코드와 문서 등을 정리하고 생산성을 제고하는 시간인 하우스키핑 데이가 활발하게 진행되고 있습니다. ㅋㅍㄱㅍ 페스티벌이라는 카카오페이 개발자를 위한 페스티벌이 반기에 1번씩 있어서 다 같이 개발 문화에 대해 고민하고, 교류하는 특별한 시간도 있습니다. 지금 이 기술 블로그도 DevRel 팀에서 적극적으로 지원해 주시는데요. 내부에 먼저 공개된 후 동료들로부터 피드백 받을 수 있어 양질의 기술 콘텐츠를 생산할 수 있습니다. 문법적인 요소뿐만 아니라 복잡한 문장도 쉽게 이해할 수 있도록 피드백을 받을 수 있기 때문에 더 좋은 글을 쓸 수 있게 됩니다.

서버 개발자들이 자발적으로 기술을 공유하는 스터디도 있는데요. 통합 테스트, 코루틴, E2E 테스트, 레거시 등 다양한 주제에 대한 발표가 진행되었습니다. 이 중 청구서 레거시를 다루는 방법에 대한 발표가 인상깊었습니다. 카카오페이 초기부터 존재한 청구서 시스템의 레거시 코드와 이를 개선하기 위한 다양한 노력들에 대해 알 수 있었습니다. 이처럼 다른 서버 개발자가 개발하는 서비스들과 기술에 대해 알 수 있어서 정말 유익합니다.

카카오페이에서는 동료들끼리 스터디를 하는 문화가 자연스럽게 퍼져있는데요. 회사에서 업무 도서 비용을 지원해주는 점도 좋은 영향을 끼치는 것 같습니다.

- 마이크로 서비스 패턴
- 구글 엔지니어는 이렇게 일한다
- 코틀린을 다루는 기술
- Kotlin in Action
- 도메인 주도 설계
- DDD Start
- 프로젝트 성패를 결정짓는 데이터 모델링 이야기
- Neo4j로 시작하는 그래프 데이터베이스

보시는 목록은 제가 카카오페이에서 스터디했던 책 리스트입니다. 마이크로 서비스 패턴부터 Neo4j까지 다양한 주제를 동료들과 학습했습니다. Neo4j 는 그래프 데이터베이스인데요. 도메인에 적합한 형태가 아니라 실무에 적용하진 않았고, 이외에 코틀린, DDD, 데이터 모델링 등 스터디했던 모든 책들은 개발에 적용했습니다. 동료들과 꾸준히 학습하고, 이걸 제품에 반영하며 성장해나가는 것이 카카오페이 개발 문화인 것 같습니다.

업무의 확장

아이디어 워크샵
아이디어 워크샵

카카오페이에서 서버 개발자는 서버 개발뿐만 아니라 다양한 영역으로 업무를 확장할 수 있습니다. 서버 개발자들은 목적 조직에 속해있기 때문에, 평소에도 쉽게 아이디어를 제안할 수 있는 환경에 속해있습니다. 팀 내 아이디어 워크샵이 자주 열리기 때문에, 이때 신규 서비스 또는 기존 서비스의 개선 방향에 대한 의견을 자유롭게 이야기할 수 있습니다.

또한, 전사적으로 아이디어를 제안할 수 있는 다양한 창구가 있는데요. 아이디어 공모전이 상시로 열려있고, 상품을 주기도 합니다. 예전에 1등을 해서 30만원 카카오페이 머니를 받았던 기억이 납니다. 서버 개발자도 할 수 있습니다! 서비스에 대한 개선점 제안, 벤치마킹 사례 공유, 사내 CBT 등 다양한 기회들이 열려있습니다.

마치며

카카오페이의 서버 개발자로 일하며 이곳에 처음 입사했을 때와 발표를 하는 지금까지 정말 많은 성장을 해왔던 것 같아요. 카카오페이에서 함께 한 리더와 동료들로부터 배우고 서로 뚝배기처럼 열정을 데워주었기에 이만큼 성장해올 수 있었던 것 같습니다.

카카오페이 서버 개발자는 동료들과 계속해서 학습하고 협업하여 국민이 사용하는 서비스인 카카오페이와 함께 성장해나갑니다. 이 글을 통해 서버 개발자가 어떤 일을 하고, 카카오페이에서는 어떻게 일하는지 궁금하셨던 분들께 도움이 되었기를 바랍니다. 계속해서 성장하고 있는, 태어나고 있는 카카오페이의 많은 서비스들에 대한 애정 어린 관심 부탁드립니다!

happy.together
happy.together

카카오페이 오프라인결제서비스 백엔드 개발을 하고 있는 해피입니다. 개발만큼 자기 개발을 좋아합니다.