Spring Boot
[Spring Boot] JUnit5에서 @RequiredArgsConstructor
[Spring Boot] JUnit5에서 @RequiredArgsConstructor
2022.04.22들어가기 전 필자는 테스트 코드가 아닌 곳에서 @Autowired가 아닌 @RequiredArgsConstructor를 이용해서 의존성 주입을 편하게 하였습니다. 그런데 필자가 테스트 코드에서도 @RequiredArgsConstructor를 사용하의존성 주입을 하려고 하는 데 사용을 할 수 없다고 나옵니다. // 의존성 주입이 하나일 경우 Autowired를 생략 가능합니다. // Autowired를 사용할 경우 @Controller public class AutowiredController { @Autowired private TestService service; @AutoWired private TestRepository repository; } // RequiredArgsConstructor를 사용..
[OAuth] Spring Boot + React + OAuth2.0 이용한 네이버, 카카오 로그인
[OAuth] Spring Boot + React + OAuth2.0 이용한 네이버, 카카오 로그인
2022.04.09들어가기 전 토이 프로젝트를 진행하면서 OAuth를 이용한 소셜 로그인을 구현해보았습니다. 프론트는 React를 이용하였고 백엔드는 Spring Boot를 이용하였습니다. 네이버, 카카오 로그인에 대한 코드가 프론트, 백 두 개 다 있는데 프론트에 대한 설명보다 백엔드 위주로 설명하겠습니다. 1. OAuth란? 인터넷 사용자들이 비밀번호를 제공하지 않고 구글, 카카오, 네이버, 페이스북 등에 저장되어있는 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로써 사용되는 접근 위임을 위한 개방형 표준 프로토콜입니다. ※ 참고 개방형 표준 프로토콜 : 스택이 표준화되었거나 공개적으로 사용이 가능한 통신 규약 2. OAuth 로그인을 위한 준비 과정 OAuth 로그인 과정..
[Spring Security] 스프링 시큐리티 로그인, 회원가입 예제
[Spring Security] 스프링 시큐리티 로그인, 회원가입 예제
2022.02.11스프링 시큐리티로 로그인과 회원가입을 하는 방법에 대해 알아보겠습니다. 먼저 시큐리티 의존성을 추가해줘야 됩니다. ※ bulid.gradle implementation 'org.springframework.boot:spring-boot-starter-security' 의존성을 추가해준 뒤 실행시켜보면 이런 화면이 나옵니다. 이거는 시큐리티에서 제공하는 로그인 페이지입니다. ※ 회원가입과 로그인을 하기 위한 User 엔티티 import lombok.Data; import org.hibernate.annotations.CreationTimestamp; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.p..
[Spring] 예외처리와 오류 페이지
[Spring] 예외처리와 오류 페이지
2022.01.041. 서블릿 예외처리 서블릿은 2가지로 예외를 처리합니다. Exception response.sendError(Http 상태 코드, 오류 메시지) "정상적인 흐름" WAS -> 필터 - > 서블릿 -> 인터셉터 -> 컨트롤러 Exception "컨트롤러에서 예외가 발생한 경우" WAS 컨트롤러(예외 처리해주는 경로) 컨트롤러에서 발생한 예외가 WAS까지 전파가 됩니다. 서버 내부에서 처리할 수 없는 오류가 발생한 것으로 판단하여 HTTP 상태 코드를 500을 반환합니다. WAS에서 오류를 처리하는 페이지 경로로 다시 수행이 됩니다. WAS에서 오류를 처리하는 페이지 경로를 컨트롤러에서 호출을 하여 오류 페이지를 보여줍니다. Exception 오류 페이지 예 @Controller public class E..
[Spring] 서블릿 Filter와 스프링 Interceptor의 개념과 사용방법
[Spring] 서블릿 Filter와 스프링 Interceptor의 개념과 사용방법
2021.12.301. Filter와 Interceptor 개념 Filter와 Interceptor은 공통적인 관심 사항이 있을 때 사용합니다. 공통적인 관심 사항 : 여러 로직에서 공통으로 관심있는 관심사 Filter와 Interceptor는 HttpServletRequest를 제공합니다. 예) 로그인을 안하면 회원 수정, 삭제, 게시물 삭제, 등록 등을 보지를 못합니다. 여기서 공통으로 로그인에 대한 인증을 관심을 가지고 있습니다. 이 관심사를 Filter와 Interceptor로 해결할 수 있습니다. 2. 서블릿 Filter 필터의 흐름 적절한 요청이 왔을때 : Http 요청 -> 서버 -> 필터 -> 서블릿 -> 컨트롤러 적절하지 않은 요청이 왔을 때 : Http요청 -> 서버 -> 필터 -> X 적절한 요청이 왔..
[Spring] @ScriptAssert 오류내용 및 해결방법
[Spring] @ScriptAssert 오류내용 및 해결방법
2021.12.281. 오류 내용 및 원인 @ScriptAssert(lang="javascript" script="내용")을 적을 때 밑에와 같은 오류가 발생할 수 있습니다. org.hibernate.validator.spi.scripting.ScriptEvaluatorNotFoundException: HV000232: No JSR 223 script engine found for language "javascript". 이 오류가 발생하는 이유는 JDK 버전이 11버전이 아니기 때문입니다. 2. 해결방법 해결방법은 JDK버전을 변경해주면 됩니다. 인텔리제이에서 JDK 버전을 변경하는 방법은 [파일] -> [프로젝트 구조] -> 프로젝트 -> version 11를 하면 해결이 됩니다.
[Spring] 메시지, 국제화 개념 및 사용 방법
[Spring] 메시지, 국제화 개념 및 사용 방법
2021.12.26메시지와 국제화의 개념과 사용방법을 설명하기 전에 먼저 예시를 먼저 들어보겠습니다. 여기서 이름, 나이, 아이디, 비밀번호가 적힌 페이지수가 20개라고 예시를 들어보겠습니다. 근데 여기서 아이디와 비밀번호를 ID, Password로 변경을 하고 싶으면 20개의 페이지를 다 들어가서 하나씩 하나씩 변경을 해줘야 되는 됩니다. 이런 번거로운 일을 줄이기 위해 사용하는 것이 메시지 기능입니다. 1. 메시지란? 위에 예시처럼 여러 페이지에 있는 다양한 메시지를 한 곳에서 관리하는 기능입니다. 2. 국제화란? 메시지랑 비슷한 기능을 하는데 Accept-Lange에서 나라언어 우선순위에 따라 메시지를 해당하는 나라 언어로 변경해주는 기능입니다. 예를 들어보면 구글에서 영어로 된 부분을 한국어로 번역 이런 것을 본 ..
Thymeleaf 사용 방법 및 특징
Thymeleaf 사용 방법 및 특징
2021.12.241. 스프링 부트에서 Thymeleaf 사용법 2. Thymeleaf의 특징 1. Thymeleaf 사용법(인텔리제이) 프로젝트 생성할 때 패키지, 경로 등 다 설정을 하고 next(다음)을 누른다. 누르면 밑에 사진과 같이 나올 것이다. 그러면 검색 부분에 thymeleaf를 검색한다. 검색을 하면 아래와 같은 사진처럼 나오는데 체크박스를 체크를 해준다. 그 후 완료 버튼을 누르고 build.gradle를 확인하고 설정이 다 될 때까지 기다린다. *build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' } 이와 같이 되어있을 것이다. 만약 프로젝트 생성할 때 까먹고 thymelea..
[Spring]@RestController, @Controller 개념 및 예시
[Spring]@RestController, @Controller 개념 및 예시
2021.12.191.@RestController 2.@Controller 3.@RestController과 @Controller예시 1. @RestController @RestController을 확인해보면 @ResponseBody와 @Controller이 들어있다. @ResponseBody : 응답할 내용을 HTTP 메시지 바디에 담아서 응답한다. @ResponseBody로 인해서 return 되는 것들은 view 이름을 탐색하는 게 아니라 HTTP 메시지 바디에 담겨서 응답이 된다. 2. @Controller @RestControlle와 달리 @ResponseBody가 없다. @RestController과 @ResponseBody가 없고 그냥 @Controller인 상태에서 return을 하게 되면 view 이름을 ..
[Spring]프론트 컨트롤 개념 및 예제(단순하고 실용적인 컨트롤러)
[Spring]프론트 컨트롤 개념 및 예제(단순하고 실용적인 컨트롤러)
2021.12.18프론트 컨트롤 개념 및 예제(Model 추가) 이 부분은 잘 설계된 것이다. 그런데 조금 더 고치자면 ModelView를 항상 생성하고 반환해야 하는 것을 고칠 것이다. 프론트 컨트롤 실행 순서(단순하고 실용적인 컨트롤러) 클라이언트가 FrontController에 Http 요청을 한다. 요청을 받은 FrontController은 요청을 확인하고 컨트롤러를 조회를 한다 조회한 컨트롤러를 호출하고 viewName을 반환받는다 반환받은 viewName을 viewResolver를 호출하고 MyView를 반환받는다. 반환받고 render를 호출하고 응답을 해준다. public interface Controller{ String process(Map paramMap, Map model); } public clas..
[Spring]프론트 컨트롤 개념 및 예제(Model 추가)
[Spring]프론트 컨트롤 개념 및 예제(Model 추가)
2021.12.02프론트 컨트롤 개념 및 예제(view 분리) 여기에서 MemberInputController, MemberSaveController, MemberListController 컨트롤들이 HttpServletRequest, HttpServletResponse를 꼭 필요로 하지 않습니다. HttpServletRequest로 요청을 받던 정보들을 Map으로 받으면 컨트롤러가 서블릿 기술을 몰라도 동작합니다. 그리고 request 객체를 Model로 사용하는 대신에 별도의 Model 객체를 만들어서 반환을 해주면 됩니다. 그리고 뷰 이름이 중복되어 컨트롤러는 뷰의 논리 이름만 반환하고 프론트 컨트롤에서 물리적 위치를 처리하면 됩니다. 프론트 컨트롤 실행 순서(Model 추가) 클라이언트가 프론트 컨트롤에 요청을 합..
[Spring]프론트 컨트롤 개념 및 예제(View 분리)
[Spring]프론트 컨트롤 개념 및 예제(View 분리)
2021.11.28https://hoestory.tistory.com/12 이곳에서 보면 String path = "경로"; RequestDispatcher dispatcher = request.getRequestDispatecher(path); dispatcher.forward(request, response); 이 코드들이 controller마다 중복되어 나타나고 깔끔하지 않다. 그래서 깜끔하게 분리하기 위해 view를 분리한다. 프론트 컨트롤 실행 순서(view 분리) 클라이언트가 FrontController에게 HTTP 요청을 한다. 요청을 받은 FrontController은 매핑 정보를 조회하여 컨트롤러를 조회한다. 조회한 컨트롤을 호출하고 호출한 컨트롤러에서 뷰를 반환 받는다. 반환받은 뷰를 호출한다. jsp ..