모든 서비스는 회원의 비밀번호를 DB에 저장할 때 암호화하여 저장한다.
비밀번호를 암호화하여 저장하는 방법 중 하나로 JPA가 지원하는
@Converter
를 실험적으로 사용해보았다.
객체에 저장할 값과 DB에 저장할 값을 다르게 지정하고 싶을 경우 편리하게 관리할 수 있도록
jpa에서 지원해주는 기능
이다.
사실 Converter는 비밀번호 암호화 뿐만 아니라 DB insert 시 다른 타입 또는 데이터로 변경하여 저장하고 싶을 경우 유용하게 사용된다.
예를 들어, boolean 타입이 DB에 저장될 때 0 또는 1인 숫자로 저장되는 경우가 있다.(DB마다 다르다)
이때, 숫자 대신 Y 또는 N으로 저장하고 싶을 경우 Converter가 유용하게 사용될 수 있다.
먼저 Converter 기능을 적용하고 싶은 엔티티 필드에 @Convert
어노테이션과 해당 기능을 수행하는 로직을 담고있는 Converter를 지정한다.
이때, 필드 혹은 클래스에 적용하는 두 가지 방식이 있다.
데이터 변환 로직을 수행하는 Converter 클래스를 작성한다.
Converter는 AttributeConverter
를 구현해야 하며, AttributeConverter의 두 메서드를 override 하면 된다.
각각 엔티티 필드에서 DB로, DB에서 엔티티로 변환하는 메서드이다.
비밀번호 입력 시 암호화되어 저장되는 것을 확인할 수 있다.
기존에 비밀번호를 암호화하는 로직을 포함해야 했던 것 보다 편리하게 구현할 수 있으며, 코드도 깔끔해졌다.