1. Entity 와 Repository 개념 비교
구분 Entity Repository
역할 | 데이터베이스 테이블과 매핑되는 객체 | 데이터베이스에 접근하여 CRUD를 수행 |
기능 | 데이터 모델 정의 (테이블 컬럼 매핑) | 데이터를 저장, 조회, 수정, 삭제 |
어노테이션 | @Entity, @Table | @Repository, JpaRepository |
사용 위치 | entity/ 패키지 | repository/ 패키지 |
예제 코드 | User.java | UserRepository.java |
2. Entity (엔티티)
개념
- **JPA(Java Persistence API)**에서 데이터베이스의 테이블과 매핑되는 객체(클래스).
- 실제 테이블과 1:1로 매칭되며, 컬럼과 필드를 매핑.
예제 (User.java)
import jakarta.persistence.*;
import lombok.*;
@Entity // 데이터베이스 테이블과 매핑
@Getter @Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Table(name = "users") // 테이블명 지정
public class User {
@Id // 기본 키(Primary Key) 설정
@GeneratedValue(strategy = GenerationType.IDENTITY) // 자동 증가 설정
private Long id;
@Column(nullable = false, unique = true) // Not Null & Unique
private String username;
@Column(nullable = false)
private String password;
@Column(nullable = false, unique = true)
private String email;
}
특징
- @Entity → JPA에서 관리하는 엔티티 클래스로 지정.
- @Table(name = "users") → 테이블명 지정.
- @Id → 기본 키(Primary Key) 지정.
- @GeneratedValue(strategy = GenerationType.IDENTITY) → 자동 증가(AUTO_INCREMENT).
- @Column → 테이블의 컬럼 속성을 지정.
3. Repository (JpaRepository)
개념
- JPA를 통해 데이터베이스의 데이터를 관리하는 인터페이스.
- JpaRepository<T, ID>를 상속받으면 기본적인 CRUD 메서드를 자동 제공.
- SQL을 작성하지 않아도 DB에서 데이터를 조회하고 저장 가능.
예제 (UserRepository.java)
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository // 스프링이 자동으로 빈 등록
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByUsername(String username); // 사용자 이름으로 검색하는 메서드
}
특징
- @Repository → 스프링이 자동으로 관리하는 데이터 저장소 역할.
- JpaRepository<User, Long>
- User → 엔티티 클래스 지정
- Long → 기본 키의 타입
자동 제공되는 CRUD 메서드
메서드설명
save(T entity) | 엔티티 저장 및 업데이트 |
findById(ID id) | ID로 엔티티 조회 |
findAll() | 모든 데이터 조회 |
deleteById(ID id) | ID로 데이터 삭제 |
existsById(ID id) | 존재 여부 확인 |
사용자 정의 메서드
Optional<User> findByUsername(String username);
List<User> findByEmailContaining(String email);
4. Entity 와 Repository 차이 정리
구분Entity (@Entity)Repository (JpaRepository)
역할 | 테이블과 매핑되는 클래스 | 데이터베이스 CRUD를 수행하는 인터페이스 |
소속 패키지 | entity/ | repository/ |
필수 어노테이션 | @Entity, @Table, @Id | @Repository, JpaRepository<T, ID> |
기능 | 데이터 구조 정의 (테이블 필드) | 데이터 저장, 조회, 수정, 삭제 |
예제 | User.java (User 엔티티) | UserRepository.java (User 저장소) |
5. Entity 와 Repository의 관계
실제 사용 예제
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User registerUser(String username, String password, String email) {
User user = User.builder()
.username(username)
.password(password)
.email(email)
.build();
return userRepository.save(user); // 저장 (CREATE)
}
public Optional<User> findUserByUsername(String username) {
return userRepository.findByUsername(username); // 조회 (READ)
}
}
흐름
- 엔티티(User.java) → 데이터베이스 테이블 구조를 정의.
- 레포지토리(UserRepository.java) → JpaRepository를 사용하여 데이터 CRUD 수행.
- 서비스(UserService.java) → UserRepository를 이용해 실제 비즈니스 로직을 처리.
📌 결론
✅ Entity (@Entity) → 데이터베이스 테이블을 정의하는 클래스.
✅ Repository (JpaRepository) → Entity를 데이터베이스에서 관리하는 DAO 역할.
✅ Entity는 데이터를 정의, Repository는 데이터를 저장하고 불러오는 역할.
✅ Spring Data JPA를 활용하면 Repository에서 SQL 없이도 기본 CRUD 제공.
연관된 글 :
2023.04.28 - [개발/Spring] - [Spring] 스프링 프로젝트 구조 (DTO, Entity and Mapper)
2023.05.25 - [개발/Java] - [JAVA] DTO, VO, DAO, Entity 의 차이
2023.04.28 - [개발/Spring] - [Spring] 스프링 프로젝트 구조 (DTO, Entity and Mapper)
2024.06.06 - [개발/DB] - ORM(Object-Relational Mapping) 데이터베이스 액세스 프레임워크
참고:
gpt
'개발 > Spring' 카테고리의 다른 글
[Spring] Webflux (0) | 2024.06.17 |
---|---|
[Springboot]Springboot 3.x에 Swagger (0) | 2024.06.06 |
[Spring] 스웨거 (Swagger) v3 설정하기 (0) | 2023.04.30 |
[Spring] Swagger 어노테이션 (0) | 2023.04.28 |
[Spring] 빌더 패턴(Bulider Pattern) (0) | 2023.04.28 |