Develop/Spring15 [Spring/MVC] 스프링 MVC 기본 기능 로깅 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class LogTestController { private final Logger log = LoggerFactory.getLogger(LogTestController.class); @RequestMapping("/log-test") public String logTest() { String name = "spring"; log.inf.. 2024. 3. 21. [Spring/MVC] 스프링 MVC 구조 SpringMVC 구조 DispatcherServlet.doDispatch() 서블릿 등록 → DispatcherServlet 도 부모 클래스에서 HttpServlet을 상속 받아서 사용하고, 서블릿으로 동작한다. protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { HttpServletRequest processedRequest = request; HandlerExecutionChain mappedHandler = null; ModelAndView mv = null; // 1. 핸들러 조회 mappedHandler = getHandler(processedRequest); i.. 2024. 3. 21. [Spring/MVC] MVC 프레임워크 프론트 컨트롤러 패턴 프론트 컨트롤러 도입 - v1 구조 View 분리 - v2 구조 모든 컨트롤러에서 뷰로 이동하는 부분에 중복이 있고, 깔끔하지 않다. String viewPath = "/WEB-INF/views/new-form.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); Model 추가 - v3 구조 서블릿 종속성 제거 → 컨트롤러 입장에서 HttpServletRequest, HttpServletResponse 가 꼭 필요할까? 요청 파라미터 정보는 자바의 Map 으로 대신 넘기면 컨트롤러가 서블릿 기술을 몰라도 동작이 가능하다. 뷰 이름.. 2024. 3. 21. [Spring/MVC] MVC 패턴 서블릿과 JSP (JAVA Server Page)의 한계 서블릿으로 개발할 때는 뷰(View)화면을 위한 HTML 만드는 작업이 자바 코드에 섞여서 지저분했다. JSP를 사용한 덕분에 뷰를 생성하는 HTML 작업을 깔끔하게 가져가고, 중간중간 동적으로 변경이 필요한 부분에만 자바 코드를 적용했다. 그런데 이렇게 해도 해결되지 않는 것이 많다. MVC 패턴의 등장 비지니스 로직은 서블릿 처럼 다른곳에 처리하고, JSP는 목적에 맞게 HTML로 화면(View)을 그리는 일에 집중하도록 하자. Model Vew Controller 컨트롤러 : HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다. 모델 : 뷰에 출력할 데이터를 담아둔다.. 2024. 3. 21. [Spring/MVC] HttpServletRequest,Response, HTTP 요청 데이터 HttpServletRequest - 개요 HttpServletRequest 역할 다음과 같은 HTTP 요청 메시지를 편리하게 조회할 수 있다. HTTP 요청 메시지 Start line HTTP 메소드 URL 쿼리 스트링 스키마, 프로토콜 헤더 헤더 조회 바디 form 파라미터 형식 조회 message body 데이터 직접 조회 HttpServletRequest - 기본 사용법 Start line 정보 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { printStartLine(request); } //Start-line 정보 private .. 2024. 3. 21. [Spring/MVC] 웹 애플리케이션 정적 리소스 고정된 HTML 파일, CSS, JS, 이미지, 영상등 게종 주로 웹 브라우저 HTML 페이지 동적으로 필요한 HTML 파일을 생성해서 전달 웹 브라우저 : HTML 해석 HTML API HTML이 아니라 데이터를 전달 주로 JSON 형식 사용 SSR (서버 사이드 렌더링) HTML 결과를 서버에서 만들어서 웹 브라우저에 전달 주로 정적인 화면에 사용 관련기술 : JSP, 타임리프 (백엔드) CSR (클라이언트 사이드 렌더링) HTML 결과를 자바스크립트를 사용해 웹 브라우저에서 동적으로 생성해서 적용 주로 동적인 화면에 사용하고 웹 환경을 앱처럼 필요한 부분부분 변경 가능 ex) 구글 지도, Gmail 관련기술 : React, Vue.js (프론트) 서블릿 자바를 사용하여 웹페이지를 동적으.. 2024. 3. 20. [Spring/기본편] 빈 스코프 빈 스코프 스프링은 다음과 같은 다양한 스코프를 지원한다. 싱글톤: 기본 스코프로 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위 웹 관련 스코프 컴포넌트 스캔 자동 등록 @Scope("prototype") @Component public class HelloBean {} 수동 등록 @Scope("prototype") @Bean PrototypeBean HelloBean() { return new HelloBean(); } 프로토타입 스코프 싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환한다. 반면에 프로토타입 스코프를 스프링 컨테이너에 .. 2024. 3. 19. [Spring/기본편] 빈 생명주기 콜백 빈 생명주기 콜백 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 스프링 빈은 다음과 같은 라이프사이클을 가진다. 객체 생성 ⇒ 의존관계 주입 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 한다. 그렇기때문에 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링 컨테이너가 종료되기 직전에 소멸 콜백도 준다. 스프링 빈의 이벤트 라이프사이클 스프.. 2024. 3. 19. [Spring/기본편] 롬복 (lombok) 롬복 (lombok) Lombok은 여러가지 @어노테이션을 제공하고 컴파일 과정에서 자동으로 개발자가 원하는 메소드를 생성/주입 방식으로 동작하는 라이브러리이다. 따로 메서드 생성없이 setName() , getName() 이 추가된 모습이다. @Getter , @Setter , @ToString , @NoArgsConstructor , @RequiredArgsConstructor 등등 사용가능하다. @RequiredArgsConstructor : final 이 붙은 필드를 모아서 생성자를 자동으로 만들어줌 @NoArgsConstructor : 파라미터(매개변수) 없는 생성자를 만들어줌 @AllArgsConstructor : 모든 필드 값을 파라미터로 받는 생성자를 만들어줌 start.spring.io .. 2024. 3. 19. [Spring/기본편] 의존관계 자동 주입 의존관계 자동 주입 생성자에 @Autowired 를 지정하면, 스프링 컨테이너가 자동으로 스프링 빈을 찾아서 주입한다. 생성자에 파라미터가 많아도 다 찾아서 자동으로 주입한다. 이때 기본 조회 전략은 타입이 같은 빈을 찾아서 주입한다. getBean(MemberRepository.class) 와 동일하다고 이해하면 된다. 중복 등록과 충돌 Case1 - 자동 빈 등록 vs 자동 빈 등록 → 오류 ( ConflictingBeanDefinitionException ) 예외 발생 Case2 - 수동 빈 등록 vs 자동 빈 등록 → 수동 빈 등록이 자동 빈 등록 오버라이딩 해버린다. 다양한 의존관계 주입 방법 4가지 방법이 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 .. 2024. 3. 19. 이전 1 2 다음