전체 글

바쁜 새벽(busymidnight)을 살아보고자 만든 블로그
비밀번호 찾기를 어떻게 구현할 것인가? 팀원들과 비밀번호 찾기에 대해서 열렬히 의견을 주고 받았었다. 여러 방법이 있겠지만 우리의 후보에 올랐던 방법들은 다음과 같다. 1. 단순하게 임시 비밀번호를 발급하는 방법 2. 비밀번호 재설정 링크를 생성하여 이메일로 보내는 방법 3. 이메일로 인증번호를 보낸 후 인증번호가 일치하면 비밀번호를 재설정하는 방법 1번은 보안상 좋지 않고, 2번은 관련 자료가 Node.js 뿐이었고 처음에는 잘 와닿지 않아서 최종적으로는 3번을 택하게 되었다. 이메일을 보내기 위한 프로젝트용 계정을 생성했고, Gmail을 이용했다. 그런데 방법을 정했다고 해서 일사천리로 해결되는 게 아니었다. 처음에 내가 제안한 방법은 아래와 같다. 1. 프론트->백 이메일 주소 2. 백-> 프론트 ..
Spring Boot에서 비밀번호 변경 기능을 구현하려고 한다. 구현 전에 먼저 알아둘 것을 정리해본다. 비밀번호 변경 과정 1. 회원가입이 되어 있는 상태여야 한다. 2. 로그인 상태여야 한다. 3. DB에는 암호화된 password(pw)가 저장되어 있다. 4. 사용자에게 기존 pw와 새로운 pw를 입력 받는다. 5. 기존 pw가 현재 사용자의 pw와 일치한다면 해당 회원의 pw를 새로운 pw로 변경한다. 6. 일치하지 않는다면 오류를 발생시킨다. UpdatePasswordReq @Getter public class UpdatePasswordReq { @NotBlank private String currentPassword; @NotBlank @Pattern(regexp = "(?=.*[a-zA-Z]..
Spring Boot에서 비밀번호 변경 기능을 구현하려고 한다. 구현 전에 먼저 알아둘 것을 정리해본다. 회원 정보 수정 과정 1. 회원가입이 되어 있는 상태여야 한다. 2. 로그인 상태여야 한다. 3. 회원정보 수정 가능한 정보는 닉네임과 프로필 이미지 뿐이다. 4. 사용자에게 닉네임 또는 프로필 이미지를 입력받는다. 5. 닉네임이 변경 됐다면 닉네임 중복체크를 진행한다. 6. 프로필 이미지가 변경됐다면 기존 이미지 파일을 서버에서 삭제 한다. UpdateMemberReq @Getter public class UpdateMemberReq { @NotBlank @Pattern(regexp = "^[ㄱ-ㅎ가-힣a-z0-9-_]{2,10}$", message = "닉네임은 특수문자를 제외한 2~10자리여야 ..
PasswordEncoder 설정하기 Spring Security가 지원해주는 PasswordEncoder를 사용해보자. build.gradle //Spring Security implementation 'org.springframework.security:spring-security-crypto:5.7.1' PasswordEncoder를 @Bean으로 등록 내가 진행한 프로젝트의 경우 Spring Security 적용을 위한 SecurityConfig 클래스에 등록하였다. @Configuration public class SecurityConfig { @Bean public PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.crea..
Spring Boot에서 로그인을 구현하자! 처음 백엔드 팀원과 역할을 나눌 때, 도메인 별로 분배하는 게 좋다고 판단이 되었다. 두 명이기 때문에 사이즈가 큰 "회원"과 "이벤트"를 하나씩 맡고 나머지 기능들을 나누게 되었다. 그렇게 나는 회원을 맡으며 인증 파트를 맡게 되었다. 먼저 로그인을 어떤 방식으로 구현할 것인지 결정해야만 했다. 세션 방식으로 간단히 구현할 수 있었지만 이왕이면 JWT를 적용하고 싶었다. 그렇게 Spring Security와 JWT를 적용하기 위한 여정이 시작되었다. JWT(Json Web Token)는 무엇이고 왜 선택했는가? JWT는 사용자 인증과 식별을 위한 토큰 기반 인증 방식이다. 이 토큰은 사용자의 권한 정보나 서비스 이용을 위한 정보를 포함하며, JWT를 사용하면..
스프링 프레임워크는 애플리케이션의 설정을 관리하고 구성하기 위해 다양한 방법을 제공합니다. 이 중에서도 @ConfigurationProperties와 @ConfigurationPropertiesScan은 애플리케이션의 설정을 효율적으로 관리하고 사용자 정의 설정을 쉽게 구성하기 위해 사용되는 중요한 기능입니다. @ConfigurationProperties란? @ConfigurationProperties는 스프링 프레임워크에서 제공하는 어노테이션으로, 애플리케이션의 설정 정보를 자바 클래스로 바인딩하는 데 사용됩니다. 이를 통해 설정 파일이나 환경 변수에서 가져온 설정 값을 객체로 매핑할 수 있습니다. 예를 들어, 데이터베이스 연결 정보, 외부 서비스 API 키, 애플리케이션의 고유한 속성 등을 자바 객체..
RESTful API를 만들 때 단건의 값을 반환하는 것이 아니라 여러 개의 값들을 반환할 상황이 있다. 이번 프로젝트의 경우 여러번 그런 상황이 있었는데 Spring으로 처음 프로젝트를 진행해보고, 특히, Page를 사용해서 반환하기 때문에 처음에는 약간 막막했다. DTO와 Builder 패턴을 사용하여 어떻게 List로 반환하는 지 자세한 예시를 통해 알아보도록 하자. ReviewController @RestController @RequiredArgsConstructor @RequestMapping("/reviews") public class ReviewController { private final ReviewService reviewService; @Operation(summary = "나의 리뷰..
Spring Security가 뭔데? Spring Security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크. 인증(Authentication): 해당 사용자가 본인이 맞는지를 확인하는 절차 인가(Authorization): 인증된 사용자가 요청한 자원에 접근 가능한지를 결정하는 절차 Spring Security는 기본적으로 인증 절차를 거친 후에 인가 절차를 진행하게 되며, 인가 과정에서 해당 리소스에 대한 접근 권한이 있는지 확인을 하게 된다. Spring Security에서는 이러한 인증과 인가를 위해 Principal을 아이디로, Credential을 비밀번호로 사용하는 Credential 기반의 인증 방식을 사용한다. Principal(접..
쁜새
(안)게으른 블로그