대상: 우아한형제들에 관심이 있고, 우아한테크캠프에 참가하고 싶은 개발자
Session
- 세션 1) 배민서비스, 개발조직 소개 (우아한형제들 CTO 김범준)
- 세션 2) 만 3년차 백엔드 주니어가 배민에 와서 배운 것들 (빌링정산팀 이동욱)
- 세션 3) 주니어를 위한 역량 강화 트레이닝 포인트 (배민프론트개발팀 김민태)
- 세션 4) 우아한테크캠프 소개 (코드스쿼드 김정)
세션 1) 배민서비스, 개발조직 소개
1. 배달의 민족이나 우아한 형제들 하면 떠오르는 것?
보통 획기적인 마케팅, 눈을 사로잡는 폰트, 위트있는 광고 등을 먼저 떠올리는데 개발자들에게 있어서 우아한형제들에서 어떤 경험을 할 수 있을지에 대해 알게 되었다.
2. 회사의 성장과 개인의 성장
시장이 계속해서 커지는 중!
- 회사의 성장:
- 우아한형제들의 2017년 매출은 전년 대비 92% 증가했고, 영업이익은 768% 증가했다.
- 매출이 2배 가까이 성장했다는 것은 엄청난 증가폭을 의미한다.
- 또한 매출이 늘었다는 것은 서비스의 트래픽이 그만큼 늘었다는 것을 의미한다.
- http://woowabros.github.io/woowabros/2018/04/15/developer-relations.html
- 우아한형제들의 2017년 매출은 전년 대비 92% 증가했고, 영업이익은 768% 증가했다.
- 개인의 성장:
- 사업과 서비스가 빠르게 성장하면서 개발자들이 기술적으로 해결해야 하는 과제가 계속 주어지는 회사에서는, 개인에게도 성장의 기회가 많이 주어진다.
서비스가 문제 없이 돌아가도록 계속해서 새로운 시스템을 고민하고 개선하는 중!
- 회사의 성장:
- 주문 완료 기준으로 하루에 80만 건의 수치를 보인 날도 있고,
- 주문 시도 기준으로 하루에 100만 건이 넘는 수치를 보인 날도 있고,
- 저녁 시간같은 peak time에는 시간당 10만 건이 넘는 수치를 보이기도 한다.
- 개인의 성장:
- 단위 시간 내 처리하는 트랜잭션이 어마어마하게 많다.
- 우아한형제들에서는 이런 수준높은 기술적인 과제들을 경험할 수 있다.
계속해서 새로운 도전을 하는 중!
- 회사의 성장:
- 2016.11.11 아침 11시부터 선착순 1,111명에게 11,000원 할인쿠폰을 발급
- 1.89초 - 이벤트가 마감되기까지 걸린 시간
- 100배 - 이벤트 시스템이 받아낸 초당 트래픽은 평소 최대치의 100배
- 거의 1분에 20만건의 처리한 꼴, 즉 1분동안 수십만 건의 트랜잭션을 처리한다.
- http://woowabros.github.io/experience/2016/11/28/woowahan_4one_event.html
- 2016.11.11 아침 11시부터 선착순 1,111명에게 11,000원 할인쿠폰을 발급
- 개인의 성장:
- 이러한 서비스 변화는 개발자들에게 도전 과제로 주어지게 된다.
3. 실질적인 시스템 개선을 위한 프로젝트를 수행
- 본인이 아무리 노력하더라도 회사의 사업/서비스가 본질적으로 필요로 하는 기술 과제가 없는 경우, 개인이 발전하는 것은 무척 힘이 든다.
- 우아한형제들은 개발자 처우 수준을 높이고 시스템 비용을 아끼지 않는다.
- 우아한형제들이라는 회사가 일을 더 잘 하기 위한 고민을 끊임없이 계속하고 있다는 점에서 개발자들이 더 좋은 환경에서 더 다양한 경험을 할 수 있을 것이라고 생각하게 되었다.
세션 2) 만 3년차 백엔드 주니어가 배민에 와서 배운 것들
1. 예습과 복습
- 좋은 학습 패턴 TIP
- 회사에서 사용해 본, 사용해야 할 기술들만 공부하기
- 3년차 정도가 되면 같은 작업을 반복하다 보니 샛길로 잘 빠지게 된다.
- 그러면서 hot한 기술들로 딴 눈을 판다.
- 그 결과 마치 자신이 full stack 개발자가 된 것 처럼 느끼는 경지에 도달한다.
- 내가 회사에서 사용해 본, 사용해야 할 기술들을 명확히 알고 있는지 자아성찰을 한다.
- 업무 외 시간에 공부하고, 공부한 것을 검증하고, 검증한 것을 실제 운영에 반영한다.
- 백엔드 개발자에게는 data나 traffic 없이는 의미가 없다.
- 회사에서 사용해 본, 사용해야 할 기술들만 공부하기
- 포털 메인 페이지(이직 전)
- 웹 서비스 전반적인 지식
- 캐시 전략(client, server)
- 다음 페이지 요청 시에는 다시 요청하지 않고 브라우저 전역 변수로 저장된 것을 사용한다. (새로고침 했을 때는 전역 변수가 비워지기 때문에 다시 요청)
- client와 server에서 최대한 API 요청 콜을 줄이면서 캐시전략을 많이 쓸 수 있는 방법에 집중화 (100개 요청 중 90개는 캐시에서, 10개 정도 만을 실제 서버에서 가져가도록 하는 전략)
- 받아오고 캐시에 저장하고 있다가 보여주기만 하면 되니까 API요청이나 DB select가 얼마나 걸릴지, DB쿼리에 대해서는 전혀 신경쓰지 않았었다.
- 페이지 로딩 속도
- 포털 같은 경우, 메인 페이지의 로딩 속도가 얼마냐에 따라 사용률이 달라진다. (메인 페이지 로딩 속도가 30프로가 빨라지면, 사용률이 30프로가 증가한다.)
- 브라우저가 처음 시작부터 끝까지 9단계가 있는데, 그 중 어디에서 가장 많은 병목이 있었는지 측정하고 통계를 남겨 그 것을 개선할 수 있도록 연구를 한다.
- 브라우저 대응(IE 7~)
- IE 7까지 지원한다는 것은 JSON이 안된다는 것을 의미한다.
- json.js라는 라이브러리를 따로 넣어야지만 쓸 수 있다.
- 모든 코드는 순수 javascript로만 짜야 한다. (react.js, angular.js는 사용 불가)
- 죽지않는 서비스
- 무슨 일이 있어도 메인 페이지는 죽으면 안된다.
- 메인 페이지가 안되면 다른 것들이 모두 안되는 것 처럼 보이기 때문이다.
- 그 날에 해당하는 메인 페이지를 미리 html로 만들어 두고 정적으로 보여준다. (컨텐츠를 만든 사람이 어떤 것을 고치다가 오류날 일이 없다.)
- 어떻게 하면 죽지 않을까 고민해야 한다.
- 정산 시스템(신규)
- 대용량 배치 작업
- 모든 게 웹 서비스가 아닌 배치로 넣는다. (뒷 단에서 리눅스 서버에서 돌게 만든다.)
- 웹 서버 요청은 없다.
- 캐시 안되는 조회
- 돈에 대한 조회이기 때문에 캐시에 둘 수 없다.
- 모든 것을 쿼리로 날려서 데이터를 보여줘야 한다.
- 전부 쿼리로 해결해야 한다.
- 복잡한 도메인
- 포털의 도메인은 간단하다. (각각의 컨텐츠를 받아서 우리가 원하는 화면으로 뿌려준다.)
- 정산에서는 굉장히 많은 도메인이 존재한다.
- 데이터 정합성
- 1원까지 맞춰야 한다.
- 바로 죽는 서비스
- 돈이 나가기 때문에 조금이라도 틀리면 바로 rollback 시켜서 죽어야 한다.
- 대용량 배치 작업
- Q) 1억 건의 table A, 2억 건의 table B를 JOIN해서 결과를 보여줘야 한다. 어떻게 index를 걸어야 빠를까? 어떻게 스키마를 변경해야할까?
- 백엔드 개발자인데 이런 DB 쿼리도 제대로 못날리면 안된다.
- hot한 기술들을 볼 시간이 어딨는지 다시 자아성찰을 한다.
- 개인적인 공부를 시작하게 되었다.
책 추천
=> ‘어떻게 하면 쿼리를 효율적으로 짤 수 있을까’에 대해서 알 수 있는 서적
2. 기술 이야기
- 당시 19년차 가수 이소라씨가 ‘나는 가수다’에서 “혼자하는 건 재미 없잖아요.” 라고 한 말에 공감이 갔다.
- 코딩이 취미인 분들과 회사 외의 시간에도 기술적인 이야기를 공유한다.
- 회사 외의 시간에도 기술적인 이야기를 할 수 있는 것이 재미있다.
3. 호승지심(好勝之心)
- 의미: 남과 겨루어 이기기를 좋아하는 마음
- 비슷한 연차, 비슷한 나이의 동료에 뒤떨어지고 싶지 않다.
- 재능이 없으면 노력이라도 하자는 마음에서 1일 1커밋을 실천하는 중이다.
4. 논쟁
- 시니어
- 논쟁을 두려워하지 않는다.
- 옳은 방향이면 절대 물러서지 않는다.
- 코드의 앞단부터 정리한다.
- “프로젝트가 좋은 방향으로 가는 것이 가장 중요하다.” 는 마음가짐
5. 마지막 말
- “규모가 거대해지기 전까지 웹 어플리케이션에서는 기술적 도전이 수반되는 일이 거의 없다.” - 프로그래머, 열정을 말하다
- 백엔드 개발자에게는 data나 traffic 없이는 의미가 없다.
세션 3) 주니어를 위한 역량 강화 트레이닝 포인트
1. 역량 강화 비법
반복
- ‘개발자의 가장 뛰어난 능력은 어떤 것인가요?’
- “계속 반복하면서 스스로 그것이 재미있어서 다시 또 반복할 수 있는 것이 가장 큰 재능” 이다.
- 반복, 반복, 반복, 반복, …
- 반복할수록 숙련도 를 만든다.
- 어떤 것은 그 시점에 머리로 이해하더라도 그것을 반복하지 않으면 절대 자신의 것이 되지 않는다.
- 특히, 개발자는 끊임없이 반복하는 것이 일상인 직업군이라고 생각한다.
- 새로 나오는 기술들에 대해 알고는 있어야 하고, 또 어느 순간엔 그것을 써야하기 때문이다.
- 복습 만이 유일한 살 길이다.
- ‘그렇다면 반복을 어떻게 하면 잘 할 수 있을까?’
- “무언가를 잘 하려면 그것에 대한 본질을 생각해봐야 한다.”
- 반복을 얼마나 했을 때 숙련이 되었다고 할 수 있을까?
- 반복하는 힘을 얻기 위해서는 각자가 무언가를 발견해야 한다.
- 그것을 발견한 이후에, ‘무엇을’, ‘어떻게’, ‘얼마나’ 해야될까는 나만의 스타일로 결정한다.
- 모두 자신 만의 숙제
동기
- 반복할 때 가장 중요한 것은 동기(Motivation) 다.
- 하지만 동기만 있다고 되지 않는다.
- 행동으로 이어지지 않은 결심은 시작조차 하지 않은 것이다.
- 문제는, 동기를 유지시키고 행동으로까지 이어지도록하는 에너지 가 필요하다.
에너지
- 행동에는 에너지(Energy) 가 필요하다.
- 결심을 하기 위한 자신만의 에너지원은 누가 알려줄 수 없는 것으로, 스스로 찾아야 한다.
결론
- “행동의 결과가 다음 활동의 에너지원이 될 수 있는 자신만의 방법을 개발하자!”
- 반복 -> 동기 -> 에너지 순환 사이클을 통해 행위의 결과가 다음 동기로 이어지도록 한다.
- 반복이 목표
- 반복 = 행동
- 행동으로까지 가도록하는 동기가 필요
- 동기는 행동으로 연결시키는 에너지가 필요
- 반복 행위를 결과가 그 다음 동기로 계속 유지시킬 수 있는 에너지원이 되어야 한다.
‘김민태’님의 순환 사이클 과정
동기 부여 -> 피드백, 에너지 -> 동기
- 일상 업무에 코드를 사용해보기
- 매일 코드 쓰는 것이 일상인 개발자들
- 예) 엑셀/파일 등을 다루는 다양한 업무에도 코드를 이용해서 자동화하는 활동
- 업무적으로 불필요하게 시간을 뺐기는 작업을 간단하게 만들면서 또 다른 재미를 느낄 수 있다.
- 노가다를 없앨 수 있는 도구 만들기
- 다른 사람이 만든 도구만 쓰지말고, 때로는 내가 직접 만들어보자.
- 아니면, 만들어진 도구를 더 좋게 개선하는데 참여하자.
- 같은 코드는 다르게 써보기
- copy&paste 개발방법론.. X
- 코드의 숙명은 반드시 바뀐다는 것이다. 100% 완벽한 코드는 없다. 코드에 아쉬움이 남는 것이 당연하다.
- 같은 기능을 하는 코드를 copy&paste 하지말고 의도적으로 다르게 써보자.
- 실력도 늘고, 다른 관점으로 생각하게 되면서 생각의 폭이 넓어진다.
- 혼자 작업하는 것이 아니기 때문에 동료들에게 설명하거나 설득하거나 동료들의 설명을 받아들이는 연습 등 다양한 훈련을 할 수 있다.
- 동료에게 도움이 되는 도구 만들기
- 비개발 직군에게 재능 기부하기
- 결과를 공유하고 피드백 받기
- 피드백 받는 것을 두려워하지 말자.
- 누구나 반나절 만에 만들 수 있을 거라고 생각하지만, 사실은 아무도 만들지 않는다.
2. 신입은 위험하다.
신입이 위험한 이유
- 신입은 스폰지밥 이다.
- 모든 받아들일 준비가 되어 있는 상태
- 동기 충만 -> 에너지 만땅 -> 스폰지밥처럼 모든 것을 흡수하려고 한다. -> 위험하다.
- 위험한 이유?
- 반복 -> 습관 -> 관성
- 하지만 좋은 관성이 아니라면..?
- 따라서 좋은 습관을 가지고 있는 사람이 많은 좋은 회사를 골라야 한다.
- 30%, 60%, 8%, 2% 어떤 비율일까?
- (개인적인 추측과 경험을 기반으로 한 통계)
- 30%: 일을 못함. 멀리해야 하는 부류
- 60%: 받은 만큼만 함. 배울 것이 있을수도 없을수도, 좋은 점이 눈에 띄지는 않는 부류
- 8%: 일을 잘함
- 2%: 일은 정말 잘함
- 과연 구분할 수 있겠나? 신입은 스폰지 밥인데?
- “항상 비판적인 사고를 가지는 것이 중요하다.”
- 정말 맞을까 다시 한 번 더 생각하고 판단하자.
- 내 것으로 만들기 전에 모든 것을 너무 바로 수용하지 마라.
- 직속 선임을 조심하라.
- 사수가 8%, 2%에 포함될 확률이 높을까..?
결론
- “일 잘하는, 바라보고 있으면 뭐 하나라도 배울 수 있는 사람이 상대적으로 매우 적다는 것에 대한 고찰!”
3. 가슴에 품고 살기
- 사표?
- 그냥 아니다 싶으면 나가도 된다.
- 부채의식
- 의미: 빚을 지고 있다는 생각
- “개발자로서 직장인이 되지말고 ‘직업인’이 되어라.”
- 직업인을 오래 유지하기 위해서는 부채의식을 가져야 한다.
- 자료구조, OS, 네트워크, 알고리즘, DB 등에 대한 부채의식을 가져야 한다.
- 최소한 내가 이런 것들을 꾸준히 연마하지 못한다는 것에 대한 부채의식을 가져야 한다.
- 이런 부채의식이 있으면 북마크 하나라도 하나씩 더 하게 된다.
- ‘좋은 개발자?’
- “행동으로 자극을 주는 개발자!”
세션 4) 우아한테크캠프 소개
1. 소개
대학생들의 여름 방학 기간에 맞춰서 2017년에 진행했던 교육형 인턴 과정. 한 달은 정해진 커리큘럼에 따라 개발 관련 지식을 익히고, 그 다음 달은 조를 짜서 프로젝트를 진행하면서 실제 서비스를 만들면서 필요한 개발 지식을 익히는 과정을 수행하는 프로그램.
2. 참여하고자 하는 마음가짐
- 짝과 함께! 의사소통 하는 법!
- 서로 함께 도전하는 것이라는 생각을 가지고 스스로 소통할 마음을 가져야 한다.
- 근면성실
- 새시대 새일꾼
- 열정
3. 제공하는 것
- 야생 개발 교육
- 웹 기술을 깊이있게(웹 서비스를 만들어 배포하는 것 까지)
- 개발 지식, 연습, 습관
- 의지, 사회적 비용
- 학습할 수 있는 환경 제공
4. 관련 내용
http://woowabros.github.io/woowabros/2018/04/22/do_you_wanna_be_a_woowa_developer.html