1. 웹 서버와 클라이언트
- 웹서버: 아파치 서버 등등. 자원을 가지고 서비스를 제공하는 쪽
- 클라이언트: 자원을 요청하거나 자원을 스스로 만들어서 서비스를 제공받는쪽
1) HTML & HTTP
- HTML : 웹서버와 클라이언트의 언어
- HTTP : 웹서버와 클라이언트의 통신규약
2) 요청(리퀘스트) 3대요소 : URL, METHOD, 파라메터
-> restTemplate을 사용해서 getForEntity를 보낼때를 생각해보자 -
// 사용시 주의사항 : 타임아웃설정!!
일반 new RestTemplate()해서 부르면 - 타임아웃없이 그냥 설정됨!
restTemplate이란 - 스프링에서 HTTP통신을 좀더 깔끔하게 할수있도록 제공해주는 클래스이다. 추상화된 객체. 따라서 우리는 좀더 이쁘게 코딩할수있게 된다.
getForEntity에 사용하는 요소가 무엇인가? 바로 url과, get이라는 메소드, 그리고 파라메터들이다. get을 사용하기 때문에 파라메터들은 쿼리스트링으로 url에 포함되어서 날아가게 된다 .
그럼 exchange()메소드를 사용해서 보낼때도 생각해보자.
HttpEntity클래스안에 보낼 파라메터들을 모아서 넣을 수 있다.
HttpEntity란, 헤더와 바디를 함께 담을수있는 클래스이다.
Class HttpEntity<T>
- java.lang.Object
- org.springframework.http.HttpEntity<T>
- Type Parameters:
T
- the body type
- Direct Known Subclasses:
- RequestEntity, ResponseEntity
public class HttpEntity<T> extends Object
Represents an HTTP request or response entity, consisting of headers and body.Typically used in combination with the
RestTemplate
, like so:HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.TEXT_PLAIN); HttpEntity<String> entity = new HttpEntity<String>(helloWorld, headers); URI location = template.postForLocation("https://example.com", entity);
header에 넣을 부가정보 있으면 넣어주고 (이를테면, 콘텐츠타입 지정)
URL당연히 넣어주어야 하고
파라메터 넣을 거있으면 바디에 넣어주고 해서 -> REST요청 보내기!!
이 클라이언트 - 서버 관계는 상대적이다.
요새는 MSA구조를 많이들쓰니까.. 자원을 요청하는 쪽이 누구냐? 에 따라서 - 웹서버가 클라이언트가 되어서 다른 웹서버에게 요청을 하기도 하는것이다.
3) response 3대요소: status code, content type , content
-> 마찬가지로 똑같이 restTemplate상상하면 쉽다!!
restTemplate에서 getStatusCode()해서 부를수있고, getBody()해서 콘텐츠 꺼내오는 거!!
- 참고: mime type = content type동의어이다.
4) url
통신규약 :// 호스트의주소:포트번호/자원의 위치
2. JSP & Servlet
- 사용이유 : 동적콘텐츠 생성.
어떤 콘텐츠들은 자주 변경된다. 이런 콘텐츠를 서버에다 전부 넣어두면- 넘 비효율적이고 비대하다. 따라서 이러한 콘텐츠들은 동적으로 생성해서 요청시마다 반영한다.
3. 웹 컨테이너
1) 톰캣은 웹 컨테이너이다.
2) 웹 컨테이너란 ? 간단하게 말하자면, 사용자의 요청을 받아 response를 주는 스레드이다. 톰캣도 결국엔 하나의 스레드이고- 웹 요청 이라는 작업!! 을 처리하는 녀석인 것이다.
3) 요청을 처리하는 순서 : request받음 -> servlet찾음 -> 서블릿이 작업처리하면 그것을 response로 보냄
4. 웹 컨테이너의 장점
1) 효율적인 비지니스 로직 처리 : socket을 자바단에서 만들어서 포트생성하고.. 요청계속 기달리고.. 요청끊기면 막 그거 따라서 close떄려주고.. 이런 low레벨의 코딩을 안해도 된다. 톰캣이 알아서 요청 받아서 샥샥 처리해준다.
2) 서블릿 스레드 생성 처리 : 톰캣이 유저요청에 따라서 알아서 서블릿 스레드를 생성해준다. 우리가 스레드를 일일이 유저별로 안만들어줘도 된다!!
3) 멀티스레드 지원
4) pool관리: 기본적으로 톰캣 max pool은 200. 하지만 여기에 비동기처리를 한다면? 톰캣스레드 1명이서 웹 요청 처리하고 return하고, 워커스레드 슉슉슉 만들어서 더 효율적으로 처리할수있음!! 이런 풀관리를 컨테이너 차원에서 할수있으니까 개발자는 넘 편해진다.
댓글 없음:
댓글 쓰기