처음 컬리에 입사했을 때 팀 내에서는 Java/Spring 스택으로 백엔드 개발을 진행하고 있었습니다. 이전 회사에서도 같은 스택을 사용해서 적응하기에 별 무리 없겠구나~ 했는데 웬걸, 프로젝트 구조가 그동안 봐왔던 것과는 상이했던 거였죠. 원래는 계층형 아키텍처를 사용하였습니다. 흔히 백엔드 개발을 시작하면 배우게 되는 그 Controller/Service/Repository 구조입니다. 가장 단순하고 이해하기 쉬운 구조여서 그런지 학생들을 가르칠 때도 많이 사용하죠. 저도 예외는 아니었습니다. 그러나 마주친 것은 이름조차도 낯선 헥사고날 아키텍처(Hexagonal Architecture)였습니다. 어댑터, 유스케이스, 포트 등 현란한 용어들 사이에서 저는 정신을 차릴 수가 없었습니다. 헥사고날 아키텍..
덕토피아
길벗 출판사에서 IT 도서 리뷰 요청 제의가 들어왔습니다. 한 달이라는 기한을 잡았는데, 차일피일 미루고 급한 작업이 생기다 보니(변명이겠죠) 마감일을 꽉 채워서 포스팅을 쓰게 되었습니다. 스트리트 코더(Street Coder)란, '이 바닥'에서 여러 시행착오를 겪으며 배웠다는 뜻입니다. 독학으로 마이크로소프트 엔지니어가 된 저자가 시행착오를 겪으며 몸소 깨달은 생존 법칙과 노하우를 집필하였습니다. 실무 경험에 뿌리를 둔 현실적인 조언을 하는 책으로, 주니어 ~ 시니어 모두 읽기 좋은 책입니다. 특히 실무 경험이 없는 신입이 학교에서는 배울 수 없는 노하우로 시야를 넓히고 경험의 차이를 좁힐 수 있을 것입니다. 개발자로 살아가며 저희가 알아가는 중요한 이론들이 있죠. 컴퓨터 과학, 알고리즘, 클린 코드..
자바 언어로 개발하다 보면, 다양한 어노테이션을 활용할 때가 많습니다. 도대체 내부가 어떻게 되어있는지 궁금해서 들어가 보면, 알 수 없는 이상한 코드들과 마주칩니다. 어노테이션을 직접 생성하거나 유심히 공부해보지 않았다면 처음 보는 코드가 많을 겁니다. 비교적 자주 사용하는 @Getter 어노테이션인데도, 내부를 까보면 마치 외계어처럼 낯설기만 합니다. 이번 포스팅에서는 어노테이션이 무엇인지, 종류에는 어떤 것이 있는지, 그리고 샘플 코드를 통해 어노테이션을 조금 더 깊게 알아봅시다. 끝에는 이 낯선 @Getter 코드도 조금은 이해할 수 있을 것입니다. 어노테이션이란? 어노테이션이란 과연 무엇일까요? 단순히 앞에 골뱅이(@) 기호를 붙인 것일까요? 사용법으로는 맞지만, 우리가 원하는 어노테이션의 정의..
한빛미디어에서 책 리뷰 협업 제의가 들어왔습니다. 당시 좀 긴 분량의 책(600p 이상)을 읽고 있었고, 기분 전환이 되겠다 싶어 수락하였습니다. 제의가 들어온 책은 "도메인 주도 개발 시작하기"의 최범균님의 신작, "육각형 개발자"입니다. 책은 주니어 개발자가 시니어 개발자로 성장하기 위한 핵심 역량에 대해 소개하고 있습니다. 총 11장으로 이루어져 있고, 270페이지가 조금 넘습니다. 신경 써서 본다면 일주일이면 충분히 완독할 분량입니다. 각 장의 내용은 다음과 같습니다. 책의 목차 1장. 들어가며 2장. 구현기술과 학습 3장. 소프트웨어 가치와 비용 4장. 코드 이해 5장. 응집도와 결합도 6장. 리팩터링 7장. 테스트 8장. 아키텍처, 패턴. 9장. 업무관리 10장. 정리하고 공유하기 11장. 리..
어떤 웹 페이지에 들어갔을 때 404 Not Found, 혹은 503 Service Unavailable 같은 문장을 본 적이 있을 것입니다. 개발자가 되기 전에는 그저 원하는 결과를 보지 못해 짜증만 유발하였는데, 이제는 코드가 대략적인 원인을 파악하게 만들어주는 고마운 녀석들이라는 것을 압니다. 그러나 기본적인 코드(200, 404)를 제외하고 여전히 아리송한 상태 코드들이 많습니다. 각 코드의 의미에 맞는 적절한 사용을 위해 이번 포스팅에서는 자주 보는 HTTP Status Code에 대해 알아봅시다. Status Code가 뭔가요? 요청이 성공적이었는지의 여부를 빠르게 검사할 수 있는 세 개의 숫자로 구성된 코드입니다. 기본적으로 100번에서 500번대 까지 5개의 그룹으로 나뉘어 있으며, 코드의..
코딩을 하다 보면, 정말 수많은 예외와 마주치게 됩니다. 그러나 예외에는 어떤 종류가 있는지, 어떤 상황에서 예외가 발생하는지 자세히 들여다볼 기회가 없었습니다. 이번 포스팅에서는, 자바 예외의 종류와 각각 어떤 Exception이 속해 있는지 알아봅시다. 3가지 예외 자바 예외는 크게 3가지 유형으로 나누어집니다. Checked Exception: 명시적으로 처리해야 하는 예외 (IOException, FileNotFoundException 등) Unchecked Exception: RuntimeException 상속. 명시적인 예외 처리를 강제하지 않음 (NullPointerException 등) Error: 시스템에 비정상적인 상황이 발생한 경우 (StackOverflowError 등) 쉽게 설명하..
프로그래머가 되고 싶다면.. 소프트웨어 개발 분야에서 경력의 시작을 설계하고 이 분야에서 탁월한 개발자가 될 수 있도록 자기 자신을 세우는 일에 관한 책이다. 프로그래밍을 생업으로 삼으며 견습이라고 부를 만한 시기에 어떻게 행동해야 이상적인 길을 걸을 수 있을지, 정말로 제대로 배우려면 어떤 마음가짐이어야 하는지, 커뮤니티를 어떻게 활용해야 내게 도움이 되는지 등 구체적인 상황과 해결책을 멘토의 조언을 빌어 제시한다. 경험이 적은 소프트웨어 개발자들이 흔히 마주치는 딜레마에 대한 해결책을 공유합니다. 추천 독자는 소프트웨어 개발이 무엇인지 알게 되면서 이제 훌륭한 소프트웨어 개발자로 성장하기를 열망하는 사람들 이니, 시니어보다는 주니어에게 더 적합한 책입니다. 개발자들이 마주치는 여러가지 문제 상황을 제..
프로그래밍에서 공통적인 문제를 쉽게 해결하기 위해 만들어진 가이드라인을 디자인 패턴(Design Pattern)이라고 합니다. 라이브러리처럼 실제 코드를 제공하지는 않지만, 특정 유형의 문제를 해결하는 방식을 제공합니다. 수학으로 비유해 보자면 '공식'이죠. 프로그래밍 전문가들의 땀과 눈물로 만들어진 결과물이라고 할 수 있겠습니다. 디자인 패턴으로 잘 알려진 감마 외 3인(Gang of Four, GoF)이 쓴 디자인 패턴 책에서는 23가지 기본 디자인 패턴을 소개하고 있습니다. 그러나 이번 포스팅에서는 주로 사용되는 싱글톤, 빌더, 옵저버 패턴에 대해 알아보겠습니다. 왜 디자인 패턴이 필요한가? 1. 재사용성: 디자인 패턴을 사용함으로써 개발자는 문제가 발생할 때마다 코드를 다시 구현하는 대신 기존 솔..
스프링 프로젝트를 진행하다 보면, 우연히 두 개 이상의 빈(bean) 타입이 중복되는 경우가 발생할 수 있습니다. 이런 경우에는 NoUniqueBeanDefinitionException 에러가 발생하여 어떠한 빈이 중복되었는지 알려줍니다. ! 문제 상황 발생 ! 그렇다면, 해당 에러가 발생했을 때는 어떠한 해결책이 있을까요? 우선 문제가 발생하는 상황의 예시를 봅시다. 같은 타입의 이름이 다른 두 개의 빈을 등록하였습니다. 등록할 때는 문제가 되지 않습니다. 에러가 발생하는 것은 실제로 해당 타입의 빈이 사용이 될 때입니다. 다음 예제를 볼까요? 스프링 부트 입장에서는 참 난감합니다. 같은 타입의 빈이 두 개가 있는데, 어떤 의존성을 주입하라는 건지 알 수가 없습니다. 불쌍한 스프링 부트를 위해 이 에러..
다 사용하고 난 자원을 반납하기 위해서 어떤 방법을 채택하시나요? 혹시, try-catch-finally 구문을 사용하지는 않으신가요? 맞다면, 축하드립니다! 더 간편한 방법을 사용할 수 있는 기회를 잡으셨습니다! try-catch-finally를 사용한다면 사용 후에 반납해야 하는 자원들은, 대부분 close 형태의 메서드를 가지고 있습니다. 사용 후에 자원을 해제하지 않는다면, 메모리 누수 및 성능 저하의 문제를 일으킬 수 있기 때문에 프로그램이 예상과 다르게 작동할 수 있습니다. 그렇다면 이제, 흔히 사용하는 try-catch-finally 형태의 자원 해제 예시를 살펴볼까요? 어떤가요? 꽤 괜찮아 보이지 않나요? 예외 처리가 발생하든 안하든 상관 없이 항상 자원을 해제할 수 있으니, 나쁘지 않아 ..