Spring 112

기본 문법

JPQL을 사용하여 회원 이름으로 조회하기 Querydsl을 사용하여 회원 이름으로 조회하기 JPAQueryFactory에 EntityManager 객체를 넣어줌. 훨씬 더 직관성이 있고 알아보기 쉽다. 파라미터 바인딩을 해주지 않아도 알아서 처리해준다. Querydsl은 JPQL 빌더 JPQL: 문자(실행 시점 오류), Querydsl: 코드(컴파일 시점 오류) JPQL: 파라미터 바인딩 직접, Querydsl: 파라미터 바인딩 자동 처리 EntityManager, JPAQueryFactory 모두 동시성 문제가 발생하지 않게 설계가 되어 있다. 따라서 EntityManager 처럼 JPAQueryFactory도 필드 레벨에서 선언하여 사용하여도 문제없다. 스프링 프레임워크는 여러 쓰레드에서 동시에 같..

Spring/Querydsl 2021.06.18

Spring Data JPA 분석

Spring Data JPA 구현체 분석 공통 인터페이스(JpaRepository)의 구현체 ==> org.sprigframework.data.jap.repository.support.SimpleJpaRepository SimpleJpaRepository 클래스 내에 CRUD를 하는 여러 메서드(save, findAll....)등을 구현해놓았다. SimpleJpaRepository는 @Repository 애노테이션이 붙어있는데 여기에는 두가지 의미가 있다. 1. 컴포넌트 스캔의 대상이 되어 스프링이 읽어 컨테이너에 스프링 빈으로 등록 2. JPA(JDBC도 마찬가지)에서 발생한 예외와 같은 영속성 계층의 예외들을 Spring 예외로 바꿔준다. 서비스 계층이나 컨트롤러 계층에 예외를 넘길 때 JPA나 JD..

확장 기능

1. 사용자 정의 Repository 스프링 데이터 JPA가 제공하는 기능을 사용하기 위해 우리는 JpaRepository 인터페이스를 상속받아 사용하고 구현체는 스프링이 자동으로 생성하여 주입시켜준다. 만약 이를 개발자가 직접 구현하려한다면(implements) 구현해야 하는 메서드들이 굉장히 많기 때문에 매우 번거롭고 까다롭다. 아래와 같은 이유로 만약 인터페이스의 메서드를 직접 구현하려한다면? JPA 직접 사용( EntityManager ) 스프링 JDBC Template 사용 MyBatis 사용 Querydsl 사용 데이터베이스 커넥션 직접 사용 등등... 커스텀 메서드를 딱 하나만 구현하고 싶을 때 사용하는 방법이다. 먼저 커스텀 인터페이스를 만들고 그 안에 메서드를 추가한다. 그 뒤에 인터페이..

Spring Data JPA 공통 인터페이스

Spring Data JPA를 사용하게되면 인터페이스를 상속받는 것 만으로도 save, findById 와 같이 제공되는 메서드를 구현없이 사용할 수 있다. 어떻게 이것이 가능한 것일까? 주입받은 memberRepository 인스턴스를 직접 출력해보자. Spring Data JPA가 인터페이스를 보고 구현클래스를 만들어 프록시 객체를 만들어 넣어준 것이다. 따라서 우리는 인터페이스만 만들어 놓으면 구현체는 Spring Data JPA가 만들어 주입해준다. 또한 @Repository 애노테이션 생략이 가능하다. 컴포넌트 스캔을 스프링 데이터 JPA가 자동으로 처리한다. JPA 예외를 스프링 예외로 변환하는 과정도 자동으로 처리해준다.(원래는 @Repository가 하는 기능임) JpaRepository를..

스프링 데이터 JPA 맛보기

Repository 인터페이스를 만들고 JpaRepository를 상속받아 사용한다. 상속 관계를 다이어그램으로 살펴보면 위와 같고 JpaRepository를 상속받으므로써 이미 구현되어있는 save(), findAll() 등과 같은 필요한 거의 모든 메서드를 바로 사용할 수 있다. 스프링 데이터 JPA는 JpaRepository 라는 인터페이스를 제공하는데, 여기에 기본적인 CRUD 기능이 모두 제공된다. (일반적으로 상상할 수 있는 모든 기능이 다 포함되어 있다.) 하지만 interface이기 때문에 구현체가 필요한거 아니야?? 구현체도 스프링 데이터 JPA가 알아서 만들고 주입해준다. 위와 같은 메서드는 모두 필요없어진다. findByName은 공통할 수 없으므로 JpaRepository에서 제공하..

