| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- tessrect
- Book
- springboot
- docker
- superbase
- flyio
- vercel
- Delphi
- Expo
- edgestore
- oraclecloude
- react
- beautifullsoup
- TypeScript
- kidznote
- svelte
- java
- shadcn-ui
- dokerfile
- 일의격
- stepzen
- FastAPI
- WSLHostPatcher
- Markdown
- AWS
- wsl2
- vmmem
- Nextjs
- reactnative
- spring
- Today
- Total
Blog
[book] SpringBoot Up & Running 4장 본문
4. Spring Boot 애플리케이션에 데이터베이스 접근 기능 추가하기
Spring Boot와 데이터베이스 연동
애플리케이션은 대개 상태를 저장해야 하며, 이를 위해 데이터베이스가 필요합니다. 예를 들어, 온라인 쇼핑몰에서 상품 정보, 사용자 계정, 주문 내역 등을 데이터베이스에 저장하고 관리합니다. 이번 장에서는 Spring Boot 애플리케이션에 데이터베이스 접근 기능을 추가하는 방법을 설명합니다.
자동 설정 준비하기
Spring Boot는 개발자가 반복적으로 작성하는 코드를 단순화하며, 데이터베이스 접근을 위한 기본 설정을 제공합니다. 예를 들어, 데이터 소스 설정, 트랜잭션 관리, JPA 설정 등을 자동으로 처리하여 개발자가 비즈니스 로직에 집중할 수 있도록 돕습니다. 필요한 속성 값을 설정하거나 빈을 생성하여 기능을 커스터마징할 수 있습니다.
해결하고자 하는 문제
기존의 ArrayList 방식은 데이터를 임시로만 저장하며, 애플리케이션이 재시작되면 데이터가 사라지는 문제가 있습니다. 또한, 여러 인스턴스에서 데이터를 공유할 수 없어, 확장성이 부족합니다. 예를 들어, 웹 애플리케이션의 세션 정보나 간단한 캐시 데이터는 ArrayList에 저장될 수 있지만, 영구적인 데이터는 데이터베이스에 저장해야 합니다.
데이터베이스 의존성 추가
Spring Boot 애플리케이션에서 데이터베이스에 접근하려면 다음이 필요합니다:
애플리케이션 내장 또는 외부에서 접근 가능한 데이터베이스 (예: MySQL, PostgreSQL, H2)
데이터베이스 벤더가 제공하는 드라이버 (예: MySQL Connector/J, PostgreSQL JDBC Driver)
Spring Data 모듈 (예: Spring Data JPA, Spring Data JDBC)
Spring Initializr는 특정 Spring Data 모듈과 함께 적합한 데이터베이스 드라이버를 제공합니다. JPA를 사용하는 경우, Spring Data JPA 의존성과 특정 드라이버 의존성을 추가해야 합니다. 예를 들어, PostgreSQL 데이터베이스를 사용하려면 Spring Data JPA와 PostgreSQL JDBC Driver를 추가합니다.
H2 데이터베이스 활용
H2는 Java로 작성된 빠른 데이터베이스로, JPA 호환 및 메모리/디스크 기반 모드를 지원하여 개발 및 테스트 환경에서 유용하게 사용될 수 있습니다. 예를 들어, 단위 테스트나 간단한 데모 애플리케이션을 개발할 때 H2를 사용하여 별도의 데이터베이스 설치 없이 빠르게 개발할 수 있습니다. pom.xml 파일에 다음 의존성을 추가하여 H2 데이터베이스를 통합합니다:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
코드 추가 및 리팩토링
Coffee 클래스에 JPA 어노테이션을 추가하고, Repository를 사용하여 데이터베이스와 연결합니다. Spring Data는 레포지토리 인터페이스를 통해 데이터베이스 접근을 추상화하고, Spring Boot는 필요한 빈을 자동으로 생성합니다. 예를 들어, @Entity 어노테이션을 사용하여 Coffee 클래스를 데이터베이스 테이블과 매핑하고, JpaRepository 인터페이스를 상속받아 Coffee 엔티티에 대한 CRUD 작업을 수행하는 레포지토리를 정의합니다.
주요 코드 변경 사항:
RestApiDemoController에 레포지토리 빈을 자동 주입하여 데이터베이스에 접근할 수 있도록 설정합니다.List<Coffee>멤버 변수 제거 및 생성자에서 레포지토리를 통해 초기 데이터를 데이터베이스에 저장하도록 변경합니다.getCoffees(),getCoffeeById(),postCoffee(),putCoffee(),deleteCoffee()메서드를 리팩토링하여 레포지토리의 메서드를 사용하여 데이터베이스와 상호 작용하도록 수정합니다. 예를 들어,findAll(),findById(),save(),deleteById()등의 레포지토리 메서드를 활용합니다.
데이터 저장 및 조회
HTTPie를 사용하여 API에 접근하고, 데이터베이스에 커피를 저장하고 조회하는 방법을 설명합니다. 예를 들어, POST /coffees 요청을 보내 새로운 커피를 추가하고, GET /coffees 요청을 보내 모든 커피 목록을 조회하며, GET /coffees/{id} 요청을 보내 특정 ID의 커피를 조회합니다.
코드 다듬기:
샘플 데이터를 별도의 컴포넌트 (
DataLoader)로 추출하여 관리하고,@PostConstruct어노테이션을 사용하여 애플리케이션 시작 시점에 데이터를 로딩하도록 설정합니다.putCoffee()메서드의 조건문을 수정하여 가독성을 향상시킵니다. 예를 들어, 삼항 연산자의 조건을coffeeRepository.existsById(id)로 변경하여 코드를 더 명확하게 만듭니다.
요약
이번 장에서는 Spring Boot 애플리케이션에 데이터베이스 접근 기능을 추가하는 방법을 다루었으며, JPA, H2 데이터베이스, Spring Data JPA 및 리포지토리에 대한 기본적인 내용을 설명했습니다. 이러한 개념을 통해 개발자는 Spring Boot 애플리케이션에서 데이터를 효율적으로 저장하고 관리할 수 있습니다.