728x90
▶계층형 아키텍쳐 패턴
- 웹서비스에서 주로 사용되는 패턴
- SW를 서로 다른 역할을 하는 3~4개의 계층으로 구분
- Presentation Layer
- Application Layer
- Business Layer
- Data Access Layer
- 계층간에 호출을 하고 데이터를 주고 받으며 협력하여 전체 웹서비스를 구성한다.
▶Sprng Controller의 이해
- 계층형 아키텍처의 Presentation Layer에 해당
- Client의 요청을 받고 Application Layer에 요청에 대한 처리를 위임함
- Client에 최종 응답을 하는 역할
- view : 응답의 종류, 응답의 결과로 보게되는 웹페이지(html등등)
- data : 응답의 종류, 응답의 결과로 받는 데이터(Json,xml,문자열 등등..)
▷3개의 Annotation
- Spring Controller를 구현하기 위해서는 3개의 Annotation이 사용됨.
- @Controller와 @RestController
- Controller 역할을 하는 클래스를 지정, 클래스 상단에 명시
- @RequestMapping
- 특정 Request를 처리하는 메소드를 지정,클래스 또는 메소드 상단에 명시
▷Annotation이란?
- Java 소스코드에 추가적인 정보를 제공하는 방법
- @로 시작하며 클래스,메소드,멤버변수.파라미터등에 부착 가능
- 3가지 유형의 Annotation
- 자바 컴파일러에게 정보를 제공(에러등을 찾기 위함)
- SW툴에 의해 사용되어 코드 생성이나 추가작업을 실행(Controller,RestController 등등…)
- run-time 시 특정 동작을 추가적으로 실행
▷Spring Framework에서 Annotation작동방식
- Framework 활용은 규칙을 지키는 것이다.
- 약속된 Annotation들을 Spring Framework가 스캔함.
- Annotation이 부착된 코드들은 Spring Framework에 의해 관리되며, Spring Framework에 의해서 특정한 목적으로 사용됨.
▶@Controller VS @RestController
- 대부분의 동작은 유사하다.
- 요청을 받아서 처리하고 응답을함.
- But, 응답하는 형태가 다름
- Controller : view를 응답함.(html파일등등..)
- RestController : data를 응합함.(문자열, json, xml 등등…)
▷Controller 코드
@Controller
public class HelloController{
@RequestMapping(value = "/")
public String hello(){
return hello;
}
}
@Controller 에서는 hello라는 이름의 view형태의 웹페이지를 반환함. resources/templates/hello.html을 반환함.
▷RestController 코드
@RestController
public class HelloController{
@RequestMapping(value = "/")
public String hello(){
return hello;
}
}
@RestController 에서는 hello라는 문자열 데이터를 반환함.
▶RequestMapping
- RequestMapping이 붙어있는 메소드는 Client의 특정 요청이 왔을 때 Spring Framework에 의해 호출됨.
- RequestMapping이 붙어있는 메소드가 여려개일때 value값에 따라서 요청이 들어오는 복잡한 부분을 Framework가 알아서 해줌
@RequestMapping(value = “/uesr”)
public String boardUser(...) {
...
}
▶URI(Uniform Resource Identifier)
- URL과 유사한 개념 (URL = URI의 하위개념)
- URL(Uniforn Resource Locator)
- 특정한 자원에 접근하기 위한 이름 또는 주소
- ex)https://www.google.com
- 웹상의 모든 자원들은 URI를 가지고있음
- 웹페이지, 이미지, 영상 등등…
▷URI의 규칙
- 단일 웹 애플리케이션 내에서 URI는 중복될 수 없다.
- 중복 시 오류 발생
- 네이밍규약
- 소문자를 사용함
- 요청하는 자원에 대한 명사 형태로 작성
- 두 단어 이상 연결될 경우 ‘-’ 를 사용함
- 의미있는 이름으로 일관성 있게 작성함
▷URI와 Spring RequestMapping
- Spring Controller의 메소드들은 URI에 따라 호출이 결정됨
- 기본 도메인에 이어지는 ’/path’들에 의해 결정
- ex)http://localhost:8080/user
- RequestMapping Annotation에 URI Path 정보를 명시
- @RequestMapping(value = “/uesr”)
▶HTTP API의 개념
▷API(Application Programming Interface)
- Interface란 두 개체간의 정보를 공유하기 위한 방법(규약)
- 키오스크 기기, 리모콘과 TV
- API는 컴퓨터(프로그램)간의 정보를 공유하기 위한 방법
- 함수나 메소드를 호출하는 형식의 API
- HTTP등의 기술로 네트워크를 통한 원격 자원을 호출하는 API
▷HTTP API vs REST API
- HTTP(S)를 활용하여 원격의 데이터를 공유하기 위한 API
- = HTTP API
- REST API
- Roy Fielding이 저술한 논문에 소개된 개념(REpresentational State Transfer)
- 웹상에서 효율적으로 데이터를 공유하기 위한 아키텍처 스타일
- 다양한 조건이 만족되어야 하며, 실무에서 모든 조건을 만족하여 구현하기 어려움
- HTTP API와 REST API는 실무에서 혼용하여 사용됨
- 주로 REST API명칭이 사용되지만 엄밀하게는 서로 다른개념임
▶Request 파라미터
- Client가 Server에 요청(Request)을 할 때 추가적으로 전송하는 데이터
- 두가지 유형의 Request 파라미터가 있음
- Query String
- Path Parameter
- Spring Framework는 Request 파라미터를 메소드의 파라미터에 저장
▷ Request 파라미터 - Query String
- URI와 파라미터의 영역을 구분하여 사용함
- URI뒤에 이어지는 ’?’뒤에 Key1=Value1&Key2=Value2&… 형태로 작성
- Key가 파라미터의 이름, Value가 파라미터의 값임
- 사용사례
- ex)https://www.google.com/search?q=codepresso&sourceid=chrome&ie=UTF8
- 활용
- http://localhost:8080/post?caregory=it&id=10
- @RequestParam의 요소들
- name : query string의 key(key와 변수명이 같은 경우 생략가능)
- required : true면 반드시 사용되어야하는 변수(안쓰이면 오류), false명 생략해도 되는 변수
- defaultvalue : 데이터가 없을 경우 기본값
▷Request 파라미터 - Path Parameter
URI의 일부분으로 파라미터 값을 사용함
▶Response 데이터와 JSON 포맷의 이해
Client가 Server에게 요청을 하면 Seever는 요청에 대한 처리를 한 후 결과를 응답함 - 단순 문자열,이미지,영상,HTML페이지, JSON등
▷ JSON
- JSON - JavaScript Object Notation
- JSON은 데이터를 교환하는 데 사용됨
- 기존의 방법(XML)보다 가벼움
- XML에 비해 상대적으로 사람이 읽고 이해하기가 쉬움
▷ JSON응답 데이터
- 웹 개발 시 가장 일반적으로 사용하는 응답 데이터 포맷
- 프론트 엔드에서는 JSON형식의 데이터를 응답 받아 화면을 구성
- 각 REST API별로 어떤 JSON데이터를 응답할 것인지 사전에 정함
- 프런트엔드와 백엔드 모두 정해진 JSON데이터에 맞게 구현
▷JSON문법
- JSON객체가 가장 기본 단위로 “key”:value데이터를 포함
- JSON객체의 시작과 끝은 중괄호를 사용
- key는 큰따옴표로 무음
- value에는 다양한 형태의 데이터 타입 가능
- 다수의 “key”:value은 쉼표로 구분
- JSON의 value에는 다양한 형태의 데이터 타입 가능
- 문자열, 숫자,Boolean,null
- JSON 객체,JSON 배열
- JSON배열은 순서가 있는 데이터의 나열
- 대괄호로 표현
- JSON 배열은 다양한 데이터 타입 포함 가능
- 문자열, 숫자, Boolean,null
- JSON객체 JSON배열
▶ RestController의 응답 - 객체
- 신규 클래스 생성
- com.codepresso.controllertset.dto.UserDto
- 모든 멤버 변수 초기화 하는 생성자 추가
- 모든 멤버 변수에 대한 getter메소드 추가
UserDto객체를 생성한 후 객체를 반환
객체를 반환하면JSON형식의 데이터가 응답 됨
▶ JSON응답 예제
- SpecialtyDto 클래스 생성
- com.codepresso.controllertest.dto.specialtyDto
- UserDto의 specialties멤버 변수를 List로 변경
- 생성자,getter변경
- UserController.getUser 메소드 수정
- specialties 리스트에 문자열이 아닌 SpecialtyDto 객체를 저장
▷ 정리
- Client/Server 구조에서 Server는 Client의 요청에 따라 적절한 처리를 한 후에 결과를 응답
- Server는 단순 문자열, HTML, 이미지, JSON 등 다양한 형태의 데이터를 응답할 수 있다.
- 최신 웹 개발 시 가장 많이 사용되는 응답 포맷은 JSON 데이터
- Spring Boot에서는 객체를 반환하면 적절한 JSON형식으로 변환하여 Client로 최종 응답한다.
- JSON은 Key/Value 형식이며, 객체와 배열 등의 표현도 가능하다.
728x90
'BackEnd > Spring Boot🍃' 카테고리의 다른 글
[Spring]Spring MVC 요청에서 응답까지의 흐름, @Controller와 @RequestMapping 원리 (0) | 2024.03.24 |
---|---|
[Spring] Servlet과 Spring Web MVC(2) (0) | 2024.03.23 |
[Spring] Servlet과 Spring Web MVC(1) (0) | 2024.03.23 |
[Spring Boot] 스프링부트 개념정리 (1) | 2024.02.24 |
[Spring Boot] 코드프레소님 Spring Boot 강의 정리(유데미){2} (1) | 2024.02.24 |