티스토리 뷰

1. Entity와 @Entity annotation 

 

엔티티는 데이터베이스 테이블과 매핑되는 객체이다. Spring Data JPA에서 엔티티는 데이터베이스의 한 테이블을 나타내며, 해당 테이블의 각 행(row)을 객체로 다루다. 엔티티 클래스는 데이터베이스와의 상호작용을 정의하는 데, 여기서 @Entity annotation이 사용된다. 

 

[ @Entity ]

  • @Entity는 해당 클래스가 데이터베이스 테이블과 매핑된다는 것을 명시하는 annotation이다. 엔티티 클래스는 테이블의 열과 매핑되는 필드를 포함한다. 
  • 데이터베이스의 레코드를 객체 지향적으로 다루기 위해 사용되며, 데이터를 객체 형태로 쉽게 조작할 수 있도록 돕는다.
@Entity
@Table(name = "worker")
public class Worker {
    // 필드 정의
}
  • @Table: 특정 테이블에 엔티티를 매핑할 때 사용되며, 테이블 이름을 명시할 수 있다.
  • 필드와 컬럼 매핑: 각 엔티티 필드는 데이터베이스의 컬럼과 매핑된다. 이 필드를 통해 데이터베이스와의 상호작용이 이루어진다.

2. @ManyToOne 관계 설정

 

ManyToOne은 엔티티 간의 관계를 설정할 때 사용된다. 이 annotation은 한 엔티티가 여러 개의 다른 엔티티와 연결될 수 있을 때 사용되며, 데이터베이스에서 다대일(N:1) 관계를 나타낸다.

 

[ @ManyToOne ]

  • @ManyToOne은 하나의 엔티티가 여러 개의 다른 엔티티에 속하는 관계를 정의한다. 
  • 데이터베이스에서 외래 키를 통해 엔티티 간 관계를 표현하며 이 관계를 통해 조인 쿼리가 생성되어 데이터가 조회된다.
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "worker_id", nullable = false)
private Worker worker;
  • @JoinColumn: 외래 키를 정의하는데 사용되며, 데이터베이스 테이블에서 외래 키 컬럼의 이름을 명시할 수 있다.
  • 지연 로딩(FetchType.LAZY): 필요할 때만 데이터를 가져오도록 설정하여 성능을 최적화할 수 있다. 이를 통해 데이터를 미리 불러오는 대신 실제로 필요할 때만 로딩한다.

3. 삭제 처리: 논리적 삭제 vs 물리적 삭제

 

데이터를 삭제하는 방식에는 논리적 삭제와 물리적 삭제가 있다. 논리적 삭제는 데이터를 실제로 삭제하지 않고, 삭제 여부만을 표시해 데이터를 남겨두는 방식이다. 반면, 물리적 삭제는 데이터를 완전히 제거하는 방식이다.

 

  • 논리적 삭제는 데이터베이스에서 데이터를 완전히 삭제하지 않고, 삭제된 상태로 관리하는 방식이다. 이 방식은 데이터의 이력을 보존하거나, 추후 복원이 필요한 겨웅 유용하다. 데이터를 삭제했을 때 삭제 여부를 나타내는 플래그 필드를 사용해 상태를 관리한다. 
@Column(nullable = false)
private boolean deleted = false;

public void delete() {
    this.deleted = true;
}

 

 

4. @NoArgsConstructor와 @AllArgsConstructor

 

@NoArgsConstructor와 @AllArgsConstructor는 객체 생성시 기본 생성자와 모든 필드를 매개변수로 받는 생성자를 자동으로 생성하는 Lombok annotation이다. 

 

[ @NoArgsConstructor ]

기본 생성자를 자동으로 생성하는 annotation이다. 매개변수가 없는 생성자를 생성해 객체를 초기화할 때 사용된다.

엔티티나 DTO 클래스에서 기본 생성자가 필요할 때 사용되며 프레임워크가 객체를 생성할 때 유용하다.

 

[ @AllArgsConstructor ]

클래스의 모든 필드를 매개변수로 받는 생성자를 자동으로 생성하는 annotation이다. 객체 생성 시 모든 필드를 한꺼번에 초기화할 때 사용되며, 특정 상황에서 간편하게 객체를 생성할 수 있다.

 

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class Worker {
    private String name;
    private boolean deleted;
}

 

'Spring' 카테고리의 다른 글

엑셀 파일 처리 기능 구현  (0) 2024.10.07
예외 처리와 로깅 설정  (0) 2024.09.30
데이터 접근 1. JdbcTemplate  (0) 2024.07.10
API 예외처리  (0) 2024.07.01
Spring MVC  (0) 2024.06.28
공지사항
최근에 올라온 글
«   2025/02   »
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
글 보관함