본문 바로가기

스프링(부트)/스프링 내용 정리8

Servlet과 Spring MVC Servlet과 Spring MVC 서블릿(Servlet) 자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. 서블릿을 사용하는 방법은 서블릿 애플리케이션을 만든 다음 web.xml에 servlet을 등록해주고 servlet을 원하는 url과 매핑해준다. public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { System.out.println("Do Get"); resp.getWriter().p.. 2021. 1. 7.
멀티 쓰레드 환경과 스프링 빈 멀티 쓰레드 환경과 스프링 빈 스프링 빈은 대부분 Singleton 패턴으로 생성되어 Application Context에 의해서 관리된다. 즉, 모든 Controller, Service, Repository는 하나의 인스턴스만 갖고 있는 것이다. 그런데 스프링 환경자체는 멀티 쓰레드인데 어떻게 Thread-Safe를 유지할 수 있을까 궁금해졌다. 정답부터 말하면 Thread-Safe하지 않다. 단지, Thread-Safe하도록 코드를 짤 뿐이다. 일단 구조를 Spring에서 요청이 들어오면 그 요청은 각각 하나의 쓰레드가 맡게 된다. 즉 모든 쓰레드는 스프링 빈을 공유하고 내부의 멤버변수도 공유하게 되는 것이다. 하나의 예를 보자 @RestController public class UserControl.. 2021. 1. 6.
JPA (Java Persistence API) JPA JPA (Java Persistence API)란 현재 자바의 ORM 표준 인터페이스를 말한다. JPA는 인터페이스라 기술 스펙일뿐 실제로 구현을 해야한다. 그리고 JPA를 구현한 기술이 hibernate이다. Hibernate이외에도 DataNucleus, EclipseLink같은 다른 구현체들이 존재한다. 그렇다면 JPA에서 가장 핵심인 영속성 컨텍스트(Persistence Context)에 대해서 알아보자 영속성 컨텍스트(Persistence Context) 영속성 컨텐스트란 엔티티를 영구 저장하는 환경이라는 뜻이다. 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 .. 2021. 1. 5.
[스프링] Spring Data 대부분의 애플리케이션은 다양한 데이터 리포지터리와 통신한다. 자바EE에서 제공하는 가장 기본적인 API는 JDBC이다. 일반적인 JDBC코드에는 다음이 포함된다. 실행할 쿼리 스테이트먼트 객체에 대한 쿼리 매개변수를 설정하는 코드 쿼리 실행 결과(ResultSet)를 빈에 옮기는 코드 그러나 JDBC 코드는 작성하고 관리하기 번거롭다. 다음 두 가지 프레임워크가 JDBC 위에 추가 레이어를 제공하기 위해 널리 사용됐다. Mybatis(Ibatis): Mybatis는 수동으로 코드를 작성해 매개변수를 설정하고, 결과를 검색할 필요가 없다. 자바 POJO를 DB에 매핑하는 간단한 XML 또는 어노테이션 기반 구성을 제공한다. Hibernate: Hibernate는 ORM 프레임워크다. ORM 프레임워크는 관.. 2020. 5. 24.
[스프링] Handler Interceptor Handler Interceptor는 컨트롤러에 대한 요청을 가로채는데 사용된다. 예를 들어, 요청 전 후에 일부 처리를 원할 수 있다. 요청 및 응답의 내용을 기록하거나 특정 요청의 소요된 시간을 알아내야 할 수도 있다. HandlerInterceptor를 만드는 데는 두가지 단계가 필요하다. HandlerInterceptor를 정의한다. HandlerInterceptor를 인터셉트할 특정 핸들러에 매핑한다. HandlerInterceptor 정의 public class HandlerTimeLoggingInterceptor extends HandlerInterceptorAdapter { private static final Logger logger = Logger .getLogger(HandlerTim.. 2020. 5. 3.
[스프링] Spring MVC 예제 및 단위테스트 목차 Spring MVC는 이전 블로깅에서도 말했다시피 아래와 같은 플로우를 따른다. 여기서는 Spring MVC를 사용해서 6가지 간단한 웹 플로우를 만드는 예제를 만들 것이다. Flow 1. 뷰가 없는 컨트롤러, 자체적으로 컨텐츠 제공 Flow 2. 뷰가 있는 컨트롤러 (JSP) Flow 3. 뷰가 있고, ModelMap을 사용하는 컨트롤러 Flow 4. 뷰가 있고, ModelAndView를 사용하는 컨트롤러 Flow 5. 간단한 폼의 컨트롤러 Flow 6. 벨리데이션이 있는 간단한 폼의 컨트롤러 기본 설정을 해야하는 것은 Spring MVC의 의존성을 추가한다. DispatcherServlet을 web.xml에 추가한다. Spring Application Context를 생성한다. Spring MV.. 2020. 4. 26.