분류 전체보기 141

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

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

프로젝트 2023.03.01

백준 2573 - 빙산 (자바)

DFS 내가 보려고 기록 문제 링크 코드 빙산 배열을 복사한 배열 생성 ice() : 주변 0 개수 카운트 dfs() : 빙산 덩어리 개수 카운트 while{} 빙산 덩어리가 0개면 break 빙산 덩어리가 2개 이상이 되면 break import java.util.*; import java.io.*; public class Main { static int[][] map; static int N, M; static int answer = 0; static int[] dx = {-1, 1, 0, 0}; static int[] dy = {0, 0, -1, 1}; static boolean[][] check; public static void main(String[] args) throws IOExceptio..

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

Blocking I/O & Non-Blocking I/O

✔️ I/O가 성능에 미치는 영향 ❓ I/O란? 데이터의 입력(Input)과 출력(Output)을 함께 일컫는 말이다. ※ 일반적으로 I/O라고 하면, 파일 I/O만 생각하는 경우가 있는데, 어떤 디바이스를 통해 입력과 출력이 이뤄지는 작업을 모두 I/O라고 합니다. 네트워크를 통해 다른 서버로 데이터를 전송하거나, 다른 서버로부터 데이터를 전송받는 것도 I/O에 포함됩니다. 💡 I/O는 어플리케이션의 성능에 가장 영향을 많이 미칩니다! 따라서 높은 성능을 보장해야 하는 어플리케이션 입장에서는 I/O는 큰 장애물이 될 수 있습니다. I/O로 인한 blocking은 CPU를 긴 시간동안 idle하게 두기 때문에, 다른 작업을 할 수 있음에도 오랫동안 다른 작업을 실행할 수 없어 매우 비효율적입니다. ※ i..

CS/Network 2023.02.26

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

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

[Network] SSL / TLS HandShake

✔️ 들어가기 전... HTTPS는 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 TLS / SSL 계층을 넣은 신뢰할 수 있는 HTTP 요청을 말한다. → 이를 통해 '통신을 암호화' 한다. ※ 참고 : 향상된 TCP 버전을 SSL이라 부르고, SSL의 약간 변형된 버전이 TLS(표준화됨)이다. 더보기 SSL(Secure Socket Layer)은 SSL 1.0부터 시작해서 SSL 2.0, SSL 3.0, TLS(Transport Layer Security Protocol) 1.0, TLS 1.3까지 버전이 올라가며 마지막으로 TLS로 명칭이 변경되었으나, 보통 이를 합쳐 SSL/TLS로 많이 부른다. ✔️ 대칭키 암호화 vs 공개키 암호화(비대칭 암호화) 💡 대칭키 암호화 대칭키 암호란, 암호화에..

CS/Network 2023.02.16