점프 투 스프링부트를 참고하여 학습,작성하였습니다.
1.의존성
REST API구현을 위한 SpringBoot의 의존성을 pom.xml에 추가해준다.
<!--JPA-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--h2-->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 웹 애플리케이션,RESTful 의존성-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
1-1.spring-boot-starter-web
Spring MVC와 내장된 Tomcat을 포함하여 웹 애플리케이션을 개발하기 위한 기본적인 의존성을 제공
Spring MVC를 이용하여 웹 애플리케이션의 요청과 응답을 처리할수있다.
내장된 Tomcat 서버를 이용하여 웹 애플리케이션을 실행할 수 있다.
웹 애플리케이션을 구성하는 데 필요한 주요 기능들을 포함하고 있다.
1-2. spring-boot-starter-data-jpa
Spring Data JPA를 사용하여 데이터베이스와의 상호 작용을 간소화한 데이터 접근 계층을 구현을 제공
Java Persistence API (JPA)를 이용하여 객체와 관계형 데이터베이스 간의 매핑을 지원
Hibernate 등의 JPA 구현체를 자동으로 설정하고, 데이터베이스 접근을 쉽게 구현할 수 있도록 돕는다.
CRUD (Create, Read, Update, Delete) 기능을 포함하여 데이터베이스 조작을 간편하게 할 수 있다.
1-3.com.h2database
개발 및 테스트 목적으로 내장된 인메모리 데이터베이스(H2)를 사용하기 위한 의존성을 제공
데이터베이스 설정이 필요 없어 개발 초기 단계에서 빠르게 개발가능
2.모델(엔터티) 생성
PA 엔터티 클래스를 작성한다.
@Getter
@Setter
@Entity
public class Question {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(length = 200)
private String subject;
@Column(columnDefinition = "TEXT")
private String content;
private LocalDateTime createDate;
private LocalDateTime modifyDate;
}
3.리포지토리 작성
리포지토리 인터페이스는 Spring Data JPA로 자동으로 생성할것이므로 내부에 따로 사용자 정의 인터페이스는 만들지않는다.
package com.example.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.model.Question;
public interface QuestionRepository extends JpaRepository<Question, Integer> {
}
4.서비스 작성
private final QuestionRepository questionRepository;을 통해 QuestionRepository빈을 ApiService 클래스에 주입한다.
그후 Spring Data JPA는 메소드 이름으로 쿼리를 생성하므로 별도의 메소드 작성없이 이를 통해 이름으로 자동으로 생성,제공되는 메소드를 만들어서 findAll()메소드와findById()메소드를 사용한다.
package com.example.service;
import org.springframework.stereotype.Service;
import com.example.model.Question;
import com.example.repository.QuestionRepository;
import lombok.RequiredArgsConstructor;
import java.util.List;
import java.util.Optional;
@Service
@RequiredArgsConstructor
public class ApiService {
private final QuestionRepository questionRepository;
public List<Question> getAllQuestions() {
return questionRepository.findAll();
}
public Optional<Question> getQuestionById(Integer id) {
return questionRepository.findById(id);
}
}
5.컨트롤러 @RESTController
@RestController는 Spring Framework에서 제공하는 애노테이션으로, RESTful 웹 서비스를 만들기 위해 사용된다.
@Controller와 @ResponseBody 애노테이션을 결합한 형태로, 클래스의 모든 핸들러 메서드가 RESTful 웹 서비스의 엔드포인트로 동작하게된다.
메서드가 반환하는 객체를 자동으로 JSON 또는 XML 형태로 변환하여 HTTP 응답 본문으로 반환한다.
@PathVariable는 URL 경로의 변수 값을 메서드 파라미터로 전달하기 위해 사용한다.
package com.example.controller;
import com.example.model.*;
import com.example.service.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import lombok.RequiredArgsConstructor;
import java.util.List;
import java.util.Optional;
@RequiredArgsConstructor
@RestController //RestController임을 명시한다.
@RequestMapping("/api") // 리소스
public class ApiController {
private final ApiService apiService;
@GetMapping
public List<Question> getAllQuestions() {
return apiService.getAllQuestions();
}
@GetMapping("/{id}")
public Optional<Question> getQuestionById(@PathVariable Integer id) {
return apiService.getQuestionById(id);
}
}
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─example
│ │ │ │ DemoApplication.java
│ │ │ │
│ │ │ ├─controller
│ │ │ │ ApiController.java
│ │ │ │
│ │ │ ├─model
│ │ │ │ Question.java
│ │ │ │
│ │ │ ├─repository
│ │ │ │ QuestionRepository.java
│ │ │ │
│ │ │ └─service
│ │ │ ApiService.java
6.GET해보기
POSTMAN을 통해 정상적으로 JSON 형식으로 반환되는지 확인한다.
'BackEnd > SpringBoot' 카테고리의 다른 글
[SpringBoot] 경매장 프로젝트 구상#0 (2) | 2024.09.28 |
---|---|
[Spring Boot] 포스트맨(Postman) 사용하기 (0) | 2024.07.09 |
[Spring Boot] REST API란? (0) | 2024.07.09 |