전체 글
[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 로그인 과정..
[Java] 함수와 메서드의 개념 및 차이, 스택 메모리
[Java] 함수와 메서드의 개념 및 차이, 스택 메모리
2022.02.21함수란? 하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 코드의 집합입니다. 함수로 구현된 기능은 여러 곳에서 호출되어 사용이 가능합니다. 메서드란? 객체의 기능을 구현하기 위한 클래스 내부에 구현되는 함수입니다. 멤버 함수라고도 합니다. 메서드를 구현하면 객체의 기능을 구현하는 것입니다. 함수와 메서드의 차이점 프로그래밍 언어마다 함수로 부르는 언어도 있고 메서드라고 부르는 언어도 있습니다. 그런데 함수와 메서드는 비슷하면서도 다른 점이 있습니다. 함수는 어디에 속해있지 않고 단독 모듈이라 함수를 그냥 호출하여 사용이 가능합니다. 메서드는 함수의 일종이긴 하지만 클래스 안에 속해 있고 클래스의 멤버 변수들을 이용해서 구현된 것을 메서드라고 합니다. 스택 메모리 영역 함수가 호출될 때 지역 ..
[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..
[JPA] 프록시, 즉시 로딩, 지연 로딩
[JPA] 프록시, 즉시 로딩, 지연 로딩
2022.01.30프록시 연관된 객체를 자유롭게 탐색하기 위해 사용하는 기술입니다. 엔티티를 조회할 때 연관된 엔티티들이 항상 같이 조회되는 것은 아닙니다. 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 지연 로딩이라고 하는데 지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 그것을 프록시 객체라고 합니다. 프록시를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라 실제 사용하는 시점에서 데이터 베이스를 조회할 수 있습니다. ※ 공통 예제 코드 ※ @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; private String na..
[JPA] 단방향, 양방향, 연관관계 주인
[JPA] 단방향, 양방향, 연관관계 주인
2022.01.26단방향, 양방향 테이블은 외래키 하나로 양방향 쿼리가 가능해서 방향이라는 개념이 없습니다. 객체는 참조용 필드를 가지고 있는 객체만 연관된 객체를 조회할 수 있습니다. 단방향 : 객체 관계에서 한쪽만 참조하는 것을 말합니다. 양방향 : 객체 관계에서 양쪽이 서로 참조하는 것을 말합니다. 연관관계 주인 데이터베이스는 외래키 하나로 두 개의 테이블을 연관관계를 맺습니다. 데이터베이스는 연관관계를 관리하는 지점은 외래키 하나인 반면에 엔티티를 양방향으로 매핑하면 두 개의 객체는 서로 참조를 해서 객체의 연관관계를 관리하는 지점은 2개가 됩니다. 연관관계 주인은 두 객체의 연관관계 중 하나를 정해서 데이터베이스의 외래키를 관리하는 것입니다. 연관관계 주인은 @JoinColumn(name = "참조하는 테이블 기..
[JPA] 엔티티 매핑
[JPA] 엔티티 매핑
2022.01.25JPA에서 사용하는 엔티티 매핑에 대해 알아보겠습니다. 객체와 테이블 매핑 기본키 매핑 필드와 컬럼 매핑 객체와 테이블 매핑 @Entity @Table @Entity 테이블과 매핑할 클래스에 @Entity를 붙입니다. @Entity 속성 속성 기능 기본값 name JPA에서 사용할 엔티티 이름을 지정하고 같은 엔티티 클래스가 있다면 이름을 지정해서 충돌하지 않도록 해야합니다. 설정하지 않으면 클래스 이름 그대로 사용합니다. @Entity public class Jpa { } @Entity(name = "Member") public class Member{ } @Entity 적용 시 주의 사항 접근 지정자가 public 또는 protected인 기본 생성자가 필수입니다. final 클래스, enum, in..
[JPA]영속성 컨텍스트란?
[JPA]영속성 컨텍스트란?
2022.01.191. 영속성 컨텍스트란? 영속성 컨텍스트는 JPA에서 가장 중요한 용어입니다. 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻입니다. 엔티티 매니저 팩토리로 생성한 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리합니다. 2. EntityManagerFactory, EntityManager, EntityTransaction EntityManagerFactory 엔티티 매니저 팩토리는 이름 그대로 엔티티 매니저 공장을 뜻합니다. 엔티티 매니저 팩토리는 많이 생성하면 안 되고 애플리케이션 전체에서 공유하도록 설계되어야 합니다. 이유는 엔티티 매니저 팩토리는 생성하는데 비용이 매우 크기 때문에 많이 생성되면 안 됩니다. 여러 스레드가 동시에 접근해도 ..
[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에서 나라언어 우선순위에 따라 메시지를 해당하는 나라 언어로 변경해주는 기능입니다. 예를 들어보면 구글에서 영어로 된 부분을 한국어로 번역 이런 것을 본 ..