티스토리 뷰
- 먼저 소켓 Socket 통신에 대해 알아야 한다. Socket은 운영체제가 가지고 있다.
- 소켓통신과정
- A와 B가 통신을 하고 싶다?
- A의 Socket이 오픈 된다. 오픈한 소켓은 포트번호가 빌요하다. 예를 들어 5000이라고 하자.
- 이제 5000번 포트는 연결을 위한 소켓이 존재하게된다.
- B는 ip주소와 포트번호(5000번)를 통해 A에 접속한다. 이제 A와 B는 메시지를 주고받을 수 있다.
- 하지만 이렇게 되면 C라는 애가 A와 통신을 하고 싶어도 못하게된다. 이미 5000번 포트로 B와 A가 짝짝꿍 중이기 때문이다.
- 따라서 위처럼 만들면안됨. 다시 처음부터..
- 최초의 5000번 포트는 연결을 위한 포트로만 사용한다.
- 5000번 포트와 연결이 되는 순간 새로운 소켓을 오픈한다. 이때 생성되는 포트 번호는 랜덤으로 만들어지고 직접 번호를 지정할 수도 있다.
- 따라서 B가 5000번 포트로 A와 연결을 하게되면 A의 5001번(ex) 포트가 열리고 5000번과의 연결을 끊고 새로운 소켓(5001)에 연결이 된다.
- 근데 갑자기 C도 A와 통신을 하고싶다. 5000번 포트에 연결하면 되겠지?
- 아니다. CPU는 A와 B의 통신(5001)에 몰두한다. 따라서 C는 연결조차 할 수 없다.
- 그렇다면 어떡해? => 위에 5001번 포트에 새로운 소켓을 만들때 A는 새로운 스레드1를 만들어야 한다. 참고로 A의 main스레드는 5000번 포트에서 계속해서 새로운 사용자의 연결요청을 받는다.
- A의 스레드1(5001) 에서는 이제 B와 통신을 하고 있다. 이 상태에서는 새로운 사용자 C의 요청을 받을 수 있다.
- C가 5000번 포트에 접근하여 연결요청을 한다.
- 5002번 포트에 새로운 소켓이 생성되며 새로운 스레드2 가 만들어진다.
- 물론 5000번의 연결은 끊어진다. 새로운 사용자의 연결 요청을 받아야하기 때문이다.
- 이제 C는 5002번 포트로 소켓통신을 통해 A와 메시지를 교환할 수 있다.
- 소켓통신의 단점 : 연결이 계속 되어있기 때문에 연결이 많아질수록 부하가 생각보다 크고 느려진다. 따라서 http 통신은 연결을 지속시키지 않고 끊어버리는 Stateless 방식을 쓴다.
- http 통신 : 문서를 전달하는 통신
- 연결을 지속시키지 않고 끊어버리는 Stateless 방식을 쓴다.
- 즉, A와 C가 연결되고 필요한 문서를 얻으면 그 연결을 끊어 버린다. 따라서 똑같은 사용자가 재 요청할 경우 그 사용자가 아까랑 같은 놈인지 구분할 수 없다는 단점이 있다.
- 소켓통신과정
Spring Boot의 특징
- 내장 톰켓을 가진다
- 톰켓을 따로 설치할 필요 없이 바로 실행할 수 있다.
- 톰켓이란?
- 톰켓을 설명하려면 먼저 웹 서버에 대해 설명해야한다.
- 웹서버 : 갑과 을 관계의 '갑'
- '을'은 '갑'에게 자원에 대한 요청 Request를 한다. Request 하기 위해서는 자신의 IP와 URL (자원을 요청하는 주소)이 필요하다.
- '갑'은 '을'의 요청에 대하여 응답 Response 한다. '갑'은 '을'의 IP를 몰라도 된다. '을'의 Request에 담겨있으므로.
- 이때 갑이 웹서버가 되는 것이다.
- Http 통신에서의 '갑'은 '을'의 요청이 없으면 '을'의 주소를 알 수 없다. 연결이 끊기니까. 하지만 이때 위의 소켓통신을 이용하면 연결이 계속 지속되기 때문에 '갑'은 자신이 원하는 시점에 '을' 에게 데이터를 전달할 수 있다.
- 웹서버 통신
- 보통 웹서버는 Apachi를 쓴다.
- A가 아파치에 자원을 요청(Request) 한다.
- 아파치는 A에게 그 자원을 응답(Response) 해주면 통신 끝이다.
- 만약 자바코드가 있는 요청(Requset)일 경우
- A가 Apachi에게 .JSP 로 요청한다.
- 아파치는 자바코드를 이해하지 못한다.
- 따라서 .JSP 파일에 대한 제어권을 톰켓에게 넘겨준다.
- 톰켓은 .JSP 파일에 있는 모든 자바 코드를 컴파일하고 컴파일 된 데이터를 .html 에 덮어씌운다. 즉 .html 문서로 만들어 준다는 뜻.
- 이 .html 문서를 아파치에게 돌려준다.
- 아파치는 A에게 .html 파일을 응답(Response) 해준다.
- 흔히 요청은 웹 브라우저로 요청을 할 것이다. 웹 브라우저는 html, Javascript, CSS, avi와 같은 정적인 파일들만 이해할 수 있기 때문데 톰켓이 없을 경우 JSP 요청은 그대로 JSP 응답으로 돌아오고 웹 브라우저에서 깨져 보일것이다.
- 결론 : 아파치는 요청한 파일을 응답해주는 놈. 톰켓은 요청한 파일중에 Java 코드가 있다면 그것을 컴파일 하여 html 파일로 번역해서 돌려주는 놈이다.
- 참고 : 톰켓같은 역할을 해주는 것을 WAS(Web Application Server) 라고 하며, 웹 서버와 웹 컨테이너의 결합으로 다양한 기능을 컨테이너에 구현하여 다양한 역할을 수행할 수 있는 서버를 말한다. 톰켓은 서블릿 컨테이너 라고도 불린다.
출처 : https://www.youtube.com/watch?v=wc-K2QurjSk&list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg&index=10
후기
소켓 통신의 과정 및 아파치 톰켓에 대해 다시한번 복습할 수 있었다.
'Web 개발' 카테고리의 다른 글
[Web] Spring Boot with JPA (0-5) FrontController와 RequestDispatcher 그리고 DispatcherServlet. (0) | 2021.08.28 |
---|---|
[Web] Spring Boot with JPA (0-4) web.xml 이 하는일 (0) | 2021.08.27 |
[Web] Spring Boot with JPA (0-2) JPA 란? (0) | 2021.08.26 |
[Web] Spring Boot with JPA (0-1) Spring 이란? (0) | 2021.08.26 |
[Web] 웹 개발 A to Z (3) Vue 프로젝트 생성 (0) | 2021.02.14 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 리액트 네이티브
- 객체지향
- S2
- BFS
- 알고리즘
- Spring
- map
- SWEA
- Spring Boot
- java
- 백트래킹
- 현꾸라지
- g4
- react
- DFS
- react native
- 코딩새내기
- 자바
- 시뮬레이션
- 그리디
- S3
- 백준
- PriorityQueue
- G5
- laugh4mile
- 다익스트라
- 구현
- 리액트
- 문자열
- 우선순위큐
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함