728x90

2026/02/09 6

Java에서는 비동기 대신 가상 스레드

결론부터 말씀드리면, Java 21의 가상 스레드(Virtual Thread)는 소켓 통신의 패러다임을 완전히 바꿔놓았습니다.가상 스레드를 사용하면, 복잡한 비동기 코드(NIO)를 짜지 않고도 동기 방식의 코드로 비동기만큼의 효율을 낼 수 있습니다.1. 기존의 문제: "비동기는 코드가 너무 어렵다"기존 Java에서 소켓 통신 성능을 높이려면 앞서 말씀드린 NIO(Non-blocking) 방식을 써야 했습니다. 하지만 NIO는 콜백 구조나 복잡한 상태 관리가 필요해 코드가 매우 읽기 힘들고 유지보수가 어려웠죠.2. 가상 스레드(Virtual Thread)의 마법가상 스레드는 수만, 수십만 개를 생성해도 메모리나 CPU에 큰 부담을 주지 않는 아주 가벼운 스레드입니다.동작 원리: 코드는 Blocking(멈춤..

기술 학습 2026.02.09

Java에서 소켓(socket)은?

Java에서 소켓을 구현할 때 비동기로 작동하는지 여부는 "어떤 API를 사용하느냐"에 따라 달라집니다. Java는 역사적으로 이 문제를 해결하기 위해 세 가지 방식을 발전시켜 왔습니다.1. Java의 세 가지 방식① 전통적인 방식 (BIO: Blocking I/O)처음 Java가 나왔을 때의 방식입니다. java.net.ServerSocket을 사용합니다.특징: 데이터가 올 때까지 스레드가 멈춰(Blocking) 있습니다.문제점: 연결이 1,000개면 스레드도 1,000개가 필요합니다. 스레드가 너무 많아지면 메모리가 부족해지고 성능이 급격히 떨어집니다. (비유: 손님 한 명당 점원 한 명이 붙어서 아무것도 못 하고 기다리는 식당)② 현대적인 방식 (NIO: Non-blocking I/O) — 비동기적..

기술 학습 2026.02.09

소켓(socket)은 비동기로 작동

소켓 통신이 연결을 유지하면서 데이터를 주고받는 방식은 비동기(Asynchronous) 및 이벤트 기반(Event-driven)으로 동작합니다.단순히 "비동기에서 실행된다"는 의미를 넘어, 왜 소켓 통신에서 비동기가 핵심인지 3가지 포인트로 정리해 드릴게요.1. "기다리지 않는다" (Non-blocking)일반적인 동기식 처리라면 서버가 데이터를 보낼 때까지 클라이언트가 아무것도 못 하고 멈춰 있어야 합니다. 하지만 소켓은 비동기적으로 작동하기 때문에:클라이언트는 메시지를 보내놓고 다른 작업을 계속할 수 있습니다.서버도 메시지가 올 때까지 멍하니 기다리는 게 아니라, 다른 유저의 요청을 처리하다가 메시지가 도착하는 이벤트가 발생할 때만 반응합니다.2. 이벤트 루프(Event Loop)와의 관계Node.j..

기술 학습 2026.02.09

express로 socket 사용 방법

Node.js 환경인 Express는 기본적으로 HTTP 프로토콜을 다루는 프레임워크입니다. 하지만 일반적인 HTTP는 클라이언트가 요청을 보내야만 서버가 응답하는 단방향 구조죠.앞서 설명한 실시간 양방향 소켓 통신을 Express에서 구현하려면 가장 대중적인 라이브러리인 Socket.io를 사용합니다.1. Express와 Socket.io의 관계Express는 웹 서버를 구축하고 라우팅을 담당하며, Socket.io는 그 서버 위에서 실시간 통신용 소켓 연결을 관리합니다.2. 사용 방법 (Step-by-Step)① 설치먼저 필요한 패키지를 설치합니다.npm install express socket.io② 서버 코드 작성 (server.js)Express 서버에 Socket.io를 결합하는 표준적인 방법..

기술 학습 2026.02.09

소켓(Socket)과 패킷(Packet)의 관계

소켓(Socket)과 패킷(Packet)의 관계를 한마디로 정의하자면, "소켓은 우체통(또는 창구)이고, 패킷은 그 안을 오가는 편지(데이터 꾸러미)"라고 할 수 있습니다.조금 더 기술적으로 파고들어 두 개념의 연결 고리를 설명해 드릴게요.1. 소켓과 패킷의 역할 관계네트워크 통신이 일어날 때 두 개념은 서로 다른 계층에서 협력합니다.소켓 (Socket): 소프트웨어적인 인터페이스입니다. 프로그래머가 "데이터 보내줘!"라고 명령을 내리는 통로입니다.패킷 (Packet): 네트워크를 통해 실제로 이동하는 데이터의 단위입니다. 소켓을 통해 던져진 데이터는 네트워크 계층을 지나면서 잘게 쪼개져 패킷이라는 형태로 포장됩니다.2. 데이터가 전달되는 과정 (시나리오)우리가 카카오톡 메시지 "안녕"을 보낸다고 가정해..

기술 학습 2026.02.09

소켓(Socket) 이란?

네트워크 통신을 공부하다 보면 가장 먼저 마주치는 벽이 바로 소켓(Socket)이죠. 쉽게 비유하자면 소켓은 "네트워크상의 두 프로그램이 대화를 나누기 위해 사용하는 전화기" 혹은 "데이터가 드나드는 연결 구멍"이라고 이해하시면 됩니다.1. 소켓(Socket)이란?컴퓨터 네트워크에서 소켓은 통신의 종착점(Endpoint)을 의미합니다.우리가 친구에게 전화를 걸 때 상대방의 전화번호를 알아야 하듯, 네트워크 통신에서는 IP 주소(어느 컴퓨터인지)와 포트(Port) 번호(그 컴퓨터의 어떤 프로그램인지)가 필요합니다. 이 두 가지 정보가 결합되어 하나의 소켓을 형성합니다.주요 특징추상화: 복잡한 네트워크 하부 계층(TCP/IP 등)을 몰라도, 소켓 API를 통해 데이터를 주고받을 수 있게 해줍니다.양방향성: ..

기술 학습 2026.02.09
728x90