`@EqualsAndHashCode`는 Lombok 라이브러리에서 제공하는 어노테이션으로, Java 클래스의 `equals()`와 `hashCode()` 메소드를 자동으로 생성해줍니다.특징자동 메서드 생성클래스에 `@EqualsAndHashCode`를 적용하면 모든 필드를 고려한 `equals()`와 `hashCode()` 메소드가 자동으로 생성됩니다.필드 선택`of` 속성을 사용하여 특정 필드만 동등성 비교에 포함시킬 수 있습니다.상속 관계 처리`callSuper` 속성을 통해 부모 클래스의 필드를 동등성 비교에 포함할지 여부를 결정할 수 있습니다. 사용 예시@EqualsAndHashCode(of = {"email", "name"}, callSuper = false)public class Member ..
Spring을 이용한 프로젝트를 진행하던 중에 ModelMapper를 사용하게 되어 이에 대해 한 번 정리해보려 합니다.ModelMapper란?ModelMapper는어떠한 Object에 있는 필드 값들을 원하는 Object에 자동으로 mapping 시켜주는 라이브러리이다.즉, Source Object → Destination Object 를 자동으로 해준다고 생각하면 된다.그렇다면, 어떤 경우에 ModelMapper를 사용할까?보통 DTO를 통해 데이터를 받아 다른 Object(엔티티 등...)에 넣거나 이와 반대로 객체를 DTO로 변환할 때, getter와 setter를 이용해 원하는 필드들을 일일이 넣는다. 아니면, of 와 from이라는 정적 메서드(static method)를 만들어 사용한다.이 ..
4 계층 아키텍처4계층 아키텍처는 소프트웨어 시스템을 4개의 주요 계층으로 나누는 구조적 패턴입니다.이 방식은 ‘관심사의 분리’라는 핵심 원칙을 따르며, 각 계층이 특정 역할을 담당하도록 설계됩니다.각 계층 살펴보기1. Presentation Layer사용자와 직접 상호작용하는 최상위 계층입니다.사용자 인터페이스 (UI) 구현사용자 입력 처리 및 기본적인 유효성 검사다른 계층에서 받은 데이터를 사용자에게 표시2. Business Layer애플리케이션의 핵심 로직이 구현되는 곳입니다.비즈니스 규칙 및 워크플로우 관리데이터 처리 및 연산 수행프레젠테이션 계층과 영속성 계층 사이의 중재자 역할3. Persistence Layer데이터의 영구 저장을 담당하는 계층입니다.데이터베이스와의 통신 관리CRUD 작업 수..
애그리거트(Aggregate)란?애그리거트는관련된 객체들의 집합을 하나의 단위로 취급하는 패턴입니다.즉, 도메인 모델에서 밀접하게 관련된 객체들의 집합을 의미합니다. 이는 복잡한 도메인을 더 작고 관리하기 쉬운 단위로 나누는 데 도움을 줍니다.애그리거트의 주요 목적도메인 모델의 복잡성 감소데이터 일관성 유지트랜잭션 경계 정의애그리거트의 구조애그리거트는 다음과 같은 구조로 이루어져 있습니다애그리거트 루트: 애그리거트의 대표 엔티티로, 외부에서 애그리거트에 접근할 수 있는 유일한 진입점입니다.엔티티: 고유한 식별자를 가진 객체들입니다.값 객체: 식별자가 없고 불변성을 가진 객체들입니다.애그리거트 설계 원칙불변식 보호: 애그리거트 내부의 모든 불변식(invariants)은 항상 일관된 상태를 유지해야 합니다...
Spring Security를 사용하는 애플리케이션에서 테스트를 작성할 때, 인증된 사용자 컨텍스트를 사용해야 하는 경우가 있습니다. Spring Security는 이를 위해 다음과 같은 어노테이션을 지원합니다.`@WithMockUser``@WithUserDetails``@WithSecurityContext`@WithMockUser`@WithMockUser`는Spring Security 테스트를 위한 가장 기본적인 어노테이션입니다.@Test@WithMockUserpublic void testSecuredMethod() { // 테스트 코드}특징실제 사용자 데이터 없이도 테스트가 가능합니다.기본적으로 필드는 다음과 같이 설정됩니다.`username` : "user"`password` : "passwo..
트랜잭션의 격리 수준이란,여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것입니다.격리 수준은 크게 아래의 4가지로 나뉩니다.READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE아래로 갈수록 각 트랜잭션 간의 데이터 격리(고립) 정도가 높아지며, 동시 처리 성능도 떨어집니다.일반적인 서비스 용도의 데이터베이스는 READ COMMITTED와 REPEATABLE READ 중 하나를 사용합니다.Oracle : 주로 READ COMMITTEDMySQL : 주로 REPEATABLE READ1. READ UNCOMMITTEDREAD UNCOMMITTED 격리 수준에서는각 트랜잭션..
HTTP 개요HyperText Transfer Protocol로Web의 애플리케이션 계층 프로토콜입니다.클라이언트(브라우저)와 서버 간의 Request-Response 모델을 사용합니다.HTTP는 TCP를 사용하며, 기본적으로 80번 포트를 사용합니다.HTTP는 상태를 유지하지 않는 Stateless한 프로토콜입니다.Stateless Protocol어떠한 이전 요청과도 무관한 각각의 요청을 독립적인 트랜잭션으로 취급하는 통신 프로토콜HTTP의 연결 유형HTTP의 연결 유형에는 2가지 있습니다.Non-persistent HTTP : HTTP/1.0각 객체마다 별도의 TCP 연결을 사용하는 방식입니다.연결 설정, 객체 전송, 연결 종료의 과정으로 이루어집니다.따라서, 여러 Object를 다운로드하기 위해서는..
트랜잭션(Transaction)은작업의 완전성을 보장해 주는 것입니다. 따라서, 다음과 같은 두 가지 기능을 제공합니다.논리적 작업 셋을 모두 완벽히 처리처리하지 못할 경우 원 상태로 복구잠금(Lock) VS 트랜잭션(Transaction)Lock := 동시성을 제어하기 위한 기능Transaction := 데이터의 정합성을 보장하기 위한 기능격리 수준하나 혹은 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨 트랜잭션을 지원하지 않는 MyISAM과 트랜잭션을 지원하는 InnoDB의 처리 방식 차이를 살펴봅시다.MySQL에서의 트랜잭션트랜잭션이란,논리적인 작업 셋 자체가 100% 적용되거나 아무것도 적용되지 않아야 함을 보장해 주는 것입니다.결론부터 이야기하면,InnoDB :=..