ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot 시리즈 3편 – JPA로 DB 연동하기: Entity와 Repository 설계 전략
    기술과 산업/언어 및 프레임워크 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
Designed by Tistory.