본문 바로가기

개발새발 일기

if kakao dev 2019 Day 1 후기

 

올해 두 번째를 맞이한 kakao 개발자 컨퍼런스, if kakao dev 2019에 다녀왔습니다. 아무나 갈 수 있는 것은 아니고, 신청 후 무작위 추첨으로 선정되는 방식이에요. 저는 운 좋게 Day 1에 당첨되어 다녀올 수 있었습니다.

 

1. 참가 등록 및 입장

행사는 COEX 그랜드볼룸에서 열렸는데요, 지하철 역에서 찾아가기 너무 복잡하고 어려웠어요 ㅠㅠ 길 안내판이나 if kakao 사이트에도 제대로 설명되어 있지 않아 사람들에게 물어가며 겨우 도착했습니다.

 

등록을 마치면 이렇게 팔찌 형태의 입장권을 주십니다.

 

그리고 컨퍼런스의 묘미, 굿즈도 받았어요. 사실 컨퍼런스는 이런 재미로 가는 거죠! 에코백 안에 스티커, 카카오 서비스 할인 쿠폰, 어피치 생수, 티셔츠, 뱃지 등등이 들어있었습니다.

 

행사장 입구에는 라이언과 함께 기념샷을 찍을 수 있는 공간이 마련되어 있었어요. 

 

각 계열사에서 나온 개발자님들이 직접 채용 정보를 알려주는 부스도 있었습니다. 계열사 별로 스티커 모으는 재미가 쏠쏠했어요 :)

 

아직 세션 시작 전인데 사람들이 엄청 많더라구요. 역시 핫해요, 핫해🔥

 

곳곳에 포토존이 있어서 소소한 재미를 느낄 수 있었어요.

 

2. 프로그램

각 분야별, 계열사 별로 다양한 발표가 마련되어 있었는데요, 저는 서버 개발자이기 때문에 서버 쪽 발표를 선택했습니다.

(사회 초년생이고 개발 지식이 깊지 않아, 필기를 하다 놓치거나 틀린 부분이 있을 수 있습니다. 혹시 수정할 부분이 있다면 언제든 알려주세요!)

 

1) 초당옥수수의 취소를 막아라! : 수만 건의 주문을 1초 내에 처리하는 기술

 

제목부터 흥미롭죠? 대체 초당 옥수수가 무슨 일을 벌였던걸까 너무 궁금해서 찾아왔는데, 다른 사람들도 같은 마음이었는지 큰 강연장이 금세 꽉 차 버리더라고요.

 

 

  • 초당 옥수수의 비밀

    • 6월부터 생산되지만 5월에 주문을 받음

    • 비가 올 경우 햇볕에 마를 때까지 기다려야 함

    • 따라서 배송 지연 처리 기능이 필요함!

 

카카오 커머스에서는 초당 옥수수를 팔고 있는데요, 다른 상품과 비교해 특이한 점이 있었어요.

 

초당 옥수수는 6월부터 생산되지만 5월부터 미리 주문을 받는대요. 농작물은 수확을 하면 팔릴 때까지 계속 보관이 어려우니까, 미리 주문을 받고 기다린 후 택배 발송을 한다고 하네요. 게다가 비가 오면 당도가 내려가니 햇볕에 마를 때까지 기다렸다가 수확하는 시간도 필요해요.

 

이렇게 농작물 수확이 늦어지게 되면 판매자는 구매자에게 배송 지연에 대해 빠르게 알릴 수 있어야겠죠?

 

 

  • 초당 옥수수의 주문 과정

    • 결제 완료 → 배송 요청 → 배송 지연 처리  배송 준비 중 → 배송 중

 

구매자가 결제를 완료하면 수확이 될 때까지 취소를 막을 수 있는 배송 지연 처리 기능이 필요하게 되었습니다. 이런 기능을 target messaging system 즉, TMS라고 부른다고 하네요.

 

그럼 카카오 커머스는 배송 지연 안내 TMS 수행을 어떻게 처리했을까요?

 

 

  • 기존 레거시의 문제점

    • TMS가 실시간이 아니었음

    • 비즈니스 로직이 복잡함

    • 처리 속도가 느림

 

배송이 지연되면 바로 TMS를 보낼 수 있어야 하는데 실시간 처리가 아니라, 1시간 간격으로 batch 되는 구조였다고 합니다. 굳이 시간을 줄이자면 5분으로 줄일 수도 있었지만, 근본적인 해결방법은 아니었다고 합니다

 

