본문 바로가기
728x90

[Spring]/Spring MVC6

Spring에서 HTTP 통신을 통해 JSON 형식의 데이터를 주고 받을 때 사용하는 애너테이션을 정리해보자. 💡 Java + Spring Boot을 이용하여 클라이언트와 http 통신을 할 때 전달받는 http 요청 메시지나, 전달하는 응답 메시지는 json 형식의 데이터로 이루어지는 경우가 많다. 이때 자바 객체(dto)에서 json 데이터로 어떻게 변환이 되는지를 잘 모르고 있는 것 같아 한 번 정리해보려고 한다. 우선 HTTP 통신에 대해 기본적인 내용을 훑고 넘어가자. HTTP 통신 중 가장 많이 사용하는 HTTP/1.1 기반의 통신 방식에 대해 알아보겠다. HTTP/1.1 기반의 통신 방식은 Request-Response 방식으로 동작한다. 클라이언트가 서버에 요청을 하면, 서버는 클라이언트의 요청에 대해 응답한다. 이때, 클라이언트는 HTTP 메서드(GET, POST, PUT, DELETE 등)를 이.. 2023. 8. 14.
스프링 MVC의 구조 스프링 MVC 스프링에서 제공하는 웹 모듈로 스프링 웹(Spring Web) MVC라고도 부른다. Model, View, Controller 세 가지 구성 요소를 사용하여 사용자의 다양한 HTTP 요청을 처리하고 텍스트 형식, 정적 페이지(html) 등 다양한 응답을 만들어 낼 수 있다. 스프링 MVC의 구조 DispatcherServlet 스프링 MVC는 프런트 컨트롤러 패턴으로 구현되어 있다. 스프링 MVC의 프런트 컨트롤러가 DispatcherServlet이다. 스프링 MVC의 핵심이라고 할 수 있다. 클라이언트로부터 요청을 받는다. 클라이언트에게 받은 요청을 처리할 핸들러(컨트롤러)에 대한 검색을 핸들러 매핑 인터페이스에게 요청한다. 핸들러 매핑(HandlerMapping)과 핸들러 어댑터(Han.. 2023. 3. 23.
스프링 MVC에서의 프런트 컨트롤러(Front Controller) & 어댑터(Adapter) 패턴 프런트 컨트롤러 패턴 컨트롤러 앞에 프런트 컨트롤러 역할의 서블릿을 세우고 클라이언트의 요청을 받는다. 하나의 프론트 컨트롤러가 모든 요청을 받아 요청에 맞는 컨트롤러를 찾아 호출한다. 프런트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 된다. 프런트 컨트롤러의 도입을 통해 공통 기능 등을 한 곳에서 처리할 수 있다. 스프링 웹 MVC와 프런트 컨트롤러 스프링 웹 MVC의 핵심도 프런트 컨트롤러이다. 스프링 웹 MVC에서는 DispatcherServlet이 프런트 컨트롤러 패턴으로 구현되어 있다. 프런트 컨트롤러의 단점 프런트 컨트롤러 패턴만으로 구현된 서블릿은 한 가지 방식의 컨트롤러 인터페이스만 사용할 수 있다. 어댑터 패턴 그러나, 어댑터 패턴을 이용하면 말 그대로 어댑터 역할을 하.. 2023. 3. 22.
자바에서의 MVC 패턴(Servlet -> JSP -> 스프링 MVC까지) Servlet을 활용한 동적 웹페이지 자바를 통해 서블릿과 자바코드만으로 HTML 문서를 만들 수 있다. 서블릿을 이용하면 정적인 HTML 문서에 회원 정보나 회원 목록과 같은 동적인 요소를 넣은 동적 웹 페이지를 만들 수 있다. 그러나 이는 매우 복잡하고 비효율적이다. 탬플릿 엔진 자바 코드로 HTML을 만드는 것보다 HTML 문서에 동적으로 변경해야 하는 부분을 자바 코드로 넣는 것이 더 편리할 것이다. 이러한 아이디어에서 나온 것이 바로 템플릿 엔진이다. 앞서 언급했듯이 템플릿 엔진을 사용하면 HTML 문서에 필요한 부분만 자바 코드를 적용하여 동적으로 변경할 수 있다. 템플릿 엔진은 JSP, Thymeleaf, Freemarker, Velocity 등이 있다. Servlet과 JSP의 한계 서블릿.. 2023. 3. 16.
HttpServletRequest & HttpServletResponse 정리 HttpServletRequest의 역할과 기능 HTTP 요청 메시지를 개발자가 직접 파싱해서 사용하면 매우 불편할 것이다. 서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱해준다. 그리고 그 결과를 HttpServletRequest 객체에 담아서 제공한다. 임시 저장소 기능 해당 HTTP 요청이 시작부터 끝날 때까지 유지되는 임시 저장소 역할을 한다. 세션 관리 기능 HTTP 요청 데이터 HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법은 주로 3가지 방법을 사용한다. GET - 쿼리 파라미터 http://localhost:8080/request?username=hello&age=20 쿼리파라미터는 ?로 시작하고, 추가.. 2023. 3. 15.
트랜잭션 전파(Transaction Propaganda) & 트랜잭션 격리 레벨(Isolation Level) 1분 요약 정리 트랜잭션 전파(Transaction Propaganda) 트랜잭션의 경계에서 진행 중인 트랜잭션의 존재 여부에 따라 어떻게 동작할 것인지 결정하는 방식으로 propagation 애트리뷰트를 통해서 설정할 수 있다. @Transacional(Propagation.REQUIRED) 일반적으로 가장 많이 사용되는 Propagation 유형의 디폴트 값이다. 진행 중인 트랜잭션이 있으면 해당 트랜잭션에 참여하고, 없으면 새로 트랜잭션을 시작한다. Propagation.REQUIRES_NEW 이미 진행중인 트랜잭션과 무관하게 새로운 트랜잭션이 시작되며, 기존의 트랜잭션은 새로 시작된 트랜잭션이 종료할 때까지 중지된다. Propagation.MANDATORY 진행중인 트랜잭션이 없으면 예외를 발생시킨다. Propa.. 2022. 12. 4.
728x90