프로젝트
-
[Spring boot] JPA save() & Dirty Checking프로젝트/아카이뷰 2024. 1. 19. 08:52
JPA 메소드인 SAVE() 왜 궁금했을까❓JPA의 save()를 이용하여 객체를 데이터베이스에 저장하곤 했는데 Dirty Checking을 통해 저장하는 방식이 존재한다는 것을 알고 그 원리가 궁금해서 save()와 함께 학습해보려고 한다. SAVE() 동작 원리JPA에서 save()를 사용할 때, Spring Data JPA에서 제공하는 JpaRepository.save(T)를 사용하게 된다. 해당 메소드 코드를 보며 분석하고 그 원리를 학습하고자 한다.isNew() 메소드는 Entity가 새로운 것인지 아닌지 판단하는 메소드이다.일반적으로는 Entity ID의 null 여부에 따라 결정된다.Entity에 @Id와 @GeneratedValue를 사용할 경우 ID는 persist()를 호출한 이후에 I..
-
[Spring boot] NoArgsConstructor에 Protected를 쓰는 이유프로젝트/아카이뷰 2024. 1. 18. 16:26
NoArgsConstructor에 Protected를 쓰는 이유가 왜 궁금했을까❓ArchiVIEW 프로젝트에서 JPA Entity를 설정하기 위해 공부를 하다보니 대부분의 블로그에서 NoArgsConstructor에 Protected 옵션을 주고 사용하고 있었다. 단순히 코드를 따라치기보다는 이해하고 사용하기 위해 학습해보려고 한다. NoArgsConstructor(AccessLevel.PROTECTED)를 왜 사용하는 걸까?일반적으로 객체를 생성하는 방법에는 3가지 방법이 존재한다.기본 생성자를 통해 객체를 생성하고 Setter를 통해 값을 주입하는 방법각 매개변수를 가지는 생성자를 통해 객체의 생성과 초기화를 동시에 하는 방법정적 팩토리 메소드 / 빌더 패턴을 통해 객체 생성과 초기화를 동시에 하는 ..
-
[Spring boot] Controller Payload 유효성 검증프로젝트/아카이뷰 2024. 1. 17. 09:54
@Controller Payload 유효성 검증 왜 궁금했을까❓클라이언트로부터 전송되는 API Payload에 대해서 검증이 이뤄지지 않아 비즈니스 로직에서 에러가 발생하며 SQL Injection이나 Command Injection과 같은 공격에 대한 취약점이 존재할 수 있을 것이라 생각했다. 요청 API 처리의 시작부분인 Controller에서 Payload를 검증하여 보안성과 안정성을 향상시키고자 한다.@Valid / @ValidatedSpring Boot에서 유효성을 검증하는 어노테이션은 두 가지가 존재한다. 각 어노테이션의 차이점을 알아보고 코드에 적용해보도록 하겠다.1. @Valid@Valid는 JSR-303 표준 스펙으로 Bean Validator를 이용해 객체의 제약 조건을 검증하는 어노테..
-
[Spring boot] Service와 ServiceImpl의 분리프로젝트/아카이뷰 2024. 1. 16. 21:22
Service와 ServiceImpl의 분리 왜 궁금했을까❓SSAFY 1학기 때, Service와 ServiceImple와 같이 구현체와 인터페이스를 나누어 구조를 설계하면 구현체를 독립적으로 확장할 수 있으며, 구현체 클래스를 변경하거나 확장해도 클라이언트의 코드에 영향을 주지 않아 다형성과 개방-폐쇄 원칙(OCP)을 지향하는 설계를 했다. ArchiVIEW의 경우 Service와 ServiceImpl이 1:1로 이루어져 굳이 분리해야 될까라는 의문이 들어 학습해 보려고 한다. Service와 ServiceImpl 분리하는 이유1. OOP의 다형성과 개방-폐쇄 원칙(OCP)위에서 언급했던 것처럼 Service와 ServiceImpl을 분리함으로써 구현체는 독립적이고 확장이 자유롭다.구현체의 클래스를 변..
-
[Spring boot] 유저 인증 처리프로젝트/아카이뷰 2024. 1. 15. 20:37
유저 인증 처리 왜 궁금했을까❓SSAFY 1학기에 Share Your Trip에서 유저를 인증하기 위해 이메일 인증 방식을 사용했다. 하지만, 악의적인 사용자가 비밀번호 변경 API를 알아낸 뒤 다른 사용자의 비밀번호를 변경하면 취약점이 발생할 것이라 생각이 들었다. 이를 해결하기 위해, 유저 인증 처리에 대해서 학습해보려고 한다.기존 이메일 인증 로직클라이언트가 비밀번호 변경을 위해 이메일 인증 요청서버는 인증번호를 생성하고 해당 클라이언트의 이메일로 메일 전송메일 전송 완료 후, 서버는 생성된 인증번호를 클라이언트에게 전송클라이언트는 자체 저장소(Redux, Recoil 등)에 저장하고 사용자가 입력한 값을 검증일치한다면 패스워드 변경 진행// 아이디, 패스워드 찾기용 이메일 인증 요청@GetMapp..
-
[Spring boot] @Builder프로젝트/Share Your Trip 2024. 1. 14. 14:02
@Builder Annotation에 대해서 왜 궁금했을까❓- SSAFY 1학기 프로젝트 Validation, Swagger 등을 추가하며 리팩토링 하는 과정에서 대부분의 사람들이 @Builder를 이용하여 코드를 짜는 것을 보았다.- 많이 사용한다는 것은 이점이 있을 것이라 생각이 되었고 이번 기회에 학습하고 좋다면 리팩토링 과정에 추가해보려 한다. @Builder우선 @Builder 패턴으로 객체를 생성하면 좋은 점 4가지를 뽑을 수 있는데 살펴보도록 하자1. 필요한 데이터만 설정할 수 있다.// 1. Dummy Data InsertUser user = new User("cks._.hong", 0, 176)// 2. 생성자, 정적 팩토리 메소드를 추가하는 방법@NoArgsConstructor @Al..
-
[Spring boot] JPA(Java Persistence API)프로젝트/아카이뷰 2024. 1. 13. 19:38
JPA(Java Persistence API) 왜 궁금했을까❓SSAFY 1학기 프로젝트인 Share Your Trip을 할 때, MyBatis를 사용해서 DB에 Query를 날리곤 했는데 타입이나 변수명 등 Java 객체와 불일치 하는 경우가 많아 오류가 많이 발생했다. 꼼꼼하게 확인하며 개발을 하면 문제가 없을 것이지만 짧은 시간안에 많은 작업들을 하다보니 놓치는 부분이 생기기 마련이였다. 이러한 부분을 보완할 수 있는 ORM 기술이 있다는 것을 확인하였고 그 중 JPA를 학습해보려고 한다. JPA란 ❓JPA는 자바 진영에서 ORM 기술 표준으로 사용되는 인터페이스 모음을 뜻한다. 실제적으로 구현된 것이 아닌 구현된 클래스와 매핑을 해주기 위해 사용되는 라이브러리이다. JPA를 구현한 오픈 소스로는 H..
-
[Spring boot] JWT(JSON Web Token)프로젝트/Share Your Trip 2024. 1. 12. 22:46
JWT(JSON Web Token) 왜 궁금했을까 ❓- NodeJS를 이용해서 JWT 인증 방식을 구현해 본 경험이 있지만, Spring boot로 JWT(JSON Web Token) 인증을 구현해본 경험이 없어서 시간이 부족했던 1학기 프로젝트에서 JWT를 적용하지 못했다.- 개발 시간이 비교적 널널한 2학기 프로젝트에서 JWT 인증을 도입하여 OAuth 확장성과 낮은 성능의 서버로 인해 Client에서 인증 정보를 관리하도록 해보려고 한다. JWT를 사용해야 하는 이유 ❓낮은 성능의 서버로 인해 서버에서 인증 정보를 보유하고 처리하는 Session의 방식보다는 Client에서 인증 정보를 보유하고 서버에서는 인증 여부만 판별하는 식으로 서버의 부하를 줄여보려고 한다.추후, 소셜 로그인(OAuth)를..