비즈니스 로직도 매우 복잡했고, REST 요청이 단일 스레드로 반복 요청하는 구조라 속도가 나오지 않았다고 해요. 멀티 thread를 이용해 동시 다발적으로 처리할 수도 있었지만, 트랜잭션 처리와 확장성이 용이하지 못해 고민하셨다고 합니다.

 

 

미션 1. 실시간 TMS 발송을 위한 워커 구성

  • 문제점

    • 처리해야 할 정보가 많음

    • 단일 머신에서 수행됨

  • 해결책

    • batch 대신 비동기 워커를 구성함

 

그래서 먼저! 실시간 TMS 발송을 위한 워커를 구성하기로 하셨습니다.

 

왜 기존 코드는 실시간으로 TMS를 보내지 않았을까요? 이 의문을 해결하기 위해 TMS 발송 처리기를 살펴보았는데요, TMS 명세의 종류가 공통, 선물하기...등등 무려 300여 개가 넘게 존재했다고 합니다....!!!

 

처리에 필요한 API 등등 추가적인 정보가 많은 상황에서 실시간으로 처리하는 비즈니스 로직을 추가하면, 성능에 이슈가 생길 수 있었겠죠? 병렬 처리를 하긴 했지만 실시간으로 처리하기는 힘들었고, 단일 머신에서 수행되기 때문에 한계가 존재했다고 합니다.

 

미션 2. 복잡한 비즈니스 코드 리팩토링

  • 문제점

    • 로직이 서로 복잡하게 얽혀있음

  • 해결책

    • 밸리데이션을 구분해 정리함

 

사진 안의 PPT 화면을 보시면 기존 코드는 서로 복잡하게 엉켜있었어요. 그래서 요청 데이터에 대한 validation을 더 간단하게 만들기로 하고 규칙을 정하셨대요. 그리고 이 validation을 모두 통과해야 필요한 작업을 할 수 있었다고 합니다.

 

화면만 보면 굉장히 간단해 보일 수도 있는데요, 사실 이런 처리를 함으로써 명확도가 굉장히 올라갔다고 합니다.

 

미션 3. 처리 속도 개선

  • 문제점

    • 비즈니스 로직 처리에 속도가 많이 걸림

  • 해결책

    • 비즈니스 로직을 처리하기 위한 비동기 워커를 만듦

 

비즈니스 로직을 처리하는 과정은 TMS를 발송하는 것에 비해 속도가 많이 걸렸다고 합니다. 그래서 비즈니스 로직에 병목이 걸리면 한 task를 종료할 때까지 계속 기다려야 했대요.

 

카카오 커머스는 이 문제를 해결하기 위해 비즈니스 로직만 따로 처리할 수 있는 비동기 워커를 만들었습니다. validation만 수행하기 때문에 아주 빠른 속도로 처리할 수 있었다고 해요. 건 별로 처리하다 보니 DB 조회 횟수도 줄일 수 있었다고 하네요!

 

이밖에도 분산 처리에 대한 얘기를 해주셨는데 제가 아직 부족하다 보니 제대로 이해를 못해서 아쉽습니다 ㅠㅠ 대신 이 발표가 끝나고 카카오 커머스 측에서 따로 준비한 채용 설명회가 있어 그곳에 참가하게 되었어요.

 

2) 카카오 커머스 채용 설명회

채용 설명회는 코엑스 2층에 별도로 준비된 공간에서 진행되었습니다. 먼저 인사 담당자님이 카카오 커머스에 대해 간략한 소개를 해주셨어요.


  • 카카오의 사업 내용

    • 선물하기, 쇼핑하기, 스타일, 하우, 장보기

  • 내부 공유 가치

    • 자기 주도성

      • 완전 선택적 근무제

      • 공유 활성화: 업무 관련 정보를 온라인 아지트와 오프라인 미팅에서 공유

      • 서비스 참여 지원: 선물하기 등 적극적으로 자사의 서비스를 경험하고 전파하도록 기회와 비용 지원

      • 수평 커뮤니케이션: 직급, 연차와 관계없이 영어 이름 사용

    • 몰입

      • 헬스케어: 요가, 피트니스 등 지원

      • 안식휴가: 3년마다 장기근속휴가 30일과 휴가비용 지원

      • 복지 대출: 복지 대출과 대출 이자 지원

      • 건강검진, 의료비, 경조사 비용 지원

      • 어린이집 운영

      • 쾌적한 오피스 환경

    • 성장

      • 일을 통한 성장

      • 우수한 동료

      • 성장에 대한 지원: 도서, 온라인 강의, 사외교육, 컨퍼런스 지원


 

