우리는 서비스에 필요한 데이터를 서버의 상태와 관계없이 영구적으로 저장하기 위해 RDBMS라는 도구를 많이 사용합니다. RDBMS는 키 값 하나로 테이블(데이터)간의 관계를 손쉽게 형성하여 데이터를 유기적으로 저장하는데 큰 도움을 줍니다. 하지만 RDBMS의 키를 이용한 관계 설정은 코드레밸에서 데이터들을 사용하는데에 불편함을 주기도 합니다. OOP에서 객체간의 연관관계는 참조 형태로 이루어 집니다. 예를 들어 어떤 사람이 갖고 있는 음식 찾고자 할 때 다음과 같은 형태로 조회를 하게 될 것입니다. person.getFood(); // 1 하지만 RDBMS의 경우 다음과 같이 키 값을 이용해 매칭 되는 값을 찾게 되죠. foods.of(persionId: person.id) // 2 // 모든 음식들 중..
단위 테스트 테스트는 많은 개발자들에게 애증의 관계로 여겨집니다. 테스트 코드를 작성하는 것도 그렇지만, 한 번 작성한 테스트들도 유지보수의 대상이 되어 피쳐가 수정될 때 마다 테스트도 함께 수정해야하기 때문이죠. 뭔가 개발자가 스스로 일거리를 늘리는 느낌이 듭니다. 하지만 밥 아저씨는 이건 테스트의 문제가 아니라 테스트 코드(케이스)를 아무렇게나 작성한 개발자(혹은 팀)의 잘못이라고 이야기 합니다. 깨끗한 테스트 코드 유지하기 테스트 코드는 내가 작성한 코드와 기존의 코드를 신뢰할 수 있도록 도와줍니다. 테스트가 되고 있지 않은 코드는 잠재적 버그이기 때문이지요. 이런 의미에서 깨끗한 테스트는 유연성, 유지보수성, 재사용성을 제공한다고 밥 아저씨는 이야기 합니다. 그렇다면 깨끗한 테스트 코드는 무엇이고..
주석 주석은 개발자에게 있어서 '피할 수 있으면 피하고 싶은 존재'입니다. 앞서 적은 글에서 코드는 그 의도가 분명하게 드러나 있고, 다른 사람들도 파악하기 쉬워야 한다고 정리했는데, 주석은 이에 실패했을 경우를 위해 달아 놓은 부가 설명이기 때문입니다. 코드 자체만으로 완벽한 문서가 되는 것이 가장 이상적인 형태라는 것을 모두가 알고 있지만 결코 쉬운 일이 아닌 것입니다. 밥 아저씨도 주석을 '필요악'이라고 칭하고 있습니다. 물론 주석을 잘 쓰면 코드를 파악하는데 큰 도움이 되지만 정말 중요한 것은 코드이지, 주석이 아니기에 짧게 정리하고 넘어가겠습니다. 주석은 나쁜 코드를 보완하지 못한다. 주석을 어떻게 남겨야 하는지 앞서 필요한 전재입니다. 좋은 주석 법적인 고지를 위한 주석 (ex: Copyrig..

밥 아저씨(Robert C. Martin)의 명저서이자 Clean 시리즈의 대표작인 Clean Code를 정리해 봅니다. 서론 (Clean Code가 필요한 이유) 밥 아저씨는 '깨끗한 코드란 무엇인가?'라는 질문에 대한 답을 내놓기 앞서 더러운(악취가 나는) 코드의 문제점을 통해 깨끗한 코드의 필요성에 대해 먼저 설명합니다. 많은 개발자들은 오로지 당장의 구현에 집중해 코드를 짜곤 합니다. 이러한 방식은 코드를 짜는 데 있어 큰 고민을 필요로 하지 않기 때문에 당장의 생산성을 끌어올리는 데에는 좋을지 모르지만 새로운 기능들이 추가되고, 프로젝트의 복잡도가 증가할수록 단순한 수정에도 많은 노력이 필요하게 되면서 생산성 저하로 이어지게 됩니다. Clean Code에는 코드를 깨끗하게 유지하기 위한 수 많은..

Spring Container를 이용하기 위해선 Bean객체와 의존성을 관리하기 위한 구성정보가 필요합니다. 이러한 구성정보를 제공하기 위해 @Container를 이용해 구성정보 클래스를 정의하죠. 객체생성과 주입에 대한 역할을 분리 할 수 있으니 너무나 좋은 방법입니다. 하지만 관리해야 하는 객체가 많아진다면 이 또한 문제가 될 수 있습니다. Spring은 @ComponentScan 이라는 어노테이션을 제공합니다. ComponentScan은 구성정보 없이도 자동으로 빈들을 등록하고 관리하는 기능입니다. ComponentScan은 @Component 어노테이션이 붙어있는 객체들을 빈으로 등록합니다. @Service, @Repository, @Controller는 모두 이미 @Component 어노테이션이..
Spring의 핵심 혹은 꽃이라 불리우는 IoC Container에 대해 알아보겠습니다. 무언가의 정의에 대해 알기 위해선 공식 문서를 참고하는 것이 가장 좋겠지요. Spring에도 reference문서가 있습니다. https://docs.spring.io/spring-framework/docs/5.3.x/reference/html/core.html It(IoC or DI) is a process whereby objects define their dependencies (that is, the other objects they work with) only through constructor arguments, arguments to a factory method, or properties that ar..
Spring이 어떻게 SOLID한 프로그램을 만들도록 돕는지 살펴보기에 앞서 예제를 설정해 보겠습니다. @Controller public class 배고픈철수 { private MealService mealSerivce; @GetMapping("/eat") public 식사 meal() { ... } } 배가고픈 client(controller) 철수는 식사를 하기 위해 식사 제공 서비스를(MealService)를 이용합니다. MealService는 다양한 메뉴로 식사를 제공하는데, MealService는 여러 업체들의 아웃소싱을 통해 메뉴를 제공 받는 다고 합니다. 그리고 각 아웃소싱 업체들은 MenuSelection이라는 정책에 맞게 메뉴를 제공해야합니다. 이러한 요구사항들은 다음과 같이 구현해볼 수..
객체지향 프로그래밍의 5대 원칙이라 불리는 SOLID는 2000년대 초반 로버트 C. 마틴에 의해 정립되었습니다. 로버트 C. 마틴이 각각의 원칙을 세운 것은 아니지만 여러 가지 소프트웨어 설계 원칙들을 종합하고 정리한 것입니다.. 현재 SOLID 객체지향 적인 프로그래밍을 하는 거의 모든 개발자들에게 지켜야만 하는 최우선의 원칙들 중 하나가 되어 있는 것 같습니다. Spring이 어떻게 개발자로 하여금 SOLID 한 코드를 작성하도록 돕는지에 대해 이야기해보고자 하는데 먼저는 SOLID가 무엇인지부터 알아보겠습니다. SOLID는 서로 다른 5개의 원칙들의 알파벳 첫 글자를 따서 이름 붙여졌습니다. 이 다섯 가지 원칙은 다음과 같습니다. Single Responsibility Principle - 단일 ..