곧죽어도 콛잉

[Spring] Spring Boot 컨트롤러와 Rest API 본문

Spring/기본

[Spring] Spring Boot 컨트롤러와 Rest API

코드진행형 2023. 6. 16. 08:15

SW 아키텍처

  • 코드 개발 전에 최종 SW가 돼야할 모습을 설계
  • SW의 구조를 정의한 것으로, SW를 구성하는 주요 요소들과 요소들의 관계를 정의한 것

SW 아키텍처/ 디자인패턴

  • 특성 상황의 문제를 해결하기 위한 일반화된 솔루션

계층형 아키텍처 패턴

  • 웹 서비스 개발에 주로 사용되는 패턴
  • SW를 서로 다른 역할을 하는 3 ~ 4개 계층으로 구분
    • Presentation Layer
    • Application Layer
    • Business Layer
    • Data Access Layer
  • 계층 간 호출을 하고 데이터를 주고 받으며 협력하며 전체 웹서비스를 구성함
  • Controller, Service, Repository의 구조로 이뤄짐

Spring Boot Application의 구조

Spring Controller

  • 계층형 아키텍처의 Presentation Layer에 해당함
  • Client(웹 브라우저, 모바일 앱)의 요청을 받고, Application Layer에 요청에 대한 처리를 위임하며,
  • Client에 최종 응답을 하는 역할
    • view : Client가 요청에 대한 응답의 결과로 보게 되는 웹페이지 (웹페이지도 사실 html의 데이터)
    • data : Client가 요청에 대한 응답으로 받는 데이터

Controller 코드

  • Controller 구현을 위해 3개의 기본 Annotation이 사용됨
  • @Controller와 @RestController
    • Controller 역할을 하는 클래스를 지정, 클래스 상단에 명시
  • @RequestMapping
    • 특정 Request를 처리하는 메소드를 지정, 클래스 또는 메소드 상단에 명시

Annotation이란?

⇒ Java 소스코드에 추가적인 정보를 제공하는 방법. @로 시작하며 클래스, 메소드, 멤버변수 ,파라미터 등에 부착 가능.

⇒ 자바 컴파일러에게 정보를 제공 / SW 툴에 사용되어 코드 생성이나 추가작업을 진행(Controller Code의 annotation) / run-time 시 특정 동작을 추가적으로 실행

  • Framework의 활용은 규칙을 지키는 것. 약속된 Annotation을 Spring Framework가 스캔함.
  • Annotation이 부착된 코드들은 Spring Framework에 관리되며, Spring Framework에 의해서 특정한 목적으로 사용됨.
  • @Controller vs @RestController
    • 대부분 동작 유사(요청을 받아 처리하고 응답)
    • 응답하는 형태가 다름.
      • Controller : View를 응답(html 파일 등)
      • RestController : data를 응답(문자열, json, xml 등)

@RestController

  • 메소드를 요청하여 hello라는 문자열이라는 데이터를 반환받음.
  • RestContorller는 데이터를 반환한다!

@Controller

  • hello request 시, hello라는 문자열이 아닌, hello라는 view의 이름(html 등)을 의미하고, view의 파일을 응답함.
  • resources/templates/hello.html이 응답됨.

@RequestMapping

  • RequestMapping이 붙어있는 메소드는 Clinet의 특정 요청이 왔을 때 Spring Framework에 의해 호출됨
  • RequestMapping이 붙어있는 메소드가 여러개 일때는, 기본 도메인에 이어지는 ‘/path’로 결정.

URI (Uniform Resource Identifier)

  • URL(Uniform Resource Locator)과 유사. URI가 더 넓은 개념
  • 특정한 자원에 접근하기 위한 이름 또는 주소
  • 웹 상의 모든 자원들은 URI를 갖고 있음.
    • 웹 페이지, 이미지, 영상

RequestMapping과 URI

  • Spring Controller의 메소드들은 URI에 의해 호출이 결정됨
  • 기본 도메인에 이어지는 ‘/path’들에 의해 결정
  • RequestMapping Annotation에 URI 정보를 명시
    • @RequestMapping(value = “/user”)
  • framework가 path에 따라 어느 메소드를 호출해야할지 결정함!
  • 기본 도메인에 이어지는 URI Path 정보를 기반으로 Client의 요청을 특정 메소드에 전달

URI의 활용

  • URI는 요청하는 자원의 종류에 따라 이름을 정함. 계층 관계로 표현 가능하며, ‘/’로 구분이 가능함.
  • 이러한 URI의 path을 정하는 것 자체가 API를 설계한다고 함.
  • 단일 웹 애플리케이션 내에서 URI는 중복될 수 없음!
    • 중복 시 에러 발생
  • 네이밍 규약
    • 소문자를 사용
    • 요청하는 자원에 대한 명사 형태로 작성
    • 두 단어 이상 연결될 경우 ‘-’를 사용
    • 의미있는 이름으로 일관성 있게 작성

Controller 클래스에 RequestMapping 활용

@Controller
public class TodoPageController {
    @RequestMapping(value = "/path")
    public String getTodoListView() {
        return "todo";
    }
}

클래스 상단에 RequestMapping을 붙여서 path를 정함.

API(Application Programming Interface)

  • Interface란 두 개체 간의 정보를 공유하기 위한 방법(규약)
  • API는 컴퓨터(프로그램)간의 정보를 공유하기 위한 방법
    • 함수나 메소드를 호출하는 형식의 API
    • HTTP등의 기술로 네트워크를 통한 원격 자원을 호출하는 API

HTTP API vs REST API

  • HTTP(S)를 활용해 원격의 데이터를 공유하기 위한 API
  • REST API
    • (Roy Fielding) REpresentational State Transfer
    • 웹 상에서 효율적으로 데이터 공유하기 위한 아키텍처 스타일
    • 다양한 조건이 만족돼야하며, 실무에서 모든 조건을 만족하여 구현하기는 어려움.
  • HTTP API와 REST API는 실무에서 혼용하여 사용. 주로 REST API 명칭이 사용되어 엄밀하게는 서로 다른 개념.
  • @RestController Annotation은 REST API(HTTP API)를 위한 클래스를 명시하는 것.
Comments