소개가 끝난 뒤에는 이벤트 추첨이 있었습니다. 여러분, 오픈 카톡방에서도 선물하기 기능이 되는 걸 알고 계셨나요?? 선물을 랜덤으로 던져놓으면 참가자가 받을 수 있는 기능이 있더라고요. 저도 덕분에 교촌 치킨 한 마리를 받을 수 있었습니다! 야호!!

 

그 후에는 커머스에서 일하고 있는 개발자님들과 대화하는 시간을 가졌습니다. 대화하는 동안 나왔던 내용을 간략히 정리해볼게요.


 

Q. 코드 리뷰를 하는가?

A. 프로세스를 강제화하고 있는 것은 없다. 하지만 코드 리뷰는 기본적으로 다들 하는 것 같다.

 

Q. 업무 방식이 어떠한가?

A. 공유 문화가 잘 되어있는 것 같다. 이메일은 지양하고 '아지트'라는 오픈 게시판이 많이 활성화되어 있다.

 

Q. 백엔드 개발자를 뽑는가? 업무 내용은?

A. 백엔드는 항상 공고가 오픈되어 있으므로 채용 페이지를 참고 바란다. ORM 프레임워크는 기본적으로 사용하고 있다. 선물하기의 경우 발렌타인와 같은 이벤트들이 거의 매달 있기 때문에 트래픽이 많이 오른다. 대용량 트래픽 처리에 관심이 많다면 노하우를 얻어갈 수 있을 것이다.

 

Q. 구성원이 몇 명인가?

A. 전사 300명 정도. 그중 개발자는 60명 정도 된다.

 

Q. 업무 체계가 잘 잡혀 있는가?

A. 카카오 커머스는 분사한 지 1년도 안된 회사다. 하지만 원래 카카오 내에서 같이 개발을 하다가 분리되었기 때문에 괜찮다. Daum의 안정된 문화와 카카오의 실험적인 문화가 함께 어우러져 있다. 다양하면서도 깊이 있는 문화다.

 

Q. 여성 개발자의 비율이 어떻게 되는가?

A. 남자 6, 여자 4 정도의 비율이다. 다른 곳에 비해 여자 개발자의 비율이 높아서 좋다. 여자라는 정체성을 굳이 느끼지 못할 만큼 차별 없이 함께 일하고 있다.

 

Q. 휴가는 어떻게 사용하나?

A. 모든 업무는 혼자 하는 것이 아니기 때문에 각자 휴가를 가면 나머지 사람이 백업을 한다. 계속 공유하는 습관이 있기 때문에 다른 사람들이 충분히 대신할 수 있다.

 

Q. 조직 문화가 어떠한가?

A. 주니어, 시니어 구분 없이 다 같이 말하고 결정하는 문화다. 막내 문화가 없다. 막내가 누구인지도 모른다. 조직장이라고 관리로 빠지는 게 아니라 모두 다 같이 실무를 한다. 위에서 아래로 통보하지 않으며 개발자 자신의 실무 결정 권한이 크다.

 

Q. 개발 문화에 대해 알려달라

A. 주도적으로 일하는 것을 좋아한다. 조직장은 관여하지 않고 실무자끼리 정해서 진행한 일도 다수 있다. 누가 시켜줘야 편한 사람은 와서 적응하기 힘들 것이다. 본인이 직접 찾아가서 공부하고 해결하는 문화다. 따라서 동료들끼리 서로 신뢰한다는 느낌을 많이 받는다.

 

Q. 신입 개발자의 경우 연수 기간이 따로 있는가?

A. 공채의 경우는 그럴 수 있지만 수시 채용은 없다. 초반에는 과제를 주면서 공부를 시킬 수도 있다. 또는 자기가 하고 싶은 일을 찾아서 하면 된다. 모르는 게 있으면 질문하고 하고 싶은 걸 찾아가면서 스스로 성장할 수 있다.

 

Q. 인사 평가는 어떤 구조인가?

A. 이번부터 평가 제도가 사라졌다. 최고와 최저만 뽑을 예정이다. 등급이 따로 매겨지지 않을 것이다. 최저라고 해서 평균 이하로 못한다는 말은 아니고, 프리라이더라는 느낌이 들 경우 경고의 의미로 선정할 것이다. 이전에는 카카오에 통합되어 있어 카카오의 인사 체계를 따라야 했는데 분사를 하면서 제도 변화를 추진 중이다.


 

