🔦 자바의 강점 : Multi-Thread
Language/Java

🔦 자바의 강점 : Multi-Thread

다중 클라이언트 접속과 멀티스레드

📌 Stateful vs Stateless

다중클라이언트 접속 처리

 

이번에는 다중 클라이언트 접속에 대해서 알아보자!

다중 클라이언트 접속은 크게 2가지로 나눌 수 있다.

  • Stateful 방식
  • Stateless 방식

이 개념은 일상생활에 적용시켜보면 매우 쉬운 개념이다. 왜냐하면 이미 우리 모두가 경험한 일이기 때문이다.

 

첫 번째로 Stateful방식은 상담사화 전화연결을 하는 상황에 빗대어 볼 수 있다. 고객이 상담사에게 전화를 걸면 상담사는 고객이 문의하는 사항을 들어주고 그에 대한 답변을 해주며 추가 질문이 있을 시 서로 대화를 주고받으면서 문제를 해결한다. 문제가 해결되고 나면 연결이 끊어지게 된다.

 

이 방법은 클라이언트가 끊기 전까지 연결이 유지된다는 점이 특징이다. 하지만 클라이언트가 끊기 전까지 다른 클라이언트가 들어올 수 없으며 서버가 클라이언트 정보를 유지할 수 있지만 그만큼 메모리 사용도 커지게 된다.

 

이와 반대로 Stateless 방식은 코로나 인증 전화를 예시로 들어볼 수 있다. 식당에 가서 전화로 인증해본 경험이 있는가? 그 때 식당에 적힌 코로나 인증 전화번호로 전화를 걸어 통화를 하면 음성 메세지에 따라 인증을 하게되면 자동으로 연결이 끊긴다. 바로 이 방식이 대표적인 Stateless 방식이다.

 

이 방법은 응답 후 즉시 연결을 끊는 것이 특징이다. 서버에서도 클라이언트 정보를 유지할 필요가 없으며 그에따라 메모리 사용량이 낮아지게 되고 다수의 클라이언트 요청을 처리할 수 있게 되었다.

 

네트워킹

📌 자바의 multi-thread

자바언어가 인기를 얻을 수 있었던 가장 큰 이유가 이 멀티스레드이다.

기존의 방식에서 어떻게 멀티스레드 방식으로 바꿀 수 있는지 알아보자.

 

멀티스레드1멀티스레드2

 

자바에서는 클래스가 로딩되고 난 후 main()가 실행된다. main()의 실행흐름을 따라가다 클라이언트가 접속하게 되면 새

로운 실행흐름을 만들게 되고 각 클라이언트는 독립적으로 흐름을 따라가게 된다. 각각의 클라이언트는 독립된 실행흐름을 가진다.

 

바로 이것이 자바에서의 멀티스레드 방식이다. start()를 통해 run()을 실행시키면 되는 간단한 방식으로 되어 있어 부감담이 덜하다.