분류 전체보기 174

[만들면서 배우는 클린 아키텍처] 04 유스케이스 구현하기

'만들면서 배우는 클린 아키텍처' 책을 정리한 내용입니다.  애플리케이션, 웹, 영속성 계층이 현재 아키텍처에서 아주 느슨하게 결합돼 있기 때문에 필요한 대로 도메인 코드를 자유롭게 모델링할 수 있다. DDD를 할 수도 있고, 풍부하거나(rich) 빈약한(anemic) 도메인 모델을 구현할 수도 있고, 우리만의 방식을 만들어 낼 수도 있다. 이번 그래서는 앞에서 소개한 육각형 아키텍처 스타일에서 유스케이스를 구현하기 위해 이 책에서 제시하는 방법을 설명한다. 육각형 아키텍처는 도메인 중심의 아키텍처에 적합하기 때문에 도메인 엔티티를 만드는 것으로 시작한 후 해당 도메인 엔티티를 중심으로 유스케이스를 구현하겠다. 도메인 모델 구현하기한 계좌에서  다른 계좌로 송금하는 유스케이스를 구현해 보자. 이를 객체지..

[MongoDB] Single Purpose Aggregation: 간단한 집계 작업

MongoDB의 Aggregation 방식 중 간단한 함수 작업이 가능한 Single Purpose Aggregation Methods에 대해 알아보겠습니다. ✍️  Single Purpose Aggregation Methods란?Single Purpose Aggregation Methods는 MongoDB에서 특정한 집계 작업을 간단하고 효율적으로 수행하기 위해 제공되는 집계 메서드입니다.이 메서드들은 단일 작업에 초점을 맞추며, 복잡한 파이프라인을 구성하지 않고도 간단한 집계 작업을 처리할 수 있습니다.대표적인 Single Purpose Aggregation Methods는 다음과 같습니다:count()distinct()group()mapReduce() (이전 글에서 다룬 내용) 각 메서드에 대한 설..

Data/MongoDB 2024.12.31

[MongoDB] Map-Reduce: 대량 데이터 처리의 유연한 방법

이번 글에서는 MongoDB Map-Reduce 방식에 대해 알아보겠습니다.👀 Map-Reduce란?Map-Reduce는 대량의 데이터를 병렬로 처리하고 요약하는 데 사용하는 데이터 처리 방식입니다.MongoDB에서 Map-Reduce는 데이터를 그룹화하거나 집계하는데 활용되며, JavaScript 함수를 사용해 데이터를 변환(map)하고, 결과를 결합(reduce)하여 최종 결과를 생성합니다.Map-Reduce의 기본 구조Map-Reduce는 크게 두 단계로 구성됩니다.Map 단계데이터를 특정 키와 값으로 매핑합니다. 각 문서가 처리되어 키-값 쌍이 생성됩니다.Reduce 단계Map 단계에서 생성된 데이터를 키별로 그룹화하고 요약 작업을 수행합니다.간단한 Map-Reduce 예제아래 예제는 Mongo..

Data/MongoDB 2024.12.29

[MongoDB]Aggregation Framework: 효율적인 데이터 처리와 분석

MongoDB Aggregation은 데이터를 효율적으로 처리하고 분석할 때 매우 강력한 도구입니다.이 글에서는 Aggregation에 대해 정리해 보겠습니다. 👩🏻‍💻 Aggregation이란?Aggregation은 데이터를 가공하거나 요약하여 원하는 결과를 얻는 작업을 말합니다.SQL에서는 GROUP BY, HAVING, SUM() 같은 명령어로 비슷한 작업을 할 수 있지만, MongoDB는 Aggregation Framework를 통해 훨씬 유연하고 강력한 방식으로 데이터를 처리할 수 있습니다.  Aggregation의 주요 방식Aggregation Framework: 단계별로 데이터를 처리하는 파이프라인 방식.Map-Reduce: 대량의 데이터를 병렬로 처리하는 방식.Single Purpos..

Data/MongoDB 2024.12.27

[만들면서 배우는 클린 아키텍처] 03 코드 구성하기

'만들면서 배우는 클린 아키텍처' 책을 정리한 내용입니다.  코드를 보는 것만으로도 어떤 아키텍처인지 파악할 수 있다면 좋지 않을까? 이번 글에서는 코드를 구성하는 몇 가지 방법을 살펴보고, 육각형 아키텍처를 직접적으로 반영하는 표현력 있는 패키지 구조를 소개하겠다. 새 프로젝트에서 가장 먼저 제대로 만들려고 하는 것은 패키지 구조다. 프로젝트에서 계속 사용할 괜찮아 보이는 구조를 잡는다. 그러고 나서 프로젝트가 진행될수록 점점 바빠지고 패키지 구조는 짜임새 없는 엉망진창 코드를 그럴싸하게 보이게 만드는 껍데기일 뿐이라는 점을 깨닫게 된다. 한 패키지에 있는 클래스들이 불러오지(import) 말아야 할 다른 패키지에 있는 클래스들을 불러오게 된다. 지금부터 예제 코드를 구조화하기 위한 여러 가지 방법들을..