대화를 하는 내내 카카오만의 수평적이고 자유로운 분위기를 몸소 느낄 수 있었습니다. 제가 앉은 부스에 조직장님들이 많으셨는데, 권위주의가 하나도 느껴지지 않고 정말 편안했어요 :)

 

3) 돈이 오고 가는 금융 프로젝트인 펌 뱅킹 서비스에서의 코틀린 적용 사례

이번 발표는 카카오페이의 코틀린 적용 사례에 대한 내용입니다. 이 발표는 자바 백엔드 중급 개발자, 코틀린에 관심 있는 개발자, 코틀린 도입을 고민 중인 개발자를 대상으로 진행되었습니다.

 

그런데 여기서 잠깐, 펌 뱅킹 서비스가 대체 무엇일까요? 폰뱅킹이나 인터넷 뱅킹은 들어봤어도 펌 뱅킹은 아직 사람들에게 낯선 단어인데요, 금융 기관의 서버를 연결해서 거래하는 방식을 의미한다고 합니다. VAN 사를 통해 은행과 API 통신을 한다는 뜻이래요.

 

강현식님은 카카오페이에서 일하시면서 코틀린만 있는 프로젝트와 자바+코틀린인 프로젝트를 경험해오셨다고 해요.

 

 

  • 코틀린의 장점

    • 간결성

    • 상호 호환성

    • 툴 친화적

 

그렇다면 왜 코틀린을 쓰는 걸까요? 먼저 코틀린은, 간결합니다. 자바로는 최소 몇 줄이 나오는 코드를 단 한 줄로 정리할 수 있어요. 게다가 기존에 JVM 위에서 돌아가는 코드와 100% 호환됩니다. 코틀린이라는 언어를 Jetbrains에서 만들었기 때문에 IDE도 잘 만들어져 있죠!

 

 

  • 자바의 단점

    • 발전 속도가 더딤

    • 람다의 예: C#은 2007년, Java는 2014년 출시

 

그런데 사실 자바로도 잘 돌아가는 코드를 굳이 코틀린으로 바꿔야 할 이유가 뭘까요? 일단 강현식님은 자바의 느린 발전 속도를 지적하셨어요. 이 문제를 타파하고자 JVM 호환 언어들이 나타나기 시작했다고 합니다.

 

대체 얼마나 느리길래 그런 걸까요? 예를 들어 보겠습니다. C#의 경우 2007년 말에 람다와 확장 메서드가 나왔고 async, await이 2012년에 출시되었다고 합니다. 하지만 Java는 2014년에서야 출시를 했다고 하니...정말 차이가 크죠?

 

그러다가 새 팀에서 일하게 되면서 코틀린을 사용 중인 사이드 프로젝트를 만나셨대요. 익숙하지 않은 언어이지만 코틀린만의 장점을 보고 반해서 시작하게 되셨다고 합니다.

 

공부할 책으로는 사진 상의 Kotlin in action을 추천하신다네요. 저도 한 번 읽어봐야겠어요.

 

하지만 새롭게 적용하는 것이다 보니 걱정도 있을 수밖에 없겠죠. 결과를 보장할 수 없는 신기술은 어떻게 안전하게 적용할 수 있을까요?

 

일단 처음에는 기존 프로젝트보다는 신규 프로젝트에 코틀린을 사용해보기로 결정하셨대요. 그리고 이 프로젝트를 성공적으로 오픈할 수 있게 되자, 기존 펌 뱅킹 시스템도 적용하겠다는 결정을 내리셨다고 합니다.

 

하지만 돈이 오가는 서비스라 여전히 조심스러워서, 사용자 영향이 없는 admin 부터 시작하셨다고 하셨어요. 그러면서 차차 코틀린 비율을 늘려갔고요.

 

그럼 코틀린을 단계적으로 적용해갔던 과정을 살펴볼게요.

 

일단 요청이 왔을 때 신규 개발인지 따져봅니다. YES라면 바로 착수하고 아니라면 JAVA로 되어있을 테니 일단 테스트 코드를 보고 코틀린으로 바꿉니다. 만약 테스트가 없다면? 테스트부터 코틀린으로 만들고 자바를 코틀린으로 전환하셨다고 해요.

 

