DB 칼럼에 중요한 정보는 암호화 저장을 해야 한다.
처음에 평문으로 구성했던 칼럼을 암호화 업데이트 하기 위해서 아래와 같이 임시 적용한 코드를 적어둔다.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
public interface MemberRepository extends JpaRepository<Member, Long> {
// 모든 회원 평문 mobile_no만 조회 (필요에 따라 select 절 수정)
@Query("SELECT m FROM Member m WHERE m.mobileNo IS NOT NULL AND m.mobileNo <> ''")
List<Member> findAllWithMobileNo();
}
@Service
@RequiredArgsConstructor
public class MemberMobileEncryptService {
private final MemberRepository memberRepository;
private final EncryptService encryptService;
@Transactional
public int encryptAllMobileNo() {
String userName = SafeDBKeyConfig.userName;
String tableName = SafeDBKeyConfig.tableName;
String columnName = SafeDBKeyConfig.columnName_mobileNo;
// 1. 평문 mobile_no가 있는 회원 모두 조회
List<Member> memberList = memberRepository.findAllWithMobileNo();
int updated = 0;
for (Member member : memberList) {
String plainMobile = member.getMobileNo();
if (plainMobile == null || plainMobile.isBlank()) continue;
// 2. 암호화
String encrypted = encryptService.encrypt(userName, tableName, columnName, plainMobile);
// 3. update (변경 감지, JPA 자동 저장)
member.setMobileNo(encrypted);
updated++;
}
// 트랜잭션 끝나면 JPA flush/commit
return updated;
}
}
@SpringBootTest
public class EncryptMobileNoTest {
@Autowired
private MemberMobileEncryptService mobileEncryptService;
@Test
public void testEncryptAllMobileNo() {
int count = mobileEncryptService.encryptAllMobileNo();
System.out.println("암호화 적용 회원 수: " + count);
}
}
|
728x90
'Spring Boot > Security' 카테고리의 다른 글
방화벽(Firewalld)에서 8080 포트 직접 접근 차단 (1) | 2025.03.21 |
---|---|
React 에서 axios 로 Spring Boot public-key 호출 (1) | 2025.03.09 |
Spring Boot SSL 인증서 적용 (0) | 2025.03.09 |
Spring Boot Security 적용 예시 화면 (1) | 2025.03.08 |
Spring Boot RSA 암호화/복호화 함수 (2) | 2025.03.04 |