Jackson 커스텀 어노테이션: @JacksonAnnotationsInside

Jackson 관련하여 공통적인 코드를 분리하기 위해 커스텀 어노테이션을 만들어 사용하기로 결정했습니다.그 과정에서 Jackson이 커스텀 어노테이션을 인식하도록 하기 위해 @JacksonAnnotationsInside라는 어노테이션이 필요하다는 사실을 알게 되었고, 이를 정리해보았습니다. 👀 @JacksonAnnotationsInside란 무엇인가?`@JacksonAnnotationsInside`는 Jackson 라이브러리에서 제공하는 메타 어노테이션으로, 커스텀 어노테이션이 Jackson의 어노테이션처럼 동작하도록 정의할 때 사용됩니다. 즉, 이 어노테이션이 없으면 Jackson이 커스텀 어노테이션을 인식하지 못합니다.왜 필요한가?기본적으로 Jackson은 자신이 제공하는 어노테이션(@JsonNam..

Backend/Java 2024.12.21

[만들면서 배우는 클린 아키텍처] 02 의존성 역전하기

'만들면서 배우는 클린 아키텍처' 책을 정리한 내용입니다. 이번 글에서는 계층형 아키텍처의 대한 불만의 대안에 대해 이야기를 하려고 한다.먼저 단일 책임 원칙(Single Responsibility Principle, SRP)과 의존성 역전 원칙(Dependency Inversion Principle, DIP)에 대해 이야기하는 것으로 시작하자. 단일 책임 원칙소프트웨어 개발을 하는 사람이라면 아마 단일 책임 원칙에 대해서 알고 있거나, 최소한 안다고 가정해도 될 것이다.이 원칙의 일반적인 해석은 다음과 같다.하나의 컴포넌트는 오로지 한 가지 일만 해야 하고, 그것을 올바르게 수행해야 한다.이는 좋은 조언이지만 단일 책임 원칙의 실제 의도는 아니다.'오로지 한 가지 일만 하는 것'은 단일 책임이라는 말을..

[만들면서 배우는 클린 아키텍처] 01 계층형 아키텍처의 문제는 무엇일까?

'만들면서 배우는 클린 아키텍처' 책을 정리한 내용입니다. 계층형 아키텍처?계층(layer)으로 구성된 (웹) 애플리케이션을 개발해 본 적이 있을 것이다.계층을 이용하는 사고방식은 컴퓨터 과학 수업이나 튜토리얼, 모범사례를 통해 우리에게 주입되어 왔다.위의 그림은 일반적인 3계층 아키텍처는 웹 계층, 도메인 계층, 영속성 계층으로 구성된 전통적인 구조를 갖는다.맨 위의 웹 계층은 요청을 받아 도메인 혹은 비즈니스 계층에 있는 서비스로 요청을 보낸다.서비스에서는 필요한 비즈니스 로직을 수행하고, 도메인 엔티티의 현재 상태를 조회하거나 변경하기 위해 영속성 계층의 컴포넌트를 호출한다. 사실 계층형 아키텍처는 견고한 아키텍처이다. 계층을 잘 이해하고 구성한다면 웹 계층이나 영속성 계층에 독립적으로 도메인 로직..

[Java] JPA에서 발생하는 N+1 이슈: 원인부터 해결까지

JPA를 처음 사용할 때 많은 개발자들이 부딪히는 문제 중 하나가 바로 N+1 이슈입니다. 이번 글에서는 JPA 환경에서 N+1 이슈가 발생하는 원인을 알아보고, 이를 해결할 수 있는 방법을 정리해보겠습니다.   N+1 이슈란?N+1 이슈는 1개의 메인 쿼리로 데이터를 가져오려 했지만, 추가로 N개의 쿼리가 실행되는 문제를 뜻합니다.다음은 간단한 예제를 통해 이를 이해해보겠습니다. 엔티티 구조Member와 Order 간에 일대다 관계가 있다고 가정합니다.@Entitypublic class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @One..

Backend/Java 2024.11.27

디자인 패턴의 종류 한눈에 보기

디자인 패턴은 개발자들이 코드를 더 구조적이고 효율적으로 작성하도록 돕는 중요한 개념입니다. 이 글에서는 자주 사용되는 디자인 패턴을 유형별로 정리하여 한눈에 알아볼 수 있도록 준비했습니다. 😊 디자인 패턴이란?디자인 패턴은 소프트웨어 개발에서 반복적으로 나타나는 문제를 해결하기 위한 재사용 가능한 설계 템플릿입니다.이는 **GoF(Gang of Four)**의 책에서 처음 체계적으로 소개되었으며, 크게 세 가지 유형으로 분류됩니다.생성 패턴 (Creational Patterns): 객체 생성과 관련된 문제 해결구조 패턴 (Structural Patterns): 클래스와 객체를 효율적으로 구성행동 패턴 (Behavioral Patterns): 객체 간 상호작용과 역할 분담에 초점생성 패턴 (Creati..