1. 스프링 부트에 내장된 암호화 라이브러리 : BCryptPasswordEncoder 클래스
public class BCryptPasswordEncoder {
public String encode(CharSequence rawPassword) {
// 내부적으로 salt + 해시 처리
}
public boolean matches(CharSequence rawPassword, String encodedPassword) {
// 해시된 비밀번호와 입력값 비교 (같은 salt로 해시해서)
}
}
메서드까지 전부 내장되어 있음. 형식 그대로 따라 쓰면 된다!
내장된 클래스는 구글링 등으로 찾아서 쓰면 된다.
메서드도 함께 찾아보고 사용할 것.
2. SecureRandom 클래스
- SecureRandom: Java 표준 라이브러리(java.security 패키지)에 포함된 클래스
- 암호 관련 보안이 중요한 기능(비밀번호, 인증번호, 토큰 등)에 사용
- import 필요
import java.security.SecureRandom;
3. PasswordGeneratorUtil에서 @Component가 필요하지 않은 이유
→ 모두 static 메서드로 이루어져 있기 때문이다!! 즉, new 하지도 않고, @Autowired로 주입받지도 않는다.
⇒ 굳이 스프링이 관리하지 않아도 되니까 @Component가 필요 없다.
Util 클래스는 대부분 @Component 안 붙인다.
4. StringBuilder란?
: 문자열을 효율적으로 이어붙일 수 있게 해주는 클래스
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append("World");
System.out.println(sb.toString()); // HelloWorld
일반 문자열(String)은 + 연산을 하면 매번 새로운 문자열을 만들지만, StringBuilder는 한 객체 안에서 문자열을 계속 추가해서 성능이 좋다.
+) append() 메서드는 random 클래스와는 상관없고, StringBuilder 클래스 안에 포함된 메서드이다.
⇒ 문자열 끝에 새로운 글자를 붙이는 메서드
5. CharAt()이란?
charAt(index): 문자열에서 특정 위치의 글자 1개(char)를 가져오는 메서드
- 문자열에서 원하는 위치의 글자를 뽑을 때 사용
String text = "apple";
char c = text.charAt(0); // 'a'
char d = text.charAt(3); // 'l'
6. 비밀번호 랜덤 섞기 로직
// 랜덤하게 섞기
String result = password.toString();
// 현재 upper, lower, .. 차례대로 배열되어 있는 상태이므로 섞음
StringBuilder shuffledPassword = new StringBuilder(result);
for (int i = 0; i < result.length(); i++) {
int j = random.nextInt(result.length());
char temp = shuffledPassword.charAt(i);
shuffledPassword.setCharAt(i, shuffledPassword.charAt(j));
shuffledPassword.setCharAt(j, temp);
}
return shuffledPassword.toString();
// 최종적으로 랜덤하게 섞인 비밀번호를 문자열로 반환
- 글자들의 순서를 바꿔서 비밀번호를 섞는 작업
- 글자 하나를 기준으로 잡고 → 랜덤 위치의 글자랑 자리 바꾸기
- 이걸 전체 글자에 대해 반복하면 순서가 완전히 섞인다.
'웹 개발' 카테고리의 다른 글
[Front] DOM요소와 제이쿼리 (0) | 2025.05.24 |
---|---|
[Spring Boot] @Primary와 @Qualifier의 차이 (0) | 2025.05.22 |
[Spring Boot] @Component 와 @Bean의 차이 (0) | 2025.05.18 |
[Front] 기능 (0) | 2025.05.17 |
[Front] 코드 분석 중 궁금한/모르는 점 정리 (0) | 2025.05.16 |