전체 글 13

전략적 설계 - Context Mapping

도메인 주도 설계(DDD) 의 전략적 설계(혹은 전략적 패턴) 에서 쓰이는 컨텍스트 매핑이 무엇이며, 컨텍스트 매핑에서 자주 사용하는 패턴에 대해 공부하고 실무에 어떻게 적용할지 설명합니다.컨텍스트 매핑이란?도메인 주도 설계(DDD)에서 여러 개의 바운디드 컨텍스트(Bounded Context)가 서로 어떤 관계를 맺고 있는지 시각적으로 표현하는 기법입니다.* 바운디드 컨텍스트(Bounded Context)는 특정 도메인 모델이 일관되게 유지되는 경계를 의미합니다. 특히, 하나의 시스템 내에서도 여러 개의 바운디드 컨텍스트가 존재할 수 있습니다.예를 들어, 제가 담당하는 셀러 오피스 시스템에서는 상품, 주문, 회원, 클레임 등등 여러개의 컨텍스트가 존재합니다. 게다가 서로 다른 시스템 간의 바운디드 컨텍..

개발/DDD 2025.02.07

GoF 디자인 패턴 : 커맨드 패턴 (그런데 CQRS 패턴을 곁들인...)

실무에서 즐겨 쓰고 있는 GoF 의 디자인 패턴 중, 커맨드 패턴에 대해 작성합니다.저는 실무에서 CQRS(혹은 CQS) 패턴을 적용하여 CRUD 중 CUD 명령을 처리하는 Command 와 R 에 해당하는 Query 를 명확히 분리하여, 클래스의 단일 책임을 적용하고 응집도를 높이는 방법을 채택했습니다.이번 글은 CQRS 패턴에 대해 자세히 설명하는 것보다 GoF 의 디자인 패턴 중 커맨드 패턴에 대해 설명드리고자 CQRS 패턴은 다음에 자세히 다루도록 하겠습니다. CommandHandlerSpring 프레임워크의 내부 코드들을 들여다보면 ~~CommandHandler 라는 클래스가 종종 보입니다. CommandHandler 는 커맨드 패턴을 활용하여 Command 명령을 처리하는 객체입니다.즉, Co..

정적 팩토리 메소드 컨벤션 : from() 과 of()

