전체276 매일 약속시간에 늦더라도 프로는 프로다. 나는 상가주택/단독주택이 모여있는 동네에 산다. 그리고 우리집 또한 지하 1층부터 2층까지 있는 상가주택이다. 건물의 나이가 나랑 비슷하니까, 대략 30년이 넘는다. 건물의 나이만큼 주변 동네에는 집수리를 해주는 설비집이 약 200m 간격으로 즐비하다. 오늘 이야기하려는 것은 우리가 매번 수리를 요청하는 설비집 사장님이 있는데 가게명은 '삼정건축'이다. 이 사장님을 보고 있노라면, 맨날 약속시간 정하면 그 시간을 지키지 않지만 프로는 프로구나 라는 생각이 든다. 왜 내가 이런 생각이 들었는지 이야기해보려 한다. 배경 상가주택/단독주택은 집을 지을때, 땅에 흐르는 지하수가 많을 경우 집수정이라는 것을 설치한다. 여기서 집주정이란? 지하수와 각종 슬러시가 모이는 곳을 만든 것이다. 이렇게 물이 모이게 되면 .. 2023. 10. 5. 왜 코드 리팩토링을 수행해야 될까? 지극히 개인적인 생각으로 다른분들과 생각이 다를 수 있습니다. 들어가기 개발을 하면서 코드가 '다소 객체지향적이지 않다'는 느낌의 코드 나래비를 목격하는 경우가 더러 있다. 그럼 우리는 이따금씩 이런 생각이 든다. '이거 내가 좀더 객체지향스럽게 디자인패턴이나 적절한 메소드나 용어를 활용하여 고칠 수 있을 것 같은데?' 라고 말이다. 그리곤 코드를 수정한다. 그리고 배포한다. 과연 이 의식의 흐름대로 행동하는 것이 맞을까? 개발하고 있는 서비스에서 유사한 일이 나에게 반복적으로 발생했다. 이것은 과연 문제일까? 아닐까? 개발자로서 장인정신에 입각하여 당연히 해야되는 것은 아닐까? 나는 리팩토링을 통해 무엇을 얻고 싶었던 걸까? 어떤 코드를 보고 위에서 언급한 것처럼 의식의 흐름으로 고치던 리팩토링을 어느.. 2023. 9. 26. 도메인 이벤트 기반 아키텍처의 이벤트란? 매주 일요일 밤 10시마다 지인과 함께 도메인 이벤트 기반 아키텍처를 이해하는 연습을 하고 있습니다. 도메인 이벤트 기반 아키텍처을 이야기하면 대부분 Event Souring 과 CQRS 가 가장 먼저 언급되곤 합니다. 이 모든 단어의 한 가운데에 있는 것은 바로 이벤트입니다. 아래는 과거에 작성했던 이벤트 관련 블로그 글입니다. 앞으로 이야기 할 부분에 대해서 관련있는 내용이라 읽기를 추천드립니다. 메세지와 이벤트의 차이점은 무엇인가? 들어가기 트레바리에서는 도메인주도설계를 실천하고 있습니다. 도메인주도설계라는 것은 말 그대로 도메인을 중심으로 복수의 도메인이 책임,역할, 협력을 할 수 있도록 개발하는 것을 말합 happy-coding-day.tistory.com 이벤트 스토어(?) 이벤트 소싱(?) .. 2023. 8. 28. Intellij 북마크 기능(스타 부대지정 같은) / 이전 단어 재사용하기 Intellij 를 활용하면서 자주 사용하려고 했으나 사용할 때마다 단축어를 찾는 2가지 케이스가 있습니다. 바로 북마크 기능과 이전 단어 재사용하기 북마크 기능은 스타크레프트를 했던 사람이라면 친숙한 부대 지정과 비슷합니다. ⌥ F3 또는 Ctrl+F11 – 연상 기호 북마크 추가 일단 눌러보면 다음과 같은 화면이 뜹니다. 여기서 사용하고자 하는 단축키를 선택한다. 만약 1을 누르면 다음과 같이 코드 옆에 지정한 숫자 또는 문자를 찾을 수 있다. ^(MacOs) 또는 Ctrl(Windows)을 누른 상태에서 키보드에 지정된 숫자나 문자를 누르면 북마크로 이동할 수 있습니다. 최종 사용하는 모습 2. ⌥ + / - 이전 단어 재사용 2023. 8. 22. [회고] 인프콘2023 에서의 발표를 마무리하며 들어가기 올해 저의 버킷리스트 중 하나가 바로 인프콘과 같이 큰 행사에서 발표를 해보는 것이였습니다. 작년 인프콘2022의 경우에는 참여권이 있음에도 다리를 다쳤어서 가지 못했는데, 이번에는 참여할 수 있게 되서 다행이였습니다. 그것도 참여자로서 말이죠. 물론 그 과정이 순탄치 않았습니다. 왜 순탄치 않았을까요? 인프콘2023은 8월 15일날 진행되었는데, 발표자로 선정되었던 날이 5월 24일이였으니, 준비기간까지 포함하면 약 3달간의 마라톤을 달린 셈이 되겠네요. 장장 3개월간 천천히 달리기도 하고 때론 빠르게 달리기도 했던 준비과정에서 대해서 이야기해보려 합니다. 준비&과정 이번에 발표했던 주제는 '오늘도 여러분의 API는 안녕하신가요?' 라는 주제로 발표했었지만, 이전 직장이였던 트레바리에서 만들었.. 2023. 8. 20. [특강] 도메인주도설계의 사실과 오해 후기 - 조영호 우리가 아는 '객체지향의 사실과 오해' 책에서 말하는 형식의 '도메인 주도 설계의 사실과 오해'가 아니다. 오늘의 특강 핵심 주제는 '도메인 주도 설계'가 어떻게 등장하게 되었는지에 대한 히스토리와 도메인 주도 설계와 객체 지향 프로그래밍에 대한 차이점 에 대해서 포문을 열었다. 우리가 말하는 도메인 주도 설계란? 무엇일까? 조영호님이 말씀하셨던 오해는 '대부분 우리가 말하는 도메인 주도 설계를 한다면?' 값객체, 엔티티, 팩토리, 애그리게이트 와 같은 것을 사용해야지만 도메인 주도 설계를 한다고 생각한다. 하지만 도메인 주도 설계란? 그렇지 어떤 기술적인/기법적인 것에 의존하는 것이 아니다. 그렇다면 도메인주도 설계란 무엇일까? 조영호님이 장표를 사전허가 없이 첨부할 수 없어 비슷하게 만들었습니다. 도.. 2023. 8. 18. 코드가 부채다. - 일주일간 작성한 코드를 오늘 삭제했다. 들어가기 최근에 아주 조금 내가 성장했다고 느낀 계기가 있었다. 최근 회사에서 개발자의 유후 시간이 약 한 달정도 주어졌다. 이 기간동안에는 직군별로 미쳐 시간이 없어 하지 못했던 작업을 할 수 있는 시간이 주어졌다. 기술부채로 쌓여있던 해야될 것을 나열하며 그 중 하나로서 '콘텐츠 슬롯 A/B 테스트 가능한 구조 적용하기' 가 나의 미션이였다. 무엇인지 문장만 보고 이해할 때는 말 그대로 'A/B 테스트가 가능한 구조'를 만드는게 우선이지 않을까? 라는 생각을 하며 동작하는 코드를 살펴보니 실제 동작도 하드 코딩으로서 A/B 테스트를 처리하고 있었다. 여기서 A/B 테스트란? 사용자를 A/B 군집으로 나누어 비지니스 로직/UI 등을 다르게 전달하여 더 나은 선택지를 데이터로서 찾기 위한 수단이다. 하드.. 2023. 7. 31. Lombok 동작 원리 이해하기(with. Annotation Processor) - 1 들어가기 Java 진영에서 Lombok 은 프로젝트 개발시 Must have Item 처럼 사용되곤한다. 그렇게 된 결정적인 이유는 Java 에서 관례적으로 주로 사용되는 Getter/Setter 를 애노테이션으로 쉽게 해결할 수 있기 때문이다. 그렇다면, Lombok 에서 자주 사용되는 Annotation 은 어떻게 동작하는 걸까? 그리고 Java의 Annotation 은 무엇일까? 엔지니어로 살아온 꽤 긴 시간동안 함께했지만, 깊게 살펴보지 못했던 Lombok 의 Annotation 동작 원리를 이해해보자. Annotation 이란? Java Annotation 은 Lombok 처럼 사용되기 위해 만들어진 것은 아니였다. wiki 를 살펴보면 다음과 같다. In the Java computer pro.. 2023. 7. 29. 산만함, 산만함, 산만함 [도둑맞은 집중력] 책을 읽고 제목부터 인상적인 이 책은 근래에 꾸준히 고민중이던 부분과 맞닿아 있었기 때문에 좀더 고개를 끄덕이면서 읽었다. 비판보다는 공감에 가까웠던 것 같다. '집중력'이 과거보다 짦아짐을 느낀적이 몇번 있다. 핸드폰에 울리는 알림으로 하던 작업을 멈추고 확인하는 행위의 반복, 깊게 고민하는 행위를 하지 않는 행위 등. 그래서 일까? 어느 시점부터 특정 작업을 할 때 핸드폰을 내눈에 띄지 않는 곳에 숨겨두곤 했다. 동시에 맥북의 방해 금지 모드를 켜놓고 작업한다. '도둑맞은 집중력'은 짫은 집중력이 나에게 잠재적 문제일 수 있었던 경고 수준에서 심각한 문제라 정의할 수 있도록 도와주었다. 이제 나도 인정해야 한다는 관점으로 바라보게 된다. 이 책에서 말하는 문제를 사회병이라 간주한다. 여기서 말하는 문제는 자연.. 2023. 6. 18. 다형성과 OCP(Open Closed Principle)은 무슨 관계일까? [리팩토링] 다형성을 이용한 IF 문 제거하기 들어가며 코드를 통해 본격적으로 다형성을 이용한 IF 문 제거하기 를 들어가기 앞서, 왜 IF문을 제거해야 하는지 부터 이해해보자. IF 문을 제거해야 하는 이유로 2가지를 말할 수 있을 것 같다. happy-coding-day.tistory.com 해당 포스팅을에 대한 지인이 피드백을 주셨는데, 몇가지 생각해볼만 부분이 있었고, 관련해서 이야기해보려 합니다. 2가지 맥락으로 이야기할 수 있으며, 다음과 같습니다. 1. Handler 클래스는 여전히 OCP 를 해결 할 수 없다. 2. 다형성과 IF 문을 제거하는 것은 서로 다른 것으로 결이 다른 두 개이다. 언급한 포스팅을 살펴보면, IF 문을 제거하기 전, IF 문의 단점으로 언급한 OCP가 있습니다. 그.. 2023. 5. 27. [리팩토링] 다형성을 이용한 IF 문 제거하기 들어가며 코드를 통해 본격적으로 다형성을 이용한 IF 문 제거하기 를 들어가기 앞서, 왜 IF문을 제거해야 하는지 부터 이해해보자. IF 문을 제거해야 하는 이유로 2가지를 말할 수 있을 것 같다. 인지 과부하 OCP(Open closed principle) 인지 과부하 IF 라는 키워드를 사용하게 되면, 필연적으로 우리의 두뇌는 IF ELSE 을 고민하게 된다. if(...) { // do Something A } else { // do Something A else... } if 가 한 개일때는 우리의 두뇌는 문제 되지 않는다. 2가지의 경우의 수만 고민하면 된다. 여기에 if문을 중복으로 추가하게 되면 어떻게 될까? if(...) { // do Something A if (...) { // do S.. 2023. 5. 21. 일에 대해서-[이게 무슨일이야] 책을 읽고 이 책을 선정했던 배경에 대해서 말하면서 서두를 열고 싶다. 내가 배민 개발자이기에 이 책을 선정한 것은 아니다. 나의 개발자 인생 중 그동안 지나쳐 온 회사는 인턴기간과 배민을 포함해 총 6곳의 (브릴리언트앤컴퍼니/벅시/카닥/다우기술/트레바리/배민) 회사가 된다. 결코 적은 숫자의 회사가 아니다. 이 회사 중 배민이 가장 인상깊었다. > 첫 출근날, 컬쳐 캠프, 팀장과의 대화, 테크HR과의 대화 등이 있었다. 회사를 이직할 때 경력직이라 따지는 것도 많고, 재는 것도 정말 많았다. 불평불만 많을 시기임에도 '인상깊었다' 라고 말할 수 있는 회사였기에, 배민의 일하는 본질적인 부분에 접근해보고 싶었다. 본질적인 부분에 접근하기 위해, 직접 의장을 만날 수는 없으니, 이 책을 선택하게 되었다. 결론부터 .. 2023. 5. 7. 변경을 가하기 두려울 정도로 코드가 복잡할 때, 우리는 어떻게 코드를 이해할 수 있을까? 아래 내용은 '레거시 코드 활용 전략 - 마이클 C. 페더스' 에서 발췌한 내용입니다. 우리는 개발을 하다보면 이런 상황을 겪고 합니다. 종종 이해하기 어려울 정도의 코드를 마주치기도 하고, 코드를 수정하려고 보니 겁이 나는 그런 상황이요. 우리는 이럴 때 어떻게 행동하게 되나요? 두려움을 이겨내고 코드 수정을 바로 이어가나요? 그렇게 했을 때 우리의 코드는 마치 비웃듯이 git rollback 을 하라고 소리치곤합니다. 그런 상황에서 써먹을 수 있는 간단하지만 강력한 방법을 소개하고자 합니다. 1. 노트와 스케치 활용하기 저도 자주 사용하는 방식인데, 어려운 코드보다는 도메인에 대한 이해도를 높이기 위한 수단으로 사용해왔습니다. 이해하고 싶은 코드의 도식화를 직접 그려보는 것입니다. 아주 단순하지만 강.. 2023. 4. 29. 소프트웨어 아키텍쳐 - The hard parts 호기심으로 읽어보기 시작한 이 책은 생각한거보다 더 섬세하게 아키텍쳐를 다룬다. 이 책의 한 챕터당 전개는 등장인물이 등장해 어떤 문제에 대해서 실제 일어날법한 대화를 합니다. 그 대화를 잘 읽다보면, 현업에서도 언급될 수 있는 부분입니다. 특히 흥미로웠던 것은 대부분의 회사가 겪을 수 있는, 모놀리틱 시스템에서 > 마이크로 서비스 시스템으로 점진적으로 전환을 시작하는 과정에서 발생할 수 있는 문제에 대해서다. 회사에서는 마이크로서비스로 전향한다고 해서 돈이 생기는게 아니다보니 더 고민이 될 수 밖에 없는 문제이다. 이 문제도 이 책에서 다룬다. 개발책임에도 불구하고. 이런 내용이 이 책을 더 매력적으로 느껴지게 하는게 아닐까? 분산 아키텍쳐에서 일어날 수 있는 많은 일들을 이야기하고있다. 그러나, 이 .. 2023. 3. 27. 아키텍쳐에서 '서비스' 라는 용어 어디까지 알아보고 오셨나요? 우리가 사용하는 '서비스' 라는 용어는 개발 생태계에서 많이 사용되는 용어입니다. 우리가 알고있는 전통적인 레이어드 아키텍쳐에서도 '서비스'라는 용어가 특히 Application 에서 빈번하게 사용됩니다. 도메인 주도 설계에서 말하는 '서비스'에 대해서 설명하기 전에 전통적인 레이어드 아키텍처에 대해서 설명할 필요가 있다고 생각해 아래와같이 간략히 설명해보려 합니다. 그림 1에서 보이는 것과 같이 흔히 4가지의 계층으로 구성되어, Presentation/Application/Domain/Infra 로 구성되어있고, 의존성은 아래로 향합니다. Presentation 표현계층에서는 Web 에 관련된 책임을 가지게 됩니다. 객체 변환이나 JSON 변환 등의 대표적으로 Web에 대한 책임을 가지게됩니다. App.. 2023. 3. 17. [5년차 개발자 회고]개발자 인터뷰 하고와서...(feat, 인디스워크) ------추가글---------------------------------------------------------------- 스타트업을 거쳐 우아한형제들로 이직한 개발자 ---------------------------------------------------------------------------- 우연한 기회로 추천받아 개발자로서의 김정규는 어떤 사람인지에 대해서 인터뷰했다. 아마도 유튜브에는 이번 주중에 나올 것 같긴 한데, 스튜디오 가서 촬영하다 보니 너무 민망해서 잘 안되더라. 질문은 사진과 같이 받아서 나름대로 고민해보면서 솔직하게 내 생각을 말하기 위한 스크립트를 준비했다. 그렇지만, 역시 방송 종사자가 아닌 나는 굉장히 긴장했고, 시선 처리가 잘되지 않는 부분을 발견할 수 있었.. 2023. 3. 12. 우리 모두는 브랜딩이 될 수 있다 - [오늘부터 나는 브랜드가 되기로 했다] 책을 읽고 퍼스널 브랜딩에 대한 관심을 이어가기 위해 이 책을 읽었다. 이 책이 퍼스널브랜딩과 관련해서 입문할 수 있도록 도움말을 던져주는 책이지 않을까 싶다. 최근 6주간의 퍼스널 브랜딩 워크숍 수강 후에 개발자로 어떤 방향성을 갖고 살아야 하는지 깊이 이해하고 싶었다. 이 책은 총 4부로 나뉘어 나 자신이라는 작은 스코프에서 시작해 점차 확대해나가는 내용이 담겨있다. 퍼스널브랜딩에 대한 설득을 기업의 브랜드를 인용해서 전달한다. 많은 내용이 유용했지만, 그중에서도 꽤 와닿았던 내용은 다음과 같았다. 1. 나의 브랜드를 찾는 과정은 취향을 찾는 것과 같다. 2. 보여주고 싶은 '나'와 '보이는 나'는 다르다. 3. 우리의 브랜딩은 브랜드와 ING의 결합이다. 이 3가지가 가장 기억에 남았던 부분이고, 이 책은 시.. 2023. 3. 5. 심플한 소프트웨어를 진심으로 고민해본 적이 있나요? - [심플 소프트웨어] 책을 읽고 심플 소프트웨어 책을 읽고, 내가 회사에서 하고 있던 행위가 떠올랐다. 한 때는 아키텍쳐 내에서 강한 의존이라는 버그를 끊어내기 위해 온갖행위를 했다. 과거에 했던 프로젝트 중에 Notification 프로젝트가 기억에 남는다. 이 프로젝트는 유저에게 메세지 채널을 통해 메세지를 전달하는 프로젝트이다. Slack, Email, MMS 등 메세지 채널이 될 수 있는 컴포넌트가 있고, 프로젝트 안에서 MMS 을 받지 못한다면, 카카오톡으로 메세지를 전달하도록 한다. 카카오톡으로 메세지를 읽지 않는다면, 메일로 전달한다. 내결합성에 대해서 고민했었다. Update 가 아니라 Append 만 할 수 있는 코드 만들기 이 책에서 '복잡성은 감옥이다' 부분에서 재밌는 일화를 이야기한다. 이미 퇴사한 사람에게 코드에.. 2023. 3. 1. Java Regex 정규표현식 사용시 java.lang.StackOverflowError 가 발생하는걸까 자바에서 정규표현식을 활용하다보면, BuiltIn 클래스인 Pattern 과 Matcher 이 두 가지를 사용하는 경우가 많다. Pattern 과 Matcher 을 사용할 때 주의해야될 점이 있다. 바로 재귀로 인해 무한한 루프에 빠질 수 있다는 것이다. 이로인해 위에서 말하 StackOverflowError 가 발생한다. public class RegexTest { public static void main(String[] args) { // 재귀적으로 일치하는 패턴 Pattern pattern = Pattern.compile("(a|b)*c"); Matcher matcher = pattern.matcher("aaa" + "aaa"); System.out.println(matcher.matches()).. 2023. 2. 25. 개발DB 꼭 필요한가요? 진짜 필요한거예요? 배경 회사를 옮기고 적응하는 과정에서, 개발 DB 대한 고찰을 하게 되었다. 스타트업 회사는 제한적인 리소스에서 최고의 효율을 내야만 했던 회사였으며, 이번에 옮긴 회사는 리소스가 풍부했기 때문에 무엇이든 할 수 있었다. 그 과정에서 '개발 DB는 무엇을 위해 필요로 하는가?'에 대한 생각을 하게 되었다. 들어가기 개발자가 일하는 대부분의 환경은 다음과 같은 형태로 일을 하게 된다. 프로덕트 DB(Product DB) ----- 개발 DB(DevelopDB) ----- 로컬(LocalDB) 이런 형태는 하나의 기능을 개발하고 테스트해서 최종적으로 릴리즈 되기 까지 3가지 타입의 DB을 활용하게 된다. 동작되고 있는 프로덕트에 릴리즈하기 직전까지 개발자들끼리 기능 구현시 활용하는 DB는 개발 DB. 기능을.. 2023. 2. 24. 이전 1 2 3 4 5 ··· 14 다음