[MapStruct] 보일러플레이트의 늪 : Builder와 Mapstruct
보일러플레이트(Boilerplate)? 앞선 게시글에서도 한 번 다룬것 처럼 보일러플레이트는 핵심 비즈니스 로직은 아니지만, 프로그램 구동을 위해 관용적이고 반복적으로 길게 작성해야 하는 코드를 뜻한다. 자바에서는 getter/setter, 생성자, 그리고 객체 간 데이터를 옮겨 담는 변환 매핑 코드가 대표적이라 할 수 있다. ex) // 전형...
보일러플레이트(Boilerplate)? 앞선 게시글에서도 한 번 다룬것 처럼 보일러플레이트는 핵심 비즈니스 로직은 아니지만, 프로그램 구동을 위해 관용적이고 반복적으로 길게 작성해야 하는 코드를 뜻한다. 자바에서는 getter/setter, 생성자, 그리고 객체 간 데이터를 옮겨 담는 변환 매핑 코드가 대표적이라 할 수 있다. ex) // 전형...
1. 빌더(Builder)란 무엇인가? 빌더 패턴은 복잡한 객체를 단계별로 조립해서 만드는 객체 생성 디자인 패턴이다. 비유하자면 서브웨이 샌드위치 주문과 같다. 빵을 고르고, 야채를 넣고, 소스를 뿌리는 준비 과정(Builder)을 모두 마친 뒤에야 비로소 완성된 샌드위치(Product)를 건네받는 것과 같은 원리다. 즉, 객체를 곧바로...
1. [생성자 주입] @RequiredArgsConstructor + final 스프링에서 의존성 주입(DI)을 할 때 @Autowired 대신 생성자 주입을 쓰는 것이 표준이며 Lombok을 쓰면 생성자를 직접 칠 필요가 없다 핵심: 주입받을 필드는 반드시 private final로 선언 이유: final이 붙지 않은 필드는 Lombok...
📌 1. JPA 연관관계 개요 JPA란? 자바 애플리케이션에서 관계형 데이터베이스의 데이터를 관리하기 위해 객체와 관계를 매핑하는 API 엔티티(Entity): 데이터베이스 테이블에 대응되는 객체로 특정 데이터 모델을 표현 연관관계의 의미: JPA 엔티티 간의 관계를 정의하며, 한 엔티티가 다른 엔티티와 어떻게 연결되어 있는지를 설명함 ...
1. [핵심 개념: 연관관계의 주인과 mappedBy] 연관관계의 주인 (Owner): 외래 키(FK)를 관리하는 실제 주체입니다. 보통 외래 키가 있는 다(N) 쪽이 주인이 되며, @JoinColumn을 사용한다 비주인 (Inverse): 주인의 반대편으로, 데이터를 읽기만 가능하며 @OneToMany(mappedBy = "주인의 연관필드...
IoC, DI, 그리고 Spring Bean : 핵심 원리 이해 ❗ 과거의 Java 애플리케이션, 특히 대규모 시스템에서는 ‘강한 결합(Tight Coupling)’이 가장 큰 문제였다 강한 결합이란? 문제점 : 위 코드에서 UserServiceImpl를 NewUserServiceImpl로 변경해야 한다면, 해당 객체가 선언된 클래...
1. Spring Core & 웹 아키텍처 ⚙️ 핵심 개념 강한 결합(Tight Coupling)의 문제점: 객체가 직접 new 키워드로 의존 객체를 생성하면, 하나를 수정할 때 연관된 코드를 모두 수정해야 하는 치명적인 유지보수 문제가 발생한다. IoC (Inversion of Control, 제어의 역전): 개발자가 직접 객체를...
웹 서버와 애플리케이션 아키텍처 Tomcat (웹 서버): 외부 클라이언트의 요청을 시스템에서 가장 먼저 받아들이는 문지기입니다 (대안: Undertow) Servlet (라우팅): 들어온 요청을 분석하여 알맞은 Controller로 연결해 주는 역할을 수행합니다 Domain (도메인): 시스템 내에서 다루는 핵심 비즈니스 개념들의 논리...
1. 왜 스프링일까? 스프링 프레임워크는 자바 기반 애플리케이션을 개발하는 데 필요한 거의 모든 기능을 지원하는 오픈소스 프레임워크다. 단순히 웹 개발뿐만 아니라, 데이터 처리, 보안, 배치 작업 등 기업 환경의 복잡한 시스템을 구축하는 데 필요한 포괄적인 프로그래밍 및 설정 모델을 제공을 한다. 무엇보다 스프링의 핵심 철학은 “좋은 객체 지향 ...
1️⃣ Homebrew 설치 macOS에서 Homebrew로 Java(OpenJDK)를 설치하면 JDK는 다음 경로에 설치됩니다. /opt/homebrew/opt/openjdk@21 하지만 기본적으로 JAVA_HOME 환경 변수는 자동으로 설정되지 않기 때문에 직접 설정해야 Java 기반 개발 도구들이 정상적으로 동작합니다. 2️⃣ Op...