본문 바로가기
스프링부트

Java 스프링부트를 이용한 RESTful API 작성하기: JPA와 데이터베이스를 사용한 api 기본 예제

by 플라퉁 2023. 9. 27.
728x90
반응형

 

 

 

안녕하세요 오늘은 스프링부트를 이용해서 RESTful API 작성 해보겠습니다. 

 

이 글을 통해 기본적인 데이터베이스 연결 및 JPA 사용 api 구현등 가장 중요한 부분들을 살펴 보겠습니다.

 

 

바로 시작하겠습니다.

 

 

 

1.  Spring Boot 프로젝트 설정: 

 

Spring Initializer(start.spring.io)를 사용하여 새 프로젝트를 만들고

 

https://start.spring.io/

 

"Spring Web" 및 "Spring Data JPA", "postgresql"와 같은 필요한 종속 항목을 선택합니다.

저는 db를 postgres로 사용하였지만 자유롭게 쓰고 싶은 db를 사용하시면 됩니다.

 

아 참고로 db 세팅이 궁금하시다면 다음 링크에서 작성해놓았습니다.

 

https://rhgustmfrh.tistory.com/category/DB

 

'DB' 카테고리의 글 목록

개발 공부 블로그 (틀린 내용이 있으면 피드백 주세요)

rhgustmfrh.tistory.com

 

 

 

 

 

다음은 전체적인 프로젝트 구조입니다.

 

 

 

 

 

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를 작성할 수 있습니다.

이 기본을 심화하면 웹에서 대부분의 비즈니스 로직을 만들 수 있습니다.

 

감사합니다.

 

 

 

 

 

728x90
반응형

댓글