[Spring Boot] OAuth 2.0 로그인 (구글 로그인)
2023. 1. 21. 19:21
Spring Boot/문법 정리
OAuth 로그인이란? 요즘 대부분의 사이트에서 카카오, 네이버, 구글 로그인 등을 지원함 사이트에서 직접 회원가입을 하지 않고 위의 소셜 서비스에 로그인을 함으로써 로그인을 할 수 있게 해줌 이러한 로그인 과정을 OAuth 로그인이라고 함 구글 로그인 예제 [Spring Boot] Spring Security를 사용한 로그인 구현 (Form Login) 여기에서 만든 코드들을 사용하여 구글 로그인을 진행 PrincipalDetails, SecurityConfig, 화면, Entity, Controller 등 재사용 과정은 사이트마다 비슷하기 때문에 일단 구글 로그인부터 정리 카카오, 네이버, 페이스북은 [Spring Boot] OAuth 2.0 로그인 (카카오, 네이버, 페이스북 로그인)에 정리 구글 ..
[Spring Boot] Jpa Delete 안될때 해결 방법 (CascadeType.REMOVE, OrphanRemoval, Soft Delete)
2023. 1. 15. 22:20
Trouble Shooting
문제 상황 Jpa로 값을 삭제하려 했지만 SQLIntegrityConstraintViolationException 에러가 발생 DB에서 확인해봐도 값이 정상적으로 삭제되지 않았음 원인 연관관계 매핑이 되어있는 상황에서는 부모 객체 삭제 시 자식 객체에서 부모 객체를 참조하고 있으면 에러가 발생하고 값이 삭제되지 않음 Parent와 Child가 1:N 관계를 맺고 있는 상황이고, Child가 연관관계 주인이라면 Child는 쉽게 삭제가 가능하지만, Parent를 삭제하려면 따로 처리가 필요함 [Spring Boot] 연관관계 매핑 참고 해결 방법 Cascade 사용 OrphanRemoval 사용 Soft Delete(논리 삭제) 방식 사용 각각의 방법을 예제를 통해 정리 예제 설명 Child, Parent..
[Spring Boot] Jpa로 MySQL 테이블 생성 안될때 해결 방법
2023. 1. 14. 18:15
Trouble Shooting
문제 상황 게시판 구현 시 좋아요(Like) 테이블을 생성해서 사용하려 함 Like Entity 생성 후 ddl-auto를 create로 설정하고 프로젝트 실행하였지만, Like Table이 생성되지 않았음 프로젝트는 실행되지만 아래의 에러가 발생한 것을 확인하였음 org.hibernate.tool.schema.spi.CommandAcceptanceException java.sql.SQLSyntaxErrorException 원인 like는 MySQL의 명령어이기 때문에 Table 이름을 like로 지정할 수 없었음 이와 비슷한 상황으로 rank라는 column을 사용한 경우에도 테이블이 생성되지 않았음 해결 방법 Entity Class 이름 변경 Like -> Likes, Good, Heart, ... ..
[Spring Boot] JpaRepository를 활용한 페이징 기능 구현 + 정렬, 검색, 알림창 띄우기를 활용한 예제
2023. 1. 14. 17:41
Spring Boot/문법 정리
페이징(Paging, Pagination) 이란? 게시판에 100개의 글이 있는 상황 게시판의 글 리스트를 조회할 때, 한 번에 100개의 글을 불러오기에는 데이터의 양이 너무 많음 이런 상황에서는 페이징 처리가 필요함 ex) 한 페이지에 글 10개씩 출력하도록 설정할 수 있음 => 1 ~ 10번 글은 1페이지에 출력, 11 ~ 20번 글은 2페이지에서 출력, ... 페이징 기능에는 정렬 기능이 포함되어 있음 ex) 글의 id순, 최신순, 이름순 등으로 정렬하여 출력할 수 있음 => 가장 최신 10개의 글은 1페이지에 출력, 다음 최신 10개의 글은 2페이지에 출력, ... 페이징 방법 Spring Boot에서 Paging 기능을 구현할 수 있는 2가지 방법 존재 Pageable 사용 PageReques..
[Spring Boot] JSON을 활용한 API 통신 예제 + JSON 형변환 (Gson, ObjectMapper, JSONParser)
2023. 1. 11. 17:26
Spring Boot/문법 정리
API 통신과 JSON에 대해 정리 JSON으로 형변환 하는 방법 정리 JSON 이란? JSON(JavaScript Object Notation)은 데이터를 저장/전송 할 때 많이 사용되는 형식 서버와 클라이언트 간의 통신에서 주로 많이 사용됨 아래와 같이 Key, Value 구조를 가짐 { "teamName" : "Tottenham", "league" : "Premier League", "ranking" : 5, "players" : [ { "name" : "Son Heungmin", "backNumber" : 7, "age" : 30 }, { "name" : "Harry Kane", "backNumber" : 10, "age" : 29 }, { "name" : "Hugo Lloris", "backNu..
[Spring Boot] Exception 처리 - @ExceptionHandler, @(Rest)ControllerAdvice (+ @ModelAttribute, @InitBinder)
2023. 1. 10. 02:46
Spring Boot/문법 정리
[Spring Boot] Exception 처리 - 에러 페이지 적용(화면), 에러 코드 적용(API) 여기서 ErrorCode와 ExceptionDto를 활용하여 Exception을 출력하는 방법에 대해서 정리했었음 이 방식은 Response의 status와 body를 직접 만들어서 응답해주는 방식 하지만 이 방식은 실제로 프로젝트에 적용하기에는 어려움이 있음 이 방식을 사용하기 위해서는 모든 Return Type을 맞춰줘야 하는 어려움이라던지, Service 단에서 에러가 발생하는 경우 에러 처리가 힘들다는 등의 단점이 존재 따라서 Response를 수정해서 응답하는 방식이 아닌 exception이 발생한 지점에서 throw를 통해 exception을 던지고 나중에 이를 받아 처리하는 작업이 필요 @..
[Spring Boot] Exception 처리 - 에러 페이지 적용(화면), 에러 코드 적용(API)
2023. 1. 9. 23:57
Spring Boot/문법 정리
Exception을 발생시키는 방법 잘못된 요청 전송 ex) 존재하지 않는 URL 접근 => 404 Error 발생 인증하지 않음 => 401 Error 발생 서버 내부 에러 => 500 Error 발생 이와 같이 직접 잘못된 요청을 전송하여 에러를 발생시킬 수 있음 throw를 사용해 직접 에러를 던져주기 throw new RuntimeException(); throw new IllegalArgumentException(); HttpServletResponse에 에러를 담아서 전송 response.sendError(403); response.sendError(404, "404에러가 발생했습니다!"); 아래와 같이 Path Variable을 활용하여 원하는 에러를 발생 시킬 수도 있음 @GetMappin..