프로젝트 21

Spring Security로 회원가입을 해보자 (3) - SecurityConfig 및 로그인

안녕하세요. 오늘은 1편 Spring Security로 회원가입을 해보자 (1) - 회원 엔티티 설계와 2편 Spring Security로 회원가입을 해보자 (2) - SecurityConfig 및 회원가입에 이은 3편 로그인 입니다. 이번 포스팅은 로그인 설정이 주를 이룰 것 같네요. 이번 편은 제 코드에 대한 확신이 있는 것은 아닙니다. 저도 학습 중이고, 하나씩 적용해보고 있어서... (전에 올렸던 CRUD와 1:N 연관관계, 회원가입은 나름의 확신?이 있었는데 말이죠.) 아무래도 Spring Security를 사용해 DB에 회원 정보를 가져오고, 그것을 가지고 작업을 하는 게 단순 select로 되는 것이 아니다보니 그렇습니다. 일단 모든 테스트코드는 통과됩니다. 하지만 틀린 부분이 있을 수 있으..

프로젝트 2023.03.06

Spring Security로 회원가입을 해보자 (2) - SecurityConfig 및 회원가입

안녕하세요. 1편인 Spring Security로 회원가입을 해보자 (1) - 회원 엔티티 설계에 이어, SecurityConfig 및 회원가입에 관한 여러 가지 설정들을 하겠습니다. 로그인은 다음 편에 쓸 것 같습니다. 1편 : Spring Security로 회원가입을 해보자 (1) - 회원 엔티티 설계 3편 : Spring Security로 회원가입을 해보자 (3) - SecurityConfig 및 로그인 1편과 마찬가지로, 계속해서 수정될 수 있습니다. ※ 틀린 부분이 있을 수도 있습니다. 먼저 SecurityConfig 입니다. 아마 후에 많이 바뀔 것 같은 부분입니다;; ✔️ SecurityConfig [SecurityConfig] @Configuration @EnableWebSecurity p..

프로젝트 2023.03.02

Spring Security로 회원가입을 해보자 (1) - 회원 엔티티 설계

안녕하세요. 오늘은 저번 JPA CRUD와 JPA 1 : N 관계 생성에 이어 스프링 시큐리티로 회원가입을 해보겠습니다. 2편 : Spring Security로 회원가입을 해보자 (2) - SecurityConfig 및 회원가입 3편 : Spring Security로 회원가입을 해보자 (3) - SecurityConfig 및 로그인 사실 예전에 스프링 시큐리티로 로그인 구현을 올린 적이 있었는데요, 다시 공부할 겸 새로 올립니다. 저도 공부하면서 실시간으로 기록하는 거라, 시리즈로 올라갈 것 같네요. 그리고 코드 변동도 많이 있을 것 같습니다. 특히나 DTO 구조를 좀 세분화하고 싶기도 하고... TestCode도 좀 더 많이 짜고 싶은 마음에 이것저것 해보고 있는데요, 그래서 코드 변동이 많이 있을 것..

프로젝트 2023.03.01

JPA 1 : N 관계를 분석해보자

안녕하세요. 오늘은 저번 JPA CRUD에 이어 1 : N 관계를 알아보겠습니다. ✔️ 요구사항 분석 게시글 : 댓글 = 1 : N 댓글 CRUD 게시글이 삭제되면, 연관된 댓글들이 모두 삭제된다. 특정 게시글을 조회하면, 연관된 댓글들도 같이 조회된다. 일단 먼저 댓글 엔티티 및 CRUD 기능을 생성하겠습니다. 기존의 게시글 CRUD랑 똑같은데, 다만 연관관계를 설정하는 부분만 추가됩니다. 제일 먼저, Comment 엔티티를 보겠습니다. [Comment 엔티티] @Getter @NoArgsConstructor @Entity public class Comments extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY..

프로젝트 2023.02.27

스프링 시큐리티를 분석해보자

Spring Security를 분석해보자. 부족한 부분은 계속해서 채워나갈 예정이다. ✔️ 들어가기 전 PasswordEncoder Spring Security에서 비밀번호를 안전하게 저장할 수 있도록 제공하는 인터페이스이다. 단방향 해쉬 알고리즘에 Salt를 추가하여 인코딩하는 방식을 제공한다. FormLogin MVC 방식에서 화면을 보여주고, 아이디와 비밀번호를 입력하는 전통적인 로그인을 말한다. CSRF (Cross-SIte Request Forgery) 사이트 간 요청 위조를 뜻한다. 스프링 시큐리티에서는 @EnableWebSecurity 어노테이션을 이용해 CSRF를 방지하는 기능을 제공한다. 먼저 서버에서 임의의 토큰을 발급한다. 자원에 대한 변경 요청이 되돌아 올 경우, 토큰 값을 확인하여..