오늘 회사 동료의 코드를 리뷰하면서 제안드린 내용을 정리합니다. from() 과 of() 는 일반적으로 정적 팩토리 메소드(Static Factory Method)의 이름으로 사용되며, 각각 미묘한 의미적 차이를 가지고 있습니다. 아래는 동료가 작성했던 PR의 코드 중 일부분입니다.public static Product of(DraftProduct draft) { return Product.builder() .name(draft.getName()) ... // 중략 .build();}보기에는 딱히 이상한 부분이 없죠.다만, 일반적으로 메소드 네이밍 컨벤션에서 of() 는 아래와 같은 의미로 사용됩니다. 명확하고 직관적인 값 반환: of()는 주어진 인자를 사용하여 명확한 ..

블로그를 다시 시작 해보려고 합니다

안녕하세요.2025년 새해를 맞아 오랜만에 블로그에 글을 올립니다.그동안 티스토리 말고 개인 Github Page 를 이용해서  jekyll 를 이용해 별도로 기술 블로그를 작성했었는데요.그 블로그는 폐쇄하고 티스토리에서 다시 시작하려고 합니다. . . . 어느새 8년차 직장인이 되었는데요.경력도 주니어 엔지니어에서 미들급 엔지니어로 접어들었습니다. 그동안 많이 깨지고 많이 배우고 많이 성장했는데요.다시 블로그를 시작하면서 그동안 배우고, 실무에 적용 했었던 기술들 및 경험에 대해 공유하고 또 공유하면서 배우는 계기가 될 것 같습니다. 감사합니다.

생각 정리 2025.02.02

[Spring] Spring MVC

Spring MVC - 톰캣을 실행시키면 서블릿 컨테이너가 구동된다. 그 후 web.xml 의 내용을 불러와 생성해주고 관리해준다. - Web.xml 내용대로 .do 리퀘스트가 생기면 디스패처 서블릿이 실행된다. - 디스패처 서블릿은 스프링 컨테이너를 구동하고 핸들러 매핑을 이용해 컨트롤러를 검색하도록 요청하고 핸들러 매핑은 해당 컨트롤러 객체를 리턴한다. - Controller 는 model and view 에 비즈니스 로직 후에 얻은 결과물을 셋팅하고 View 단으로 리턴한다. - 디스패처 서블릿은 응답할 View 객체를 찾기 위해 ViewResolver 에게 질의를 한다. - ViewResolver 를 통해 찾아낸 Viewp(jsp)에 request를 전달 한다.

개발/SpringBoot 2018.11.19

[Spring] Model1, Model2 아키텍쳐

Model1 아키텍쳐 - 클라이언트가 jsp 요청 - jsp 에서 View 단의 html 과 css 를 처리하고 Controller 단의 사용자 입력정보추출, DB연동처리, 화면 네비게이션 등의 기능을 처리한다. - jsp 에서는 자바빈즈를 이용해 비즈니스 로직인 Model 에 접근한다. - 그 다음으로 DB 연동을 통해 사용자가 요청한 정보를 가져온다. - 요청에 대한 응답으로 통신을 마친다. - 이 구조의 특징은 jsp 에서 Controller 기능과 View 기능을 모두 제공한다는 것이다. 이로 인해서 jsp 파일에 자바 코드와 디자인 소스들이 혼재하기 때문에 유지보수에 어려움이 따른다. Model2 아키텍쳐 - 클라이언트가 jsp 를 요청 - Controller 단의 Servlet 은 브라우저의 ..

개발/SpringBoot 2018.11.19

Clean Code - 객체와 자료구조

자료 추상화 구체적인 클래스는 구현을 외부로 노출하고 추상적인 클래스는 구현을 감춘다. 그저 조회 함수와 설정 함수로 변수를 다룬다고 그것이 클래스는 아니다. 추상 인터페이스를 제공해 구현을 모른 채 자료의 핵심을 조작할 수 있는 것이 클래스이다. 또한 클래스 메소드명도 추상적이게 표현하여 구현을 감추는 것이 더 추상화 된 표현이다. 인터페이스와 조회/설정 함수만으로는 추상화가 이루어지지 않는다. 객체가 포함하는 자료를 표현할 방법을 고민하여 추상화 시켜야지, 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁜 표현 방법이다. 자료/객체의 비대칭 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만을 공개한다. 반면, 자료구조는 자료를 그대로 공개하며 별다른 함수를 제공하지는 않는다. 자료구..

개발/Clean Code 2018.11.05

Clean Code - 주석

주석 나쁜 코드에 주석을 달지 마라. 새로 짜라. – 브라이언 W. 커니핸, P.J. 플라우거 주석은 사실상 ‘필요악’이다. 프로그래밍을 통해 좋은 코드를 만들면 주석은 전혀 필요없다. 코드로 의도를 표현하지 못해서 실패를 만회하기 위해 주석을 사용하는 것이다. 주석이란 1. 주석은 나쁜 코드를 보완하지 못한다 : 코드 품질이 나쁘기 때문에 주석을 달아 알아먹기 쉽게 만들기 위해 주석을 단다. 틀렸다. 코드를 정리해서 좋은 코드를 만드는게 정답이다. 자신이 저지른 난장판을 주석으로 설명하려 애쓰는 대신에 그 난장판을 깨끗이 치워라. 2. 코드로 의도를 표현하라 : 개발자는 코드를 “의도를 표현하기 위한 훌륭한 수단” 이라고 생각해야 한다. 코드만으로 의도를 설명하기 어려운 것은 잘못된 생각이다. Ex) ..

개발/Clean Code 2018.10.02

Clean Code - 깨끗한 함수

깨끗한 함수란? 함수 : 프로그램의 기본적인 단위 함수를 잘 만드는 방법 1. 작게 만들어라 : 함수를 만드는 규칙은 첫번째 ‘작게!’, 두번째 ‘더 작게!’ 이다. 중첩 구조가 생길만큼 함수가 커져서는 안된다. 블록 들여쓰기는 1단이나 2단이 적당하다. 2. 한가지만 해라 : “함수는 한 가지를 해야한다. 그 한 가지를 잘해야 한다. 그 한 가지만을 해야한다.” 3. 함수 당 추상화 수준은 하나로 : 한 함수 내에 추상화 수준을 섞으면 코드를 읽는 사람이 헷갈린다. Ex) getHtml() 과 .append(“\n”) 은 다른 추상화 수준이므로 함수 내에 저 두개의 코드가 있으면 이 규칙을 위반한 함수이다. 4. 서술적인 이름을 사용하라 : 서술적인 이름을 사용하면 개발자 머릿속에서 설계가 뚜렷해지므로..

개발/Clean Code 2018.10.02