이 영역을 누르면 첫 페이지로 이동
일반인의 웹 개발일기 블로그의 첫 페이지로 이동

일반인의 웹 개발일기

페이지 맨 위로 올라가기

일반인의 웹 개발일기

웹 개발과 관련된 모든 이야기

[Spring Boot] Java RESTful API 만들어서 GET, POST 호출 해보기

  • 2022.12.01 11:52
  • 개발 이야기/Spring Boot
반응형

이전 글에서 이클립스(Eclipse)를 설치하고

Spring Boot 설정 및 프로젝트 생성까지 해봤는데

 

이번에는 Java, Gradle 빌드 기반으로

RESTful API를 한번 만들어 보겠다.

 

그전에 간략하게

REST란 무엇인가에 대한 설명을 하자면

 

REST
REpresentational State Transfer의 약자로, 분산형 하이퍼미디어 시스템을 위한 아키텍처

 

REST 아키텍처의 구성요소

1. 자원 (Resource) - URI

  • 모든 자원은 고유의 ID가 있고, HTTP URI로 표현한다.
  • 클라이언트는 URI를 이용해서 자원을 지정하고 해당 자원을 조작하기 위해 서버로 요청한다.

2. 행위 (Verb) - Method

  • HTTP 프로토콜의 Method를 사용하고 GET/POST/PUT/PATCH/DLEETE 메소드가 있다.

3. 표현(Representation)

  • 클라이언트와 서버가 데이터를 주고 받을 때 JSON, XML, TEXT 등이 있다.

 

클라이언트는 특정 자원을 조작하기 위해

URI를 이용해서 자원을 지정하면

 

서버는 클라이언트가 지정한 자원을 조작하며

 

클라이언트는 서버로부터 자원의 상태를 응답받는다.

 

REST 아키텍처의 6가지 특징

1. 통일된 인터페이스 (Uniform Interface)

  • 자원에 대한 요청이 통일되어 있어 HTTP 표준 프로토콜에 따른다면 언어나 기술에 종속되지 않는다.

2. 무상태 (Stateless)

  • HTTP 프로토콜과 동일하게 무상태의 특성이 있다.

3. 캐시 처리 가능 (Cacheable)

  • HTTP가 가진 캐싱 기능을 적용할 수 있다.
  • 대량의 요청을 효율적으로 처리할 수 있다.

4. 계층화 (Layered System)

  • 보안, 로드밸런싱, 암호화 등 계층을 추가하여 구조 변경이 가능하다.
  • API Gateway, Proxy 사용이 가능하다.

5. 클라이언트-서버 구조 (Client-Server)

  • 서버와 클라이언트로 구분되어 있고 각 역할이 명확하고 서로 간의 의존성이 줄어든다.

6. 자체 표현 구조

  • 자체 표현 구조로 되어 있어 메소드 자체가 무슨 행위를 하는지 알 수 있다.

 

REST 장점

  1. 클라이언트-서버 구조이고 무상태(Stateless) 특징에 따라서 클라이언트의 Context를 유지할 필요가 없다.
  2. 응답 데이터의 표현을 JSON, XML 등 원하는 언어로 표현이 가능하다.
  3. 웹의 기술과 HTTP 프로토콜의 인프라를 그대로 사용하기 때문에 별도의 작업이 들어가지 않는다.

REST 단점

  1. 설계 가이드만 있을 뿐 표준이 없다.
  2. 쉽게 사용이 가능하지만 메소드 형태가 제한적이다.

 


간단하게 REST의 구성요소와

장단점에 대해 알아보았으니

이제 RESTful API를 실제로 구현해보자!

 

1. Spring Boot Starter 추가하기

1-1. Starter에서 Spring Web dependency 추가하기

프로젝트를 생성할 때

Starter Project Dependencies를 선택할 수 있다.

 

검색창에 "web"이라고 검색하면

Web영역 하위에 Spring Web을

체크해주면 된다.

Spring Boot Starter

상단에 build.gradle에 체크해주고

Finish 버튼을 눌러 완료하게 되면

spring-boot-starter-web이 추가되었다.

 

만약 이미 생성한 프로젝트라면

프로젝트 마우스 우클릭해서

Spring > Add Starters 클릭하면 된다.

Spring Add Starters

 

build.gradle 파일을 열어

직접 dependency를 추가할 수도 있다.

build.gradle

 

이제 아주 간단하게

웹 개발 환경이 구성되었다..😊

 

2. RESTful API 만들기

2-1. Controller, Service 생성하기

기본적으로 MVC 모델로 진행하며

 

폴더 구조는 간단하게

아래와 같이 구성했다.

폴더 구조

 