프로젝트 2023.02.25

Session 기반 인증과 Token 기반 인증의 차이가 뭘까?

토큰이 도대체 뭐길래. 세션을 공부하니까, 토큰을 알게되었다. 역시 하나로 끝나지 않는 코딩의 세계. ✔️ 인증(Authentication)과 인가(Authorization)의 차이 💡 인증 (Authentication) 말 그대로 내가 누군지 인증하는 것이다. 쉽게 말하면 '로그인'이다. 클라이언트가 자기자신이라고 주장하고 있는 사용자가 맞는지를 검증하는 과정이다. 로그인과 같이 사용자 또는 프로세스의 신원을 확인하는 프로세스이다. 인증에 사용할 데이터와 저장되어 있던 데이터를 비교한다. 이 데이터는 인증 서버에 저장되며, 가장 일반적인 인증 방법은 비밀번호를 사용하는 것이다. 💡 인가 / 권한 부여 (Authorization) 허용된 권한을 말한다. 인가는 인증 작업 이후에 행해지는 작업으로, 인증된..

프로젝트 2023.02.20

Custom Exception 해보기

기존 예외처리 코드를 바꿔보았다. 회원가입 or 로그인 같은 회원 서비스에서 발생할 수 있는 예외들을 MemberException으로 모아 공통 예외 처리를 할 것이다. 먼저 BaseException을 생성한다. [BaseException] public abstract class BaseException extends RuntimeException { public abstract BaseExceptionType getExceptionType(); } BaseException은 앞으로 정의할 모든 Custom 예외의 부모 클래스이다. 앞으로 BaseException 타입으로 처리할 수 있다. RuntimeException을 상속받았다. BaseException은 BaseExceptionType을 반환하는 ..

프로젝트 2023.02.19

[JPA/Thymeleaf] 게시글 작성자만 수정 권한 가지기

간단한 게시판 만들기 중... 계속 보다보니까 앞뒤가 안 맞는 것들이 보인다. 이번엔, 게시글 작성자만 수정할 수 있게 하는 기능을 추가했다. 정확히는 추가라기 보다는, 기존 기능을 수정했다고 보는 게 맞을 것 같다. [수정 전] ADMIN 권한을 가진 user만 게시글을 등록하고 수정할 수 있음 나머지는 조회만 가능 하지만 ADMIN 권한만 가지고 있다면, 본인이 등록한 게시물이 아니어도 수정할 수 있음 [수정 후] 본인이 등록한 게시물만 수정할 수 있음 ✔️ 수정 순서 게시물 Dto에 username 속성 추가 게시물 엔티티의 createBy를 가져와 username에 저장한다. Service를 수정하기 전, 게시물을 조회하는 Controller의 코드를 보자. [Controller] // 게시물 상..

프로젝트 2023.02.18

게시물 조회수 구현, @Query

게시물 조회 기능을 추가해봤다. @Query로 구현한다. 먼저 엔티티에 조회수를 카운팅할 변수를 선언한다. [Entity] @ToString @Setter @Getter @Entity public class Recipe extends BaseEntity { ... // 조회수 업데이트 @Column(columnDefinition = "integer default 0", nullable = false) private int view; ... } columnDefinition (DDL) : 데이터베이스 컬럼 정보를 직접 줄 수 있다. Spring Boot에서 JPA Repository를 이용하여 SQL CRUD를 사용할 때, Entity를 이용하여 가져올 데이터를 구성한다. 이때 특정 필드의 타입을 지정하여..

프로젝트 2023.02.17

CRUD를 분석해보자 (2) - 게시글 수정/삭제/조회 API

1편 게시글 생성에 이어... ✔️ 게시글 수정 / 조회 먼저 Controller에 추가하자. [PostsApiController] @RequiredArgsConstructor // 1 @RestController public class PostsApiController { private final PostsService postsService; // ... @PutMapping("/api/v1/posts/{id}") public Long update(@PathVariable Long id, @RequestBody PostsUpdateRequestDto postsUpdateRequestDto) { return postsService.update(id, postsUpdateRequestDto); } @Ge..

프로젝트 2023.02.11