SpringBoot/데이터베이스 연동

엔티티(Entity)와 리포지토리(Repository) 만들기

DEVLIB 2025. 4. 14. 10:47
728x90

예제 시나리오

"회원(Member)" 정보를 관리하는 예제

우리는 다음과 같은 정보를 데이터베이스에 저장하려 합니다:

필드 설명
id 고유 ID (자동 생성)
name 회원 이름
email 이메일 주소
createdDate 생성일시

1. Entity 클래스 만들기

package com.example.demo.entity;

import jakarta.persistence.*;
import java.time.LocalDateTime;

@Entity
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 자동 증가
    private Long id;

    private String name;

    @Column(unique = true)
    private String email;

    private LocalDateTime createdDate = LocalDateTime.now();

    // 기본 생성자 (필수)
    protected Member() {}

    // 생성자
    public Member(String name, String email) {
        this.name = name;
        this.email = email;
    }

    // Getter/Setter (롬복 쓰면 @Getter, @Setter로 대체 가능)
    public Long getId() { return id; }

    public String getName() { return name; }

    public String getEmail() { return email; }

    public LocalDateTime getCreatedDate() { return createdDate; }

    public void setName(String name) { this.name = name; }

    public void setEmail(String email) { this.email = email; }
}

기본 생성자는 JPA에서 필수입니다. 꼭 만들어 주세요!


2. Repository 인터페이스 만들기

package com.example.demo.repository;

import com.example.demo.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface MemberRepository extends JpaRepository<Member, Long> {

    // 메서드 이름만으로 쿼리 자동 생성
    Optional<Member> findByEmail(String email);

    // 추가로 필요 시 더 만들 수 있음 (findByName, existsByEmail 등)
}

JpaRepository<T, ID>를 상속하면 save(), findById(), findAll() 등을 바로 사용할 수 있습니다.


3. 사용 예시 (서비스나 테스트에서 호출)

@Service
public class MemberService {

    private final MemberRepository memberRepository;

    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    public void register(String name, String email) {
        Member member = new Member(name, email);
        memberRepository.save(member);
    }

    public Member getMember(String email) {
        return memberRepository.findByEmail(email)
            .orElseThrow(() -> new RuntimeException("회원 없음"));
    }
}

application.yml (설정 예시 - H2 DB)

spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

실행하면 Member 테이블이 자동 생성되고, 콘솔에 SQL이 출력됩니다.


추가 팁

  • @Column으로 제약 조건 지정 가능 (nullable = false, length = 100, unique = true 등)
  • @Table(name = "members")로 테이블 이름 지정 가능
  • LocalDateTime 필드는 @PrePersist를 활용해 자동 세팅도 가능

마무리 요약

구성 요소 설명
@Entity DB 테이블로 매핑되는 자바 클래스
@Id + @GeneratedValue 기본 키 + 자동 증가 설정
JpaRepository CRUD 및 쿼리 메서드를 자동 제공
사용 흐름 Controller → Service → Repository → DB
LIST