거북왕
28k
2018-12-12 11:48:51
19
3674

[펌] 카카오헤어샵 개발 후기를 시작하며


https://brunch.co.kr/@cg4jins/1


안녕하세요. 저는 카카오헤어샵 서버 개발을 맡고 있는 '최창규' 라고 합니다.

카카오헤어샵이 2016년 7월 12일에 오픈했으니 벌써 21개월이 지났네요. 예전부터 카카오헤어샵 개발에 대한 후기를 쓰고 싶었는데 이제서야 시작하게 되었습니다. 처음 시작하는 블로깅이니 글 솜씨가 부족하더라고 너그럽게 이해해 주세요.

카카오헤어샵은 Java8, Springframework, JPA, PostgreSQL, MySQL, Redis, ElasticSearch, AngularJS, Kotlin Android, Swift 등 기술을 사용했습니다.

그 중에서도 저는 서버 개발을 맡고 있어서 주로 서버 기술과 시스템 아키텍쳐 등에 대하여 얘기해 볼까 합니다.

아직 정해진 바는 없지만 대략 아래와 같은 순서로 브런치 하려고 합니다.


목차

1. 카카오헤어샵의 Clean Code

2. 카카오헤어샵의 SOLID

3. 카카오헤어샵의 개발문화

4. 카카오헤어샵의 DDD

5. 카카오헤어샵의 TDD

6. 카카오헤어샵의 소스관리

7. 카카오헤어샵의 프레임워크

8. 카카오헤어샵의 아키텍처


많은 관심 부탁 드립니다.


관심있는 분은 참고바랍니다.

