본문 바로가기
Spring

[스프링의 정석] Http, 컨트롤러 메서드의 반환타입

by 리잼 2023. 4. 10.
반응형

HTTP 요청과 응답
1. 프로토콜이란
  서로간의 통신을 위한 약속규칙
  주고받을 데이터에 대한 형식을 정의

2. HTTP ( Hyper Text Transfer Protocol )
  단순하고 읽기 쉽다.     - 텍스트 기반의 프로토콜
  상태를 유지하지 않는다.  - 클라이언트 정보를 저장하지 않음

3. HTTP 응답 메세지
  HTTP/1.1 200 OK // 상태라인 1xx : Informational, 2xx : Success, 3xx : Redirect 4xx : Client Error, 5xx : Server Error
  Content-Length : 44
  Content-Type : text/html
  Data : Sat, 20 Oct 2021 19:03:38 GMT
    <html>
    <head></head>
    <body>
        Hello
  </body>
  </html>

 

GET POST
서버의 리소스를 가져오기 위해 설계
Query String을 통해 데이터를 전달 ( 소용량 )
URL에 대이터가 노출되므로 보안에 취약
데이터 공유에 유리

ex) 검색엔진에서 검색단어 전송에 이용
서버에 데이터를 올리기 위해 설계
전송 데이터 크기의 제한이 없음
데이터를 요청 메세지의 body에 담아 전송
보안에 유리, 데이터 공유에는 불리

Postman 설치

https://chrome.google.com/webstore/detail/tabbed-postman-rest-clien/coohjcphdfgbiolnekdpbcijmhambjff?hl=ko 

 

Tabbed Postman - REST Client

No separate window required! This is the legacy postman extension that can run in a Chrome tab. * Now runs in tab. * Does not…

chrome.google.com

 

Http GET 방식

값을 적어주면 알아서 query string 을 생성해준다

헤더 상태

Post headers

Post 방식일 때

body에 query string이 찍힌 모습

 

텍스트 파일 vs 바이너리 파일

바이너리 파일

  • 데이터를 있는 그대로 읽고 쓴다

텍스트 파일

  • 숫자를 문자로 변환 후 사용
파일종류 쓰기 읽기
바이너리 문자 >> 문자
숫자 >> 숫자
문자 >> 문자
숫자 >> 숫자
텍스트 문자 >> 문자
숫자 >> 문자
문자 >> 문자
문자 >> 숫자

MIME ( Multipurpose Internet Mail Extensions )

텍스트 기반 프로토콜에 바이너리 데이터를 전종하기 위해 고안됨

Http의 Content-Type 헤더에 사용. 데이터 타입을 명시함

타입 설명 MIME 타입 ( 타입 / 서브타입 )
text 텍스트를 포함하는 모든문서 text/plain, tetx/html, text/css,
text/javascript
image 모든 종류의 이미지 image/bmp, image/webp
audio 모든 종류의 오디오 파일 audio/midi, audio/mpeg,
audio/webm, audio/ogg,
audio/wav
video 모든 종류의 비디오 파일 video/webm, video/ogg
application 모든 종류의 이진 데이터 application/pdf .....

관심사의 분리, MVC 패턴

컨트롤러 메서드의 반환 타입

[String] 뷰 이름을 반환
@RequestMapping("/getYoil")
public String main(int year, int month, int day) {
	.
    .
    .
    return "yoil" // WEB-INF/views/yoil.jsp
}

[void] 맵핑된 url의 끝 단어가 뷰 이름
@RequestMapping("/yoil") // WEB-INF/views/yoil.jsp
public void main(int year, int month, int day, Model model) {
	.
    .
    .
}

[ModelAndView] Model과 뷰 이름을 반환
@RequestMapping("/getYoilMVC")
public ModelAndView main(int year, int month, int day) throws IOException {
	//1.ModelAndView를 생성하고, 기본 뷰를 지정 
	ModelAndView mv = new ModelAndView();
       
	//2. 작업 
	char yoil = getYoil(year, month, day);
	
	//3. 결과 ModelAndView에 저
	mv.addObject("year", year);
	mv.addObject("month", month);
	mv.addObject("day", day);
	mv.addObject("yoil", yoil);
	
	//4. 작업 결과 보여줄 뷰의 이름 지정 
	mv.setViewName("yoil");
	
	//5. ModelAndVie 반환
	return mv;
		
}

private boolean isValid(int year, int month, int day) {
	return true;
}

private char getYoil(int year, int month, int day) {
	Calendar cal = Calendar.getInstance();
	cal.set(year, month - 1, day);
		
	int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
	return " 일월화수목금토".charAt(dayOfWeek);
}
반응형