Java/SpringBoot 22

JWT 토큰 발행 받기

1. 회원가입. @PostMapping("/signup")ID/PW 입력 (request)ID 유효한지 체크. DuplicateKeyException으로 이미 있는 아이디면 throw new. 없는 아이디면 다음으로 넘어가기.PW는 PasswordEncoder로 암호화DB에 저장 사용자 정보 저장.ResponseEntity로 status(상태)는 성공 응답 코드, body(본문)에는 회원가입이 완료되었다는 메시지를 클라이언트에게 응답해주기.(보내주기)2. 로그인 & 토큰 @PostMapping("/login")ID/PW 입력 > 사용자 확인:DB에서 확인 > USER가 맞으면... > 인증 토큰 생성 > 인증 객체 생성 > 스프링 전체에 사용할 수 있도록 bean 등록 > user는 토큰으로 여러 서비스..

Java/SpringBoot 2024.11.08

Throwable cause, Throwable

Parameter로 Throwable cause를 받는 코드를 보았다. 이게 무엇인가?정리해보자.Throwable cause는 자바에서 예외를 처리할 때 자주 등장하는 개념입니다. 이를 이해하려면 Throwable이 무엇인지부터 짚고 넘어가보자. 1. Throwable이란?Throwable은 자바에서 모든 오류와 예외를 나타내는 최상위 클래스입니다. 자바에서 발생할 수 있는 예외(Exception)와 에러(Error)는 모두 Throwable 클래스를 상속합니다.Exception: 프로그램에서 처리할 수 있는 예외를 나타냅니다.Error: 프로그램에서 처리할 수 없는 오류를 나타냅니다 (예: OutOfMemoryError).따라서, Throwable 클래스는 예외와 오류의 공통 부모 클래스입니다.2. T..

Java/SpringBoot 2024.11.07

@JsonInclude

1. @JsonInclude 정의@JsonInclude는 Jackson 라이브러리에서 제공하는 애노테이션으로, JSON 직렬화 시 특정 속성이나 필드의 포함 여부를 제어합니다. 이를 사용하여 객체의 필드가 null인 경우나, 빈 값인 경우 해당 필드를 JSON 응답에서 제외할 수 있습니다.주로 불필요한 데이터를 제외하고, 응답 크기를 최적화하기 위해 사용됩니다.2. @JsonInclude 사용하는 이유불필요한 데이터 제외:기본적으로 객체의 속성이 null이거나 빈 값일 때 이를 JSON에 포함시키지 않음으로써, 응답 데이터 크기를 줄이고 효율성을 높입니다.예를 들어, null 값인 필드는 API 응답에 포함되지 않게 하여 클라이언트가 불필요한 null 값을 처리하지 않게 할 수 있습니다.응답 최적화:조건..

Java/SpringBoot 2024.11.07

Builder

코드보고 해석을 하다가 자주 보게 되는 Builder.객체를 만들어준다는 것 밖에 모르기 때문에 제대로 알기 위해서 정리해보자.1. Builder 패턴 정의Builder 패턴은 복잡한 객체를 단계별로 생성할 수 있도록 하는 디자인 패턴입니다. 이 패턴은 객체를 생성하는 과정을 여러 단계로 나누어, 각 단계에서 필요한 값만 설정할 수 있도록 합니다. 이때, 객체의 생성자에서 처리할 수 없는 복잡한 초기화 작업을 분리하여 가독성을 높이고 유지보수를 용이하게 합니다. 핵심 아이디어: 생성자 대신에 Builder 클래스를 사용해 객체를 생성하며, 빌더 객체에 필요한 값을 차례대로 설정한 후 최종적으로 객체를 생성합니다.2. Builder 패턴을 사용하는 이유가독성 향상: 객체의 생성자가 복잡하거나, 많은 필드를..

Java/SpringBoot 2024.11.07

Enum

