이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 파일 업로드 일반적으로 사용하는 HTML Form을 통한 파일 업로드를 이해하려면 먼저 폼을 전송하는 다음 두 가지 방식의 차이를 이해해야 한다. HTML 폼 전송 방식 application/x-www-form-urlencoded multipart/form-data application/x-www-form-urlencoded 방식 application/x-www-form-urlencoded 방식은 HTML 폼 데이터를 서버로 전송하는 가장 기본적인 방법이다. Form 태그에 별도의 enctype 옵션이 없으면 웹 브라우저는 요청 HTTP 메시지의 헤더에 다음 내용을 추가한다. →Content-Type: appl..
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 스프링 타입 컨버터 스프링 프레임워크에서 타입 컨버터(Type Converter)는 한 타입의 객체를 다른 타입으로 변환할 때 사용되는 메커니즘이다. 스프링 MVC에서는 클라이언트로부터 받은 문자열 데이터를 컨트롤러의 파라미터나 필드에 지정된 타입의 객체로 변환할 필요가 자주 있다. 예를 들어, URL 경로에서 가져온 문자열을 날짜 객체나 열거형, 심지어는 사용자 정의 타입으로 변환해야 할 때가 그러하다. 이럴 때 스프링의 타입 컨버터 기능이 유용하게 사용된다. @GetMapping("/hello-v2") public String helloV2(@RequestParam Integer data) { System...
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 기본 API 예외 처리 예외가 발생하면 어떠한 경로로 다시 요청할지 정의 WebServerCustomizer @Component public class WebServerCustomizer implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableWebServerFactory factory) { ErrorPage errorPage404 = new ErrorPage(HttpStatus.NOT_FOUND, "/error-page/404"); //errorPage404 호출 ErrorPage errorPage500 = new ..
구글 클라우드 비전 플랫폼 설정 API 및 서비스 구글 클라우드 의 콘솔 창으로 들어가면 왼쪽 상단의 버튼을 눌러 API 및 서비스 - 사용자 인증 정보로 들어간다. 사용자 인증 정보 창에서 사용자 인증 정보 만들기 버튼을 누른다. API 키 를 추가한다. API 활성화 이후 API 및 서비스 - 사용 설정된 API 및 서비스 버튼을 클릭한다. Clould Vision API 를 사용 버튼을 누른다. IAM 및 관리자 IAM 및 관리자 - 서비스 계정 버튼 클릭 아래의 정보들을 입력한다. 아래의 부분은 선택사항이다. 실험 결과 이 부분을 일부 누락해도 OCR API를 사용하는데 지장이 없었다. 만든 계정의 키 관리 버튼을 누른다. 새 키 만들기를 누른 뒤, JSON 파일을 다운로드 받는다. 스프링 부트 ..
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 서블릿 예외 처리 서블릿은 다음 2가지 방식으로 예외 처리를 지원한다. Exception (예외) response.sendError(HTTP 상태 코드, 오류 메시지) Exception(예외) 자바 직접 실행 자바의 메인 메서드를 직접 실행하는 경우 main 이라는 이름의 쓰레드가 실행된다. 실행 도중에 예외를 잡지 못하고 처음 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다. 웹 애플리케이션 웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 애플리케이션에서 예외가 발생했는데, 어디선가 try ~ catch로 예외를 잡..
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.@Login 애노테이션이 있으면 직접 만든 ArgumentResolver 가 동작해서 자동으로 세션에 있는 로그인 회원을 찾아주고, 만약 세션에 없다면 null 을 반환하도록 개발 HomeController - 추가기존@GetMapping("/")public String homeLoginV3Spring( @SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { //세션에 회원 데이터가 없으면 home if (loginMem..
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. HTTP MessageConverter HTTP MessageConverter는 스프링 프레임워크에서 HTTP 요청 및 응답 본문을 객체로 변환하거나 객체를 HTTP 응답 본문으로 변환하는 역할을 하는 구성 요소이다. 클라이언트와 서버 간의 데이터 교환은 주로 JSON, XML 등의 형식으로 이루어지는데, MessageConverter는 이러한 데이터 형식을 애플리케이션 내부에서 사용하는 객체로 쉽게 변환해주거나, 반대로 객체를 이러한 데이터 형식으로 변환해주는 작업을 담당한다. 뷰 템플릿으로 HTML을 생성해서 응답하는 것이 아니라, HTTP API처럼 JSON 데이터를 HTTP 메시지 바디에서 직접 읽거나 ..
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 로그인 한 사용자만 상품 관리 페이지에 들어갈 수 있어야 한다. 로그인 하지 않은 사용자도 URL을 직접 호출하면 상품 관리 화면에 들어갈 수 있다. 이렇게 로그인하지 않은 사용자는 다른 URL에 접근할 수 없도록 해주는 것이 서블릿 필터와 인터셉터이다. 애플리케이션 여러 로직에서 공통으로 관심이 있는 있는 것을 공통 관심사(cross-cutting concern)라고 한다. 여기서는 등록, 수정, 삭제, 조회 등등 여러 로직에서 공통으로 인증에 대해서 관심을 가지고 있다. 이러한 공통 관심사는 스프링의 AOP로도 해결할 수 있지만, 웹과 관련된 공통 관심사는 지금부터 설명할 서블릿 필터 또는 스프링 인터셉터를..