이 게시글은 인프런의 김영한님 강의를 듣고 개인적으로 정리한 글입니다. @Component + Controller 인터페이스 구현(BeanNameUrlHandlerMapping) 가장 원초적인 컨트롤러는 @Component + Controller 인터페이스를 구현하는 것으로 사용할 수 있다. 코드부터 보면 아래와 같다. @Component("/springmvc/old-controller") public class OldController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { System..
인프런 김영한님의 강의를 듣고 정리한 내용입니다. 전체 서비스 제공 전체 서비스 제공 흐름은 위와 같이 구성이 되었다. 검정색 : 컨트롤러 하얀색 : 뷰템플릿 각 박스는 색깔별로 위와 같은 형태로 구성되어있다. 모든 페이지를 MVC 패턴으로 구현한다. 컨트롤러가 필요없어도 컨트롤러로 먼저 들어온 후, 뷰 타입으로 반환하는 형태다. 웰컴 페이지 생성 프로젝트를 생성한 후, 먼저 필요한 설정을 해주었다. Annotation Processor 및 Gradle 설정을 완료했다. 이후, 서버가 정상적으로 동작하는지 띄워보았다. 화이트 페이지가 나오며 정상동작하는 것이 확인되었다. 이후에는 편의를 위해 WelCome Page를 만들었다. 상품 관리 상품 관리 - 기본 WelCome Page는 Static의 inde..
이번 포스팅에서는 스프링 MVC 프레임워크를 단계별로 구현해보고자 한다. 먼저, 비즈니스 요구 사항에 맞게 필요한 클래스들을 만든 후, 총 다섯 번에 걸쳐서 리팩토링이 될 예정이다. 비즈니스 요구 사항(회원 관리 시스템) Member 클래스는 username, age 필드를 가진다. MemberRepository에 Member를 저장한다. 이 Repository는 싱글톤으로 관리된다. @Getter @Setter public class Member { private Long id; private String username; private int age; public Member() { } public Member(String username, int age) { this.username = userna..
HttpServletRequest의 역할 HTTP 요청이 도착하면 위와 같은 HTTP 요청 메세지를 하나씩 파싱해야한다. 사실 저건 굉장히 간단하게 되어있는 것이고, 이런저런 Header가 붙고 데이터가 많아지면 개발자가 하나씩 챙기기 너무 어려운 문제가 된다. 특히나 요청이 올 때 마다 직접 파싱을 한다면 그야말로 헬게이트가 열린다. 이런 불합리(?)를 도와주기 위해 HttpServletRequest 객체가 지원된다. HttpServletRequest 객체는 HTTP 요청 메세지를 파싱해서, 객체 필드에 차곡차곡 잘 저장을 해두었다. 이 객체에서 특정 메서드를 활용하면 잘 파싱된 HTTP의 헤더, 데이터를 손쉽게 읽어올 수 있다. HttpServeltRequest는 이런 역할을 한다. 뿐만 아니라 몇 ..
스프링 환경에서 서블릿 사용해보기 앞서 말한 것처럼 WAS는 서블릿 객체를 제공해서 개발자들이 비즈니스 로직에만 신경쓸 수 있도록 해준다. 이런 서블릿은 사실 스프링 환경과는 아무런 상관이 없다. 단지 스프링부트를 통하면 환경설정이 쉽기 때문에 스프링부트로 파일을 만들어서 사용하는 것이다. 스프링 부트 서블릿 환경 구성(@ServletComponentScan) 먼저 서블릿 환경을 구성하기 위해서는 스프링 빈을 등록할 때 사용하는 @ComponentScan처럼 @ServletComponetScan 어노테이션을 달아줘야한다. @ComponentScan과 유사하게 해당 위치부터 하위 항목들을 모두 조사해서 서블릿을 서블릿 컨테이너에 등록해준다. HelloServlet 서블릿 하나 등록해서 찍먹해보기 @WebS..