[JPA] @Builder.Default
Back-End/JPA2025. 4. 4. 00:27[JPA] @Builder.Default

@Builder.Default는 Lombok의 @Builder와 함께 사용할 때, 기본값이 무시되지 않도록 유지시켜주는 어노테이션이다.일반적으로 @Builder를 사용하면, 필드에 직접 초기화한 값이 무시된다.@Builderpublic class Product { private String name; private int price = 1000;}위와 같이 price = 1000을 설정했더라도, Product.builder().build()를 실행하면 price는 0이 된다.즉, 기본값 1000이 무시되는 것. 해결 방법@Builderpublic class Product { private String name; @Builder.Default private int price = ..

[JPA] 엔티티 클래스에서 @Builder 위치
Back-End/JPA2025. 4. 3. 17:09[JPA] 엔티티 클래스에서 @Builder 위치

@Builder를 생성자 위에 두는 방식@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@Entitypublic class Product extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String productNumber; private String name; private int price; @Builder // 생성자 위에 빌더 public Product(String productNumber, String name, int price) { this.produc..

[JPA] 엔티티 공통 필드 상속(@MappedSuperclass)
Back-End/JPA2025. 4. 3. 16:06[JPA] 엔티티 공통 필드 상속(@MappedSuperclass)

@MappedSuperclass엔티티마다 생성 날짜와 수정 날짜가 존재한다고 가정하면, 모든 엔티티에 해당 코드를 넣는 것은 비효율적이다.따라서 아래의 코드를 통해서 공통 필드를 상속받게 할 수 있다.@Getter@MappedSuperclass@EntityListeners(AuditingEntityListener.class)public abstract class BaseEntity { @CreatedDate private LocalDateTime createdDateTime; @LastModifiedDate private LocalDateTime modifiedDateTime;}공통 필드(생성일시, 수정일시)를 모든 엔티티에서 자동으로 사용하고 싶을 때이 BaseEntity를 상속받..

[Spring] 스프링 컨테이너(IoC, DI 컨테이너)
Back-End/Spring2025. 4. 2. 17:44[Spring] 스프링 컨테이너(IoC, DI 컨테이너)

이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.SRP (Single Responsibility Principle) :하나의 클래스는 오직 하나의 책임만 가져야 한다.OCP (Open/Closed Principle) :소프트웨어 요소는 확장에는 열려 있고, 변경에는 닫혀 있어야 한다.LSP (Liskov Substitution Principle) :자식 클래스는 부모 클래스의 기능을 대체할 수 있어야 한다.ISP (Interface Segregation Principle) :특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.DIP (Dependency Inversion Principle) :구체화가 아닌 추상화에 의존해야 한다. OCP..

Back-End/Test Code2025. 4. 1. 15:30[JUnit + AssertJ] 주요 메서드

주요 메서드 정리JUnit 주요 메서드 (org.junit.jupiter.api.Assertions) 메서드 설명 예시 assertEquals(expected, actual) 값이 같은지 비교 assertEquals(10, sum) assertNotEquals(expected, actual) 값이 다르면 통과 assertNotEquals(0, result) assertTrue(condition) 조건이 true면 통과 assertTrue(value > 0) assertFalse(condition) 조건이 f..

Back-End/Test Code2025. 4. 1. 15:26[JUnit] 테스트 코드 애노테이션

@Test의미: 이 메서드는 테스트 메서드임을 명시한다.위치: 테스트 메서드 위@Testvoid 회원가입_성공() { // given // when // then} @BeforeEach의미: 각 테스트 메서드 실행 직전마다 실행된다.주 용도: 공통 초기화, 테스트 상태 정리@BeforeEachpublic void beforeEach() { memberRepository = new MemoryMemberRepository(); memberService = new MemberService(memberRepository); } @AfterEach의미: 각 테스트 메서드 실행 직후마다 실행된다.주 용도: 리소스 정리, 로그 기록 등@AfterEachpublic void afterEac..

[Spring] Spring Boot + Swagger
Back-End/Spring2025. 3. 28. 17:45[Spring] Spring Boot + Swagger

GitHub 저장소: https://github.com/springdoc/springdoc-openapi최신 릴리즈: https://github.com/springdoc/springdoc-openapi/releasesMaven Central: https://search.maven.org/search?q=g:org.springdoc SwaggerSwagger는 RESTful API를 설계, 문서화, 테스트할 수 있도록 도와주는 오픈소스 툴 세트이다.현재는 OpenAPI Specification(OAS)이라는 이름으로 공식적으로 관리되며, 그 구현체 중 하나가 Swagger이다.Swagger는 API의 명세(Specification)를 기계가 읽을 수 있는 형식(JSON 또는 YAML)으로 작성하고,이를 바..

[Spring] Parameter 0 of constructor in xxx required a bean of type 'xxx' that could not be found.
Back-End/기타2025. 3. 27. 02:30[Spring] Parameter 0 of constructor in xxx required a bean of type 'xxx' that could not be found.

문제 상황1년전에 만들고 쳐다도 안본 프로젝트를 리팩토링하려고 베이스 패키지를 수정하다가 Parameter 0 of constructor in com.seungwook.r2r.service.IngredientService required a bean of type 'com.seungwook.r2r.repository.IngredientRepository' that could not be found. 이 오류를 만나게 되었다.기존 패키지 구조는 com.receipt2recipe 에서 com.seungwook.r2r로 바꾸었더니 "IngredientService는 IngredientRepository가 필요한데 못찾겠다." 라고 오류를 뿜고있었고, IngredientRepository는 분명히 존재하고 패키..

image