DemoController.java 파일을 생성하고

상단에 @RestController만 붙여주면

 

Controller 생성 완료!

package com.example.demo.api.controller;

import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

}

 

Service도 생성해보자.

마찬가지로 상단에 @Service만 붙여주면

 

Service 생성 완료!

package com.example.demo.api.service;

import org.springframework.stereotype.Service;

@Service
public class DemoService {

}

 

2-2. Controller에 GET, POST 방식으로 API 만들기

우선 서버가 정상적으로 실행이 되고 있는지

확인 차 간단한 문자열 반환하는 GET API를 만들어봤다.

 

DemoController.java에 아래와 같이 코드 추가하면 된다.

package com.example.demo.api.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {
	
	@GetMapping("/demo")
	public String demo () {
		return "demo";
	}
	
}

 

서버 실행은 프로젝트 마우스 우클릭

Run As > Spring Boot App 클릭하면

실행 가능하다.

 

서버를 실행해서

브라우저를 이용해서 접속하거나

postman을 사용해서 호출하게 되면

 

demo라고 잘 반환하고 있다.

(기본적으로 포트는 8080)

/demo 호출

이번엔 Cotroller에서

Service를 한번 호출해보자.

 

2-3. Service 호출하기

DemoService를 @Autowired를 통해

의존성 주입해주고

 

Get, Post 메소드를 호출하면

DemoService를 호출해서 문자열을

받아오도록 한다. 

package com.example.demo.api.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.api.service.DemoService;

@RestController
public class DemoController {
	
	@Autowired
	private DemoService demoService;
	
	@GetMapping("/demo")
	public String getDemo () {
		String demo = demoService.getDemo();
		
		return demo;
	}
	
	@PostMapping("/demo")
	public String postDemo () {
		String demo = demoService.getDemo();
		
		return demo;
	}
	
}

 

DemoService에 getDemo 메소드를 만들어 주고

"service demo!" 문자열을 반환한다.

package com.example.demo.api.service;

import org.springframework.stereotype.Service;

@Service
public class DemoService {

	public String getDemo() {
		return "service demo!";
	}

}

 

3. GET, POST 방식으로 RESTful API 호출하기

역시나 GET, POST 방식으로 호출했을 때

"service demo!" 문구가 잘 노출되는 것을

확인할 수 있다.

 

세세한 설명 없이

RESTful API 만들고 호출하는

GET, POST API를 만들어 봤다.

 

이외에도 PUT, DELETE, PATCH 등등 많이 있는데

각 상황에 맞게 만들어서 호출하면 된다.

반응형

'개발 이야기 > Spring Boot' 카테고리의 다른 글

[Spring Boot] CORS Filter 설정하기 (CORS 오류 해결방법) - Java  (0) 2023.07.11
[Spring Boot] 이클립스(Eclipse) 설치 및 스프링 부트(Spring Boot) 사용하기  (0) 2022.11.30

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Spring Boot] CORS Filter 설정하기 (CORS 오류 해결방법) - Java

    [Spring Boot] CORS Filter 설정하기 (CORS 오류 해결방법) - Java

    2023.07.11
  • [Spring Boot] 이클립스(Eclipse) 설치 및 스프링 부트(Spring Boot) 사용하기

    [Spring Boot] 이클립스(Eclipse) 설치 및 스프링 부트(Spring Boot) 사용하기

    2022.11.30
다른 글 더 둘러보기

정보

일반인의 웹 개발일기 블로그의 첫 페이지로 이동

일반인의 웹 개발일기

  • 일반인의 웹 개발일기의 첫 페이지로 이동
반응형

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (47)
    • 사이드 프로젝트 (3)
      • 크롤링 (2)
    • 개발 이야기 (18)
      • MSA (7)
      • Spring Boot (3)
      • JPA (0)
      • Docker (1)
      • Javascript (2)
      • AWS (Amazon Web Services) (5)
      • Jenkins (0)
    • Database (4)
      • PostgreSQL (2)
      • MySQL (1)
      • Oracle (1)
    • 에러 정리 (4)
      • Docker (1)
      • JPA (1)
      • Python (1)
      • PostgreSQL (1)
    • 운영체제 (3)
      • Linux (3)
    • 게임 (8)
      • 마인크래프트(Minecraft) (2)
      • 팰월드(PalWorld) (6)
    • 워킹홀리데이 (6)
      • 일본 워킹 홀리데이 (6)

공지사항

인기 글

최근 글

정보

흔하디흔한개발자의 일반인의 웹 개발일기

일반인의 웹 개발일기

흔하디흔한개발자

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © 흔하디흔한개발자. Designed by Fraccino.

티스토리툴바