전체 글54 HandlerMapping & RequestMapping 📝 HandlerMapping & RequestMapping1. HandlerMappingHandlerMapping은 Spring MVC의 요청 처리 흐름에서 요청 URL을 적절한 컨트롤러(Handler)로 매핑하는 역할을 담당합니다.HandlerMapping의 역할클라이언트로부터 들어온 HTTP 요청 URL을 기반으로 어떤 컨트롤러 메서드를 호출할지 결정.Spring MVC가 제공하는 다양한 HandlerMapping 구현체 중 하나를 사용하여 URL과 컨트롤러를 연결.HandlerMapping의 구현체RequestMappingHandlerMapping: 애노테이션 기반의 매핑을 처리.SimpleUrlHandlerMapping: XML 또는 Java 설정 파일을 통해 매핑 정의.BeanNameUrlH.. spring 2024. 12. 2. SpringMVC ArgumentResolver 📝 Spring MVC의 ArgumentResolver란?ArgumentResolver는 Spring MVC에서 컨트롤러의 메서드 파라미터를 해석하고 바인딩하는 데 사용되는 인터페이스입니다. Spring MVC의 요청 처리 흐름에서 HandlerMethodArgumentResolver 인터페이스를 구현하여 특정한 타입의 메서드 파라미터를 처리할 수 있습니다.ArgumentResolver란?역할:HTTP 요청의 데이터 (예: 쿼리 파라미터, URL 경로 변수, 헤더, 요청 본문 등)를 컨트롤러 메서드의 파라미터로 변환.컨트롤러의 메서드 파라미터에 대한 맞춤형 로직 적용.주요 인터페이스:HandlerMethodArgumentResolver 인터페이스:supportsParameter(MethodParamet.. spring 2024. 12. 2. em.persist vs em.merge package jpabook.jpashop.repository;import jakarta.persistence.EntityManager;import jpabook.jpashop.domain.item.Item;import lombok.RequiredArgsConstructor;import org.springframework.stereotype.Repository;import java.util.List;@Repository@RequiredArgsConstructorpublic class ItemRepository { private final EntityManager em; public void save(Item item) { if (item.getId() == null) { em.persi.. JPA 2024. 11. 30. Entity 클래스와 DTO를 분리하는 이유 ❓ ChatGPT에 질문package jpabook.jpashop.controller;import jakarta.validation.Valid;import jpabook.jpashop.domain.Address;import jpabook.jpashop.domain.Member;import jpabook.jpashop.service.MemberService;import lombok.RequiredArgsConstructor;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.validation.Bind.. spring 2024. 11. 30. @RequestBody @Valid Object obj, BindingResult br 타입에러가 br에 담기지 않는 이유 @RequestBody와 @Valid의 동작 방식동작 원리 설명@RequestBody @Valid ItemSaveForm form, BindingResult br의 경우:@RequestBody는 클라이언트 요청의 HTTP 본문을 Java 객체로 변환합니다. 이 과정은 HttpMessageConverter가 담당합니다.변환 중에 JSON → Java 객체로 매핑 시 타입 에러가 발생하면, Spring은 컨트롤러 메서드에 접근하지 않고 예외(HttpMessageNotReadableException 등)를 던집니다.따라서, BindingResult에 에러가 바인딩되지 않고, 컨트롤러 메서드 실행 전에 예외가 발생하여 정상 동작하지 않습니다.@Valid ItemSaveForm form, BindingResult.. spring 2024. 11. 30. 도메인 모델 패턴 vs 트랜잭션 스크립트 패턴 🔥 도메인 모델 패턴이란?도메인 모델 패턴(Domain Model Pattern)은 애플리케이션의 비즈니스 로직을 도메인 객체(엔티티) 내부에 포함시키는 설계 패턴입니다. 즉, 비즈니스 규칙, 데이터 변경, 데이터 검증 등을 도메인 객체가 직접 수행하도록 설계합니다.이 패턴은 DDD(Domain-Driven Design)의 핵심 개념 중 하나이며, 객체지향의 장점을 최대한 활용합니다.특징도메인 객체에 책임 부여:객체가 자신의 상태를 관리하고, 관련된 비즈니스 로직을 수행합니다.예: Order 객체가 주문 생성, 주문 취소 등을 수행.비즈니스 로직의 캡슐화:데이터와 이를 처리하는 로직이 한 객체 내부에 캡슐화됩니다.엔티티 중심 설계:엔티티 객체가 단순히 데이터를 저장하는 역할만 하지 않고, 비즈니스 로직.. spring 2024. 11. 25. 도메인 주도설계와 OOP의 관계에 대한 chatGPT와의 질의응답 ❓ 질의JPA 를 통한 개발을 진행하고 있는데 Member 클래스는 MemberRepository랑 MemberService를 이용해서 로직을 만들었다. (join, findById, findAll) 같은 것들을 근데 Item 클래스는 비즈니스 로직이 Item클래스 내부에 있는거 같아 public void addQuantity(int quantity) {this.stockQuantity += quantity} 이렇게 하는게 도메인 주도 설계라는데 왜 이렇게 하는거지? 객체지향하고도 관계가 있나? 도메인 주도 설계와 객체지향 설계1. 왜 비즈니스 로직을 도메인 객체(Item) 내부에 두는가?핵심 이유: 응집성(Cohesion)을 높이고 도메인 객체의 역할을 강화하기 위해객체는 데이터(stockQuan.. JPA 2024. 11. 24. JPA FetchType.EAGER의 N+1 문제 & cascadeType.ALL 사용 이유 & 연관관계 편의 메서드 @ManyToOne(fetch = FetchType.EAGER)와 N+1 문제문제 설명@ManyToOne(fetch = FetchType.EAGER) 설정은 N+1 문제를 유발할 가능성이 높습니다. 예를 들어, 아래와 같은 상황을 가정해보겠습니다.코드 예시@Entitypublic class Order { @Id private Long id; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "member_id") private Member member;} @Entitypublic class Member { @Id private Long id; private String name;} JPQL 예시List .. JPA 2024. 11. 24. 자바 접근제어자 개념과 JPA @Embeddable에서 기본생성자에 proteced를 사용하는 이유 자바 접근 제어자자바에서 접근 제어자(Access Modifier)는 클래스, 메서드, 변수 등의 접근 범위를 결정하여 객체 지향 프로그래밍의 캡슐화(encapsulation)를 구현하는 데 사용됩니다. 자바는 네 가지 접근 제어자를 제공합니다: public, private, protected, 그리고 default(접근 제어자를 명시하지 않을 때).1. public설명: 모든 클래스에서 접근 가능합니다. 패키지 내부 또는 외부 어디서든 해당 멤버에 접근할 수 있습니다.접근 범위:같은 클래스: O같은 패키지: O하위 클래스(다른 패키지): O전체 외부 클래스: O예시:public class MyClass { public int myVariable; public void myMethod() { .. spring 2024. 11. 24. JPA기초 @Entity & @Id & @GeneratedValue & 영속성 컨텍스트 🔥 JPA란 무엇인가? 그리고 @Entity, @Id, @GeneratedValue의 역할JPA란?JPA(Java Persistence API)는 자바 애플리케이션에서 객체(클래스)와 관계형 데이터베이스 간의 매핑을 정의하고 관리하기 위한 표준 인터페이스입니다.역할:객체와 테이블 간의 매핑을 자동으로 처리 (ORM: Object-Relational Mapping).SQL 없이도 데이터베이스와 상호작용 가능.데이터베이스 독립적인 애플리케이션 개발 지원.구현체: Hibernate, EclipseLink, OpenJPA 등이 있으며, JPA는 이 구현체들을 위한 표준입니다.@Entity역할: 클래스가 JPA 엔터티임을 선언합니다. 데이터베이스 테이블과 매핑됩니다.@Entitypublic class User .. spring 2024. 11. 23. [Spring] Spring Bean 과 Servlet에 관한 질의응답 (ChatGPT) 🔥 스프링빈 / 서블릿❓ Question스프링빈과 서블릿은 둘다 객체이지 않나? 둘다 싱글톤이고 그럼 어떤 차이가 있지 📝 Answer스프링 빈(Spring Bean)과 서블릿(Servlet)은 모두 객체이며, 둘 다 일반적으로 싱글톤으로 관리됩니다. 하지만 이 둘 사이에는 몇 가지 중요한 차이점이 있습니다. 주요 차이점은 다음과 같습니다: 1. 역할 및 사용 목적스프링 빈(Spring Bean): 스프링 프레임워크에서 관리되는 객체로, 비즈니스 로직, 서비스, 데이터 접근 등의 다양한 역할을 수행합니다. 스프링 빈은 주로 애플리케이션의 전반적인 기능을 구성하는 데 사용됩니다. 빈은 애플리케이션 컨텍스트(Application Context)에 의해 생성되고 관리됩니다.서블릿(Servlet): 자바 E.. spring 2024. 9. 2. [Java] JDK, JRE, JVM 질의응답 (ChatGPT) 🔥 .java → javac → .class → JVM❓ Question자바 컴파일러에 의해 클래스 파일이 되고 이 클래스 파일을 JVM에서 실행하는거 맞아? 📝 Answer네, 맞습니다! 자바 프로그램이 실행되는 과정은 다음과 같습니다:자바 소스 코드 작성: 개발자는 .java 파일에 자바 코드를 작성합니다.컴파일: 자바 컴파일러(javac)를 사용하여 .java 파일을 컴파일하면 바이트코드가 포함된 .class 파일이 생성됩니다. 이 .class 파일은 JVM이 이해할 수 있는 중간 형태의 코드입니다.실행: 자바 가상 머신(JVM)이 .class 파일을 읽어서 실행합니다. JVM은 바이트코드를 해석하거나 Just-In-Time (JIT) 컴파일러를 사용하여 바이트코드를 네이티브 머신 코드로 변환하.. Java 2024. 8. 31. 이전 1 2 3 4 5 다음