본문 바로가기

전체 글

(77)
[TIL 2022-1-30] 스프링 MVC 공부, 비트연산자 비트 연산자 종류 | : 둘중 하나만 1이면 1 & : 둘다 1이여야지만 1 ^ : 둘이 다르면 1 ~ : 1 이면 0, 0 이면 1로 반전 > n : 지정한 수 n만큼 오른쪽으로 비트 이동 Spring MVC Http 요청 메시지 바디 처리 요청 파라미터의 경우는 @RequestParam, @ModelAttribute 을 통해 조회했다. 또 컨트롤러 메소드 파라미터의 변수명(또는 객체 멤버의 변수명)과 요청파라미터의 키가 같다면 이를 생략하더라도 동작했다. 파라미터가 아닌 Http 요청 메세지 바디를 통해 데이터를 전달할 경우 @RequestBody 를 통해 데이터를 바인딩할 수 있다. 단 @RequestBody는 생략할 수 없다. 생략하면 스프링에서 단순타입(string, int) 등에 파라미터는 @..
[TIL 2022-1-29] 스프링 웹 MVC 공부 + 정규식 스프링 웹 MVC 공부 클래스 단계의 @RequestMapping을 통해 중복 url을 통합해서 처리할 수 있다. @RequestParam을 통해 요청 파라미터 사용 String int 등의 단순 타입이고 파라미터 이름이 쿼리 파라미터 이름과 같아면 @RequestParam도 생략가능 하지만 명확하게 요청 파라미터에서 데이터를 읽는 다는 것을 명시하기 위해 @RequestParam은 생략하지 않는 것도 좋다는 견해도 있다. @RequestParam(required=false) 로 설정해주면 요청 파라미터가 없어도 동작한다. 하지만 이 떄 컨트롤러 메소드의 파라미터에 null을 넣어주기 때문에 타입이 primitive 형(int,long,double 등) 인 경우에는 500 에러를 발생시킨다. 이러한 경우..
[TIL 2022-1-27] 스프링 MVC, 서블릿, 핸들러 어댑터 등 공부 스프링 컨테이너와 서블릿 컨테이너와의 관계 2022.01.27 - [Spring] - 스프링 컨테이너와 서블릿 컨테이너와의 관계 스프링 컨테이너와 서블릿 컨테이너와의 관계 서블릿 컨테이너는 서블릿 객체의 생명주기를 관리하고 클라이언트의 HTTP 요청에 따라 맵핑된 서블릿 객체를 찾아 service() 메서드를 실행시킨다. 톰캣은 이러한 서블릿 컨테이너 기능을 포함한 unannn.tistory.com 스프링 컨테이너와 서블릿 컨테이너와의 상호 동작 관계가 어떻게 되는지 헷갈려서 공부하고 정리해봤다. 단순하게 동작 흐름도 정도만 찾아보고 이해하려고 했는데, 스프링부트가 @EnableAutoConfiguration를 통해 빈을 등록하는 흐름 도 같이 이해해볼 수 있어서 매우 재밌었다. 엄청 자세한 부분까지 들..
[Spring MVC] DispatcherServlet 의 동작 흐름 DispatcherServlet DispatcherServlet은 Spring MVC 에서 프론트 컨트롤러 역할을 하는 서블릿 객체이다. 스프링 부트 어플리케이션을 시작하면 DispatcherServlet 객체를 생성해 서블릿 컨테이너에 등록하고, urlPatterns="/" 로 설정해 모든 요청에 대해 맵핑 한다. 때문에 서버로 요청이 들어오면 DispatcherServlet가 모든 요청의 url을 분석해 그 url에 매핑된 핸들러(컨트롤러)를 찾아 실행시킨다. HandlerMapping HandlerMapping은 요청 URL에 매핑된 핸들러를 찾아 조회하고 반환하는 기능을 제공하기 위한 인터페이스이다. 아래 의 메소드는 DispatcherServlet 에서 요청에 대한 핸들러(컨트롤러)를 찾기 위해..
스프링 컨테이너와 서블릿 컨테이너와의 관계 서블릿 컨테이너는 서블릿 객체의 생명주기를 관리하고 클라이언트의 HTTP 요청에 따라 맵핑된 서블릿 객체를 찾아 service() 메서드를 실행시킨다. 톰캣은 이러한 서블릿 컨테이너 기능을 포함한 WAS로 스프링 부트 어플리케이션을 실행시키면 톰캣 서버도 실행되며 서블릿 컨테이너의 역할을 수행한다. 결국 톰캣도 하나의 자바 프로그램이다. 스프링 부트 어플리케이션을 실행시키면 @ComponentScan을 통해 빈을 등록하고, @EnableAutoConfiguration가 스프링 부트의 autoconfigure패키지의 /META-INF/spring.factories 에서 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을 상속받은 컨트롤러로, 모든 클라이언트의 요청을 '혼자' 받는다. 그리고 클라이언트의 요청에 따라 서블릿을 상속받지않고 구현된 컨트롤러를 호출한다. 이와같이 구현하므로써 각각의 컨트롤러들은 서블릿 요청에 따라 비지니스로직을 수행하고, 모델에 데이터를 담아 뷰를 호출..