Spring Boot + Spring Data JPA + PostgreSQL 연동 및 기본 CRUD 구현 예제

너무 기본적인 내용이지만 초보 개발자나 Spring Boot, JPA 설정 경험이 없는 개발자에게는 도움이 될 것입니다. Spring Initialzr를 이용한 Spring Boot 프로젝트 생성과 JDK 설치는 사전에 준비되어야 합니다. 

Spring Boot 환경에서 DB 연결과 JPA를 이용한 기본 CRUD에 집중하기 위해 최소한의 설정과 최소한의 소스 코드 만으로만 진행하였습니다.


1. 라이브러리 의존성 추가

build.gradle에 아래와 같이 3개의 의존성 추가

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'org.postgresql:postgresql'
}


2. DB 연결 정보 및 JPA 설정 정보 추가

application.properties 설정

# PostgreSQL 설정
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=0000
# Spring Boot 2.0 이상은 DB 의존성만 추가되면 자동 설정됨
#spring.datasource.driver-class-name=org.postgresql.Driver

# JPA 설정
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
# Spring Boot 2.0 이상은 DB 의존성만 추가되면 자동 설정됨
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect


3. Entity 클래스 생성

User.java 생성

package com.example.demo.user.model;

import jakarta.persistence.*;

@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false)
private String name;

@Column(unique = true, nullable = false)
private String email;

public User() {
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

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

public String getEmail() {
return email;
}

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


4. Repository 클래스 생성

UserRepository.java 생성

package com.example.demo.user.repository;

import com.example.demo.user.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}


5. Service 클래스 생성

UserService.java 생성

package com.example.demo.user.service;

import com.example.demo.user.model.User;
import com.example.demo.user.repository.UserRepository;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

private final UserRepository userRepository;

public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}

public User createUser(User user) {
return userRepository.save(user);
}

public List<User> getAllUsers() {
return userRepository.findAll();
}

public User updateUser(Long id, User updatedUser) {
User user = userRepository.findById(id).orElseThrow();
user.setName(updatedUser.getName());
user.setEmail(updatedUser.getEmail());
return userRepository.save(user);
}

public void deleteUser(Long id) {
userRepository.deleteById(id);
}

}


6. Controller 클래스 생성

UserController.java 생성

package com.example.demo.user.controller;

import com.example.demo.user.model.User;
import com.example.demo.user.service.UserService;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {

private final UserService userService;

public UserController(UserService userService) {
this.userService = userService;
}

@PostMapping
public User createUser(@RequestBody User user) {
return userService.createUser(user);
}

@GetMapping
public List<User> getAllUsers() {
return userService.getAllUsers();
}

@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User updatedUser) {
return userService.updateUser(id, updatedUser);
}

@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
}

}


7. 테스트

1. Spring Boot Application 실행

2. Postman Desktop App 설치

    * Web버전도 있지만 Web버전에서는 localhost로의 접속이 불가능

3. Postman Desktop App에서 API별로 테스트

사용자 생성 테스트

전체 사용자 조회 테스트

사용자 수정 테스트


사용자 삭제 테스트


참고자료

ㆍSpring Data JPA 공식문서 : https://spring.io/projects/spring-data-jpa


마무리

뭔가 좀 부족하고, 빠진 것 같지만 그래도 최소한의 필요한 것들은 다 넣었습니다. 최소한의 소스 코드와 설정만 있기 때문에 처음 공부하기에는 괜찮은 예제라고 생각합니다. 학습하시는데 조금이라도 도움이 되면 좋겠네요.


댓글 쓰기

다음 이전