17
11
  • 댓글 19

  • 간지띠롱
    80
    2018-12-12 11:54:57

    잘 보겠습니다.

    0
  • 골든타임
    502
    2018-12-12 12:48:50

    네  잘보겠습니다.  기대되네요

    0
  • onimusha
    6k
    2018-12-12 13:14:38

    일단 1번 읽어봤는데 Clean code 저것만이라도 충실히 해보고 싶네요..

    (헤어샵 애용자)

    0
  • 앙앙이
    3k
    2018-12-12 17:13:47

      클린코드 책에 나와 있듯이

    파라미터수가 많으면 경우의 수가 증가하여

    테스트가 어렵습니다.

    하여 갯수 제약 충분히 이해하지만

    불필요한것나 줄실 수 있지

    필요한것을 줄일수는 없지 않습니까?

    논리적으로 1개로 묶을수 있는것을 묶어 

    갯수를 줄이긴 하였지만

    3개 이하는 여전히 어려운 문제 같습니다.

    규칙으로 이걸 강제하는것은 무리가 아닌가 합니다.

    0
  • 슬로우
    43
    2018-12-12 19:15:23

    제 짧은생각에

    파라미터수가 많아지면 객체나 배열로 묶으라는 의미로 생각됩니다

    1
  • 앙앙이
    3k
    2018-12-13 08:38:19

      파라미터 1개로 강제하고자 

    파라미터들을 1개 객체에 담는것이 무슨

    의미가 있나요.

    파라미터  수를 줄인게 아니라 1개로 묶은거죠.

    나쁘게 표현하면 조삼모사이고

    맹목적 숭배에 따른 규칙을 위한 규칙입니다.


      파라미터 수에 비례하여 테스트의 어려움이 증가하므로 파라미터  수를 줄여 테스트가 간소화 되도록 하기 위함입니다. 그런데 1개로 묶는것이 과연 파라미터수에 비례한 테스트의 어려움을 줄여 줍니까?


    단일 책임의 원칙을 충실히 따라 쪼갯다면

    대체적으로 파라미터 수가 적습니다.

    통겨적으로 적은 파라미터수가 좋은 코드라는 거죠.

    그런데 이걸 뒤집으면 많은 파라미터는 나쁜 코드다가 되는데 이걸 교조로 받아 들이면 

    무조건 1 개  이런 규칙이 생기는 거죠.

    1
  • 슬로우
    43
    2018-12-13 09:38:11
    맞습니다 일부러 한개로 묶는것은 조삼모사가 될수 있다고 생각됩니다
    필수파라미터가 여러개가 될 경우 묶는것이 유지보수에 좋다고 생각합니다
    0
  • 거북왕
    28k
    2018-12-13 09:42:30 작성 2018-12-13 11:34:33 수정됨

    파라메타를 1개 이상 작업하게 되면

    순서를 꼭 지키면서 작업해야합니다.

    이는 3개까지는 괜찮지만

    그 이상되면 작업할때 마다 순서를 기억해야되서 헷갈릴 우려가 있습니다.


    하지만 키, 밸류의 형태의 객체를 사용하면 순서를 바꾸어 사용해도 문제가 없습니다.

    키로 파라미터를 지정해서 가져오면 되므로 순서에 대해서 오류를 범할 가능성이 없어집니다.

    또한 파라메타의 갯수를 무한정 늘릴 수 있다는 장점이 더불어 생기게 됩니다.


    따라서 테스트에 도움이 됩니다.


    모두 파라메타로 작업한다면 필요하지 않는 값도 빈값으로든 어떤값으로라도 넘겨야하지만

    객체로 넘기면 필요한 것만 키와 밸류로 넘기면 됩니다.

    이로 인한 에러가 발생하지않게 됩니다.


    또한 파라메타가 1개 이상일때만 사용하는 것이 아니라

    소스를 통일하기위해 모두 공통적으로 맞춰주는 것이 좋습니다.


    리액트에서도 그런 코딩 스타일을 권고하고 있습니다.


    파라메타를 객체로 하는 것이

    나중에 파라메타를 추가, 제거하기에도 편합니다.

    0
  • 밀수나라
    159
    2018-12-13 10:54:57

    https://gist.github.com/cg4jins/992454b038686de7f87d408d1d61eb9f

    여기


    public static ShopResponse create

    리턴값에 이렇게 42줄짜리 함수를 줄줄이 엮어놓는게 일반적인건가요?

    이거 디버깅은 어떻게 하죠....?


    ShopBuilder라는 객체를 만들어 설정해서 넘겨주는 의미는 알겠는데 이렇게 수많은 함수를 호출하는거면 

    필요한 객체를 넘겨서 내부에서 알아서 하게 하는게 맞는거 같은데 외부에서 이렇게 수많은 함수를 알아서 호출해야하는건가요?


    그 코드보고 깜짝 놀랐는데...

    0
  • 앙앙이
    3k
    2018-12-13 14:09:20

       jooq 에서 보듯이 파라미터수 21(?) 개인가 최대갯수 제약이 있듯이 아무리 제가 vo 신봉자라 해도

    특히 수백 수천개 파라미터라면 map 으로 해야 한다 생각합니다.

    하지만  자바의 정적 타입 언어 특성과

    IDE 활용할 경우 파라미터 수가 적정 갯수라면 

    파라미터를 나열하는것이 해쉬보다 덜 번잡합니다. db table 을 다루는 것이 아닌 이상 단일 책임의 원칙으로 메소드를 구현하면 파라미터수가 충분히 작기 때문에 더 번잡한 해쉬로 할일 거의 없죠.

    그런데 통일성을 위해 무조건 해쉬로 하는것 자체도 규칙을 위한  규칙같네요.


    그리고 파라미터들을 해쉬로 담던 vo 에 담던

    파라미터수에 비례한 테스트의 어려움은 변하지 않습니다.

    0
  • cg4jins
    11
    2018-12-13 23:35:57

    @간지띠롱 @닭털도사 @onimusha @앙앙이 @슬로우 @거북왕


    블로그 주인입니다.

    부족한 글에 관심을 가져 주셔서 정말로 감사합니다.

    실제 프로젝트에서 겪은 경험을 나누고 싶어서 쓴 글인데 

    현장감을 생생히 전해 드리는 것이 쉽지 않네요.

    앞으로도 미력하나마 제 경험을 공유할 기회가 있었으면 좋겠습니다. 

    4
  • cg4jins
    11
    2018-12-13 23:43:45 작성 2018-12-13 23:48:51 수정됨
    2
  • 토토땅
    86
    2018-12-15 10:51:09

    좋은 글 잘 보았습니다. 


    제 코드를 반성하게 되는 글이네요.

    0
  • 아플라
    421
    2018-12-17 09:14:11

    내용 너무좋네요.

    항상 좋은자료 링크해주셔서 감사합니다.

    0
  • 등아픈환자
    128
    2018-12-18 13:54:07

    멋지네요

    잘봤습니다

    0
  • joomn11
    11
    2018-12-18 15:23:47

    잘 봤습니다. 

    좋은 내용 공유 감사드립니다!

    0
  • 지구로코
    639
    2018-12-18 16:24:57

    잘봤습니다 좋은내용 고맙습니다. 글 계속 올려주세요~

    0
  • whitera
    63
    2018-12-26 16:04:51

    좋은 내용 감사드립니다.

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.