커넥티 개발일지 20250403

CosmoNumb·2025년 4월 3일

📌 오늘 개발한 주요 내용 요약

  • 알림 정보(AlarmArgs)를 별도 클래스로 분리함.

  • JPA에서 AlarmArgs를 매핑할 때 발생하던 오류(Basic attribute type should not be 'AlarmArgs') 해결

  1. 알림 데이터를 JSON 형태로 DB에 저장할 수 있도록 @Convert + AlarmArgsConverter 적용함. (향후 구조 확장을 고려해 JSON 방식 채택 (확장성과 유연성 확보를 위함임.))
  2. AlarmEntity@Column(columnDefinition = "json") 명시하여 DB에서 JSON 타입으로 인식되도록 설정)

📌 오늘 배운 주요 내용 정리

🔸 JPA에서 자바 객체를 DB에 저장하는 방법:

  1. @Embeddable + @Embedded

    • 자바 객체를 컬럼 단위로 DB에 분해해서 저장함.
    • 검색이 쉽고 쿼리 성능이 좋다.
    • 구조가 고정적일 때 적합함.
  2. @Convert + 커스텀 AttributeConverter

    • 객체를 JSON 문자열로 직렬화해 하나의 컬럼에 저장한다.
    • 구조가 유동적이고, 변경 가능성이 많을 때 적합하다.
    • JSON 필드 검색 시 일반 SQL이 아니라 JSON_EXTRACT 등의 함수를 사용하는게 필요하다.

→ 내 프로젝트에서는 알림 정보 구조가 알림 종류에 따라 계속 달라질 수 있어서 JSON 저장 방식이 더 적합하다고 판단했다.

@Convert 어노테이션

이 어노테이션은 단순히 @Column(columnDefinition = "json")만으로는 해결되지 않는 JPA 매핑 에러를 방지하는 필수 키워드 이다!
→ JSON 문자열로 직접 변환/역변환하는 로직을 명확히 지정해줘야 JPA가 오류 없이 작동하기 떄문.


코드를 작성할 때, 설계에서의 관점을 좀 더 비중있게 다뤄야 하는구나.
JPA와 DB 구조 설계에 있어 "확장성과 유지보수"를 고려하는것에 대한 중요성을 잘 인식해야겠다.

0개의 댓글