🚢 JPA 의 AttributeConverter

2024. 4. 26. 10:28· 프로젝트/항해99 개인 프로젝트
목차
  1. 💡 기존의 암호화 방법
  2. 💡 JPA의 AttributeConverter
  3. 💡 구현
  4. 💡 Converter 적용
  5. 💡 결과

💡 기존의 암호화 방법

우리가 프로젝트를 하다보면 사용자의 데이터를 암호화 해주어야 한다는 것을 한번쯤은 듣게 된다. 그래서 데이터를 암호화하기 위해 암호화하는 로직을 만들고 암호화를 했다면 복호화를 해야하는 로직도 만든다

 

문제점

  • 암호화를 하는 타이밍마다 해당 로직을 구성해주어야 하고 그 타이밍마저 다 다르다
  • 수정을 위한 코드에도 암호화가 들어가야한다
  • 또한 사용자에게 데이터를 전달하거나 비교를 할 때 일일히  복호화 로직을 또 구해야한다는 것이다.
  • 만약 코드를 누락할 경우 문제가 발생할 수 있다.

 

💡 JPA의 AttributeConverter

이 문제들을 해결하기 위해 JPA의 AttributeConverter라는 것을 이용해보려 한다. 간단하게 설명해보자면 서버에서 DB로 데이터를 넣기전과 DB에서 데이터를 불러올때 자동으로 지정해둔 암호화/복호화 로직을 사용해서 암호문제를 해결한다.

 

AttributeConverter는 제네릭 타입을 통해 전달받고 X는 Entity, Y는 DB Column 자료형을 나타낸다

 

  • Y convertToDatabaseColumn (X attribute) : DB에 요청을 전송할 때 수행한다 물론 x가 Entity이다
  • X convertToEntityAttribute(Y dbData) : Y의 DB Column을 X Entity 방식으로 전환하는 것이다.

 

이렇게 인터페이스를 이용하려는 클래스에 implement 하여 위에 보이는 두개의 메소드를 구현하면 된다.

 

💡 구현

보다시피 암호화를 사용하기 위해 Converter 클래스에 implement하여 조건을 통해 암호화와 복호화를 진행하도록 하는 방식을 볼 수 있다. 

 

Entity 도 String, dbType도 String 이기 때문에 이와 매칭되는 값만 암호화된다. 만약 String이 아닌 다른 값에 사용하기 위해서는 제네릭의 값을 변경해주어야한다.

 

  • 여기서 twoWayEncryption을 필드생성해서 사용하는데 해당 클래스가 암호화를 실제로 진행하는 로직이다.

 

💡 Converter 적용

Converter를 적용하는 방법은 어렵지 않다 하지만 Entity의 타입과 db의 타입을 잘 생각하고 진행해야 한다. int나 double과 같은 다양한 타입은 converter를 새로 만들어서 진행을 해주어야 한다. 그러면 평문이 암호화되어 진행되는 것을 볼 수 있다

 

💡 결과

이렇게 사용하면 더이상 DB에 들어가는 데이터의 암호화를 따로 생각할 필요가 없다. 이로 인해 굉장히 복잡해질수 있는 서비스 로직을 더욱 편리하게 유지보수 할 수 있게 되고 추후에 다른 사람들이 코드를 파악할때도 어떠한 방식으로 암호화를 사용하는지 한눈에 파악할 수 있게 된다.

'프로젝트 > 항해99 개인 프로젝트' 카테고리의 다른 글

🚢 재고 관리를 위한 동시성 제어 (Monolithic Architecture)  (2) 2024.04.27
🚢 WishList가 장바구니? (Redis 의 Hash타입 사용)  (0) 2024.04.26
🚢 이메일 인증 코드, Session 에서 Redis로  (0) 2024.04.26
🚢 로그아웃, RefreshToken?? Redis?? (feat. 비밀번호 변경)  (1) 2024.04.26
🚢 @Scheduled 을 이용한 배송 상태 자동 체크  (1) 2024.04.21
  1. 💡 기존의 암호화 방법
  2. 💡 JPA의 AttributeConverter
  3. 💡 구현
  4. 💡 Converter 적용
  5. 💡 결과
'프로젝트/항해99 개인 프로젝트' 카테고리의 다른 글
  • 🚢 WishList가 장바구니? (Redis 의 Hash타입 사용)
  • 🚢 이메일 인증 코드, Session 에서 Redis로
  • 🚢 로그아웃, RefreshToken?? Redis?? (feat. 비밀번호 변경)
  • 🚢 @Scheduled 을 이용한 배송 상태 자동 체크
늦은산책
늦은산책
늦은산책
중얼중얼블로그
늦은산책
전체
오늘
어제
  • 분류 전체보기
    • 오류 모음집
    • CS
      • 💾 자료구조
      • 👫🏼 정렬
      • 🖥 네트워크
      • 💻 운영체제
      • 💾 DB
      • 🌌 알고리즘
      • 📝 언어
    • 테스트
    • Git 초보에게 필요한 Git bash사용법
    • 프로젝트
      • 팀 프로젝트
      • 개인 프로젝트
      • 항해99 개인 프로젝트
      • 스위프 프로젝트(Lit Map)
    • Java
      • 객체 지향
    • Spring
      • 🌲 Spring
      • 👨‍💻 SpringSecurity
      • 🌵 JPA
    • MSA
      • MSA 강좌 - 이도원 강사님
    • Docker(도커)
    • 코딩테스트
      • 🧮 프로그래머스
      • 🎲 백준
    • 항해99
      • 🕛 1주차
      • 🕐 2주차
      • 🕑 3주차
      • 🕒 4주차
    • AWS
    • CI와CD

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 항해99
  • 코딩테스트
  • 카우치코딩_팀프로젝트
  • 개발자취업
  • 취리코
  • 카우치코딩
  • couchcoding
  • 개발자포트폴리오
  • 개발자취준
  • 개발자이력서
  • 개발자포토폴리오
  • 카우치코딩_포트폴리오_멘토링
  • 취업리부트코스

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
늦은산책
🚢 JPA 의 AttributeConverter
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.