Spring Boot 웹 개발 입문 - Spring Boot 컨트롤러와 REST API (1)
728x90

안녕하세요!

항상 나아가는 개발자 pink_salt 입니다!

코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다.

저번에 Web의 기초 개념과 HTML, CSS를 다지고 왔는데요!

이제 Spring Boot 컨트롤러와 REST API에 대해 공부해보도록 하겠습니다.

'Spring Boot 웹 개발 입문'강의를 듣고 공부한 내용을 정리하여 포스팅을 진행하겠습니다.


계층형 아키텍처의 이해(Layered Architecture)

이 부분은 좀 어려울 수 있는 단원입니다.

웹 개발에 대해서 더 배우면서 또 한 번 짚고 가겠습니다.

계층형 아키텍처를 먼저 말하기 전에 SW 아키텍처를 먼저 알아보겠습니다.

SW 아키텍처?

  • SW는 실제 코드 개발 전에 최종 SW가 되어야할 모습을 설계합니다.
  • SW 아키텍처란 SW의 구조를 정의한 것으로 SW를 구성하는 주요 요소들과 요소들의 관계를 정의한 것입니다.

 

SW 아키텍처 / 디자인 패턴

패턴은 되풀이되는 사건이나 물체의 형태로, 예측 가능한 방식으로 되풀이 되는 것을 말합니다.(by 위키피디아)

SW를 이전부터 수많은 사람들이 만들고 고민한 유형이 반복되는 것이 보여서

특정 상황의 문제를 해결하기 위한 일반화된 솔루션을 디자인 패턴이라고 합니다.

ex) 카카오톡과 같은 메신저 서비스 개발을 위한 패턴, 웹 서비스 개발을 위한 패턴, 데이터 분석 시스템 개발을 위한 패턴 등

 

계층형 아케텍처 패턴

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

클라이언트가 요청을 하면 Presentation -> Application -> Data Access Layer를 거쳐 Database로 갑니다.

그리고 다시 그 반대로 요청의 응답이 진행됩니다.

일단은 @Controller부터 작성을 해보면서 진행해보겠습니다.


Spring Controller의 이해

일단 Presentation Controller부터 알아보겠습니다.

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

Controller 코드

  • Spring Controller를 구현하기 위해서는 3개의 기본 Annotation이 사용됩니다.
Annotation?

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

3가지 유형의 Annotation이 있습니다.

1. java complier에게 정보를 제공(에러 등을 찾아내기 위함)
2. SW 툴에 의해 사용되어 코드 생성이나 추가 작업을 진행
3. run-time 시 특정 동작을 추가적으로 실행

2,3번이 Spring에서 자주 사용된다.
  • @Controller@RestController
    • Controller 역할을 하는 클래스를 지정, 클래스 상단에 명시합니다.
  • @RequestMapping
    • 특정 Request를 처리하는 메소드를 지정, 클래스 또는 메소드 상단에 명시합니다.

이 컨트롤러들은 위의 2번 유형의 컨트롤러입니다.

예시로

클래스나 메소드 위에 부착되어 컨트롤러들이 사용되는 것을 볼 수 있습니다.

Framework 활용은 규칙을 지키는 것입니다.

  • 약속된 Annotation들을 Spring Framework가 스캔합니다.
  • Annotation이 부착된 코드들은 Spring Framework에 의해 관리되며, Spring Framework에 의해서 특정한 목적으로 사용됩니다.

 

@Controller vs @RestController

대부분의 동작은 유사합니다. 

이 둘은 요청을 받아서 처리하고 응답합니다.

하지만 응답하는 형태가 다릅니다.

Controller view를 응답합니다.(html파일 등)
RestController data를 응답합니다.(문자열, Json, xml 등)

 

@RestController의 활용

@Controller의 활용

 

 

Controller는 계층형 아키텍처에서 Presentation Layer의 요청과 응답 처리의 역할을 담당한다.

@RequestMapping

  • RequestMapping이 붙어있는 메소드는 Client의 특정 요청이 왔을 때  SpringFramework에 의해 호출됩니다.

RequestMapping이 붙어 있는 메소드가 여러 개 일 때는 어떤 메소드가 호출될까?

일단 URI 개념부터 알아볼게요!

