본문 바로가기

Backend12

[MVC 패턴] API 예외 처리 API 예외 처리 - 스프링 부트 기본 오류 처리 @RequestMapping(produces = MediaType.TEXT_HTML_VALUE) public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {} @RequestMapping public ResponseEntity error(HttpServletRequest request) {} - errorHtml(): produces = MediaType.TEXT_HTMl_VALUE: 클라이언트 요청의 Accept 헤더 값이 text/html인 경우에는 errorHtml()을 호출해서 view를 제공한다. - error(): 그 외 경우에 호출되고 Resp.. 2023. 9. 4.
[MVC 패턴] 예외 처리와 오류 페이지 서블릿 예외 처리 1. Exception(예외) 2. response.sendError(HTTP 상태코드, 오류 메시지) Exception(예외) 1. 자바 직접 실행 자바의 메인 메서드를 직접 실행하는 경우 main이라는 이름의 쓰레드가 실행된다. 실행 도중 예외를 잡지 못하고 처음 실행한 main 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다. 2. 웹 어플리케이션 웹 어플리케이션은 사용자 요청별로 별로의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 컨트롤러(예외 발생) → 인터셉터 → 서블릿 → 필터 → WAS package hello.exception.servlet; import lombok.extern.slf4j.Slf4j; import org.spring.. 2023. 9. 1.
[MVC 패턴] 로그인 처리2 - 필터, 인터셉트 서블릿 필터 필터흐름 HTTP 요청 → WAS → 필터 → 서블릿 → 컨트롤러 필터 제한 HTTP 요청 → WAS → 필터 → 서블릿 → 컨트롤러 //로그인 사용자 HTTP 요청 → WAS → 필터(적절하지 않은 요청이라 판단, 서블릿 호출X) //비 로그인 사용자 필터에서 적절하지 않은 요청이라고 판단하면 필터에서 끝을 낼 수 있다. 따라서 로그인 여부를 체크하기 좋다. 필터 체인 HTTP 요청 → WAS → 필터1 → 필터2 → 필터3 → 서블릿 → 컨트롤러 필터는 체인으로 구성되며, 중간에 필터를 자유롭게 추가할 수 있다. 필터 인터페이스 public interface Filter { public default void init(FilterConfig filterConfig) throws Servl.. 2023. 8. 31.
[MVC 패턴] 로그인 처리1 - 쿠키, 세션 로그인 처리하기 - 쿠키 사용 로그인 상태를 유지하기 위한 방법에는 쿼리 파라미터를 계속 유지하면서 보내는 방법이 있다. 하지만 이 방법은 매우 어렵고 번거로운 작업이기 때문에 쿠키를 사용한다. 서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달 후 브라우저는 해당 쿠키를 지속해서 보내준다. 쿠키 종류 쿠키에는 영속 쿠키와 세션 쿠키가 존재한다. 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지 브라우저 종료시 로그아웃 되길 원하므로, 세션 쿠키가 필요하다. 쿠키 생성 로직 //쿠키에 시간 정보를 주지 않으면 세션 쿠키(브라우저 종료시 모두 종료) Cookie idCookie = new Cookie("memberId".. 2023. 8. 29.
[MVC 패턴] 검증2 - Bean Validation Bean Validation - Bean Validation은 특정한 구현체가 아닌 Bean Validation 2.0(JSR-380)이라는 기술 표준이다. - 검증 애노테이션과 여러 인터페이스의 모음이다. 스프링 MVC에서 Bean Validator 사용하는 방법 스프링 부트가 spring-boot-starter-validation 라이브러리를 넣으면 자동으로 Bean Validator를 인지하고 스프링에 통합한다. implementation 'org.springframework.boot:spring-boot-starter-validation' Bean Validation 애노테이션 적용 코드 package hello.itemservice.domain.item; import lombok.Data; im.. 2023. 8. 24.
[MVC 패턴] 검증1 - Validation 컨트롤러의 중요한 역할 중 하나는 HTTP 요청이 정상인지 검증하는 것이다. * 클라이언트 검증, 서버검증 클라이언트 검증은 조작할 수 있으므로 보안에 취약하다. 서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다. 둘을 적절히 섞어서 사용하되, 최종적으로 서버 검증은 필수이다. API 방식을 사용하면 API 스펙을 잘 정의해서 검증 오류를 API 응답 결과에 잘 남겨주어야 한다. 상품 등록 검증 코드 @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { //검증 오류 결과를 보관 Map errors = new HashMap(); //.. 2023. 8. 24.
[MVC 패턴] 타임리프 (Thymeleaf) 타임리프 (Thymeleaf) 타임리프는 컨트롤러가 전달하는 데이터를 이용해 동적으로 화면을 만들어주는 역할을 하는 뷰 템플릿 엔진이다. 타임리프 특징 서버 사이드 HTML 렌더링 (SSR) - 타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링하는 용도로 사용된다. 내츄럴 템플릿 - 타임리프는 순수 HTML을 최대한 유지하려는 특징이 있다. - 순수 HTML을 그대로 유지하면서 뷰 템플릿도 사용할 수 있는 타임리프의 특징을 의미한다. 스프링 통합 지원 - 타임리프는 스프링과 자연스럽게 통합되고, 스프링의 다양한 기능을 편리하게 사용할 수 있게 지원한다. 타임리프 기본 기능 타임리프 사용 선언 기본 표현식 간단한 표현: 변수 표현식: ${. . .} 선택 변수 표현식: *{. . .} 메시지 표현식: .. 2023. 8. 16.
[MVC 패턴] MVC 프레임워크 만들기 프론트 컨트롤러 (Front Controller) 프론트 컨트롤러 패턴 특징 - 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음 - 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출 - 입구가 하나, 공통 처리 가능 - 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨 - DispatcherServlet이 Front Controller 패턴으로 구현되어 있음 뷰 리졸버 (View Resolver) - MyView view = viewResolver(viewName): 컨트롤러가 반환한 논리 뷰 이름을 실제 물리 뷰 경로로 변경한다. 실제 물리 경로가 있는 MyView 객체를 반환한다. - 뷰 객체를 통해 HTML 화면을 렌더링 한다. - 뷰 객체의 render()는 모델 .. 2023. 8. 12.
[MVC 패턴] JSP / MVC 패턴 JSP - 자바의 import 문과 같다 - 이 부분에는 자바 코드를 입력할 수 있다. - 이 부분에는 자바 코드를 출력할 수 있다. [MVC 패턴] 서블릿 (Servlet) @ServletComponentScan @SpringBootApplication public class ServletApplication{ public static void main(String[] args){ SpringApplication.run(ServletApplication.class, args); } } 스프링 부트는 서블릿을 직접 등록해서 사용할 수 있도록 @S wodlszz.tistory.com 이 전에 정리한 서블릿 (Servlet)과 JSP는 몇가지 한계점을 가지고 있다. 서블릿으로 개발할 때는 뷰(view)화면을.. 2023. 8. 9.
[Spring 기본] 컴포넌트 스캔 (Component Scan) 컴포넌트 스캔 (Component Scan) - 스프링에서는 설정 정보(AppConfig.class) 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능 제공 - 스프링 빈을 등록할 때는 의존관계를 자바 코드로 직접 등록하는 방법 / 컴포넌트 스캔과 자동 의존관계 설정하는 @Autowired를 사용하는 방법이 있음 - @ComponentScan은 탐색 위치에 @Component가 붙은 모든 클래스를 스프링 빈으로 등록 - @Configuration, @Service, @Repository, @Controller, 등의 어노테이션에도 전부 @Component이 포함되어 있어 자동으로 컴포넌트 스캔의 대상 - @Autowired: 의존관계 자동 주입 ■ 컴포넌트 스캔과 자동 의존관계 주입 동작 - @Co.. 2023. 8. 4.