본문 바로가기

트레바리13

'멤버십 환불/해지' 프로젝트를 마치며. '멤버십 해지/환불' 고도화 프로젝트를 마치며 [TOC] 이 포스트를 통해 무엇을 말하고 싶은지? 왜 이것을 하게 되었는가? 스스로 생각하길 잘하지 못한 부분 스스로 생각하길 잘한 부분 왜 이것을 하게 되었는가? 트레바리는 오프라인 서비스이다. 대다수의 많은 유저는 약 4번의 오프라인 서비스 이용을 위해 20만원 이상의 금액을 낸다. 20만원 이상의 금액을 사용하는 하는 유저에게는 클럽에 참여할 수 있는 권한. 즉 멤버십 이 생겨난다. 만약, 해당 유저가 '더 이상 모임에 참여를 원하지 않는 경우에는?' 어떻게 되는가? 유저에게는 모임에 참여할 수 없도록 멤버십이 해지되고, 결제한 금액에서 수수료를 제외한 일부 금액을 환불받게 된다. 대부분이 '더 이상 모임에 참여를 원하지 않는 경우' 에 멤버십 해지와.. 2022. 5. 16.
나쁜 냄새가 드는 한마디 "잠깐만요 코드좀 볼게요." "잠깐만요 코드좀 볼게요" 우리는 언제 이런말을 해봤을까요? 개발 업무를 하며 한번쯤은 우리가 말해봤거나, 반대로 누군가에 의해 들었던 말인데요. 오늘은 이 말이 의미하는 바에 대해서 이야기해보려 합니다. 근무하는 트레바리 테크유닛의 PE셀에서는 간단하면서도 도전적인 첼린지를 했습니다. 플랫폼 관련 업무만 하다 보니 프론트엔드 업무는 해본 적이 없었습니다. 그러다, 우연히 해볼 수 있는 기회가 생겨 약 3명의 개발자가 쿽하게 개발해볼 수 있는 기회가 생겼습니다. next.js 프레임워크에서 간단히 UI Form 이 변경되는 것이 이번 프로젝트의 목적이였습니다. 단, UI Form 이 보여지게 될 때 변경 전/변경 후 UI 가 특정 비지니스 로직에 따라 다르게 보여야만 했습니다. 특정 비지니스 로직? 이번.. 2022. 3. 6.
개발자는 '다형성을 활용한 리팩토링'을 수련해야 한다. 앞선 포스터에서 Interface Segregation Principle (인터페이스 분리 원칙) 에 대해서 이야기했다. 이제 본격적으로 인터페이스 분리 원칙을 함으로써 얻을 수 있는 실용적인 이익에 대해서 이야기해보려 한다. 또한, 인터페이스 분리 원칙과 테스트 코드를 함께 작성함으로써 다형성을 활용할 수 있는 냄새를 맡을 수 있었다. 같이 한번 살펴보자. 아래 테스트 코드에서는 메소드 하나가 너무 많은 역할을 한다는 냄새를 맡을 수 있다. @Test void execute_with_single_notificationTarget() { given(targetProvider.getTargets()).willReturn(List.of(target1)); given(factory.findBy(any()))... 2022. 2. 27.
개발자는 '추상화 이해하기'를 수련해야 한다. 객체지향 프로그래밍에서 객체지향프로그래밍에서 말하는 중요한 원칙이 있습니다. 바로 SOLID 이다. 여기서도 'I' 에 해당하는 Interface Segregation Principle (인터페이스 분리 원칙) 에 대해서 먼저 알아보려 합니다. Interface Segregation Principle(인터페이스 분리 원칙) 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다. 하나의 일반적인 인터페이스보다는, 여러 개의 구체적인 인터페이스가 낫다. User1, User2, User3 가 Ops 클래스에 op1, op2, op3 를 사용하고 있다고 가정합니다. User1 입장에서는 op2, op3 를 사용하고 있지 않음에도 불구하고, 사용할 수 있는 환경입니다. User2 입장에서도 op1.. 2022. 2. 22.
트레바리 Notifier 프로젝트 회고하기 [Index] 나는 무엇을 개선했는가? 어떤 비지니스 이펙트를 일으켰는가? 새롭게 배울 수 있었던 것은 무엇인가? 아쉬웠던 부분은 어떤 부분인가? 다음 프로젝트에 개선해야될 것은 무엇인가? ✅ 나는 무엇을 개선했는가? 📃 문제점 1. 경직된 소프트웨어 다른 규칙의 SMS 규칙은 불가하다. 문자 발송시기 조정이 불가하다. 일시적으로 SMS 규칙을 중지하기 원한다. 2. 불명확한 시스템 Google Sheet 에서 문자 템플릿을 관리하고 있지만, Fresh 한 상태가 아니다. 이또한 코드로 연결되어 있지 않다. 매번 Senders 웹페이지에 접속하여 발신 내역을 조회하고 / 인증문자을 전송을 확인한다. 3. 잦은 버그 AWS에 의존적인 부분에 대해서 전체 테스트가 불가능하기 때문에 배포하고 나서 기도한다. .. 2022. 2. 20.
개발자는 '빨리 나아가지 않는 방법'을 수련해야 한다. 아래는 개발하며 무의식적으로 성급함이 드러난 코드입니다. // NotificationExecutorTest.class; @Test void execute_single() { NotificatorFactory factory = mock(NotificatorFactory.class); Notificator notificator = mock(Notificator.class); envelopeNotification = EnvelopeNotification.of(ANY_ID, NotificationType.SMS, NotificationFactory.create(ANY_SUBJECT, ANY_CONTENTS, ANY_DESTINATION, ANY_SOURCE)); given(factory.findBy(Notifi.. 2022. 2. 9.
[나는 왜 이일을 하는가?]을 읽고나서 🧾 트레바리라는 서비스를 통해 이 책을 읽을 수 있었다는 것은 큰 행복이였다. 사실 몃 년전에 구매를 해놨지만 읽지 않았기 때문이다. 이 책은 단순히 사이먼사이넥이 말하는 골든서클(Why, How, What)의 이론을 증명하기 위한 내용만 포함되어 있다고 생각하지 않는다. 내가 하고 있는 이 일을 왜 해야되는 걸까? 라는 질문에 대해서 여러 방향의 정답 찾기 를 도와주는 책이라 생각한다. 현 트레바리 CTO인 완수형과 대화하던 중 이런 얘기를 했었다. "형이 생각하기에 아마추어와 프로의 차이가 무엇인것 같은가? 주니어 개발자와 시니어 개발자의 차이는 무엇인거 같은가?" 라는 질문을 했던 적이 있었다. 이 때 완수형이 말한 얘기중에 인상깊었던 것은 이 부분이였다. "자신의 가치관을 중심으로 코드를 작성했는가?.. 2022. 1. 31.
개발자들이 문서화를 하는 이유는 뭘까? 왜 하는거지? 개발 조직에는 많은 개발 문서가 있다. 그리고 그 중 90%는 폐기 대상이다. - 트레바리 CTO 누군가 트레바리 CTO에게 이런 질문을 했습니다. "쿠팡에 계실 때 개발조직은 문서화를 어떻게 하셨나요?" 문서화... 오늘은 이 문서화에 대해서 이야기해보려 합니다. 이전 근무하던 회사에서도 트레바리와 같은 atlassian의 Confluence를 사용했다. 그 때 사용되었던 형태를 살펴보면 다음과 같은 상황에 사용되었던 것 같아요. - 개발 가이드 - 메인 서비스의 아키텍쳐 - 백엔드 개발자가 프론트엔드 개발자에게 공유할 API - 특정 도구에 대한 사용법 - v1, v2.., deprecated 릴리즈 가이드 - 프로젝트의 계획 및 회고 ... 이전 직장의 서비스는 약 10년동안 숨셨던 서비스였던 만큼.. 2022. 1. 24.
현실을 마주할 용기 - '10년 후 세계사 두 번째 미래' 책을 다 읽어 갈 때 즈음 '닫는 글'에서 공감되는 구절이 있다. '어쩌면 우리는 역사를 통틀어 낙관에 의지해 생존해왔는지도 모른다. 이성이 온통 비관적이라고 말해도 의지로 낙관하면서 말이다' 나도 같은 마음으로 살고 있는건 아닐까? 더 나아가 현실을 마주할 용기가 있는가? 나 자신조차도 '1부 기계와 일 > 인간을 배우는 기계, 기계를 배워야 하는 인간'에서 말하는 흐름 속에서 밀접하게 있음에도 불구하고 이 흐름을 부정적으로 바라보고 있는 내 모습을 발견했다. 나의 직업만큼은 결코 기계에 내어줄 수 없어! 라고 말하곤 하지만, 나의 행위를 지켜보면 이미 기계에 많은 것을 내어주고 있다. 커피숍의 키오스크, 구글의 추천뉴스, 유튜브 등 나보다 나를 더 잘 아는 시스템이 나에게 하는 메시지에 집중하고 있다.. 2021. 12. 19.
잠시 창업자의 마음으로 - '디커플링' 마지막장의 디커플링 책을 내려놓고, 잠시 지금까지의 책 내용을 되돌아 보며 생각한 첫번째 행위는 잠시 나를 내려놓고 창업자의 마음으로 주변 서비스를 둘러보는 것이였다. 책에서 말하는 디커플링이란, 말 그래도 분리하기, 해체하기, 끊어내기이다. 기존의 기업이 고객에게 제공하는 소비 활동 사이를 끊어내는 것을 말한다. 이런 행위를 통해 특정 시장에 파괴적인 혼란을 불러일으켜 혁신적으로 시장을 장악하는 것을 말한다. 책에서 말하는 디커플링의 5단계는 아래와 같다. 1단계: 타킷 세그먼트의 고객 가치사슬을 파악한다. 2단계: 고객 가치사슬을 재정의한 비즈니스 모델에서 말한 가치 유형로 분류한다. 3단계: 고객 가치 사슬 중 약한 부분을 찾는다. 4단계: 약한 사슬을 분리한다. 5단계: 경쟁기업의 반응을 예측한다.. 2021. 11. 28.
스타텁-시리즈A: 세상에 없던 새로움을 꿈꾸며 [트레바리 독서 모임 후기] 트레바리 독서모임 참여 후기 약 한달 전에 스타텁-시리즈A 를 신청했다. 이 모임을 신청했던 계기는 이번에 대기업에서 스타트업으로 이직하게 되면서, 스타텁의 자세? 스타텁에서 내가 지녀야할 마음에 대해서 알 수 있었으면 좋겠다 라는 마음으로 신청하게 되었다. 첫 모임의 책은 '절대 성공하지 못할 거야' 으로 북리뷰는 여기서 찾을 수 있다. 약 한달 동안 책을 읽고, 강남에 위치한 트레바리 모임에 참여했다. 스타텁 이라는 주제덕분인지, 모임에 참여했던 분이 다양한 분야의 사람들로 채워졌다. 대기업에 다니며 스타텁 회사에 근무를 희망하는 사람, 갤러리 큐레이터, 특정 회사의 인사팀, 순수예술 화가, 스타텁 개발자, 그리고 많은 창업자분들이 참여했다. 작은 공간에 큰 동그란 책상에 모여 '절대 성공하지 못할 .. 2021. 11. 7.
한번에 단계를 뛰어넘어 버리는 비약적인 코드를 피하자. SqsNameMapping 를 구현하는 과정에서 비악이 일어나는 코드를 작성하게 되었습니다. 비약이란? 비약은 논리나 사고방식이 '중간과정을 건너 뛰었다'는 뜻으로, 상대방의 논지전개에 있어 허구성을 지적하거나, 실현가능성이 희박한 내용을 과장하는것을 지적하는 말 입니다. 아래 코드는 2단계를 뛰어 넘어서는 비약된 코드이다. @Component @ConfigurationProperties(prefix = "aws.xxx") public class XxxNameMapping implements Mapping { private Map queue; @Override public String get(String type) { return queue.get(type); } } 왜일까? 1단계 XxxNameMapp.. 2021. 10. 29.
메세지와 이벤트의 차이점은 무엇인가? 들어가기 트레바리에서는 도메인주도설계를 실천하고 있습니다. 도메인주도설계라는 것은 말 그대로 도메인을 중심으로 복수의 도메인이 책임,역할, 협력을 할 수 있도록 개발하는 것을 말합니다. 실제로 동작되는 코드로서 도메인주도설계를 실천하며 우리는 메세지와 이벤트라는 용어를 자주사용했습니다. 이미 횟수로 귀로 많이 들어왔지만- 깊이있는 고찰을 하지 못했습니다. 헷갈릴 수 있는 두 용어에 대한 이해를 정리해보려 합니다. 본문 도메인주도설계는 잠시 잊어버리고 메세지란 무엇일까? 흔히 우리는 '메세지를 전달한다' 라고 말합니다. 이 말은 즉슨, A → B 에게 의미있는 내용을 전달하기 위한 행위라 볼 수 있습니다. 그럼 도메인주도설계에서는 어떤 의미를 가질까요? 여기서 USER, MEMBER 는 AGGREGATES.. 2021. 10. 23.