JPA Entity

Eugenius1st·2026년 9월 16일

Spring

목록 보기
3/5
post-thumbnail

핵심 어노테이션

  • @Entity
    • 이 클래스가 JPA가 관리해야 하는 엔티티임을 표시합니다. 필수 어노테이션입니다.
    • 주의: 기본 생성자(no-args constructor)가 반드시 필요하며, final 클래스에는 사용할 수 없습니다.
  • @Table(name = "...")
    • 엔티티 클래스가 매핑될 데이터베이스 테이블의 이름을 지정합니다.
    • 만약 생략하면, 엔티티 클래스 이름을 테이블 이름으로 사용합니다. (예: User -> user)

네이밍 규칙

DB는 무조건 스테이크
자바는 카멜 케이스가 표준이다.

DB예약어는 주의해야 한다.
USER, ORDER, GROUP 등은 데이터베이스의 예약어일 수 있다. 따라서 컬럼명이나 테이블명으로 사용하면 예기치 않은 오류가 발생할 수 있으므로 피하는것이 좋다. 부득이 한경우
@Table(name = "백틱order백틱") 로 백틱으로 감싸서 처리하라.

그렇다고 order_info 이런식으로 하지말라. 명시적인 하나의 단어로 하라. 만약 저렇게 하면 상위에 order 에 있다고 느껴진다. order가 존재하지도 않는데 order_info로 만들면 개발자들이 헷갈린다.

테이블명 단수VS복수

ORM에서만 단수형을 써라

  • 전통적인 방식 (복수형 - users)
    • 데이터베이스 관점에서는 테이블을 데이터의 '집합(Collection)'으로 봅니다. 따라서 '사용자들의 모음'이라는 의미로 users, orders처럼 복수형을 사용하는 것이 일반적이었습니다.
  • ORM/JPA 관점 (단수형 - user)
    • 최근 ORM이 널리 쓰이면서 생긴 경향입니다. ORM은 User라는 엔티티 클래스(객체) 하나가 user라는 테이블 하나와 1:1로 매핑된다고 봅니다. 즉, 객체의 관점을 따라 단수형으로 이름을 일치시키는 것이 더 직관적이라는 것입니다.

가끔가다 테이블을 ORM처럼 단수형으로 쓰는 회사도 있긴 함

  • 상태(Boolean) 타입 필드 네이밍
    • Java/API 네이밍 (is- / has- / can-)
      • Boolean 타입의 필드명은 그 자체로 '참/거짓'으로 답할 수 있는 질문이 되도록 짓는 것이 가장 좋습니다. is~로 시작하는 네이밍은 자바빈 표준 명세에 따른 규칙으로, 여러 프레임워크(Lombok, Jackson 등)가 이를 자동으로 인지하여 가독성과 개발 편의성을 높여줍니다.
      • 가독성: if (user.isActive()) 처럼 코드가 자연스러운 영어 문장처럼 읽힙니다.
    • 대표 접두사
      • is~: 상태를 나타낼 때 (e.g., isActive, isDeleted, isVisible)
      • has~: 소유나 포함 여부를 나타낼 때 (e.g., hasProfileImage, hasCoupon)
      • can~: 가능/권한 여부를 나타낼 때 (e.g., canPurchase, canComment)

Yn쓰는 경우도 있다. 요새는 잘 안쓴다.


Entity 역할?

엔티티는 데이터를 사용하는게 아니다. 그냥 표현해 놓은 것 뿐.
클래스 기반의 데이터 set이다.

Repository

Entity를 기반으로 메소드를 정의해둔 것이다.
interface채로 entity들을 추상화해둘 수 있다.

즉, User Table(특정 테이블 전용) SQL명령어 모음집 이다.
@Repository를 붙여야만 한다.

@Service, @Repository는 스프링이 실행할때 인스턴스화 해서 갖고있다.

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

  // 이건 인터페이스다. 인터페이스는 이 자체만으로는 실행 불가하고 '구현체가 필요하다.'
  Optional<User> findByEmail(String email);
  // 이건 구현체를 만들어주고 이 안에 쿼리가 들어가는 것이다.즉 뒷단에서 움직이는 것이고 우리가 하는건 구현체일뿐. 볼 수 없다. 빌드 클래스 파일 열어야할듯

}
profile
자신만의 속도로

0개의 댓글