Enum 파일을 만들었는데 Enum이 무엇이고 왜 Enum으로 만드는 건지 이해가 안 돼서 정리해보기.1. Enum 정의Enum은 열거형 (Enumeration) 의 약자로, 고정된 값들의 집합을 정의하는 데이터 타입입니다. 이 값들은 객체처럼 다루어지며, 값의 범위가 제한되어 있어 특정 값만 허용됩니다. 예를 들어, 요일, 상태 코드, 방향 등을 표현할 때 유용합니다.2. 왜 사용하는가코드 가독성: 고정된 상수값을 의미 있는 이름으로 표현하여 코드의 직관성을 높입니다.타입 안전성: 잘못된 값이 사용될 가능성을 줄이고, 컴파일 타임에 오류를 잡을 수 있어 안전합니다.유지보수 용이성: 상수값들을 한 곳에서 관리하여 코드 변경 시 영향을 최소화하고 유지보수를 용이하게 합니다.3. 어떻게 사용하는지1. Enu..

Java/SpringBoot 2024.11.07

@JsonFormat

@JsonFormatJackson 라이브러리에서 제공하는 어노테이션.객체를 JSON으로 직렬화하거나 JSON을 객체로 역직렬화할 때 특정 필드의 포맷을 지정할 수 있게 해준다.주로 날짜, 시간, 숫자와 같은 데이터를 직렬화할 때 유용하게 사용된다. (pattern = "yyyy-MM-dd HH:mm")패턴을 yyyy-MM-dd HH:mm 으로 하겠다는 의미.즉 출력하면 2024-11-07 19:30 이런식으로 됨. 예시▼ 파일명: TestDTO.java@JsonFormat(pattern = "yyyy-MM-dd HH:mm")private LocalDateTime createdAt;

Java/SpringBoot 2024.11.07

.of() 메서드

강사님이 작성해준 소스코드를 분석하는데 어려운 용어 투성이다..of() 메서드를 보았는데 객체를 쉽게 만들 수 있게 해주는 거라는 설명을 보았다.깊게는 설명을 읽지 않았는데 아래 소스코드를 보고 의문이 들었다.인스턴스를 만드는건데 안에 .of() 메서드를 사용해서 또 객체를 만든다는 말인가? 혼란스러웠다.그래서 chat gpt한테 설명과 예시를 몇가지 들어달라고 했다.ErrorResponse errorResponse = ErrorResponse.of(e.getErrorCode());of() 메서드는 ErrorResponse 객체를 간편하게 생성하기 위한 팩토리 메서드입니다. 즉, 이 메서드를 통해 ErrorResponse 객체를 쉽게 생성하고, 필요한 데이터(예: e.getErrorCode())를 넣어줄..

Java/SpringBoot 2024.11.06

@RestController, @RequestMapping, ResponseEntity, @RequestBody, ResponseEntity.ok()

예외처리 관련해서 수업을 나갔는데 어려운 것 투성이다.메모를 해놓고 그 당시에 아, 이런 내용이구나! 라고 이해해놓고선 다음에 또 마주치면 '아.. 무슨 내용이었는데..'하면서 다시 찾아보게된다. 언제쯤 익숙해지려나.. 계속 반복적으로 작성하고 생각하는 방법 밖에는 없겠지. (눈물)@RestControllerSpring MVC에서 RESTful 웹 서비스를 구현할 때 사용되는 어노테이션.HTTP 응답 본문에 객체를 JSON 또는 XML 형식으로 자동 변환하여 반환.@RequestMapping("/경로")Spring MVC에서 HTTP 요청을 특정 메서드나 클래스에 매핑하는 데 사용되는 어노테이션.HTTP 메서드(GET, POST 등)와 URL 경로를 지정하여 요청을 처리예시: @RequestMapping..

Java/SpringBoot 2024.11.05

CustomUserDetails 클래스Builder 적용, JPA 활용한 UserEntity

생각기존 UserDetails 인터페이스의 인스턴스가 가진 필드 외에 email을 추가한 커스텀 UserDetails 클래스를 만들어 달라고 했다. 그 결과 아래와 같은 소스코드를 만들어 줬다.일반 CustomUserDetails 클래스1. CustomUserDetails 클래스 import org.springframework.security.core.GrantedAuthority;import org.springframework.security.core.userdetails.UserDetails;import java.util.Collection;public class CustomUserDetails implements UserDetails { private final String username; ..

Java/SpringBoot 2024.10.28