Spring
-
영속성 컨텍스트(persistence context)Spring/Spring Data JPA 2020. 5. 24. 00:53
Entity 객체의 생명주기 New ( 비 영속 객체 ) : Entity 객체가 DB에 반영되지 않았고, Managed 상태가 아닌 상태를 말한다. 이 상태는 new 키워드를 사용해 생성한 Entity 객체를 말하고 영속화되지 않는다. Managed ( 영속 객체 ) : . New (비 영속 객체) 상태에서 persist 메소드를 이용해 저장한 경우이다. Removed ( 삭제 객체 ) : 이 상태에 객체는 작업 단위가 종료되는 동시에 DB에서 삭제되므로 재사용하면 안된다. Detached ( 준 영속 객체 ) : 이 상태는 더 이상 DB와 동기화를 보장하지 않는다. 다시 Managed (영속 객체) 상태로 만들기 위한 merge 메소드가 존재한다. 기본적으로 Open EntityManager in Vi..
-
내장 서블릿 컨테이너 응용 해보기Spring/Spring Boot 2020. 5. 14. 00:20
스프링 부트가 기본 설정으로 제공해주는 톰캣 대신 제티, 언더토 등의 다른 서블릿 컨테이너를 사용해보자. 기본적으로 우리는 서블릿 기반의 웹 어플리케이션 App을 개발할 때 톰캣을 쓰게 된다. 앞에서 살펴보았던 자동 설정에 의해 톰캣용 자동 설정 파일이 만들어지고 쓰게 된다. build 툴로는 maven을 사용하였는데 다음과 같이 exclusions을 통해 톰캣을 빼주자. 그 후 다음과 같이 jetty 의존성을 추가해주자. 이제 의존성이 들어온 것을 확인을 하고 실행을 해보면 Jetty로 띄워지는 것을 확인할 수 있다. 그러면 웹 서버를 사용하지 않을 수도 있을까? 기본적으로 의존성에 웹과 관련된 기술이 들어와 있다면 스프링 부트는 웹 App으로 만들려고 시도를 한다. 웹과 관련된 의존성을 제거하거나 혹..
-
Spring Data JPA 1. 상속구조와 주요 인터페이스Spring/Spring Data JPA 2020. 5. 12. 00:39
JpaRepository - PagingAndSortingRepository - CrudRepository - Repository 이러한 상속 구조와 각 인터페이스의 역할을 이해해보자. 제일 밑단에 있는 영속화 기술에 특화된 JpaRepository를 빼면 나머진 다른 영속화 기술용 리파지토리에서도 재사용하는 공용 인터페이스들이다. 이 인터페이스들을 자세히 살펴보자. Spring Data Repository 사용하기 다양한 영속성 저장소를 위해 데이터 접근 레이어를 구성할 때 코드들의 양을 상당히 줄일 수 있도록 하는 게 Repository이다. 다양한 쿼리 키워드를 제공하는데 우리가 Repository를 만들고 메서드를 만든다. 이때 메서드에 특정한 키워드를 만든다면 쿼리를 만들어주게 된다. 예를들어 ..
-
하이버네이트 ORM User guide 1Spring/Spring Data JPA 2020. 5. 11. 03:00
하이버네이트는 자바에서 쓸 수 있는 ORM 설루션이다. ORM이라는 용어는 객체 모델을 관계형 모델로 매핑할 수 있는 기술이다. 혹은 관계형 모델을 객체 모델로 매핑한다거나. 즉 둘 간의 불일치한 패러다임을 일치시켜주는 기술이다. 하이버네이트는 매핑 뿐아니라 쿼리도 할 수 있고 데이터를 가져오는 기능도 제공을 한다. 이로써 SQL이나 JDBC를 직접 다루지 않고 하이버네이트로 감싸주다 보니 SQL에 종속적인 개발을 막아준다. 하이버네이트가 가장 유용한 경우는 비즈니스 로직이 자바 기반이고 객체 기반의 도메인 모델에서 가장 유용하다고 한다. JDBC위에 하이버네이트가 올라가고 하이버네이트를 한번더 감싼 게 JPA이다. Hibernate가 제공하는 natvie 한 API를 사 용해서 Hibernate를 쓰거..
-
내장 웹 서버 이해Spring/Spring Boot 2020. 5. 2. 23:53
스프링 부트의 main 메서드에서 Application.run을 하면 웹 서버가 뜨는 것은 스프링 부트를 경험해 봤다면 알고 있을 것이다. 그러면 스프링 부트 자체가 웹 서버일까? 아니다. 스프링 부트는 내장 서블릿 컨테이너를 쉽게 사용하게 해 주고 스프링 프레임워크를 쉽게 사용하게 해주 는하나의 툴이다. 그리고 이 서블릿 컨테이너라 불리는 톰캣, 제티, 언더토 등이 웹 서버이다. 그리고 이 서블릿 컨테이너들은 자바 코드 로 서버를 만드는 기능을 제공한다. 그러면 어떻게 스프링 부트가 톰캣을 띄어줄 수 있는 걸까? 이는 스프링 부트의 자동설정과 관련이 있다. 톰캣, 서블릿 등이 자동 설정으로 등록이 되기 때문에 스프링 부트 App을 실행하면 톰캣이 만들어지고 서블릿이 추가가되는 등 App이 잘 뜨게 되는..
-
리소스 핸들러Spring/Spring MVC 2020. 5. 2. 23:10
리소스 핸들러는 이미지, JS, CSS, HTML 등의 정적인 리소스를 처리하는 핸들러이다. 이 핸들러는 서블릿 컨테이너 ( 톰캣 , 제티 등 )가 기본으로 제공하는 Default 서블릿 이며 이미 등록이 되어있다. 스프링은 이렇게 등록돼있는 디폴트 서블릿에 이 요청을 위임해서 정적인 리소스를 처리한다. 그런데 정적인 리소스 핸들러가 요청을 먼저 다 가로챈다면 우리가 만든 핸들러들은 무시될 것이다. 즉 우리가 만든 핸들러들이 우선순위가 더 높아야 하기 때문에 기본적으로 리소스 핸들러의 우선순위는 낮다. 스프링 부트를 쓰고 있다면 아무런 설정 없이도 기본 정적 리소스 핸들러와 캐싱 기능을 제공한다. 그 디렉터리 중 하나가 static 디렉터리이다. static 디렉터리 안에 index html 파일을 만들..
-
핸들러 인터셉터Spring/Spring MVC 2020. 4. 28. 00:28
어떤 핸들러의 요청처리 전 후로 부가적인 작업을 하고 싶다면 핸들러 인터셉터를 만들어서 사용할 수 있다. 이 핸들러는 hello에 대해 요청처리 후 뷰 렌더링이 되는 핸들러이다. 이 핸들러의 요청을 처리하기 전에 PreHandle 전처리 작업과 요청을 처리한 후 뷰 렌더링 처리 직전 postHandler 처리가 가능하다. 뷰 랜더링 까지 완전히 끝난 이후에도 afterCompletion 으로 전후 처리의 템플릿을 제공하고 있다. * 서블릿 필터와 비슷하지만 좀 더 구체적인 것 같다. 핸들러 인터셉터는 preHandle시 true나 false를 return 하게 되는데 true 시 이 다음 핸들러가 쭉 진행되고 false 시 응답 처리를 끝내고 다음 핸들러로 가지말고 요청 처리를 끝내라는 것을 의미한다. ..
-
JPA의 도메인 클래스 컨버터 자동 등록Spring/Spring Data JPA 2020. 4. 25. 02:06
이전에 살펴보았던 Formatter은 도메인 클래스에 name으로 맵핑을 했지만 보통은 id로 하게 된다. 그럼 이제 id를 받아서 person으로 변경을 한 후에 이름을 출력한다던가 하는 일을 해보자. 이 경우 이전과 마찬가지로 Formatter나 Converter를 이용하게 되지만 이번에는 만들지 않고 JPA의 도움을 받아서 만들 어보자. 스프링 데이터 JPA가 지원해주는 기능 중에 도메인 클래스 컨버터 기능이 있다. 이 기능은 아이디에 해당하는 도메인 클래스로 변환을 해주는 컨버터가 자동으로 등록이 된다. 의존성에 h2와 jpa만 추가해준 후 Person 클래스에 @Entity를 붙여준다. 그리고 PersonRepository를 만든다. Id값에서 Entity로 컨버팅 할때 리포지토리를 사용하므로 ..