Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
-
[김영한 스프링] 41. 예외 처리와 오류 페이지 - 서블릿 예외 처리 시작 & 오류 화면 제공Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 21. 00:04
서블릿 예외 처리 - 시작 스프링이 아닌 순수 서블릿 컨테이너는 예외를 어떻게 처리하는지 알아보자. 서블릿은 다음 2가지 방식으로 예외 처리를 지원한다. Exception(예외) response.sendError(HTTP 상태 코드, 오류 메시지) Exception(예외) 자바 직접 실행 자바의 메인 메서드를 직접 실행하는 경우 main이라는 이름의 쓰레드가 실행된다. 실행 도중에 예외를 잡지 못하고 처음 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다. 웹 애플리케이션 웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 애플리케이션에서 예외가 발생했는데, 어디선가 try ~ catch로 예외를 잡아서 처리하면 아..
-
[김영한 스프링] 40. 예외 처리와 오류 페이지 - 프로젝트 생성 & 세팅Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 20. 21:28
프로젝트 생성 https://start.spring.io 프로젝트 선택 Project : Gradle Project Language : Java Spring Boot : SNAPSHOT이 아닌 버전에서 2.x Project Metadata Group : hello Artifact : exception Name : exception Package name : hello.exception Packaging : Jar Java : 11 Dependencies : Spring Web, Lombok, Thymeleaf, Validation 프로젝트 열기 build.gradle 선택 -> 프로젝트 열기 설정 설정 -> Gradle -> Intelij IDEA로 변경 설정 -> 파일 인코딩 -> 프로퍼티 파일에 대한..
-
[김영한 스프링] 39. 로그인 처리2 필터, 인터셉터 - ArgumentResolver 활용Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 20. 03:25
ArgumentResolver 활용 HomeController - 추가 @GetMapping("/") public String homeLoginV3ArgumentResolver(@Login Member loginMember, Model model) { // 세션에 회원 데이터가 없으면 home if (loginMember == null) { return "home"; } // 세션이 유지되면 로그인으로 이동 model.addAttribute("member", loginMember); return "loginHome"; } homeLoginV3Spring()의 @GetMapping 주석 처리 다음에 설명하는 @Login 애노테이션을 만들어야 컴파일 오류가 사라진다. @Login 애노테이션이 있으면 직접 만..
-
[김영한 스프링] 38. 로그인 처리2 필터, 인터셉터 - 스프링 인터셉터 소개 & 요청 로그 & 인증 체크Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 20. 03:03
스프링 인터셉터 - 소개 스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술이다. 서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 둘다 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다르다. 스프링 인터셉터 흐름 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 스프링 인터셉터는 디스패처 서블릿과 컨트롤러 사이에서 컨트롤러 호출 직전에 호출된다. 스프링 인터셉터는 스프링 MVC가 제공하는 기능이기 때문에 결국 디스패처 서블릿 이후에 등장하게 된다. 스프링 MVC의 시작점이 디스패처 서블릿이라고 생각해 보면 이해가 될 것이다. 스프링 인..
-
[김영한 스프링] 37. 로그인 처리2 필터, 인터셉터 - 서블릿 필터 소개 & 요청 로그 & 인증 체크Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 19. 23:22
서블릿 필터 - 소개 공통 관심 사항 요구사항을 보면 로그인 한 사용자만 상품 관리 페이지에 들어갈 수 있어야 한다. 앞에서 로그인을 하지 않은 사용자에게는 상품 관리 버튼이 보이지 않기 때문에 문제가 없어 보인다. 그런데 문제는 로그인하지 않은 사용자도 다음 URL을 직접 호출하면 상품 관리 화면에 들어갈 수 있다는 점이다. 상품 관리 컨트롤러에서 로그인 여부를 체크하는 로직을 하나하나 작성하면 되겠지만, 등록, 수정, 삭제, 조회 등등 상품관리의 모든 컨트롤러 로직에 공통으로 로그인 여부를 확인해야 한다. 더 큰 문제는 향후 로그인과 관련된 로직이 변경될 때이다. 작성한 모든 로직을 다 수정해야 할 수 있다. 이렇게 애플리케이션 여러 로직에서 공통으로 관심이 있는 있는 것을 공통 관심사(cross-c..
-
[김영한 스프링] 36. 로그인 처리1 쿠키, 세션 - 세션 정보와 타임아웃 설정Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 18. 03:32
세션 정보와 타임아웃 설정 세션 정보 확인 SessionInfoController main/java/hello/login/web/session/SessionInfoController 생성 package hello.login.web.session; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Da..
-
[김영한 스프링] 35. 로그인 처리1 쿠키, 세션 - 로그인 처리하기(서블릿 HTTP 세션1 & 2)Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 16. 20:24
로그인 처리하기 - 서블릿 HTTP 세션1 세션이라는 개념은 대부분의 웹 애플리케이션에 필요한 것이다. 어쩌면 웹이 등장하면서부터 나온 문제이다. 서블릿은 세션을 위해 HttpSession이라는 기능을 제공하는데, 지금까지 나온 문제들을 해결해 준다. 우리가 직접 구현한 세션의 개념이 이미 구현되어 있고, 더 잘 구현되어 있다. HttpSession 소개 서블릿이 제공하는 HttpSession도 결국 우리가 직접 만든 SessionManager와 같은 방식으로 동작한다. 서블릿을 통해 HttpSession을 생성하면 다음과 같은 쿠키를 생성한다. 쿠키 이름이 JSESSIONID이고, 값은 추정 불가능한 랜덤 값이다. Cookie: JSESSIONID=5B78E23B513F50164D6FDD8C97B0AD..
-
[김영한 스프링] 34. 로그인 처리1 쿠키, 세션 - 로그인 처리하기(세션 동작 방식 & 세션 직접 만들기 & 직접 만든 세션 적용)Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 15. 01:29
로그인 처리하기 - 세션 동작 방식 목표 앞서 쿠키에 중요한 정보를 보관하는 방법은 여러가지 보안 이슈가 있었다. 이 문제를 해결하려면 결국 중요한 정보를 모두 서버에 저장해야 한다. 그리고 클라이언트와 서버는 추정 불가능한 임의의 식별자 값으로 연결해야 한다. 이렇게 서버에 중요한 정보를 보관하고 연결을 유지하는 방법을 세션이라 한다. 세션 동작 방식 로그인 사용자가 loginId, password 정보를 전달하면 서버에서 해당 사용자가 맞는지 확인한다. 세션 생성 세션 ID를 생성하는데, 추정 불가능해야 한다. UUID는 추정이 불가능하다. Cookie: mySessionId=zz0101xx-bab9-4b92-9b32-dadb280f4b61 생성된 세션 ID와 세션에 보관할 값(memberA)을 서버..