Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- java map 출력
- 작은수제거하기
- java최솟값구하기
- 항해99후기
- java기본자료형
- java map 저장
- 노베이스부트캠프
- java map
- java참조자료형
- 항해15기
- java set 저장
- 프로그래머스제일작은수
- 인터프린터언어
- 격파르타비전공자
- java list 출력
- 비전공자sqld
- javaJVM
- java set 출력
- 격파르타후기
- java알고리즘문제풀이
- 컴파일
- sqld자격증합격
- 프로그래머스
- 코딩부트캠프후기
- java 자료구조 활용
- java알고리즘
- 격파르타장점
- java list 저장
- 격파르타합격후기
- javaJRE
Archives
- Today
- Total
코딩과 결혼합니다
231012 - [Game_Crew]트러블 슈팅 : 회원가입 구현 본문
728x90
@PostMapping("/signup")
public MessageResponseDto signup(@RequestBody @Valid SignupRequestDto requestDto){
signupService.signup(requestDto);
return new MessageResponseDto(Message.SIGNUP_SUCCESSFUL, HttpStatus.OK);
}
public void signup(SignupRequestDto requestDto){
String email = requestDto.getEmail();
String nickname = requestDto.getNickname();
String password = passwordEncoder.encode(requestDto.getPassword());
//회원 중복 확인
Optional<User> checkEmail = userRepository.findByEmail(email);
if (checkEmail.isPresent()) {
throw new CustomException(ErrorMessage.DUPLICATE_EMAIL_EXISTS, HttpStatus.CONFLICT, true);
}
//사용자 등록
User user = new User(email, nickname, password);
userRepository.save(user);
}
📌 Validation


- 데이터의 일관성 유지 : 입력된 데이터의 일관성과 유효성을 검사하여 잘못된 데이터가 시스템에 들어오는 것을 방지
- 오류 처리 및 예외 방지 : 오류와 예외 상황들을 사전에 방지할 수 있다.
- 사용자 경험 향상 : 실시간으로 에러 메세지를 표시하여 사용자가 문제점을 파악하고 수정할 수 있도록 도와줌
📌 BcryptPasswordEncoder
@Configuration
public class Password {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
bcrypt
- bcrypt는 해시함수 오픈소스 라이브러리로 Salting과 Key Stretching을 구현한 해쉬 함수중 가장 널리 사용된다.
- 암호화를 위해 다양한 언어가 지원되고 사용이 간편
- 해쉬 결괏값에 소금값과 해시값 및 반복 횟수를 같이 보관하기 때문에 우리는 암호화된 값만 DB에 저장
- 비밀번호 해싱을 적용하는 데 있어 DB설계를 복잡하게 할 필요가 없다
BcryptPasswordEncoder
- 스프링 시큐리티 프레임워크에서 제공하는 클래스로 비밀번호를 암호화하는 데에 쓰이는 메서드이다.
비밀번호는 암호화가 된 채로 데이터베이스에 저장되기 때문에 원래의 비밀번호를 알 수 없다. - encode() : 패스워드를 암호화해 준다. 똑같은 비밀번호를 해당 메서드를 통하여 인코딩하더라도 매번 다른 인코딩 된 문자열을 반환한다.
- matchers : 제출된인코딩 되지 않은 패스워드와 인코딩 된 패스워드의 일치 여부를 확인한다.
📌오늘의 트러블슈팅
문제 : 회원가입 기능을 만든 후에 포스트맨으로 확인하려 하였는데 401 Unauthorized이 뜸
원인 : 시큐리티 인증을 받지 않았기 때문( 스프링 시큐리티의 BcryptPasswordEncoder를 통해 입력받은
비밀번호를 암호화. 시큐리티 비밀번호를 입력해야 한다.)
해결 : 나는 첫 번째의 방법으로 간단하게 기능이 잘 돌아가는지 확인해 보았다.
- (exclude = SecurityAutoConfiguration.class) : SpringBootApplication에 스프링 시큐리티를 무시하는 걸 임시로 적용✔️
- 로그에 뜬 시큐리티의 패스워드를 포스트맨의 Basic Auth에 입력해 준다.
+ 에러(예외 처리)메세지나 성공했을 때의 메세지를 한 곳에서 관리할 수 있도록 만들었다.




'코딩과 매일매일♥ > Game_Crew' 카테고리의 다른 글
| 231024 - [Game_Crew]JWT (0) | 2023.10.24 |
|---|---|
| 231021 - [Game_Crew]트러블 슈팅 : 지옥의 304 (1) | 2023.10.21 |
| 231018 - [Game_Crew]트러블슈팅 : 이메일 인증 구현하기 (0) | 2023.10.18 |
| 231013 - [Game_Crew] 로그인 구현 (0) | 2023.10.13 |
| 231009 - [Game_Crew] 프로젝트 MVP (0) | 2023.10.09 |