환경: MacOS, Spring Tool Suite 4.21.1, Spring Boot 3.3.5, Maven
프로젝트를 하다가 필요한 기능들을 찾아보면 MyBatis로는 구현이 상당히 복잡한데 JPA에선 간단하게 구현할 수 있는 경우가 많았습니다
특히 페이지네이션!
그래서 개인 프로젝트는 JPA로 진행해 보기로 했습니다
구글링을 통해 찾은
Spring Boot + MySQL + Spring Data JPA: A beginner's guide to REST API CRUD operations
이 글을 따라해 보았습니다
익히기 위해 기록용
우선 STS(이클립스)에서 Spring Starter Project를 생성
의존성은 Spring Web, Spring Data JPA, MySQL Driver 등이 필요
내가 추가한 의존성들
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
그 다음은 MySQL에 Users 테이블을 생성
그다음은 application.properties
# Database Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/스키마이름
spring.datasource.username=your_database_username
spring.datasource.password=your_database_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# Hibernate Configuration
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.hibernate.ddl-auto=update 설정이 Spring Boot 애플리케이션이 시작될 때 데이터베이스와 엔티티 클래스 간의 매핑을 관리하는 역할. Hibernate가 자동으로 엔티티 클래스와 데이터베이스 간의 동기화를 관리해 줌
운영 환경에서는 validate나 none을 사용하여 데이터베이스 스키마의 무단 변경을 방지
그다음은 본격적으로 JPA 구현이다
User 엔티티 클래스를 만든다
User.java
import jakarta.persistence.*;
import lombok.Data; //lombok을 사용하면 Data 어노테이션으로 Getter&Setter를 자동 생성 가능
@Data
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
}
그다음은 레포지토리를 생성
이 Repository 인터페이스가 Entity를 위한 CRUD(Create, Read, Update, Delete) 동작을 제공한다고 함
UserRepository.java
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
유저 엔티티 임포트 해야 함
그다음은 서비스 클래스를 생성
UserService.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User createUser(User user) {
return userRepository.save(user);
}
public List<User> getAllUsers() {
return userRepository.findAll();
}
public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}
public User updateUser(Long id, User user) {
user.setId(id);
return userRepository.save(user);
}
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
}
마찬가지로 임포트 해주고
마지막으로 RestController인 UserController를 만든다
UserController.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.sel.echaek.User;
import com.sel.echaek.service.UserService;
import java.util.List;
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public User createUser(@RequestBody User user) {
return userService.createUser(user);
}
@GetMapping
public List<User> getAllUsers() {
return userService.getAllUsers();
}
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
return userService.updateUser(id, user);
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
}
}
이제 서버 run
그 다음은 API 엔드포인트 동작 테스트
엔드포인트란? API 엔드포인트는 클라이언트가 서버에 특정한 요청을 보낼 때 사용하는 URL 경로
이 테스트를 위해 Postman을 사용해 보자
강의 들으면서 짧게 배우고 지나간 툴인데 드디어 쓸 기회가 왔다
Postman은 API 개발 및 테스트를 위해 사용되는 도구로 개발, 테스트, 배포 단계에서 널리 사용됨
먼저 POST(createUser)
Body에서 raw JSON 포맷의 데이터를 넣고 요청을 보내면
이렇게 데이터베이스에 실제로 추가가 되었다
그다음은 GET(getAllUsers)
조회도 잘 된다
그 다음은 GET(getUserById)
파라미터로 id 값만 입력해 주면
원하는 데이티가 나온다
이쯤 되니 신기하다 직접 쿼리를 쓰지도 않았는데 이게 되다니
PUT(updateUser)도 잘된다
마지막으로 DELETE(deleteUser)
엔드포인트 테스트를 성공적으로 마쳤습니다
JPA 흥미롭네
'Back-end' 카테고리의 다른 글
[Spring Boot] STS에서 Maven프로젝트를 JAR 파일로 빌드하기 (0) | 2024.12.04 |
---|---|
[Java] 자바 데이터베이스 연동 기술 JPA vs MyBatis 이해하기 (0) | 2024.11.10 |
[Spring Boot] IntelliJ에서 Maven 프로젝트로 빌드한 JAR 파일을 서버에 배포하기 (1) | 2024.11.06 |
정적인 웹과 동적인 웹의 차이 - static vs dynamic website (1) | 2024.10.29 |
[Spring Boot] 스프링부트에서 SQL 로그 출력하기 - logback, log4jdbc (0) | 2024.10.24 |