Wanna be Brilliant Full-Stack Developer

2/17 SpringBoot 개념 HTTP는 무엇인가? 본문

Some Memos/Spring 개념

2/17 SpringBoot 개념 HTTP는 무엇인가?

Flashpacker 2022. 2. 18. 01:43


(1) 스프링은 내장 톰켓을 가진다? 

톰켓을 따로 설치할 필요 없이 바로 실행 가능하다!

 

우선 소캣이 먼지 알아야한다소캣이라는건 운영체제가 가지고 있는 것!소캣은 ex) 어떤 A라는 대상이 있고 B라는 대상이 있는데 이둘이서 서로 메시지를 교환 하고 싶은데이 메시지를 교환하기 위해서는 운영체제가 재공해주는 소켓을 이용하면된다. 자바에서도 소켓이라는것을 공부할수 있는데

 

A가 소캣을 오픈하면 오픈한 소캣에 포트 번호가 필요한데 5000 포트를 열고 소캣을 오픈하면 B라는 애가 A라는애와 통신하고싶으면 5000포트와 A라는애가 있는 IP주소를 넣으면된다.이렇게 연결을 하면 연결이 되는 순간 A와 B는 서로 메시지를 주고받을 수 있는 통신이 가능하다

 

문제는 이렇게만 만들게 되면 C라는 애가 A와 통신하고 싶으면 B는 5000번 포트가 A와 소캣과 연결이 되어있기 떄문에 5000번 포트를 B와 A가 통신이 시작되면 C가 5000번으로 연결할 수 있는 방법이 없다. 

 

그래서 어떻게 만드냐면 최초에 5000포트를 연결의 용도로만 사용하고 5000번 포트로 연결되는 순간 새로운 소켓을 만든다.이 포트는 보통 랜덤으로 만들어지는데 5001번 포트가 만들어지고 5000으로 연결되어있던건 끊기고 B라는 애는 새로운 소켓 5001번 포트 와 연결된다! 서로 A와 B는 5001번으로 통신을 지속적으로 할수 있다.

 

여기서 문제는 B와 A가 계속 소통을하면 모든 자원을 이둘이 사용한다. 그러면 5000번 소캣 포트는 작동을 할수 가 없다. 애는 다른 사용자의 요청을 받아야하는데 이걸 받을수 없다. 왜냐하면 CPU가 5001번가 일을 하고 있기때문에

 

5001번의 새로운 소켓을 만들때는 새로운 쓰레드(Thread)를 만든다 Thread1 5000번은 main 스레드 인데 메인 스레드는 어떤일을 하냐면 계속된 새로운 사용자의 요청을 받고 5001번 스레드 1은 B와 통신을 하고 있는것이다.이러한 상황속에 C는 5000번에 접근할 수 있다. 5000번이 연결해 라고 말하면 새로운 소켓이 밑에 랜덤으로 만들어지는데5002라고 하겠다 이 포트를 내가 정할수도있다. 새로운 스레드로 만들어진다 스레드2  , 5000 메인 스레드는 연결이끊긴다 왜냐하면 새로운 사용자의 요청을 받아야하기떄문에! 다시 C는 5002번 스레드 2와 연결이 되고 서로 메시지를 보낼수 있다! 

이게 반복되는것이 소켓 통신이다소켓 통신을 할떄는 스레드라는 개념이 첫번쨰로 잡혀 있어야한다. 스레드가 있으면 시간을 타임슬라이스 해서 시간을 쪼개서 동시에 동작하고 있는것처럼 보일 수 있다. 사실은 동시에 동작하는것이 아니라 시간을 쪼개서 동작하는것이긴 하다. 

 

소캣 통신의 단점 1) 연결이 계속 서로 되어있기 떄문에 연결이 끊어지지가 않아서 생각보다 부하가 크기 떄문에 느려질수 있다. 이런 소캣들이 하나, 둘이 아니라 연결이 100명 및 1000명 늘어나게 되면 엄청나게 부하가 늘어난다장점은?  한번 연결되고나서 서버 입장에서는 A입장에서는 B가 누구인지를 계속 알수있다. 한번 연결된사람이랑은 계쏙 통신하고 있기떄문에

 

HTTP 통신은 연결을 지속시키지 않고 끊어 버리는 Stateless 방식을 쓴다A라는애와 B라는 애가 있을떄 C라는 애와 연결해서 데이터를 받고싶으면?HTTP는 단순하게 문서를 전달하는 통신이다. A가 a.txt문서를 줘 하면 C에  80 소캣이 받으면 새로운 스래드를 만드는것이 아니라 알겠어 하고 a.txt를 찾아서 돌려주고 그 선을 끊어버린다! B도 C한테 데이터를 달라고 하면 그 데이터를 응답해주고 끊어버린다. 

 

HTTP통신의 장점은 연결이 끊기기 떄문에 부하가 적지만 다시 연결될떄는 항상 새로운 사람으로 인식한다. C입장에서는 a.txt 와 c.txt를 달라고 한사람이 동일한 애인지 구분할수 없다.

 

이런 단점들을 보완하기 위해 만들어진것이 웹서버이다! 

 

HTTP통신에 대해서 또 말하자면 예전에 스위스에 보면 cern이라는 연구소가 있는데 입자 물리 연구소라는 곳이다. 이 연구소에는 다양한 나라사람들이 모여서 연구를 하게 되는데 수만명이 있다. 이 A라는 사람이 새로운 연구를 시작해서 논문을 만들려고 하는데 논문을 쓸때는 전세계에 있는 자신의 주제와 동일한 내용의 논문을 다 읽어 봐야한다....! 그 이유는 무엇일까? 당연히 이걸 안읽어보고 논문을 쓰게되면 내 논문이 최초가 아닐수도 있기 때문에. A라는 사람과 F라는 사람이 논문을 쓰고 싶으면 굉장히 지루하고 힘든일이 전세계에 있는 자신의 주제와 동일한 논문들을 다 봐야한다는것이다. 옛날에는 인터넷이 없었기 떄문에 종이로 볼수도 있고 각자 의 컴퓨터에 A가 F가 논문을 하나 보고싶으면 특정 방에 들어가서 이방에 있는 종이로 되어있는 논문들을 싹 공부한다던지 컴퓨터 에 있는 논문들을 다 본다는 것인데 너무 힘들지 않나?그리고 여기에 모든 논문들이 다 모여있다고 보장되지 못한다. 

 

그래서 팀 버너스리 라는 사람이 어떤일을 하게되냐면 각각 가지고 있는 컴퓨터를 다 하나의 서버에 연결한다.그리고 자기가 쓴 논문을 다 이 서버에 업로드 하는것이다. 그리고 그 논문이 필요하면 각자의 컴퓨터에서 통신으로 연결된 선에서 서치해서 논문을 검색 할수 있다. 검색해서 필요한 논문이 있으면 쏙 들고오는것이다. 

 

쏙 들고 오면되니까 한번 들고오고나서 연결이 지속될 필요가 없다. 왜냐하면 내가 문서가 필요하면 가져와서 들고오면 되니까 연결지양형이 필요가 없으니까 소캣통신으로 할필요가 없고 소캣 통신이 기반이 되는 HTTP통신을 만드는거다. HTTP통신은 연결이 한번 요청하면 끊겨버리기 떄문에 

 

HTTP의 목적인 html이라는 확장자로 만들어진 문서를 필요한 사람에게 제공해주는것문서전달의 목적이다.