스프링 Spring
13. Spring Boot에서 JPA를 활용한 CRUD 구현
안녕하세요! 태마입니다.
Spring 기초 강좌입니다.
강좌의 경우
1. 주제 간단 정리
2. 상세 주제 정리
으로 이루어져 있습니다.
스프링 Spring
포스팅 시작하겠습니다 :)
1. 주제 간단 정리
1. JPA(Java Persistence API)란?
✔ JPA는 Java 애플리케이션에서 관계형 데이터베이스를 객체 지향적으로 다룰 수 있도록 하는 ORM(Object-Relational Mapping) 기술
✔ Spring Data JPA는 JPA를 쉽게 사용할 수 있도록 도와주는 라이브러리
📌 JPA의 주요 개념
Entity | 데이터베이스 테이블과 매핑되는 클래스 |
Repository | CRUD 기능을 제공하는 데이터 접근 계층 |
Persistence Context | 엔티티의 상태를 관리하는 영속성 컨텍스트 |
JPQL (Java Persistence Query Language) | SQL이 아닌 객체 지향 쿼리 사용 가능 |
📌 JPA를 사용하면 "객체를 통해 데이터베이스를 다룰 수 있으며, 유지보수가 쉬워짐"
2. 프로젝트 설정 – JPA & MySQL 연동
✔ Spring Boot 프로젝트에 JPA와 MySQL을 설정하는 과정
📌 1️⃣ build.gradle 설정
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'mysql:mysql-connector-java'
}
✔ JPA와 MySQL 드라이버 추가
📌 2️⃣ application.properties 설정
spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
✔ MySQL 연결 설정 및 Hibernate 설정 추가
📌 Spring Boot는 "자동으로 데이터베이스와 연결되며, 기본적인 CRUD 기능을 제공"
3. JPA를 활용한 CRUD 구현을 위한 Entity 클래스 작성
✔ JPA에서는 @Entity를 사용하여 테이블과 매핑되는 클래스를 생성
📌 User 엔티티 생성
import jakarta.persistence.*;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
protected User() {}
public User(String name, String email) {
this.name = name;
this.email = email;
}
// Getter & Setter
}
✔ @Entity를 사용하여 데이터베이스 테이블과 연결
✔ @Id, @GeneratedValue를 사용하여 기본 키 설정
📌 JPA를 사용하면 "테이블을 직접 다루지 않고도 객체를 통해 데이터를 저장 및 조회 가능"
✅ 여기까지 JPA의 개념과 기본적인 프로젝트 설정을 배웠습니다!
👉 "그렇다면, JPA를 활용하여 CRUD 기능을 구현하는 방법은?"
✅ 2부에서 JPA를 활용한 CRUD 기능을 구현하고 API로 제공하는 방법을 배워봅시다!
2. 상세 주제 정리
1. Repository를 활용한 CRUD 기능 구현
✔ Spring Data JPA에서는 JpaRepository 인터페이스를 상속하면 자동으로 CRUD 기능을 제공
📌 UserRepository 생성
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
✔ 기본적인 CRUD 메서드(save, findById, findAll, delete)를 자동으로 지원
📌 JPA를 사용하면 "별도의 SQL 작성 없이도 기본적인 데이터 조작이 가능"
2. Service 계층을 활용하여 비즈니스 로직 구현
✔ Service 계층에서 Repository를 사용하여 CRUD 기능을 수행
📌 UserService 구현
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(String name, String email) {
return userRepository.save(new User(name, email));
}
public User getUser(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException("User not found"));
}
public List<User> getAllUsers() {
return userRepository.findAll();
}
public User updateUser(Long id, String name, String email) {
User user = getUser(id);
user.setName(name);
user.setEmail(email);
return userRepository.save(user);
}
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
}
✔ 서비스 계층을 분리하여 유지보수를 쉽게 함
📌 Service 계층을 사용하면 "비즈니스 로직과 데이터 접근 로직을 분리하여 관리 가능"
3. REST API 컨트롤러 구현
✔ Controller에서 Service 계층을 사용하여 CRUD API 제공
📌 UserController 생성
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
return ResponseEntity.ok(userService.createUser(user.getName(), user.getEmail()));
}
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
return ResponseEntity.ok(userService.getUser(id));
}
@GetMapping
public ResponseEntity<List<User>> getAllUsers() {
return ResponseEntity.ok(userService.getAllUsers());
}
@PutMapping("/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {
return ResponseEntity.ok(userService.updateUser(id, user.getName(), user.getEmail()));
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
return ResponseEntity.noContent().build();
}
}
✔ RESTful API를 통해 CRUD 기능을 클라이언트에서 사용할 수 있도록 제공
📌 Spring Boot의 REST API를 활용하면 "쉽고 빠르게 CRUD 기능을 제공 가능"
4. JPA를 활용한 CRUD 테스트
✔ Postman 또는 cURL을 사용하여 API 요청 테스트 가능
📌 사용자 생성 요청 (POST 요청)
POST /users
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com"
}
📌 사용자 조회 요청 (GET 요청)
GET /users/1
📌 사용자 목록 조회 (GET 요청)
GET /users
📌 사용자 정보 수정 (PUT 요청)
PUT /users/1
Content-Type: application/json
{
"name": "Updated Name",
"email": "updated@example.com"
}
📌 사용자 삭제 요청 (DELETE 요청)
DELETE /users/1
📌 JPA를 활용한 CRUD API를 사용하면 "데이터를 쉽게 저장, 조회, 수정, 삭제 가능"
✅ 여기까지 JPA를 활용한 CRUD 구현 방법을 배웠습니다!
👉 "그렇다면, Spring Boot에서 Redis를 활용한 캐싱(Cache) 전략은 어떻게 할까?"
✅ 다음 회차에서 Spring Boot에서 Redis를 활용한 캐싱(Cache) 전략을 배워봅시다!
'IT Developer > Spring' 카테고리의 다른 글
Spring 기초 <15. Spring Batch – 대용량 데이터 처리 및 배치 작업 구현> (0) | 2025.04.01 |
---|---|
Spring 기초 <14. Spring Boot에서 Redis를 활용한 캐싱(Cache) 전략> (1) | 2025.03.31 |
Spring 기초 <12. Spring에서 트랜잭션(Transaction) 관리 (@Transactional 활용법)> (0) | 2025.03.29 |
Spring 기초 <11. Spring Data JPA vs MyBatis 차이 및 선택 기준> (1) | 2025.03.28 |
Spring 기초 <10. Spring에서 CORS 설정 및 글로벌 예외 처리 (Exception Handling)> (0) | 2025.03.27 |
Spring 기초 <9. Spring에서 DTO, Entity, VO의 차이 및 실무 적용법> (0) | 2025.03.26 |
Spring 기초 <8. Spring에서 RequestParam vs PathVariable 차이점> (0) | 2025.03.25 |
Spring 기초 <7. Spring Boot에서 REST API 개발 (GET, POST, PUT, DELETE)> (0) | 2025.03.24 |