전체 글
-
[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)를..
-
[Spring boot] Password 암호화프로젝트/Share Your Trip 2024. 1. 11. 21:55
Password 암호화 왜 궁금했을까❓- SSAFY 프로젝트를 진행하면서 법적으로 정해져 있는 비밀번호 일방향 암호화를 준수하기 위해 사용자 비밀번호를 SHA512를 통해 해시하여 DB에 저장하였다.- 해당 기능에 대해 흐름이나 작동 방식은 이해하고 있지만, 내가 구현한 부분이 아니였기에 정확하게 각 코드들이 어떤 역할을 하는 지 알지 못하여 학습해보려 한다. Password 암호화 왜 해야할까❓단순 Plain Text로 DB에 저장하는 것은 보안적인 측면에서 위험하다고 할 수 있다. 그 이유는 DB에 있는 password 정보가 SQL Injection이나 개발자의 부주의로 의해 조회가 된다면 계정 탈취에 대한 위협이 존재하게 되고 보통 다른 사이트에서도 동일한 password를 사용하기 때문에 영향을..
-
[Spring boot] Error Handling프로젝트/아카이뷰 2024. 1. 10. 21:29
Error Handling 왜 궁금했을까 ❓- SSAFY 1학기 때, 프로젝트 마감 기한을 맞추기 위해 기능 완성에만 초점을 맞춰 개발을 진행하다보니 Client에게 보내는 응답에 대해 신경쓰지 못하였고 일관성이 없는 Error 응답을 전송하였다.- 이로 인해, Client의 입장에서는 어느 부분에서 Error가 발생했는 지 정확한 응답을 받지 못하고 일관되지 못한 Error 응답으로 인해 혼란을 야기할 수 있을 것이라 생각되었다.- 이러한 부분을 해결하기 위해, Error Handling에 대해 학습하고 일관된 Error 응답을 전송하여 앞선 문제를 해결해보고자 한다. Error HandlingBasicErrorControllerSpring은 에러 처리를 기본적으로 BasicErrorController..