본문 바로가기

TIL

(50)
[TIL 2022-1-27] 스프링 MVC, 서블릿, 핸들러 어댑터 등 공부 스프링 컨테이너와 서블릿 컨테이너와의 관계 2022.01.27 - [Spring] - 스프링 컨테이너와 서블릿 컨테이너와의 관계 스프링 컨테이너와 서블릿 컨테이너와의 관계 서블릿 컨테이너는 서블릿 객체의 생명주기를 관리하고 클라이언트의 HTTP 요청에 따라 맵핑된 서블릿 객체를 찾아 service() 메서드를 실행시킨다. 톰캣은 이러한 서블릿 컨테이너 기능을 포함한 unannn.tistory.com 스프링 컨테이너와 서블릿 컨테이너와의 상호 동작 관계가 어떻게 되는지 헷갈려서 공부하고 정리해봤다. 단순하게 동작 흐름도 정도만 찾아보고 이해하려고 했는데, 스프링부트가 @EnableAutoConfiguration를 통해 빈을 등록하는 흐름 도 같이 이해해볼 수 있어서 매우 재밌었다. 엄청 자세한 부분까지 들..
[TIL 2022-1-26]스프링 MVC + 프로그래머스 공부 DispatcherServlet DispatcherServlet은 Spring MVC 에서 프론트 컨트롤러 역할을 하는 서블릿 객체이다. 스프링 부트는 어플리케이션을 시작하면 DispatcherServlet 의 urlPatterns 을 "/" 로 등록해서 모든 요청을 맵핑한다. 때문에 서버로 요청이 들어오면, DispatcherServlet 는 요청의 url을 분석해 그 url에 매핑된 핸들러(컨트롤러)를 찾아 실행시킨다. Spring의 핸들러는 개발자가 더 편하게 비지니스 로직에 집중할 수 있는 방향으로 발전 해왔다. 현재는 대부분 @RequestMapping 을 통해 핸들러를 매핑하지만, 과거에 사용했던 스프링 빈의 이름으로 등록하는 등 다양한 방식들이 존재한다. HandlerAdapter 이렇게 새..
[2022-1-24] HTTP, 스프링 웹 MVC공부, 패스워드의 암호화 개념 HTTP 상태코드 1XX - 요청이 수신되어 처리중 - 잘 사용하지 않음 2XX - 클라이언트의 요청을 성공적으로 처리 200 OK - 요청 성공 201 Created : 요청에 성공해서 새로운 리소스가 생성됨 - 요청에 의해 생성된 리소스는 응답 메세지 헤더의 Location 속성으로 식별할 수 있다. 202 Accepted : 요청이 접수되었으나 처리가 완료되지 않음 204 No Content : 서버가 요청을 성공적으로 요청을 수행했지만, 응답 페이로드에 보낼 데이터가 없음 - 문서의 저장버튼 처럼 같은 화면을유지하는 것과 같이 응답 데이터가 필요하지 않을 때 사용한다. 200,201 만 사용하는 경우가 많음 3XX - 요청을 완료하기 위해 웹브라우저의 추가적인 조치가 필요 - 웹 브라우저는 3XX..
[2022-1-23]프론트 컨트롤러 구현 및 리팩토링 프론트 컨트롤러 기존에는 컨트롤러들이 각각 하나의 URI마다 하나의 서블릿 객체가 매핑되도록 구현하였다. 이렇게 구현하다보니 다음과 같은 문제점들이 발생했다. 1. 각각의 컨트롤러들이 HttpServlet를 상속받아 컨트롤러를 서블릿 의존적으로 구현하게 된다. 2. 서블릿에 의존하기 때문에 컨트롤러들에 같은 코드가 공통적으로 사용된다. 이에 대해 프론트 컨트롤러 클래스를 구현하여 문제를 해결할 수 있다. 프론트 컨트롤러는 HttpServlet을 상속받은 컨트롤러로, 모든 클라이언트의 요청을 '혼자' 받는다. 그리고 클라이언트의 요청에 따라 서블릿을 상속받지않고 구현된 컨트롤러를 호출한다. 이와같이 구현하므로써 각각의 컨트롤러들은 서블릿 요청에 따라 비지니스로직을 수행하고, 모델에 데이터를 담아 뷰를 호출..
[2022-1-22] HTTP 공부 form 태그의 enctype="multipart/form-data" form 태그의 enctype은 서버로 보내고자하는 데이터의 인코딩하는 방법을 명시한다. 아래의 세가지 타입으로 설정할 수 있다. application/x-www-form-urlencoded Default로 설정되어 있는 타입으로 모든 데이터가 인코딩 되었음을 뜻한다. text/plain 공백 문자만을 "+"으로 치환하고 나머지 문자는 인코딩 되어 있지 않음을 뜻한다. multipart/form-data 모든 문자가 인코딩되어있지 않음을 뜻한다. 보통 이미지나 파일의 바이트 데이터를 서버로 전속할 때 사용한다. HTTP 데이터 전송 방식 HTTP 에서 서버로 데이터를 보낼때 전송 방식은 쿼리 파라미터를 통한 방식(GET), 메세지 바디..
[2022-1-21]Servlet, jsp + HTTP 메서드 종류 Map to List 아래처럼 생성자를 통해 map을 리스트로 변환할 수 있다. Map map = new HashMap(); ... List list = new ArrayList(map.values()); map.value()를 호출하면 map의 value 들을 Collection객체를 반환한다. 이를 ArrayList 생성자의 파라미터로 전달해서 형변환할 수 있다. 이는 아래와 같은 로직으로 동작한다. AssertJ 의 Assertions.assertThat().contatins() Assetions.assertThat(리스트).contains(객체1,객체2,......객체n); assertThat의 매개변수로 리스트를 주고 이 리스트에 존재하는지 검사하고자하는 객체들을 추가하여 존재여부를 확인할 수 ..
[2022-1-20]HttpServletResponse 과 HTTP공부 HttpServletResponse 과 HTTP get방식은 보통 URL에 쿼리 파라미터형식으로 데이터를 전송하기 때문에 메세지 바디가 없다. 그러므로 content-type, content-length 또한 없다. 메세지 바디를 사용해서 데이터를 전달할 수도 있지만, 권장하지 않는다. post방식은 get방식의 쿼리 파라미터 형식 그대로 http 메세지 body에 담아 보낸다. 이 body에 보내는 데이터의 형식에 따라 content-type을 꼭 지정해야한다. 예를 들어 폼으로 데이터를 보내는 경우 "application/x-www-form-urlencoded", json의 경우 "application/json"와 같다. HttpServletResponse 객체는 궁극적으로 HTTP response ..
[2022-1-19] Sevlet, HttpServletRequest 공부 Sevlet, HttpServletRequest 기능 알게된 것 Sevlet, HttpServletRequest 서블릿 객체자체는 싱글톤으로 서블릿 컨테이너에 등록되고, 객체마다 매핑된 url로 요청이 들어오면, 서블릿 컨테이너는 요청 하나하나마다 개발자에 의해 구현된 아래의 메소드를 실행시킨다. protected void service(HttpServletRequest request, HttpServletResponse response){ //비지니스 로직 구현 } HttpServletRequest 객체에는 서블릿에 의해 파싱된 HTTP 요청 메세지 데이터가 들어있다. 이 객체를 통해 개발자는 요청 메세지를 이용하여 비지니스 로직을 구현한다. 이외에도 HTTP 요청의 생성과 종료시까지 유지되는 임시 저..