기술과 산업/언어 및 프레임워크

Spring Boot 시리즈 3편 – JPA로 DB 연동하기: Entity와 Repository 설계 전략

B컷개발자 2025. 4. 16. 17:15
728x90

Spring Boot에서 JPA를 통해 데이터베이스를 연동하는 방법을 설명합니다. Entity와 Repository 설계 전략, 실제 DB 연결 설정까지 실무 중심으로 구성했습니다.


Spring Boot 시리즈 3편 – JPA로 DB 연동하기: Entity와 Repository 설계 전략

Spring Boot에서 백엔드 API를 개발할 때 핵심은 데이터베이스 연동입니다.
이번 편에서는 Spring Data JPA를 활용해 DB와 연결하는 방법, Entity 및 Repository 구조 설계, 그리고 연결 설정까지 단계별로 정리합니다.


📌 Spring Data JPA란?

JPA(Java Persistence API)는 자바 진영의 ORM(Object-Relational Mapping) 기술이며,
Spring Data JPA는 이를 더 쉽게 추상화하여 제공하는 Spring의 모듈입니다.

키워드: Spring Data JPA, Entity 설계, Repository 인터페이스, DB 연동, application.properties 설정


⚙️ 1. 의존성 설정

✅ Gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly 'com.h2database:h2' // 개발 환경용
    runtimeOnly 'mysql:mysql-connector-java' // MySQL 사용 시
}

🗂️ 2. DB 연결 설정 – application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=1234

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
  • ddl-auto=update는 개발 초기 단계에서 유용 (운영에서는 주의)
  • show-sql=true로 SQL 로그 확인 가능

🧱 3. Entity 클래스 설계

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @Column(unique = true)
    private String email;
    
    // Getter/Setter
}

핵심 어노테이션

어노테이션 설명

@Entity JPA가 관리하는 클래스임을 명시
@Id 기본 키 지정
@GeneratedValue 자동 생성 전략 지정
@Column 컬럼 속성 설정 (nullable, unique 등)

🧩 4. Repository 인터페이스 정의

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByEmail(String email);
}
  • JpaRepository<T, ID>를 상속받으면 CRUD 자동 구현
  • 메서드 네이밍만으로 쿼리 자동 생성 (쿼리 메소드)

🔄 5. 서비스 계층에서 사용하기

@Service
@RequiredArgsConstructor
public class UserService {

    private final UserRepository userRepository;

    public List<UserDto> getAllUsers() {
        return userRepository.findAll()
            .stream()
            .map(user -> new UserDto(user.getName(), user.getEmail()))
            .collect(Collectors.toList());
    }

    public UserDto createUser(UserDto dto) {
        User user = new User();
        user.setName(dto.getName());
        user.setEmail(dto.getEmail());
        userRepository.save(user);
        return dto;
    }
}

✅ 마무리 요약 – Spring Boot에서 JPA 설계 핵심

항목 핵심 포인트

Entity DB 테이블과 매핑, @Entity, @Id, @Column 사용
Repository 인터페이스 기반, 메서드 네이밍으로 쿼리 생성
설정 파일 application.properties로 DB 연결 및 JPA 설정
개발 순서 Entity → Repository → Service → Controller 구성
DTO 매핑 Entity를 직접 외부 노출하지 않도록 DTO 사용

📌 다음 편 예고

Spring Boot 시리즈 4편: 입력값 검증과 예외 처리 – @Valid와 글로벌 핸들러 전략


🧠 실무 인사이트

  • JPA는 개발 초기에는 빠른 생산성이 장점이지만, 복잡한 쿼리는 JPQL 또는 QueryDSL로 보완해야 합니다.
  • @Transactional은 서비스 레이어에서 걸어주는 것이 일반적입니다.
  • DB 스키마 관리에는 Flyway나 Liquibase 같은 마이그레이션 도구도 추천됩니다.
728x90