프로그래밍/Spring Boot 21

[OAuth2 + JWT] 소셜 로그인 구현(Google, Naver, Kakao, Apple)

소셜 로그인을 구현하기에 앞서 책임 분배를 어떻게 할지 정해보자1. Front2. Back[개발 환경]Front : React Native ExpoBack : Spring Boot[구현할 소셜 로그인]Google, Naver, Kakao, Apple 1의 경우 라이브러리를 install 해서 구현 가능인증을 끝내고 사용자 정보를 Back으로 보내면 됨 2의 경우 웹 뷰를 띄워서 해당 앱에서 로그인하는 방식Oauth2 Provider를 통해 리디렉션 방식으로 인증 수행 1로 구현하면 앱 내부에서 로그인 가능2로 구현할 경우 해당 앱(Google, Naver, Kakao, Apple)으로 넘어가서 로그인을 하는 방식 크게 정리하면 위와 같은데 토큰 관리 및 보안상의 이유로 2번을 선택함(보안상의 이유는 Ba..

[Spring Boot] 파일 확장자 확인

파일 확장자 확인 Tika 라이브러리를 통하여 파일 확장자를 확인하는 방법을 간단하게 공유해보고자 함 1. gradle 추가 mvn repository에서 확인 가능 implementation group: 'org.apache.tika', name: 'tika-core', version: '1.4' 2. Tika import 후 사용 import org.apache.tika.Tika; public void Test() { File pdfFile = new File("경로/파일명.pdf"); Tika tika = new Tika(); String mimeType = tika.detect(file); if("application/pdf".equals(mimeType)) { ... } }

[Spring Boot] REST API naming 규칙

REST API naming 간단 정리 명사 사용 동사는 사용 X GET /manage-order (X) GET /order-management (O) 복수형 사용 GET /order (X) GET /orders (O) 하위 리소스는 /를 이용하여 나타냄 PUT /users/{id}/orders uri는 소문자 사용 GET /Users (X) GET /users (O) camelCase 대신 snake-case 사용 이때 _(underbar) 대신 -(hyphens) 사용한다는 것도 기억해두기 GET /orderManagement (X) GET /order_management (X) GET /order-management (O)

[Spring Boot Error] Syntax error in SQL statement "drop table if exists [*]user cascade "; expected "identifier"; SQL statement: 에러 해결 방법

user entity 작성 후 Run 했더니 해당 에러 발생 발생 원인 user는 대부분의 데이터 베이스에서 예약어로 사용됨 그렇기에 user를 테이블 이름 등의 식별자로 사용하는 경우 에러가 발생할 수 있음 해결 방법 2가지 1. 테이블 명을 user 대신 member로 변경 2. user 테이블을 그대로 사용하고 싶다면 entity에 아래와 같은 Table 어노테이션 사용하기 @Table(name = "\"user\"")

[Spring Boot Error] Required request parameter 'xxx' for method parameter type String is not present Error

Required request parameter 'xxx' for method parameter type String is not present 에러 발생 원인 Controller에서 Prameter 값을 받아올 때 null이거나 Type이 맞지 않는 경우 발생 해결 방법 @RequestParam의 required 속성을 false로 설정하거나 null 을 받아오면 안되는 경우 파라미터로 넘겨주는 값을 확인해보기 @RequestParam의 required 속성은 default true임 예시 public List getSampleList(@RequestParam(value="customerNo", required=false) String customerNo) throws Exception { return..

[Spring Boot] @DeletedMapping에서 @RequestBody 사용?

@DeletedMapping에서 @RequestBody 사용이 안되는 이유와 대체 방안 @DeletedMapping은 HTTP DELETE 요청을 처리하는데 사용함 DELETE 요청은 요청 바디를 가지지 않는 것이 일반적임 그렇기에 @RequestBody 사용하여 요청 바디를 수신하는 것이 지원되지 않음 대체 방법 👇 @DeletedMapping에서 데이터 전달이 필요한 경우 @RequestParam을 사용하거나 @RequestBody를 전달받아야 하는 경우라면 @DeletedMapping 대신 @PutMapping을 사용하기

[Spring Boot Error] Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN' 원인과 해결 방법

Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN' 에러 스프링 시큐리티에서 CSRF(Cross-site Request Forgery) 보안 기능을 사용할 때 발생하는 에러 보안 기능이 동작하지 않아 발생하거나 설정이 잘못되어 발생할 수 있음 에러 발생 원인 이 에러는 주로 CSRF 토큰 값이 전달되지 않았거나, 전달된 토큰 값이 유효하지 않을 때 발생함 스프링 시큐리티에서는 CSRF 보안 기능을 사용할 때, 사용자의 세션에 저장된 CSRF 토큰 값과 요청으로 전달된 CSRF 토큰 값을 비교하여 일치하지 않으면 이 에러를 발생시킴 해결 방법 CSRF 보안 기능 해제 가장 간단한 해결책은 C..

[SpringBoot Error] error: Cask 'adoptopenjdk11' is unavailable

error: Cask 'adoptopenjdk11' is unavailable 해결 방법 프로젝트 내의 jdk 버전 맞춰보고, jdk 재설치도 해봤지만 error가 해결이 안돼서 SpringBoot 버전을 바꾸니 해결됨 나의 경우에는 SpringBoot 버전과 jdk가 충돌된 듯 함 Spring Initializr에서 Spring Boot 버전을 기존 다운로드한 버전보다 한 단계 아래로 변경하니 error 해결 아래의 체크한 부분쪽에서 버전을 바꿔주기

[Spring boot] @NotNull, @NotEmpty, @NotBlank 차이

@NotNull, @NotEmpty, @NotBlank javax.validation.constraints package에 포함된 기능으로 api에서 값을 입력받을 때 validation 체크를 위해 사용되는 어노테이션 NotNull null을 허용하지 않음 "" 이나 " " 은 허용 NotEmpty 주석이 달린 요소가 null 또는 비어 있는지 확인 null 과 "" 둘 다 허용하지 않음 " "은 허용 NotBlank 빈칸 혹은 공백만 있는 경우를 허용하지 않음 null 과 "" 과 " " 모두 허용 X 예시 String text = null; @NotNull = false @NotEmpty = false @NotBlank = false String text = ""; @NotNull = true @N..