본문 바로가기

스프링

(36)
[Security] Spring Security란 오늘은 Spring에서 제공하는 프레임워크 중 보안 프레임워크인 Security에 대해서 다뤄보려고한다. 이번 포스트에서는 Form Login에 관해 다뤄보려고한다. 먼저 들어가기에 앞서 Spring Security에 대해 간단하게 알아보자. 우리는 대부분의 시스템에서 회원의 정보를 관리한다. (아이디, 비밀번호) 예를 들어, 로그인을 진행할 때 해당 아이디가 우리 회원이 맞고 본인이 맞는지 혹은 해당 회원이 어떤 부분에 대해 접근할 권한이 있는지를 확인하는 등의 경우이다. Spring Security에서는 위에서 설명한 부분을 제공한다! 인증(Authorizatoin) : 우리 회원이 맞고 본인이 맞는지 인가(Authentication) : 접근할 권한이 있는지 Security는 기본적으로 인증 절차를..
[JPA] 다대다(N:M) 관계 매핑, 좋아요 기능 구현 시작하기에 앞서 두 테이블끼리 연관 관계를 맺을 때, 다양한 연관 관계를 가진다. 이는 일대다(1:N), 다대일(N:1), 일대일(1:1), 다대다(N:N)으로 이루어져있다. 일대다와 다대일 같은 경우 서로 관계를 맺기 위해 한 쪽 테이블에서 하나의 외래키를 가져 연관 관계를 관리한다. (테이블에서는 다(N)쪽에서 외래키를 관리하고 JPA에서는 다(N)쪽에서 관리하는 것을 지향한다.) 일대일 같은 경우에서도 일대다와 다대일과 비슷하게 한 쪽 테이블에서 하나의 외래키를 관리하면 된다. 하지만, 위와 같이 어느 한쪽에서 꼭 관리해야될 필요는 없고 둘 중 한 곳에서만 관리하면 된다. 보통, 서버 개발자의 경우 참조의 용이성 등 같은 이유로 주 테이블에 외래키를 두는 것을 선호한다. 하지만, DBA의 경우 외래..
[JPA] 일반 조인 vs 패치 조인 시작하기에 앞서 이번 포스트에서는 일반 조인과 패치 조인의 차이점에 대해서 알아보려고 한다. 우리가 엔티티들을 생성하고 사용하다보면, 자연스럽게 다양한 연관 관계가 맺어진다. 우리는 맺어진 연관 관계 속에서 다양한 정보를 찾으려고 노력하는데, 우리는 이 때 조인을 사용하곤한다. JPA에서는 특별한 조인인 패치 조인을 제공하는데 이 부분은 과연 조인과 어떤 차이점이 존재하는 것일까? 간단한 예제를 통해서 이 부분에 대해서 자세히 알아보자. 엔티티 이 부분에 대해서 알아보기 위해 사용한 예제는 다음과 같다. 게시글을 작성할 수 있는 학생이 존재한다. 한 학생은 여러 개의 게시글을 작성할 수 있고, 한 게시글은 한 작성자에 의해 소유된다. 학생과 게시글은 위와 같은 속성을 가진다. 이 부분에 대한 엔티티 코드..
[Querydsl] Querydsl 기본적인 사용 및 게시물 동적 검색 구현 Querydsl란 오늘은 Querydsl에 대한 포스트를 다뤄보려고한다. 우리는 이전에 Spring Data JPA를 활용하여 다양한 부분에 대한 쿼리를 다뤘다. 특히, 강력한 @Query의 기능으로 기존의 JPA를 더 효율적으로 다룰 수 있었다. 하지만 해당 부분으로 모든 부분의 조회 기능을 사용하기에는 한계가 있다. 사용해본 사람들은 알겠지만, 동적인 쿼리를 다루는 부분에 대해서 어려움을 느낄 것이다. 예를 들자면 어떤 게시물을 조회하는데 검색 조건이 달라지는 등의 부분 등을 살펴볼 수 있을 것이다. 그래서 사용하게 된 것이 바로 Querydsl이라는 프레임워크이다. 이것은 HQL(Hibernate Query Language) 쿼리를 타입에 안전하게 생성 및 관리할 수 있게 해주는 프레임워크이다. 이..
[Spring] 파일 및 이미지 업로드 시작하기에 앞서 이번에는 Spring Boot, Spring MVC, Spring Data JPA, Thymeleaf를 활용하여 파일 및 이미지 업로드를 구현해보았다. 파일 및 이미지 업로드를 구현하는데 있어서 다음과 같은 요구사항을 설정하였다. 복수개의 이미지를 업로드 할 수 있으며 이미지는 다운로드 형식이 아니라 직접 출력한다. 복수개의 파일을 업로드 할 수 있으며 파일은 다운로드 형식으로 진행한다. 기존에 만들었던 게시판 프로젝트에 이어 구현하였으며 프로젝트의 클래스 다이어그램은 다음과 같다. 학생 클래스 - 한 학생은 여러 개의 게시물을 작성할 수 있다. 게시물 클래스 - 게시물은 여러 개의 첨부파일과 댓글을 가질 수 있다. 댓글 클래스 - 댓글은 여러 개의 답글을 가질 수 있다. 첨부파일 클래스..
[JPA] N+1 문제 다들 Spring과 JPA 조합으로 구현을 할 때, N+1문제를 한번씩 들어봤을 것이다. 이번 포스트는 JPA에서의 단골손님인 N+1문제에 대해 알아보려고 한다. N+1이란 우리는 조회, 수정 등의 이유로 다양한 엔티티들을 조회하곤 한다. 각각의 엔티티들은 연관관계를 가질 수도, 가지지 않을 수도 있다. N+1문제는 연관관계를 가지는 엔티티들 중에서 연관 관계에서 발생하는 이슈이다. A라는 엔티티(N)가 B라는 엔티티(1)와 연관관계를 가지고 있다고 하자. 우리가 A라는 엔티티를 조회할 때, B라는 엔티티에 대한 데이터를 조회하기 위해 B라는 데이터의 개수(N)만큼 조회 쿼리가 추가로 발생하는 것을 의미한다. 이 부분이 실제로 발생하는 부분에 대해서 실제 예제를 통해 살펴보자. ​ 엔티티 우리는 게시판을..
[Spring] API Exception (With Validation) HTTP API Exception 이전에 웹에서 웹페이지로 오류를 처리하는 것을 살펴보았다. 우리는 API json을 통해서도 Error를 처리할 수 있어야 한다. 그에 따라, API에서 오류를 처리하는 방법을 알아보려고 한다. 이를 살펴보기 위해 간단한 예제를 가져왔다. @Getter @AllArgsConstructor public class Person { @NotBlank private String id; @NotBlank private String pw; @NotBlank private String pwConfirm; } 값을 필히 입력해야하는 아이디가 존재한다. 값을 필히 입력해야하는 패스워드가 존재한다. 값을 필히 입력해야하는 패스워드 확인 값이 존재한다. @RestController publ..
[Spring] 오류 페이지 오류페이지란? 우리는 클라이언트 혹은 서버에서 잘못된 요청 혹은 응답을 할 경우 오류페이지를 보게된다. 우리가 흔히 볼 수 있는 예를 들면 400 Bad Request, 404 Not Found, 500 Internal Server Error 등이 존재한다. 그 중 우리가 가장 흔히 볼 수 있는 404 Not Found를 예로하여 이를 살펴보자. 우리가 개발중인 웹에서는 /qwe라는 API를 지원하지 않는다. 그런데, 우리가 이를 호출하게 되면 당연히 이에 대한 처리를 찾을 수 없어 404 Not Found를 내보낼텐데 이를 클라이언트 사용자에게 명시해줘야한다. 이게 어떻게 가능한 일일까? 이는 BasicErrorController에서 처리해준다. 이에 대해 자세히 살펴보자. 오류페이지 - BasicEr..