'2025/05/26'에 해당되는 글 1건

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
블로그 이미지

Link2Me

,