HTTP Request Parameter

HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법에 대해 공부해보자. 클라이언트에서 서버로 요청 데이터를 전달할 때 주로 사용하는 3가지 방법 GET - 쿼리 파라미터 /example?username=son&age=25 메시지 바디없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달 검색, 필터, 페이징등에서 많이 사용 POST - HTML Form content-type : application/x-www-form-urlencoded 메시지 바디에 쿼리 파라미터 형식으로 전달 username=son&age=20 회원 가입, 상품 주문, HTML Form 사용 HTTP message body에 데이터를 직접 담아서 요청 HTTP API에서 주로 사용, JSON / XML / TE..

Spring/Spring MVC 2021.05.07

HTTP 요청 - 헤더 정보

애노테이션 기반의 스프링 컨트롤러는 다양한 파리미터를 지원 HTTP 헤더 정보를 조회하는 방법에 대해 공부해보자 이미지가 잘려있지만 headerMap은 모든 헤더 정보가 Map안에 key-value형태로 담겨있다. Locale은 지역의 언어, 국가 등의 정보를 갖고 있는 객체 헤더 정보 중 host라는 키 값으로 value를 가져옴(특정 헤더 조회) required 속성을 통해 필수 값 여부를 설정 @CookieValue 또한 required 속성을 통해 필수 값 여부 설정 가능 MultiValueMap은 Map과 유사하지만 하나의 키의 여러 값을 받을 수 있다. HTTP header, HTTP Query Parameter와 같이 하나의 키에 여러 값을 받을 때 사용 get을 통해 값을 꺼내면 해당 키에..

Spring/Spring MVC 2021.05.07

요청 매핑

@RequestMapping은 위와 같이 다중 값 설정이 가능하다. /hello-basic과 /hello-basic/은 다른 URL이지만, 스프링은 이를 같은 요청으로 매핑한다. 또한 앞서 공부했듯이 method 속성으로 HTTP 메서드를 지정하지 않으면 HTTP 메서드와 무관하게 모두 호출된다. 이는 method 속성에서 HTTP 메서드를 지정해주는 방식으로 해결할 수 있다. 더 편리하게 제공되는 GetMapping 애노테이션으로 더욱 직관적으로 나타낼 수 있음. PathVariable(경로 변수) 위와 같이 변수를 사용하여 매핑시키고 들어온 변수를 PathVariable을 통해 꺼낼 수 있다. 최근 HTTP API는 다음과 같이 리소스 경로에 식별자를 넣는 스타일을 선호 /mapping/userA /..

Spring/Spring MVC 2021.05.06

Spring MVC

스프링이 제공하는 컨트롤러는 애노테이션 기반으로 동작하므로 매우 유연하고 실용적이다. @RequestMapping 스프링은 애노테이션을 활용한 매우 유연하고 실용적인 컨트롤러를 만들었는데 이것이 바로 @RequestMapping을 사용하는 컨트롤러이다. 실무에서도 거의 이 방식의 컨트롤러를 사용 @controller 스프링이 자동으로 스프링 빈으로 등록(내부에 @Component 애노테이션이 있어 컴포넌트 스캔의 대상) 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식 @RequestMapping 요청 정보를 매핑 해당 URL이 호출되면 이 메서드가 호출된다. 메서드의 이름은 임의로 작명 ModelAndView 모델과 뷰 정보를 담아서 반환 application.properties에 prefix와 suf..

Spring/Spring MVC 2021.05.01

ViewResolver

위와 같이 ModelAndView에 논리주소를 담아 반환하여 해당 url로 접속해보면 위와 같은 404페이지가 뜨는데 이는 현재 ViewResolver가 없기 때문에 매칭되는 뷰를 찾지못했다는 오류이다. 뷰 리졸버 : InternalResourceViewResolver 스프링부트는 InternalResourceViewResolver라는 뷰 리졸버를 자동으로 등록하는데, 이때 application.properties에 등록한 spring.mvc.view.prefix (접두사), spring.mvc.view.suffix(접미사)를 사용하여 등록한다. 위와 같이 application.properties에 등록해두면 우리가 ModelAndView에 넣은 논리주소인 new-form과 더해져서 /WEB-INF/vi..

Spring/Spring MVC 2021.05.01
반응형