Springboot 개념정리 - HTTP가 무엇일까?

Yuri Lee·2020년 9월 9일
0

Springboot 개념정리

목록 보기
4/10

스프링부트 강좌 with JPA 8강 - HTTP가 무엇인지 궁금해요!

Socket: 운영체제가 들고 있는 것이다.

A라는 대상과 B라는 대상이 있다. 이 둘은 메시지를 교환하고 싶다. 그러면 운영체제가 제공해주는 소켓을 이용하면 된다.

소켓은 처음에 A라는 얘가 소켓을 오픈한다. 오픈한 소켓의 포트번호가 필요하다. 그럼 5000번 포트를 연다.

B라는 얘가 A와 통신하고 싶으면 A의 ip주소 5000번에 넣고 연결을 하는 순간 통신이 가능하다.

근데 문제는 C라는 얘가 A와 통신하고 싶을 떄 B가 5000번 포트로 소켓과 연결되어있기 때문에 5000으로 통신이 시작된다. 이미 사용하고 있기 때문에 c는 연결할 수 없다.

따라서 최초의 5000번 포트는 연결의 용도로만 사용하고 5000번 포트와 연결이 되는 순간 새로운 소켓을 만든다. 예를 들어 5001번 포트를 만들고, 얘는 연결이 5000번으로 되었기 때문에 끊기고 B라는 얘는 새로운 소켓.

그리고 5001 번으로 메시지를 보낸다. 계속 지속적으로 보낸다.
얘 둘이 통신을 하게 되면 계속 왔다갔다 하기 때문에 모든 자원들을 사용하고 있다.

CPU가 일을 하고 있기 때문에..
5001 번에 새로운 소켓을 만들게 될때 스레드를 하나 만든다.

main 스레드는 계쏙 새로운 사용자를 받고, 5001 스레드는 B와 통신을 한다.

이 상태에서 5000번에 c가 접근하고 5000번이 응! 연결해! 하면 새로운 포트가 만들어진다. 그리고 새로운 스레드가 만들어진다.

새로운 스레드를 만들지 않으면 일을 할 수 없기 때문이다.
연결은 또 끊긴다. 왜? 다시 새로운 사용자를 맞이해야 하기 때문에.....

이게 계속 반복되는 게 소켓 통신이다. 소켓 통신을 할때는 스레드의 개념이 잡혀있어야 한다. time slice해서 동시에 동작하는 것처럼 보일 수 있다. 사실은 시간을 쪼개서 동작하는 것...

장점은 연결이 계속 되어있다는 것이다. 서로에게. 연결이 끊어지지 않기 때무에 부하가 크고 느려질 수가 있다.
이런 소켓들이 100명, 1000명 으로 늘어나면 부하가 심해진다.

그래서 http 통신, 웹쪽에 있는 통신은 연결을 지속하지 않고 stateless 방식을 사용한다. A와 B라는 얘가 있을 때 C라는 얘와 연결해서 데이터를 받고 싶다면..?

http라는 게 단순히 문서를 전달하는 통신이다. A가 a.txt 파일을 줘! 라고 하면

c
소켓이 받으면, 응 알겠어 하고 a.txt파일을 찾고 보내준다. 그리고 통신을 끊어버림.

B가 b.txt 파일을 달라고 하면 c는 찾고 보내주고 통신을 끊는다.

더 좋은것은?

계속 연결되어있기 때문에 비는 누가 누군지 알고 있다.


C는 A가 c.txt, a.txt 동일 인물인지 모른다. 그런 단점이 있다.
그래서 그런 단점을 보안해서 나온것이 웹 서버이다.


이 글은 유투버 겟인데어의 스프링 부트 강좌를 바탕으로 정리한 내용입니다.

profile
Step by step goes a long way ✨

1개의 댓글