Spring Web 라이브러리를 사용하면 API 예외처리를 쉽게 할 수 있다! 📌 코드 스니펫 1️⃣ 예외 시 내려줄 응답 객체 생성 @Data @AllArgsConstructor public class ErrorResult { private String code; private String message; } : exception 디렉터리 아래에 생성 2️⃣ Exception Controller 클래스 생성 - @RestControllerAdvice 애노테이션을 사용! - 적용 대상을 옵션으로 지정하지 않으면 모든 컨트롤러에 적용 @Slf4j @RestControllerAdvice public class ExControllerAdvice { @ResponseStatus(HttpStatus.BAD_REQ..
스프링 부트를 사용하면 기본적으로 스프링 부트 로깅 라이브러리가 포함됨! 🙋🏻♀️ 스프링 부트가 사용하는 로깅 라이브러리가 뭐죠? ✔️ SLF4J https://www.slf4j.org/ SLF4J Simple Logging Facade for Java (SLF4J) The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framewor www.slf4j.org ✔️ Logback http..
개발을 하다보면 HTTP 요청 메시지를 확인해보고 싶을 수 있다! 1️⃣ application.properties에 설정 추가 logging.level.org.apache.coyote.http11=debug ↓ 아래처럼 요청 메시지를 콘솔에서 확인 가능 [GET /hello?username=servlet HTTP/1.1 Host: localhost:8080 Connection: keep-alive Cache-Control: max-age=0 sec-ch-ua: "Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99" sec-ch-ua-mobile: ?0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0..

Spring Boot로 프로젝트를 생성 + 설정할 때마다 자꾸 하나 둘 까먹어서 편하게 미리 정리해놓으려 한다! 0️⃣ 스프링 부트 스타터에서 프로젝트 생성 📎 https://start.spring.io/ ✔️ 스프링 부트 버전은 최신 stable버전 (SNAPSHOT❌) ✔️ 빌드 툴은 Gradle (gradle 스크립트 작성 문법은 groovy) ✔️ Java 버전은 17 (스프링 부트 3.0 이상은 자바 17이상을 사용해야 함) ✔️ WAS 서버(Tomcat)를 포함해서 빌드하고 싶을 경우 Jar - webapp 경로 사용 X - 내장 서버 사용에 최적화 - War는 주로 외부 서버에 배포하는 목적으로 사용 ✔️ Dependencies는 프로젝트에 필요한 것을 알아서 추가 이제 GENERATE → ..
📌 빌드란? : 소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 그 결과 (컴파일 + 그 외의 작업) : 빌드 툴(빌드 과정 자동 처리 + 외부 라이브러리 자동 추가, 관리 프로그램)에는 Ant, Maven, Gradle 등이 있음 📌 컴파일이란? : C, Java 등의 고급언어로 작성된 프로그램 소스 코드를 컴퓨터가 이해할 수 있는 기계어로 번역하는 것 💡 컴파일을 하는 것 만으로 프로그램을 실행할 수 없음! 대부분의 애플리케이션 로직에는 사용자가 직접 작성한 소스코드 이외에도 내부적으로 상당히 많은 라이브러리(+ 사용자가 직접 만든 라이브러리도)를 포함! 여러개의 목적 파일(.obj, .class 파일)을 하나의 실행파일로 묶어주는 작업(링크)이 필요함! 📌 배포란? : ..
일단 AWS의 스토리지 서비스인 S3를 쓰지 않고 이미지를 서버에 저장해보자! ❕Spring Web이 파일 업로드 기능을 제공! ✔️ 이미지를 저장하기 위해선 프론트에서 요청 바디의 형식을 multipart/form-data로 보내야 함! (일반적인 요청 방식인 application/x-www-form-urlencoded는 바디 내용을 문자로 보내는데, 파일은 문자가 아니라 바이너리 데이터이기 때문!) ❔ multipart/form-data : 다른 종류의 여러 파일과 폼의 내용을 함께 전송O : 각 항목별(Part)로 헤더가 추가 📌 코드 스니펫 1️⃣ application.properties에 실제 파일이 저장되는 경로 지정 ← 실제로 디렉토리 만들어 놓기! file.dir=/Users/uijin/S..

로그인 여부 등 애플리케이션 여러 로직에서 공통으로 관심있는 것을 공통 관심사(cross-cutting concern)라고 한다! 웹과 관련된 공통 관심사를 처리할 때는 HTTP의 헤더나 URI의 정보들이 필요한데, 서블릿 필터나 스프링 인터셉터는 HttpServletRequest를 제공한다! (따라서 웹과 관련된 공통 관심사는 스프링 인터셉터나 서블릿 필터를 사용하는 것이 좋다!) 💡 서블릿 필터와 비교해서 스프링 인터셉터가 개발자 입장에서 훨씬 편리하므로(스프링MVC에 특화된 필터 기능을 제공) 특별한 문제가 없다면 인터셉터를 사용하자! 📌 스프링 인터셉터 : 스프링MVC가 제공하는 기능! : 디스패처 서블릿 이후에 등장(스프링 MVC의 시작점이 디스패처 서블릿이라고 생각) : 인터셉터에서 적절하지 ..
📌 인증? 인가? ✔️ 인증(Authentication) : 본인이 누구인지 확인(로그인) ✔️ 인가(Authorization) : 권한 부여(특정 리소스에 접근할 수 있는 권한) → 인증이 있어야 인가가 있음! 📌 Stateless 아키텍처? : HTTP는 무상태(Stateless) 프로토콜이므로 서버가 클라이언트의 상태를 보존X : 하지만 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지해야 됨! : 그래서 일반적으로 브라우저 쿠키와 서버 세션 등을 사용해서 상태 유지 📌 쿠키와 세션 ✔️ 쿠키 : 클라이언트에 저장되는 데이터 조각. HTTP 요청에 담겨 서버로 전송됨. ✔️ 세션 : 클라이언트가 웹서버에 연결된 순간부터 웹 브라우저를 닫아 서버와의 HTTP 통신을 끝낼 때까지의 기간 : 서버..