Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 브루트포스
- BOJ14889
- Crossfit
- 스택
- 15662
- 26008
- 회전하는큐
- 그리디
- 1로만들기2
- sw expert academy
- 동적프로그래밍
- 1781
- 15353
- 백준
- 크로스핏
- 삼성
- spring boot
- 재귀함수
- 재귀
- 4811
- Flutter
- DP
- D1
- 14863
- C++
- BOJ
- 서울에서경산까지
- Python
- dart
- 해시해킹
Archives
- Today
- Total
곧죽어도 콛잉
[Spring] Spring Boot 컨트롤러와 Rest API 본문
SW 아키텍처
- 코드 개발 전에 최종 SW가 돼야할 모습을 설계
- SW의 구조를 정의한 것으로, SW를 구성하는 주요 요소들과 요소들의 관계를 정의한 것
SW 아키텍처/ 디자인패턴
- 특성 상황의 문제를 해결하기 위한 일반화된 솔루션
계층형 아키텍처 패턴
- 웹 서비스 개발에 주로 사용되는 패턴
- SW를 서로 다른 역할을 하는 3 ~ 4개 계층으로 구분
- Presentation Layer
- Application Layer
- Business Layer
- Data Access Layer
- 계층 간 호출을 하고 데이터를 주고 받으며 협력하며 전체 웹서비스를 구성함
- Controller, Service, Repository의 구조로 이뤄짐

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)를 위한 클래스를 명시하는 것.
'Spring > 기본' 카테고리의 다른 글
[Spring] Spring Security에서 H2-Database 사용하기 (0) | 2023.06.29 |
---|---|
[Spring] Spring Boot DevTools (0) | 2023.06.22 |
[Spring] WEB & HTTP의 개념 (0) | 2023.06.15 |
[Spring] Spring Boot의 개요 / Framework vs Library (0) | 2023.06.14 |