SSAFY-Seoul-20-Study / book-system-design-interview

1 stars 1 forks source link

[6주차]_11장~12장_뉴스 피드 시스템 설계_채팅 시스템 설계_한태희 #42

Open nyanpasu-life opened 7 months ago

nyanpasu-life commented 7 months ago

11장

199p

12장

203p

199p, 208p~

KimJyun commented 7 months ago

11장

웹 계층을 무상태(stateless)로 운영한다는 것은 각각의 클라이언트 요청을 서버가 이전 요청과 상태를 공유하지 않고 독립적으로 처리하는 방식을 의미합니다. 다시 말하면, 각 요청은 서버에 의해 개별적으로 처리되며, 이전 요청과의 상태 정보를 서버가 저장하지 않습니다.

무상태 아키텍처는 확장성과 유연성 측면에서 장점을 가지고 있습니다. 서버가 클라이언트의 상태를 기억하지 않기 때문에 서버 간의 부하 분산이 쉽고, 클라이언트가 여러 서버에 걸쳐 요청을 분산시키기 쉽습니다.

웹에서는 HTTP 프로토콜이 주로 무상태 프로토콜로 사용되며, 각 HTTP 요청은 이전 요청과 독립적입니다. 이는 각각의 요청이 서로 영향을 주지 않고 별도로 처리됨을 의미합니다. 클라이언트의 상태 정보는 주로 쿠키나 세션과 같은 메커니즘을 사용하여 클라이언트 측에서 관리됩니다.

무상태 아키텍처는 분산 시스템에서 중요한 디자인 원칙 중 하나이며, 이를 통해 시스템이 쉽게 확장 가능하고 유지보수가 용이해집니다.

KimJyun commented 7 months ago

12장 (발표 중 나온 내용 정리)

http-tcp-소켓의 상관관계

JunYupK commented 7 months ago

12장 TCP keep alive에 대한 답변

제가 다르게 알고 있었기 때문에 추가적인 답변을 달아놓겠습니다. 우선 TCP Keep AliveHTTP Keep Alive의 구분부터 해야 할 것 같습니다.

TCP Keep-Alive

즉, 상태 확인 메세지에 대해 상대방으로부터 응답이 온다면 그 연결은 계속해서 유지를 하는 것이다.

HTTP Keep-Alive

그래서 HTTP Keep-alive 값으로 설정된 시간이 지나면 FIN 패킷을 날려 연결을 종료한다.

그리고 우리는 HTTP를 사용하고 있었으므로 HTTP Keep-alive vs Websocket의 관점에서 설명을 해보자면, 제가 전이중 통신을 지원하지 않는다라고 표현한 것이 잘못 된 것 같습니다.

애초에 HTTP요청의 경우에는 클라이언트가 request를 날려야 response를 내려줄 수 있는 방식입니다. 즉 서버가 원할 때 클라이언트에게 이벤트나 데이터를 전송할 수 없습니다.

하지만 websocket 연결의 경우는 HTTP처럼 클라이언트가 서버에게 데이터를 요청하고 응답받는 것은 물론이며, 서버 또한 언제든지 원하는 때에 클라이언트에게 데이터를 보내줄 수 있다. << 이 부분이 결정적인 차이입니다.

거기에 추가적으로 HTTP의 Keep-alive는 서버에게 무조건 내 연결을 유지시켜줘!의 개념이기 보다는, 나 연결을 안끊을꺼니까 기다려줘..의 개념이 강하기 때문에 헤더에 Keep-alive를 명시해도 재연결시 3-way-handshake를 하지 않는다는 보장이 없습니다.

참고자료 TCP Keep-alive vs HTTP Keep-alive Difference HTTP Keep Alive & WebSocket