Spring Boot와 PostgreSQL 연동하기
Overview
Spring Boot와 PostgreSQL을 연동하는 방법을 자세히 설명하겠습니다. 이 과정은 데이터베이스와의 연결 설정부터 시작하여, 기본적인 CRUD 작업을 수행할 수 있는 애플리케이션을 만드는 방법을 포함합니다. PostgreSQL은 오픈 소스 관계형 데이터베이스 시스템으로, Spring Boot와의 통합이 비교적 간단하고 강력한 성능을 제공합니다. 이 가이드는 PostgreSQL을 데이터베이스로 사용하는 Spring Boot 애플리케이션을 처음부터 끝까지 설정하는 방법을 단계별로 설명합니다.
1. 프로젝트 생성
Spring Boot 애플리케이션을 생성하기 위해서는 Spring Initializr를 사용할 수 있습니다. Spring Initializr는 웹 기반의 프로젝트 생성 도구로, 필요한 의존성을 선택하여 기본적인 Spring Boot 프로젝트 구조를 생성할 수 있습니다.
Spring Initializr 접속: Spring Initializr 웹사이트에 접속합니다.
프로젝트 설정:
- Project: Gradle Project 또는 Maven Project를 선택합니다. 여기서는 Maven을 예로 들겠습니다.
- Language: Java를 선택합니다.
- Spring Boot: 최신 버전을 선택합니다.
- Project Metadata:
- Group: com.example
- Artifact: myapp
- Name: myapp
- Description: Demo project for Spring Boot with PostgreSQL
- Package name: com.example.myapp
- Packaging: Jar를 선택합니다.
- Java: Java 17 또는 21을 선택합니다.
- Dependencies:
- Spring Web: RESTful API를 개발할 때 필요합니다.
- Spring Data JPA: JPA를 사용하여 데이터베이스와 상호작용합니다.
- PostgreSQL Driver: PostgreSQL 데이터베이스와 연결하기 위한 드라이버입니다.
Generate 버튼을 클릭하여 프로젝트를 다운로드합니다.
다운로드한 ZIP 파일을 압축 해제하고 IDE에서 열어줍니다.
2. PostgreSQL 데이터베이스 설정
PostgreSQL 데이터베이스를 설치하고 설정하는 과정입니다.
PostgreSQL 설치: PostgreSQL은 PostgreSQL 공식 웹사이트에서 다운로드할 수 있습니다. 설치 후 PostgreSQL 데이터베이스를 실행합니다.
데이터베이스 생성:
CREATE DATABASE myappdb;
사용자 생성 및 권한 부여:
CREATE USER myappuser WITH ENCRYPTED PASSWORD 'password'; GRANT ALL PRIVILEGES ON DATABASE myappdb TO myappuser;
3. Spring Boot 설정
애플리케이션이 PostgreSQL 데이터베이스에 연결될 수 있도록 설정하는 과정입니다.
application.properties
파일 설정:
src/main/resources/application.properties
파일에 PostgreSQL 연결 설정을 추가합니다.
spring.datasource.url=jdbc:postgresql://localhost:5432/myappdb
spring.datasource.username=myappuser
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url
: PostgreSQL 데이터베이스의 URL입니다. 여기서는 로컬에서 실행되고 있는 PostgreSQL 데이터베이스를 가리킵니다.spring.datasource.username
및spring.datasource.password
: 데이터베이스에 접근하기 위한 사용자명과 비밀번호입니다.spring.jpa.database-platform
: Hibernate가 사용할 PostgreSQL 데이터베이스의 Dialect입니다.spring.jpa.show-sql
: SQL 쿼리를 콘솔에 출력할지 여부입니다.spring.jpa.hibernate.ddl-auto
: 애플리케이션 실행 시 Hibernate가 데이터베이스 스키마를 자동으로 업데이트할지 여부를 설정합니다.update
로 설정하면 엔티티 클래스와 데이터베이스 테이블의 스키마를 동기화합니다.
4. 엔티티 클래스 생성
데이터베이스와 상호작용하기 위한 엔티티 클래스를 생성합니다.
- 엔티티 클래스 생성:
package com.example.myapp.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String email;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
@Entity
어노테이션을 사용하여 이 클래스가 JPA 엔티티임을 나타냅니다.@Id
와@GeneratedValue
는 기본 키와 자동 생성 전략을 설정합니다.
- Repository 인터페이스 생성:
package com.example.myapp.repository;
import com.example.myapp.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
JpaRepository
를 상속받아 CRUD 작업을 자동으로 제공합니다.
- Service 클래스 생성:
package com.example.myapp.service;
import com.example.myapp.model.User;
import com.example.myapp.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User saveUser(User user) {
return userRepository.save(user);
}
public List<User> getAllUsers() {
return userRepository.findAll();
}
public Optional<User> getUserById(Long id) {
return userRepository.findById(id);
}
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
}
@Service
어노테이션을 사용하여 서비스 클래스를 정의합니다.
- Controller 클래스 생성:
package com.example.myapp.controller;
import com.example.myapp.model.User;
import com.example.myapp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
User createdUser = userService.saveUser(user);
return ResponseEntity.ok(createdUser);
}
@GetMapping
public ResponseEntity<List<User>> getAllUsers() {
List<User> users = userService.getAllUsers();
return ResponseEntity.ok(users);
}
@GetMapping("/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
Optional<User> user = userService.getUserById(id);
return user.map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
return ResponseEntity.noContent().build();
}
}
@RestController
와@RequestMapping
을 사용하여 RESTful API 엔드포인트를 정의합니다.
5. 애플리케이션 실행
이제 모든 설정이 완료되었습니다. Spring Boot 애플리케이션을 실행하고, PostgreSQL 데이터베이스와 연결이 잘 되는지 확인해보겠습니다.
애플리케이션 실행: IDE에서
MyappApplication
클래스를 실행하거나 터미널에서mvn spring-boot:run
명령어를 실행하여 애플리케이션을 실행합니다.테스트: Postman 또는 cURL을 사용하여 API 엔드포인트를 테스트합니다.
사용자 생성:
curl -X POST http://localhost:8080/users -H "Content-Type: application/json" -d '{"username":"john_doe","email":"john@example.com"}'
모든 사용자 조회:
curl http://localhost:8080/users
특정 사용자 조회:
curl http://localhost:8080/users/1
사용자 삭제:
curl -X DELETE http://localhost:8080/users/1
6. 발생할 수 있는 에러 및 해결책
'Study Information Technology' 카테고리의 다른 글
Spring Boot와 Spring Cloud 현대 마이크로서비스 아키텍처의 핵심 (0) | 2024.08.13 |
---|---|
Spring Boot Starter로 Spring Boot 애플리케이션 시작하기 (0) | 2024.08.13 |
Spring Boot와 Maven을 활용한 개발의 모든 것 (0) | 2024.08.13 |
Spring Boot와 MySQL 연동 완벽 가이드 (0) | 2024.08.13 |
Spring Boot와 Gradle 완벽한 조합 (0) | 2024.08.13 |