SpringBoot 를 배워보자/5. 데이터베이스 연동

엔티티 설계 및 CRUD 작업

_Blue_Sky_ 2024. 9. 29. 15:51
728x90
728x90

스프링 엔티티 설계 및 CRUD 작업: 상세 가이드

소개

스프링 프레임워크는 자바 기반 엔터프라이즈 애플리케이션 개발을 위한 강력한 도구입니다. 특히, 스프링 데이터 JPA를 활용하면 객체 지향적인 방식으로 데이터베이스를 관리할 수 있어 생산성을 크게 향상시킬 수 있습니다. 이 글에서는 스프링 엔티티 설계와 CRUD(Create, Read, Update, Delete) 작업에 대해 심층적으로 다루고, 실제 개발에 필요한 다양한 개념과 예제 코드를 제공합니다.

엔티티 설계

엔티티는 객체 지향 모델에서 데이터베이스 테이블과 매핑되는 자바 클래스입니다. 스프링 데이터 JPA에서는 @Entity 애노테이션을 사용하여 엔티티를 선언합니다.

엔티티 설계 시 고려해야 할 사항:

  • @Id: 엔티티의 고유 식별자를 나타내는 필드에 @Id 애노테이션을 부여합니다.
  • @GeneratedValue: 데이터베이스에서 자동으로 값을 생성할 경우 사용합니다.
  • @Column: 데이터베이스 컬럼과 매핑할 때 사용합니다.
  • @Table: 테이블 이름을 지정할 때 사용합니다.
  • @ManyToOne, @OneToMany, @ManyToMany: 엔티티 간의 관계를 표현할 때 사용합니다.
  • @JoinColumn: 외래 키를 설정할 때 사용합니다.

예제:

@Entity
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 50)
    private String name;

    // ... 생략
}
 

Repository 인터페이스

Repository 인터페이스는 데이터베이스에 접근하기 위한 추상적인 계층을 제공합니다. 스프링 데이터 JPA는 JpaRepository 인터페이스를 제공하여 기본적인 CRUD 메소드를 자동으로 구현합니다.

Repository 인터페이스 예제:

public interface MemberRepository extends JpaRepository<Member, Long> {
    // Custom query method
    List<Member> findByName(String name);
}
 

CRUD 작업

  • Create: save() 메소드를 사용하여 엔티티를 저장합니다.
  • Read: findById(), findAll(), findByXXX() 등의 메소드를 사용하여 엔티티를 조회합니다.
  • Update: save() 메소드를 사용하여 수정된 엔티티를 다시 저장합니다.
  • Delete: deleteById(), delete() 등의 메소드를 사용하여 엔티티를 삭제합니다.

예제:

@Service
public class MemberService {
    private final MemberRepository memberRepository;

    // 생성자 주입

    public Member save(Member member) {
        return memberRepository.save(member);
    }

    public Member findById(Long id) {
        return memberRepository.findById(id)
                .orElseThround"));
    }

    // ... 생략
}
 
728x90

연관 관계 매핑

엔티티 간의 관계를 설정하는 것은 객체 지향 모델링에서 중요한 부분입니다. 스프링 데이터 JPA는 @ManyToOne, @OneToMany, @ManyToMany 애노테이션을 제공하여 다양한 관계를 표현할 수 있습니다.

예제:

@Entity
public class Team {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "team")
    private List<Member> members = new ArrayList<>();
}

@Entity
public class Member {
    // ... 생략

    @ManyToOne
    @JoinColumn(name = "team_id")
    private Team team;
}
 

추가적인 고려 사항

  • JPQL: 객체 지향적인 쿼리 언어를 사용하여 복잡한 조회를 수행할 수 있습니다.
  • Native Query: SQL 문을 직접 사용할 수 있습니다.
  • @Query: 커스텀 쿼리를 작성할 때 사용합니다.
  • @Transactional: 트랜잭션 관리를 위한 애노테이션입니다.
  • Lazy Loading, Eager Loading: 연관된 엔티티를 언제 로딩할지 설정합니다.

결론

스프링 엔티티 설계와 CRUD 작업은 스프링 데이터 JPA를 활용하여 효율적으로 데이터베이스를 관리하는 데 필수적인 지식입니다. 이 글에서 다룬 내용을 바탕으로 실제 프로젝트에서 엔티티를 설계하고 CRUD 기능을 구현할 수 있을 것입니다.

 

728x90
728x90