오늘 공부한 내용
- Spring 숙련주차 2주차 과제 제출
- Spring 숙련주차 2주차 과제 해석영상 공부
어려웠던 내용
- 과제를 수행하기 위한 전체적인 구조 이해
새로 알게된점
1. Password Encoder (비밀번호 암호화)
비밀번호를 저장할 때, 일반 플레인 텍스트를 데이터베이스에 저장하면 안된다. DBA나 해커가 고객 데이터베이스에 접근한다면, 비밀번호를 볼 수 있기 때문이다. 따라서 비밀번호는 암호화 과정을 거쳐 데이터베이스에 저장하는 것이 바람직하다.
그중 PasswordEncoder는 비밀번호 암호화 고정중 단순히 해시는 하는것 뿐만 아니라, salt(바이트 단위의 임의의 문자열) 를 추가하기 때문에 입력값이 다르더라도 encode하는 경우 암호화된 결과값이 항상 다르게 나온다.
PasswordEncoder를 사용함에 앞서 Spring Security 의존성을 주입해줘야 한다.
이를 위해 프로젝트 우측에 Gradle 설정에서 위코드를 dependencies안에 적어준다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
}
이후 패스워드를 userRequestDto에서 바로 가져오는것이 아닌 passwordEncoder를 통해 가져오기 위해
String password = passwordEncoder.encode(userRequestDto.getPassword()); 형식으로 적어준다
@Service
@RequiredArgsConstructor
public class UserService {
private final PasswordEncoder passwordEncoder;
public void signup(UserRequestDto userRequestDto) {
String username = userRequestDto.getUsername();
String password = passwordEncoder.encode(userRequestDto.getPassword());
}
}
PasswordEncoder는 기본적으로 BCrypt 방식을 많이 사용이 되는데 이를 Bean으로 등록해야 사용할수있는데 그 이유는 Spring Security에서 제공하는 PasswordEncoder는 인터페이스이기 때문에 아래와 같이 구현체를 빈으로 등록해야 사용할 수 있다.
Bean을 주입해서 사용할것이기에 따로 config 클래쓰를 만들어서 @Configuration 어노테이션 적용후 config로 활용하며 여기 안에 적도록 한다.
@Configuration
public class WebSecurityConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
이를 통해 @Configuration 안에서 Bean으로 선언해줌으로써 실제 기본으로 떠있는 Bean에 BCryptPasswordEncoder의 Bean으로 오버라이딩이 가능해진다.
오늘의 느낀점
오늘 과제 해석을 보면서 코드를 반복적으로 치는 연습을하면서 코드가 각각 어디에 적용되는지에 대해서 공부하는 것을 중점으로 하였다.
결국 과제는 미완성으로 제출하게 되었지만 금일 해석영상을 보고 작성하면서 다시 하나씩 복습하면서 12월 끝나기전까지는 내손으로 직접 만들어보는것을 목표로 차분히 익혀나가야겠다.