본문 바로가기

Tech/Spring

[Spring MVC] HandlerMapping 핸들러 매핑은 HTTP 요청 정보를 이용해서 컨트롤러를 찾아주는 기능을 수행한다. DispatcherServlet이 등록된 HandlerMapping 전략들에게 HttpServletRequest를 전달하면서 매칭되는 오브젝트를 찾는다. public interface HadlerMapping { HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception; } HandlerMapping은 DispatcherServlet에 의해 초기화된다. HandlerMapping은 항상 HandlerExecutionChain을 통해 실행된다. HandlerExecutionChain은 AbstractHandlerMapping 클래스에 의해 생성..
[Spring Data JPA] ORM, JPA, Hibernate 헷갈리는 용어 정리 ORM(Object Relational Mapping)? 객체와 데이터베이스의 테이블 사이의 관계를 연결해주는 것 애플리케이션에서의 객체와 데이터베이스의 테이블에는 차이점이 존재함(상속 여부, 외래키 등등) ORM없이 데이터를 직접 핸들링한다면 select 쿼리를 날려 받은 결과값을 하나하나 어떤 정보인지 매핑해서 사용해야함 JPA(Java Persistence API) Java 진영에서 ORM 표준으로 지정 데이터에 접근한 api 규격을 정의 → ORM이 전체적인 개념이라면 jpa는 구체적으로 기능을 정의한 스펙 Hiabernate JPA에 대한 실제 구현체 Spring Data JPA Spring에서 hibernate를 더 간편하게 사용하도록 추상 객체를 한번 더 감싸서 만들어놓은 것 실제로 Enti..
[Spring] Could not write JSON: Infinite recursion (StackOverflowError) 이슈 상황 스프링 기반 API 서버를 구현 프로젝트에서 Controller 테스트를 하는 도중 에러가 발생했다. nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) 에러 로그를 확인해 보니 Could not write JSON: Infinite recursion (StackOverflowError..
[Spring] Validation @Email은 null을 허용한다. 배경 회원가입 및 로그인 시 이메일 형식, 닉네임 글자 수 제한, 비밀번호 규칙 등 사용자가 입력한 데이터를 DB에 저장하기 전에 데이터에 대한 유효성을 체크하는 작업은 프론트단뿐 아니라 백엔드에서도 반드시 필요한 작업입니다. Spring 에서는 spring boot validation starter에 대한 의존성을 추가함으로써 어노테이션을 기반으로 쉽게 유효성 체크를 할 수 있습니다. org.springframework.boot spring-boot-starter-validation 문제 인식 (세부적인 어노테이션 소개는 각설하고) 이메일 형식에 대한 유효성을 체크할 때 @Email을 사용하는데 이상한 점을 발견했습니다. 아래 테스트 코드를 주목해 주세요. import org.junit.jupiter...
[Spring Boot] 갓 초기화한 스프링 부트 프로젝트 살펴보기 프로젝트를 구성하는 주요 파일 - build.gradle : 그래들 빌드 명세 - gradlew : 그래들 래퍼 - Application.java : 애플리케이션의 부트스트랩 클래스이자 주 스프링 구성 클래스 - application.properties : 애플리케이션과 스프링 부트 프로퍼티를 구성하는 데 사용하는 파일 - ApplicationTests.java : 기본 통합 테스트 클래스 Application.java Application.java는 스프링 부트 애플리케이션에서 구성과 부트스트래핑 두 가지 역할을 담당. 1. 스프링 구성 클래스 @SpringBootApplication : 스프링 컴포넌트 검색과 스프링 부트 자동 구성을 활성화한다. 이 애너테이션은 유용한 애너테이션 세 개를 묶은 것 (..
[Spring boot] 스프링 부트의 핵심 자동 구성 많은 스프링 애플리케이션에 공통으로 필요한 애플리케이션 기능을 자동으로 구성함 어떤 스프링 애플리케이션의 소스 코드에서든 애플리케이션의 특정한 지원 특징과 기능을 활성화하는 자바 구성이나 XML 구성(또는 둘 다)을 볼 수 있다. 예를 들어 JDBC로 관계형 데이터베이스에 접속하는 애플리케이션을 작성했다면 아마 스프링 애플리케이션 컨텍스트에 스프링 JdbcTemplate을 빈으로 구성했을 것. 빈 구성 메서드 모두 아주 복잡하거나 길지 않다. 하지만 둘 다 일반적인 스프링 애플리케이션의 구성에서 일부만 보여 준다. 메서드가 동일한 스프링 애플리케이션이 수도 없이 많다. 즉, 보일러플레이트 구성이다. 이런 일이 흔하게 일어난다면 일일이 작성할 필요가 없음. 스프링 부트는 이런 공통 구성 시나리오..