Wanna be Brilliant Full-Stack Developer
Spring Boot Blog 만들기 Stateless란? 본문
우리가 일반적으로 자바에서 소켓통신이라는것을 배웠다.
소켓통신이라거는 이게 포트당 통신을 이야기하는데 두개의 포트가 연결이 되어서
통신을 할것이다. 통신을 할때는 내가 데이터를 Write하고 쓸 수도 있고 얘가 반대로 Read해서 데이터를
읽을 수도있다.
A라는 사람과 B라는 사람과 서로 통신할때 데이터를 주고 받을것이다.
주고 받다보면 계속 연결이 AB가 연결이 될것이다.
이렇게 되면 만약에 B라는 사람이 A랑만 통신하는 것이 아니라 다른 사람 C라는 사람과도 통신하고 싶으면
C도 포트를 하나 달아서 B에게 선이 연결이 될 수 있다.
다른사람이 B랑 통신하고 싶으면 D도 포트를 달고 스트림을 왔다 갓다 해서 데이터를 통신 할 수 있다.
근데 이렇게 되면 B라는애 입장에서는 굉장히 힘들다.
왜 힘드냐면.. 자기가 통신을 해야할때마다 연결되야하는 사람들이 많아졌기 때문이다.
많아지면 이 선들이 연결되어서 요청을 하게되면 B가 굉장히 바빠진다.
그러면 HTTP통신은 이런 방식을 쓰지 않는다.
이런방식을 쓰는 통신들은 채팅과 같은것, 계속 연결이 되어서 데이터를 주고 받는 이런 채팅과 같은것은 이러한 방식을쓰는데!
HTTP통신 방식은 이렇게 쓰지 않고 다른 방식을 사용한다.
A라는 클라이언트가 있고 서버가 있으면 서버 입장에서는 첫번째 클라이언트 2번째 클라이언트 세번째 클라이언트
많은 클라이언트들이 있으면 클라이언트들과 통신하기 위해서는 스트림 선을 연결한다.
Write 와 Read할 수 있는 선들을!!
선을 연결하고 어떻게 하는가? 클라이언트 입장에서는 Get 방식을 요청하면 데이터를 달라고 하는것인데
데이터를 달라고 헀는데 서버는 그 데이터를 응답한다!
요청과 응답이 일어난다면 그뒤에 이 선들을 끊는다!?
그래서 요청시 마다 스트림(선)을 연결해서 데이터를 주고 받는 방식이다!
이것을 Stateless방식이라고 한다.
이방식은 서버 입장에서 부하가 굉장히 적다.
냐하면 필요할떄마다 요청, 응답 선 끊기를 하기 떄문이다.
이걸 HTTP에서 사용하고 있다!
그러면 요청하고 응답하고 나서도 계속 지속적인 요청과 응답이 일어날 수 있는
이 통신( 채팅과 같은) 방법은 Stateful방식이다. Stateful은 연결이 지속되어있다는 것이다.
근데 Stateful은 연결이 지속되어있다는 것은 이런 의미이기도하다.
예를 들어 A가 B한테 야 데이터좀줘 하면 B가 A한테 너는 누구야? 라고하면
A가 B한테 나는 홍길동이야 나는 친구야, 라고 하면 B는 정말 너 내 친구 맞어? 증명해봐 라고하면
홍길동이 나 저번에 1년전에 너랑 목욕탕 갔을때 내 등 뒤에 점 있던거 기억나? 하면 기억나지만 부족하다고 하면
내가 작년에 12월 25일 날 놀았는데 어디서 놀았지? 라고 물어보면 그때 PC방에가서 저녁에 술먹었잖아 라고 하면
B 입장에서 보면 A와 세션이 만들어진다!
세션이 만들어졌다는 것은 무엇인가? 데이터를 응답해줄 준비가 되었다는 것이다.
근거는 무엇인가? 인증이 됬기 때문이다!
그러면 이제 A와 B는 인증이 된 사이이기떄문에 그다음 부터는 데이터를 막 주고 받을수 있다.
근데 HTTP의 방식에서는 Stateless니까 한번 인증을 했다고 보자
왔다갔다 하면서 요청과 응답을 통해 인증을 하고 선이 바로 끊어져버리는데 새로운 요청이 들어왔을때
이 서버 입장에서 보면 클라이언트 1이 이전에 개가 맞는지에 대한 증명, 보장이 안된다.
그러면 세션을 유지할 수있는 방법이 없다.
그래서 HTTP방식은 머가 어려운가? 기본적으로 HTTP방식은 문서 전달을 위해서 만들어졌는데
요새 세상에서는 HTTP를 홈페이지 만들어서 회원가입도 하고 데이터도 주고받고 인증도 하고 , 많은 것들을 하는데
그 사람에 대한 인증이 필요한데 이 렇게 선이 끊겨버리는데 그 사람이 다음 요청을 했을떄 그 사람이 누군지
어떻게 알 수있는가? 이것에 대한 수많은 문제가 있다.
우리는 앞으로 Stateless방식이 어떻게 해서 클라이언트 1을 서버가 자기 친구인지를 인증해서 세션을 만들 수 있는가?
이 방식에 대해서도 배울것이다! 이 방식이 어렵다..!! 왜냐하면 우리는 스프링부트에서 시큐리티라는것을 사용할것이기 때문이다. 시큐리티라는것을 사용해서 어떻게 해서 세션을 유지하는지 배울것이다.
기본적으로 세션을 유지하는 방법은 쉬운데! 이게 점점 서버가 늘어나고 서버가 복잡해지고 사용자가 많아져서
이 세션을 만들고 유지하고 세션에 대해서 인증된 사람에 대해서 그 사람을 어떻게 증명하고 데이터를 보존하고
데이터를 관리하고 암호화하고 보안적인 방법들이 어렵다.
Stateless는 이방법을 배우는것이 제일 어렵다고 생각할 수 있다.
Stateful은 쉽다!
'Back-End > 블로그 만들기 With SpringBoot' 카테고리의 다른 글
SpringBoot blog 만들기 Http요청 실습1 (0) | 2023.02.11 |
---|---|
SpringBoot blog 만들기 MIME 타입은? (0) | 2023.02.11 |
SpringBoot Blog 만들기 - http1.1 요청방식 (0) | 2023.02.11 |
SpringBoot Mysql 및 Github 연결! (0) | 2023.02.07 |
SpringBoot Blog 만들기 프로젝트 실행해보기 (0) | 2023.02.02 |