URI (Uniform Resource Identifier)

  • URL과 유사한 개념
  • 특정한 자원에 접근하기 위한 이름 또는 주소
    • ex) https://www.google.com
  • 웹상의 모든 자원들은 URI를 갖고 있습니다.
    • 웹페이지
    • 이미지 -> 이미지도 주소가 있습니다.
    • 영상

 

URI와 Spring RequestMapping

  • Spring Controller의 메소드들은 URI에 따라 호출이 결정됩니다.
  • 기본 도메인에 이어지는 '/path'들에 의해 결정됩니다.
    • ex) http://localhost:8080/user
    • http://localhost:8080/post
    • http://localhost:8080/post/1
  • RequestMapping Annotation에 URI Path 정보를 명시합니다.
    • @RequestMapping(value = "/user")

 

그래서 위의 질문에 답을 하자면

RequestMapping이 붙어 있는 메소드가 여러 개 일 때는 어떤 메소드가 호출될까?

http://localhost:8080/hello로 들어갔을 때 hello 메소드를 처리해서 hello를 출력하고

http://localhost:8080/bye로 들어갔을 때 bye 메소드를 처리해서 bye를 출력합니다.

 

이 과정은 복잡한 처리를 통해 일어나지만 우리는 일단 framework가 대신해준다 생각하고 다음에 과정에 대해 이해해보겠습니다.

 

URI의 활용

  • URI는 요청하는 자원의 종류에 따라 이름을 정합니다.
    • www.codepresso-blog.com/user
    • www.codepresso-blog.com/posts
  • URI는 계층 관계로 표현이 가능하고 '/'로 계층을 구분합니다.
    • www.codepresso-blog.com/user/paid
    • www.codepresso-blog.com/user/enterprise
  • 단일 웹 애플리케이션 내에서 URI는 중복이 될 수 없습니다. (중복 시 에러가 발생합니다.) -> Ambiguous mapping
  • 네이밍 규약
    • 소문자 사용
    • 요청하는 자원에 대한 명사 형태로 작성
    • 두 단어 이상 연결될 경우 '-'를 사용
    • 의미 있는 이름으로 일관성 있게 작성

 

Controller 클래스에 @RequestMapping 활용

특정 Controller 클래스 내부의 모든 메소드에 Path를 적용할 수 있습니다.

- /user/paid

- /user/enterprise

- /user/administrator

 

중요한 point!

1. Spring Framework는 @Requestmapping Annotation을 인식하여 특정 요청을 처리할 메소드를 관리합니다.
2. '기본 도메인/'에 이어지는 URI Path 정보를 기반으로 Client의 요청을 특정 메소드에 전달합니다.
3. @RequestMapping은 Controller 클래스와 Controller 클래스 내부의 메소드에 명시 가능합니다.
4. URI는 자원의 주소를 의미하며 계층으로 표현 가능합니다.

 


HTTP API 개념

API란?

Application Programming Interface

-> Interface란 두 개체 간의 정보를 공유하기 위한 방법(규약)

API는 컴퓨터(프로그램)간의 정보를 공유하기 위한 방법입니다.

- 함수나 메소드를 호출하는 형식의 API
- HTTP 등의 기술로 네트워크를 통한 원격 자원을 호출하는 API

 

HTTP API vs REST API

HTTP API HTTP(S)를 활용하여 원격의 데이터를 공유하기 위한 API
REST API Roy Fielding 이 저술한 논문의 소개된 개념(REpresentational State Transfer)
웹 상에서 효율적으로 데이터를 공유하기 위한 아키텍처 스타일
다양한 조건이 만족되어야 하며, 실무에서 모든 조건을 만족하여 구현하기 어려움

HTTP API와 REST API는 실무에서 혼용하여 사용합니다.

주로 REST API 명칭이 사용됩니다.

엄밀하게는 서로 다른 개념입니다.

  • @RestController AnnotationREST API, HTTP API를 위한 클래스를 명시하는 것입니다.
  • @RestController 클래스 내의 @RequestMapping이 붙은 개별 메소드들이 하나의 REST API, HTTP API입니다.

 


다음 게시물에서는 Request 파라미터, Response 데이터, JSON 포맷, HTTP method, request body, REST API 문서 활용에 대해서 알아보도록 하겠습니다.

열심히 나아가는 개발자 이었습니다.

코드프레소 URL: https://www.codepresso.kr/

 

프리미엄 IT 교육 서비스 - 코드프레소

 

www.codepresso.kr

 

728x90
반응형