혹시 코틀린을 적용하면서 문제는 없었을까요? 사실 다행히도 큰 이슈는 없었다고 합니다. 호환성이 그만큼 아주 훌륭하다고 해요. 제일 큰 이슈는 단연 lombok이었습니다. 그 밖에도 자잘한 이슈들이 있었지만 결론적으로는 코틀린 변환을 추천하셨어요.

 

요즘 자바 관련 컨퍼런스를 가면 꼭 한 번씩 코틀린 변환에 대한 발표를 듣게 되는데요, 이쯤 되면 저도 도전해봐야겠다는 생각이 드네요. 정말 흥미로운 언어인 것 같아요 :)

 

4) 다음 웹툰의 UX

마지막 발표로는 다음 웹툰 안드로이드 앱 개발기를 들었어요. 다음 웹툰은 UX가 뛰어나기로 유명한데요, 발표를 듣고 나니 디자이너와 개발자의 합이 정말 잘 맞아떨어진 사례 같았습니다.

 

안타깝게도 제가 안드로이드 개발자가 아니다보니 상세한 기술적 내용은 이해하지 못한 점 양해부탁드립니다. 하지만 안드로이드 알못이 보기에도 너무너무 대단해보였어요.

 

메뉴 탭을 Swipe 할 때 탭의 색 변화가 자연스러워야 했나봐요.

 

그래서 찾아낸 방법이 바로 이것입니다. 메뉴 뒤에 써클이 회전하게 해서 마치 메뉴색이 그라데이션으로 바뀌는 것 같은 착각을 주는거죠.  진짜 발상의 전환 아닌가요? 

 

적용하면 이런 모습입니다! 옆으로 Swipe하면서 색이 자연스럽게 바뀌고 있어요. 마치 그냥 그라데이션인 것 처럼요. 하지만 그 뒤에서는 앞서 말한 것 처럼 원이 계속 회전하고 있는 것이죠!

 

제가 안드로이드 알못이라 잘 모르긴 하는데요, 애니메이션을 이런 식으로 구현할 생각을 하시다니 기술력도 기술력이지만 창의성이 정말 대단하신 것 같아요. 혹시 안드 개발에서 이 방법이 그렇게 특이한 방법이 아니라고 해도, 처음 접하는 저에겐 너무너무 신기하고 인상적이었어요.

 

3. 회고

 

  • 좋았던 점

    • 화려한 서비스 뒤에서 열심히 노력했던 경험을 공유받을 수 있음

    • 실제 일하는 개발자와 직접 대화할 수 있는 기회를 갖게됨

  • 아쉬웠던 점

    • 강연 외의 운영 짜임새

    • 부스 정보 부족

 

생각했던 것 이상으로 사업 영역이 넓고 기술력도 뛰어나보였던 카카오였습니다. 서비스를 개발하며 발생했던 문제점과 해결 방법을 자세한 사례와 함께 접할 수 있어 유익했습니다. 비록 제 실력이 아직 미흡해 완벽하게 이해하진 못했지만 그렇기에 발전에 대한 의지도 다시금 불타오르게 되네요.

 

또한, 실제로 카카오에서 일하고 있는 개발자님과 대화하며 인터넷에서 접할 수 없는 정보를 얻어갈 수 있었던 것도 좋았습니다. 나중에 지원할 기회가 있다면 많은 도움이 될 것 같아요.

 

하지만 아쉬운 점도 있었는데요, 바로 운영적인 측면이었습니다. 채용 부스와 포토존이 있는 것은 좋은데, 제대로 관리가 되지 않아 어수선하거나 사람들의 관심을 끌지 못한 것 같아요.

 

채용 부스의 경우 여러 계열사가 같은 테이블에 함께 붙어있다보니, 한 계열사에 질문하고 바로 옆에 있는 계열사에 옮겨서 같은 질문을 하면 아까 질문했던 계열사에 눈치가 보인다고 해야할까요? 부스가 좀 더 계열사마다 분리가 되어있다면 좋았을텐데, 하는 아쉬움이 남았습니다.

 

포토존의 경우 입구 쪽에 있는 라이언은 그래도 눈에 띄었지만, 반대편에 있는 다른 포토존은 방치되어있어 사진을 찍기도 뻘쭘하고 존재조차 모르는 사람도 많았던 것 같습니다. 행사 진행자가 있어서 적극적으로 사진 촬영을 유도했다면 조금 더 재밌는 행사가 되지 않았을까 싶습니다.

 

하지만 전반적으로 많은 정보를 얻어갈 수 있었던 좋은 행사였어요. 내년에 열릴 if kakao가 더욱 기대되네요 :)