🤔 계층형? 도메인형? 어떤 구조가 더 좋을까요?규모 있는 프로젝트를 진행하다 보면 하나의 문제에 자주 부딪히게 됩니다. 바로 내가 맡은 기능의 코드를 찾기 어려워진다는 점입니다. 수많은 Service 중에서 UserService를 찾고, Domain 패키지 안에서 User 클래스를 다시 찾는 과정은 꽤 번거롭습니다.이러한 불편함은 대부분 계층형 구조만 사용하는 데서 비롯된 문제입니다.프로젝트의 디렉터리 구조는 개발 생산성과 유지보수성에 큰 영향을 미칩니다.일반적으로 많이 사용되는 구조는 크게 두 가지로 나뉘는데, 바로 계층형 구조(Layered Architecture)와 도메인형 구조(Domain-Driven Design, DDD)입니다.🗂️ 계층형 구조 (Layered Architecture)계층..
🔍 findAll()에서 Optional>를 쓰지 않아도 되는 이유Spring 또는 MyBatis 기반 프로젝트를 개발하다 보면 Repository에서 데이터를 조회할 때 어떤 반환 타입을 써야 할지 고민할 수 있습니다. 특히, Optional>를 사용할까? List로 충분할까? 하는 문제는 많은 개발자들이 한 번쯤 마주하는 주제입니다.이번 글에서는 왜 findAll() 같은 목록 조회 메서드에서는 Optional>를 굳이 쓰지 않아도 되는지를 설명해 보겠습니다.✅ 단일 조회와 다중 조회의 차이 목적메서드 예시변환타입단일 조회findById(Long id)Optional다중 조회findAll()List 단일 조회에서는 해당 ID에 해당하는 데이터가 존재하지 않을 수 있기 때문에, Optional를 사용..
생성자관련 어노테이션@NoArgsConstructor:생성자에 아무런 매개변수도 없는 기본 생성자를 생성합니다.주로 프레임워크(예: JPA)가 기본 생성자를 필요로 할 때 사용됩니다.@AllArgsConstructor:클래스의 모든 필드를 매개변수로 받는 생성자를 생성합니다.모든 필드를 한 번에 초기화할 수 있으며, 불필요한 필드까지 포함됩니다.@RequiredArgsConstructor:final 필드와 @NonNull로 표시된 필드(초기값이 없는 경우)만 매개변수로 받는 생성자를 생성합니다.주로 의존성 주입(특히 생성자 주입) 시, 필요한 필드만 초기화하기 위해 사용합니다.1. @NoArgsConstructor 예시파라미터 없는 기본 생성자를 생성합니다.import lombok.NoArgsConstr..