본문 바로가기

분류 전체보기311

Spring MVC 설정 Spring Web MVC - Spring MVC 설정 @EnableWebMvc 어노테이션 기반 스프링 MVC 를 사용할 때, 웹 MVC 에 필요한 설정을 편리하게 설정해준다. @Configuration 과 함께 자바 설정 클래스에 같이 붙이면 된다. Dispatcher 에 등록된 기본 인터페이스 외에 다양한 인터페이스가 추가된다. delegation(위임) 패턴으로 되어 있어서 확장성이 좋다. WebMvcConfigurer @EnableWebMvc 에서 제공하는 다양한 인터페이스를 커스터마이즈 할 때, WebMvcConfigurer 을 상속받아서, 메소드를 오버라이딩하면 편하다. 스프링부트 없이 스프링 웹 MVC 를 활용하는 방법 정리 web.xml 설정을 통해 servletContext, WebApp.. 2021. 2. 13.
Servlet이란 + Spring MVC 연동 Spring Web MVC - Servlet Servlet 서블릿(Servlet) 이란 웹 통신에서 요청과 응답을 처리하는 자바 객체이다. 자바 엔터프라이즈 에디션이 웹 애플리케이션 개발용 스펙과 API를 제공해준다. 요청 당 쓰레드가 생성되거나, 풀에서 가져와서 사용된다. 주요 클래스로 HttpServlet 이 있다. 서블릿 등장이전에는 CGI (Common Gateway Interface) 기술이 있었는데 이는 요청 당 프로세스를 생성하였다. 서블릿은 CGI 에 비해서 작동이 빠르고, 플랫폼에 독립적이며, 보안이 좋고, 이식성이 강하다. 서블릿 엔진 (=서블릿 컨테이너) Tomcat, Jetty, Undertow 같은 WAS(Web Applilcation Server)가 서블릿 엔진이다. 서블릿을 실.. 2021. 2. 13.
MVC 패턴 예제 Spring Web MVC - MVC 스프링 MVC MVC 모델 M 은 model, V는 view, C는 controller 를 말한다. 모델은 자바 객체이다. 다른 의존관계가 섞이지 않은 POJO 로 보통 만들어진다. 도메인 객체로써, 어떤 전달할 데이터를 담고 있다(DTO). 화면에 전달할 데이터나 화면으로부터 전달 받은 데이터를 담고 있는 객체이다. 뷰는 사용자가 보는 브라우저 화면에 데이터를 보여주는 역할을 한다. 모델이 제공하는 데이터를 여기서 사용한다. 보통 HTML 로 만들어지고 이를 위한 다양한 템플릿(JSP, Thymeleaf)이 있다. 또한 json, xml 등의 형태로 데이터를 바로 던져주기도 한다. 컨트롤러는 특정 url에 전달할 뷰를 매핑해준다. 사용자의 입력을 받아 모델 객체의 .. 2021. 2. 13.
Spring Data JPA - Entity, 관계 매핑 Spring Data JPA 목표 - Entity 만들어 릴레이션과 매핑한다. - Value 타입을 매핑한다. - 관계(1대다, 단방향, 양방향)를 설정한다. application.properties # datasource 설정 - postgreSQL DB spring.datasource.url=jdbc:postgresql://localhost:5432/postgres spring.datasource.username=postgres spring.datasource.password=1234 # hibernate 설정 spring.jpa.hibernate.ddl-auto=create # hibernate WARN 경고 출력 방지 spring.jpa.properties.hibernate.jdbc.lob.non.. 2021. 2. 11.
Spring Data JPA - Auditing Spring Data JPA 014 - Auditing Auditing은 생성일자, 생성자, 수정일자, 수정자를 자동으로 등록할 수 있도록 도와준다. 엔티티의 변경 시점에 위 정보를 기록하는 기능이다. 예제를 보자. @Getter @Setter @Entity @EntityListeners(AuditingEntityListener.class) public class Comment { @Id @GeneratedValue private Long id; private String comment; @ManyToOne(fetch = FetchType.LAZY) private Post post; ... @CreatedDate private Date created; @CreatedBy @ManyToOne private.. 2021. 2. 11.
Spring Data JPA - Transactional Spring Data JPA - Transactional Transaction 스프링 데이터 JPA가 제공하는 Repository의 모든 메소드는 @Transactional이 적용되어 있다. @Transactional 애노테이션을 들여다 보자. 클래스, 인터페이스, 메소드에 사용할 수 있고, 메소드에 가장 가까운 애노테이션의 우선순위가 높다. RuntimeException 또는 Error 가 발생하면 rollback 이 자동으로 일어난다. 특별한 롤백 옵션을 추가할 수도 있다. Transaction manager 를 설정할 수도 있지만 기본은 jpa transactionManager 를 사용한다. Isolation 은 여러 레벨로 설정할 수 있고, 데이터의 동시성(성능)과 무결성(신뢰성)을 조절할 수 있.. 2021. 2. 11.
Spring Data JPA - 여러 기능 2 Spring Data JPA - 여러가지 기능 2 Projection project 란 릴레이션에서 select 할 때 원하는 컬럼 가져오는 것이다. select * from table 처럼 모두를 가져올 수도 있고, 아니면 컬럼 이름을 적어서 일부만 가져올 수도 있다. Closed 프로젝션 인터페이스 기반 프로젝션과 클래스 기반 프로젝션이 있는데, 인터페이스 기반을 먼저 해보자. 조금 더 코드가 덜 많다. 클로즈드 프로젝션은 원하는 attribute 만 선택해서 가져오는 것이므로 쿼리의 성능을 최적화 할 수 있다. public interface CommentSummary { String getComment(); int getUp(); int getDown(); } public interface Comm.. 2021. 2. 11.
Spring Data JPA - 여러 기능 1 Spring Data JPA - 여러가지 기능 1 JPA 쿼리 메소드 JPA 에서 쿼리메소드 사용시 아래와 같은 키워드를 제공한다. And, Or Is, Equals LessThan, LessThanEqual, GreaterThan, GreaterThanEqual After, Before IsNull, IsNotNull, NotNull StartingWith, EndingWith, Containing=isContaining=Contains, Like(와일드카드와 함께) OrderBy Not, In, NotIn True, False IgnoreCase 쿼리를 찾아서 사용하는 기능도 제공한다. 엔터티에 정의한 쿼리를 찾아 사용할 수 있다. @NamedQuery, @NamedNativeQuery @NamedQ.. 2021. 2. 11.
Spring Data Common - Web 기능 Spring Data JPA - Web 스프링 데이터는 다양한 웹 지원 기능을 제공한다. 스프링부트를 사용할 시 모든 것이 자동 설정된다. 일반 스프링을 사용하는 경우 자바 설정 파일에 @Configuration 과 함께 @EnableSpringDataWebSupport 를 붙이면 된다. Spring Data 가 지원하는 여러 웹 기능을 알아보자. 도메인 클래스 컨버터 Pageable, Sort @RequestHandler 메소드에서 Pageable, Sort 매개변수를 사용할 수 있다. HATEOAS 또한 Page 관련해서 HATEOAS 기능을 제공한다. HATEOAS 란 Hypermedia As The Engine Of Application State 의 약자로 쉽게 말해, 리소스 자원의 위치(uri.. 2021. 2. 10.
Spring Data JPA - JPA Repository, save Spring Data JPA - JPA Repository 스프링 부트를 사용할 때는 @EnableJpaRepositories 가 자동으로 등록된다. @SpringBootApplication 안에 연결되어 있다. 스프링 부트는 사용하지 않는다면 @Configuration 과 위 어노테이션을 같이 사용해주면 JpaRepository를 사용할 수 있다. JpaRepository 의 구현체인 SimpleJpaRepository 에 이미 @Repository 가 이미 붙어있기 때문에 빈 으로 등록하기 위해 JpaRespository 에 @Repository 를 꼭 붙이지 않아도 된다. 스프링이 제공하는 @Repository 는 SQLException 또는 JPA와 관련된 Exception을 스프링의 DataAc.. 2021. 2. 10.
728x90