안녕하세요 오늘은 스프링부트를 이용해서 RESTful API 작성 해보겠습니다.
이 글을 통해 기본적인 데이터베이스 연결 및 JPA 사용 api 구현등 가장 중요한 부분들을 살펴 보겠습니다.
바로 시작하겠습니다.
1. Spring Boot 프로젝트 설정:
Spring Initializer(start.spring.io)를 사용하여 새 프로젝트를 만들고
"Spring Web" 및 "Spring Data JPA", "postgresql"와 같은 필요한 종속 항목을 선택합니다.
저는 db를 postgres로 사용하였지만 자유롭게 쓰고 싶은 db를 사용하시면 됩니다.
아 참고로 db 세팅이 궁금하시다면 다음 링크에서 작성해놓았습니다.
https://rhgustmfrh.tistory.com/category/DB
다음은 전체적인 프로젝트 구조입니다.
2. 데이터 모델 정의:
데이터를 나타내는 Java 클래스를 만들고 @Entity, @Id 및 @Column과 같은 JPA 주석으로 주석을 답니다.
package com.example.demo.data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.math.BigDecimal;
@Entity
@Getter
@Setter
@ToString
public class HSData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private BigDecimal price;
}
간단하게 이름과 가격으로만 이루어진 엔티티 입니다.
3. 데이터 베이스 구성:
application.properties 파일에 데이터 베이스 구성을 추가하고 데이터 베이스 url, 사용자 이름 및 암호를 지정합니다.
저는 파일 확장자를 application.yml로 바꾸고 다음과 같이 작성했습니다.
server:
port: 8000
servlet:
encoding:
charset: UTF-8
enabled: true
force: true
logging:
level:
root: debug
org:
hibernate:
SQL: DEBUG
spring:
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:5432/DB이름
username: db사용자이름
password: db비밀번호
devtools:
livereload:
enabled: true
jpa:
show_sql: true
properties:
hibernate:
hbm2ddl:
auto: none
format_sql: true
4. 리포지토리 구현:
package com.example.demo.repository;
import com.example.demo.data.HSData;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface HSRepository extends JpaRepository<HSData, Long> {
Optional<HSData> findById(Long id);
}
기본적인 리파지토리입니다.
서비스는 생략하겠습니다.
5. REST 컨트롤러 정의:
api에 대한 엔드포인트를 정의하는 @RestController 주석이 달린 클래스를 만듭니다.
@GetMapping, @PostMapping, @PutMapping 및 @DeleteMapping을 사용하여 다양한 HTTP 메서드를 처리합니다.
package com.example.demo.controller;
import com.example.demo.data.HSData;
import com.example.demo.repository.HSRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@RestController
@CrossOrigin
public class HSDataController {
private static final Logger logger
= LoggerFactory.getLogger(HSDataController.class);
private final HSRepository hsRepository;
public HSDataController(HSRepository hsRepository) {
this.hsRepository = hsRepository;
}
// html form 요청시
// @GetMapping("/")
// public String findAll() {
// logger.info("로그 왜 안찍혀");
//
// return "index.html";
// }
//
// @PostMapping("/insert")
// @ResponseBody
// public HSData create(@ModelAttribute HSData hsdata) {
// logger.info("포스트 = {}, {}", hsdata.getName(), hsdata.getPrice());
//
// return hsRepository.save(hsdata);
// }
//
//
//
// @PutMapping("/update/{id}")
// @ResponseBody
// public HSData updata(@PathVariable Long id, @ModelAttribute HSData hsdata) {
// hsdata.setId(id);
//
// return hsRepository.save(hsdata);
// }
//
// @DeleteMapping("/delete/{id}")
// @ResponseBody
// public void delete(@PathVariable Long id) {
// hsRepository.deleteById(id);
// }
// API 사용시
@GetMapping("/")
public List<HSData> findAll() {
return hsRepository.findAll();
}
@GetMapping("/{id}")
public Optional<HSData> find(@PathVariable Long id) {
return hsRepository.findById(id);
}
@PostMapping("/insert")
public HSData create(@RequestBody HSData hsdata) {
return hsRepository.save(hsdata);
}
@PutMapping("/update/{id}")
public HSData update(@PathVariable Long id, @RequestBody HSData hsdata ) {
hsdata.setId(id);
return hsRepository.save(hsdata);
}
@DeleteMapping("/delete/{id}")
public void delete(@PathVariable Long id) {
hsRepository.deleteById(id);
}
}
주석된 부분과 같이 MVC 패턴의 form으로 데이터를 전송하는 방법
밑에 처럼 api를 사용하는 방법이 있습니다.
6. API 테스트 :
Postman 또는 유사한 도구를 사용하여 API를 테스트하고 예상 데이터를 반환하는지 확인합니다.
6번까지의 과정을 마치셨다면 기본적인 api를 작성할 수 있습니다.
이 기본을 심화하면 웹에서 대부분의 비즈니스 로직을 만들 수 있습니다.
감사합니다.
'스프링부트' 카테고리의 다른 글
Spring에서 RabbitMQ를 사용하여 데이터를 받아보자 (0) | 2023.10.14 |
---|---|
Spring WebFlux의 WebClient를 사용하여 비동기, 논블로킹 방식으로 HTTP 요청을 보내보자 (0) | 2023.10.14 |
Spring WebFlux 알아보기 - Mono 예제 (0) | 2023.09.01 |
Spring WebFlux 시작하기 - 리액티브 웹 애플리케이션 개발과 R2DBC 소개 (2) | 2023.08.21 |
스프링 클라우드 데이터 플로우(SCDF)를 활용한 무중단 서비스 구축: 소스, 프로세서, 싱크 어플리케이션 스트림 통합 및 배포 (3) (1) | 2023.06.12 |
댓글