# socket

272개의 포스트
post-thumbnail

[Backend] 깃허브 염탐하다가 궁금해진 SOCKET 통신

나는 전 프로젝트에서 HTTP 통신을 사용했는데, 다른 팀들의 깃허브를 살펴보다가 실시간으로 응답할 수 있는 SOCKET 통신을 사용한 개발 프로젝트에 눈길이 갔다. 궁금한 건 못 참는 나는 당장 SOCKET 통신에 대해 공부를 시작했는데, 보통 SOCKET 통신을 사용해 실시간 채팅방을 구현해보길래 나도 이 다음 게시물에 Socket.io를 사용해서 구현해 볼려고 한다. (기대하셍요 ~! 😋) 🚀 SOCKET TCP/IP 기반 네트워크 통신에서 데이터 송수신의 마지막 접점 양방향 연결지향성 통신 소켓은 프로토콜, IP주소, 포트로 정의된다. 프로토콜: 어떤 시스템이 다른 시스템과 통신을 원활하게 할 수 있도록 해주는 통신 규약 IP주소: 전 세계 컴퓨터에 부여된 고유의 식별 주소 포트: 네트워크 상에서 통신하기 위해서 호스트 내부적으로 프로세스가 할당 받아야 하는 고유한 숫자 소켓 통신의 흐름 ![](https://velog.v

4일 전
·
0개의 댓글
·
post-thumbnail

[Socket Programming] 주소체계와 데이터 정렬

소켓에 할당되는 IP주소와 PORT번호 인터넷 주소(Internet Address) 인터넷 상에서 컴퓨터를 구분하는 목적으로 사용되는 주소를 말한다. 4바이트 주소체계인 IPv4와 16바이트 주소체계인 IPv6가 존재한다. 소켓을 생성할 때 기본적인 프로토콜을 지정해야 한다. 인터넷 주소는 네트워크 주소와 호스트 주소로 나뉘게 되는데, 네트워크 주소를 이용해 네트워크를 찾고, 호스트 주소를 이용해 호스트를 구분한다. PORT 번호 IP는 컴퓨터에 부여하는 값으로 컴퓨터를 구분하는 용도로 사용되고, PORT번호는 소켓에 부여하는 값으로 소켓을 구분하는 용도로 사용된다. 하나의 프로그램 내에서는 둘 이상의 소켓이 존재할 수 있기 때문에, 둘

4일 전
·
0개의 댓글
·

[네트워크] Socket Programming in C

🖥 Server 👩🏻‍💻 Client 👀 더 알아보기 👯 Little Endian과 Big Endian 위의 코드에서 포트를 지정할 때 htons 함수를 사용하는데, 이때 h는 host를 의미하고 n은 network를 의미한다. 즉, host byte order를 network byte order로 변환한다는 의미이다. htonl, htons, ntohl, ntohs 함수 모두 host byte order와 network byte order 간의 변환에 사용되는 함수이다. 그런데 왜 숫자를 바로 집어넣지 않고 바이트 순서 변환을 하는 걸까? 이를 위해서는 Little Endian과 Big Endian에 대한 이해가 필요하다. 아래의 그림과 같이 비트 표시에서는 가장 앞에 있는 바이트를 가장 중요한 바이트로 본다. 이때 Little Endian은 가장 덜 중요한 바이트가 먼저 오도록 정렬하는 방

6일 전
·
0개의 댓글
·

Spring Socket란?

Spring Socket **Spring Socket는 Spring Framework에서 제공하는 WebSocket 프로토콜을 지원하는 기능이다.실시간 양방향 통신을 위한 프로토콜로, 서버와 클라이언트 간에 지속적인 연결을 유지하고 데이터를 실시간으로 주고받을 수 있게 해준다. 클라이언트와 서버 간에 실시간 데이터 푸시, 채팅 애플리케이션, 주식 시세 업데이트, 게임 등과 같은 실시간 기능을 구현할 수 있다.기존의 HTTP 프로토콜과 달리 WebSocket은 전이중(full-duplex) 통신을 지원하여 클라이언트와 서버가 동시에 데이터를 주고받을 수 있다.** > ### 동작과정 ▶ WebSocketHandler: WebSocket 연결과 관련된 이벤트와 데이터 처리를 담당하는 핸들러입니다. 클라이언트와의 연결, 연결 해제, 메시지 수신, 메시지 송신 등의 작업을 처리합니다. **▶ WebSocketSession: WebSocket 연결을 나타내는 객

6일 전
·
0개의 댓글
·
post-thumbnail

간단한 채팅 프로그램

스레드를 연습하기 위해 채팅 프로그램을 개발하기로 했다. 채팅 프로그램은 예제 코드가 많아서, 다른 코드를 참고하면서 소켓과 스레드에 대한 이해를 하는 것이 목적이다. 참고한 예제: https://youtu.be/Bp-hn2l39IA 소켓? 참고자료 네트워크 소켓 https://en.wikipedia.org/wiki/Network_socket [기계공학용어사전] 소켓 https://terms.naver.com/entry.naver?docId=346468&cid=44616&categoryId=44616 아마도 어원은 이것

2023년 9월 17일
·
0개의 댓글
·
post-thumbnail

[React] 실시간 채팅 화면 구현

[진행중인 포스트입니다.] 지난 포스트에서는 WebSocket과 react를 연동하여 연결을 확인하고 TroubleShooting을 하였습니다! 오늘은 제가 진행하고 있는 프로젝트에서 구현한 채팅 과정을 포스팅합니다! # 목표 현재 진행중인 MBTIcommunity 프로젝트입니다! 아직 해나가야 할게 많지만 오늘은 conversation 부분을 바꿔볼꺼에요! 오늘은 간단하게 대화하기를 누르면 채팅화면으로 전환되고 소켓에 연결해보겠습니다! 현재 react에 구현된 conversation 코드입니다! > 현재 이 컴포넌트는 ProfilesList라는 컴포넌트로 export되어 전체 화면 구현 코드에서 사용됩니다. > 여기서 대화하기 버튼을

2023년 9월 15일
·
0개의 댓글
·
post-thumbnail

[포스코x코딩온] KDT-Web-8 10~11주차 팀프로젝트 Do IT - 슬랙봇 전체 생성과정

서론 슬랙의 SocketMode, Webhook 을 활용해서 특정 이벤트 발생에 대해 커스텀 콜백을 반환하도록 했다. 본 프로젝트에선 사용자가 스터디 개설을 요청하는 이벤트가 발생할때 이후 슬랙에 전송된 스레드상에서 어떤 버튼을 클릭하는지에 따라 다른 콜백함수를 실행하도록 하여 어드민의 기능을 (스터디 개설 허용 판단) 슬랙봇을 통해 구현했다. 필요한 설정 슬랙봇 생성 slack api 에 접속해보면 Your Apps 를 통해 앱을 새로 생성해줄 수 있다. From scratch 클릭 ![](https://velog.velcdn.com/images/qmflf556/post/14e679df-2d3a-4d75-b5e9-618bbaaf76a9/image

2023년 9월 15일
·
0개의 댓글
·

07_소켓

socket 개인적으로 웹의 꽃은 네트워크라고 생각해서 그간 공부도 열심해 해왔다. (그렇다고 잘하는 건 아닐듯?) 그리고 웹에서 네트워크를 다룰때 꼭 마주치는 녀석이 이 "소켓"이라는 녀석이다. 이녀석에 대해 간단히 공부해보자. 소켓이란? 일단 소켓이 뭘까? 널널한개발자님에 의하면 소켓은 곧 "파일"이다. 그냥 파일에 read write한다고 생각하면 된다. 그럼 이녀석의 역할이 뭐냐면, 하나의 pc 안에서는 각 계층간에 정보를 전달할 때 쓰이고, 네트워크 상에서는 두 개의 프로그램 간 양방향 통신의 하나의 엔드포인트라고 할 수 있다. 네트워크 상에서는 대부분 TCP/IP를 사용한다고 한다. (UDP도 있긴 하다.) 그럼 웹소켓은 무엇일까? 웹소켓은 하나의 TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜이다. 그리고 HTTP나 HTTPS 위에서 동작하도록 설계되었으며, 따라서 포트는 80번 혹은 443번이다. HTTP 프로토콜과 구별은 되

2023년 9월 10일
·
0개의 댓글
·
post-thumbnail

블록체인p2p와 socket으로 구현하기

1.chain을 p2p로 관리하여 처리하기 1.MessageType enum 타입으로 객체의 role을 정해준다. 2.IMessage socket으로 보내줄 message의 interface이다. 3.P2P p2p기능을 구현할 함수들과 속성들을 담은 클래스이다. 4.private sockets: Array; socket주소를 담을 배열이다. 이 배열을 활용하여 다양한 ip와 포트에서 들어온 유저와 통신한다. 5.getSocket 소켓을 반환하는 함수이다. 6.connectSocket 소켓과 메세지를 매개변수로 받는 메서드이다. 소켓에 연결하여 본 함수를 실행시키면 일단 입장한 유저의 socket의 remoteAddress와 remotePort를 클래스의 속성(sockets)에 저장하고 구문에서 send로 message 이벤트를 실행시킨다. message 이벤트는 socket.send 함

2023년 9월 8일
·
0개의 댓글
·
post-thumbnail

Socket을 활용한 멀티 채팅 방 구현 ( feat. SSE vs Socket )

SSE vs Socket 채팅 방 구현에 앞서 먼저 SSE 와 Socket에 차이에 대해 설명하려고 합니다. 먼저 SSE ( Server-Send Events ) 는 단 방향 이벤트로 서버에서 받는 push Event에 사용되며 Socket 보다 가볍다는 특징을 갖고 있습니다. 단방향이기 때문에 서버 -> 클라이언트로만 통신이 가능하며 그의 반대인 클라이언트 -> 서버로의 통신은 불가합니다. Socket은 양방향 통신으로 서버 클라이언트간의 통신이 가능하며 지속적인 TCP 라인을 통해 데이터를 실시간으로 주고받습니다. 연결지향 통신으로 채팅 , 게임 , 주식 차트 등에 사용되며 주기적인 HTTP 요청을 하는 Polling ( Client Pull ) 과는 다르게 연결을 유지합니다. 이때 SSE 의 특징은 다음과 같습니다. WebSocket과 달리 별도의 프로토콜을 사용하지 않고 HTTP 프로토콜만 사용하여 가볍습니다. 접속 오류가 발생 시 자동으로 재연결을 합

2023년 9월 4일
·
0개의 댓글
·
post-thumbnail

[Network] TCP/IP 소켓의 타입과 프로토콜

소켓의 타입과 프로토콜 소켓의 생성 방법과 소켓별 특성 프로토콜(Protocol)이란? 컴퓨터 상호 간의 대화에 필요한 통신 규약이다. 소켓의 생성 프로토콜 체계(Protocol Family) 소켓이 통신에 사용하는 프로토콜 부류 정보 | 이름 | 프로토콜 체계(Protocol Family) | | --- | --- | | PF_INET | IPv4 인터넷 프로토콜 체계 | | PF_INET6 | IPv6 인터넷 프로토콜 체계 | | PF_LOCAL | 로컬 통신을 위한 UNIX 프로토콜 체계 | | PF_PACKET | Low Level 소켓을 위한 프로토콜 체계 | | PF_IPX | IPX 노벨 프로토콜 체계 | 소켓의 타입(Type) 소켓의 데이터 전송 방식 > 소켓의 타입 1: 연결지향형 소켓(SOCK_STREAM) > socket 함수의 두 번째 인자로 `SOCK

2023년 9월 3일
·
0개의 댓글
·
post-thumbnail

[Network] TCP/IP Socket, 소켓의 이해

소켓 운영체제에서 소프트웨어적으로 제공하는 컴퓨터 간 네트워크 연결을 제공한다. 소켓의 생성 과정 네트워크 프로그래밍에서 연결요청을 허용하는 소켓의 생성 과정을 말한다. > 서버 소켓 생성 과정 > 1단계: 소켓 생성 | socket 함수호출 2단계: IP주소와 PORT번호 할당| bind 함수호출 3단계: 연결요청 가능 상태로 변경 | listen 함수호출 4단계: 연결요청에 대한 수락 | accept 함수호출 > 클라이언트 소켓 생성 및 연결 요청 과정 > 1단계: 소켓 생성 | socket 함수호출 2단계: 연결 요청 | connect 함수호출 리눅스 vs. 윈도우 윈도우 소켓은 리눅스 소켓과 많은 부분이 유사한데 BSD 계열 유닉스 소켓을 참고하여 설계되었기 때문이다. > 리눅스 > 파일 == 소켓. 리눅스는 내부적으로 `소켓도

2023년 9월 3일
·
0개의 댓글
·
post-thumbnail

Socket IO

Socket IO Websocket은 클라이언트와 서버가 다른 인터페이스를 가지고 사용해야 하며 Websocket 객체 또한 모든 브라우저에서 사용할 수 있는 객체가 아니기 때문에 Socket IO 라이브러리를 사용한다. ⇒ node.js에서 Websocket을 사용할 때 훨씬 편하게 사용할 수 있게 만들어주는 모듈 특징 Websocket을 브라우저에서 사용할 수 없는 경우 롱 폴링으로 대체됨 주기적으로 연결 상태를 확인하는 하트비트 매커니즘 연결 해제된 상태에서의 패킷은 버퍼링, 다시 연결되면 전송 브로드캐스팅 서버 측에서 연결된 모든 클라이언트 또는 하위 클라이언트 하위 집합에 이벤트를 보낼 수 있음 멀티플렉싱 nodejs / client

2023년 8월 29일
·
0개의 댓글
·

[포스코x코딩온] 웹 풀스택 과정 9주차 회고 | Socket

지난 시간까지 복습을 마치고 이번주부터 소켓에 대해 배우게 됐다. 1. TCP/IP 1. TCP TCP는 데이터를 신뢰성있게 전송하기 위한 프로토콜을 말한다. 신뢰성 : 데이터의 손실, 손상 최소화하고 데이터 순서 보장 연결지향 : 데이터를 주고받기 전 송수신자간에 연결 흐름제어 : 데이터의 흐름을 제어하여 수신자가 처리할 수 있는 속도에 맞춰 데이터 전송 혼잡제어 : 네트워크 혼잡 상태를 감지하고 조절하여 네트워크 성능 유지 2. IP 인터넷상에서 데이터를 주고받기 위한 통신 규약 패킷기반 : 데이터를 작은 패킷 단위로 나누어 전송 비연결성 : 패킷은 독립적으로 처리되며, 수신자와 직접적인 연결이 필요하지 않음 라우팅 : 각 라우터가 패킷의 경로를 결정하여 목적지까지 전달 IP주소 : IP는 각 컴퓨터를 식별하기 위한 IP 주소를 사용 3. TCP/IP 4계층 ![](https://velog.velcdn.com/ima

2023년 8월 28일
·
0개의 댓글
·
post-thumbnail

[C# 서버] 소켓 프로그래밍 - JobQueue

Client-Server 여러 클라이언트가 하나의 서버를 통해 통신하는 구조를 나타내면 아래 그림과 같다. 위 구조에서 클라이언트는 서버와 통신을 위한 Session을 가지고 있고 Session을 통해 다른 클라이언트와 데이터를 주고 받을 수 있다. 하지만, 서버는 특정 클라이언트에 대한 정보가 오면 다른 클라이언트에게 Broadcast해주기 위해 연결된 클라이언트들의 Session 목록을 가지고 있어야 한다. 예를들어, 그룹채팅 시스템에서 한 클라이언트가 서버에게 채팅을 보내는 상황이라고 하자. 채팅을 보내는 상황순서는 아래그림과 같이 나타낼 수 있다. <im

2023년 8월 22일
·
0개의 댓글
·
post-thumbnail

[Socket] 채팅 기능 구현(Thymeleaf + WebSocket)

기술 블로그를 읽고 실습하여 작성한 게시글입니다. > WebSocket - WebSocket Spring WebSocket 소개 Thymeleaf + WebSocket 의존성 추가 WebSocket Hanlder 추가 WebSocketHandler의 구현체 ChatHandler 작성 WebSocketConfig 작성 @EnableWebSocket을 통한 WebSocket 활성화 웹 소켓 프로토콜 요청 [ws://~]로 시작된다. `registry.addHandler(chatHandler,

2023년 8월 21일
·
0개의 댓글
·

Java socket을 활용하여 다중 채팅 만들기

직관적으로 이해로 Java.io를 활용한 채팅 정복 io의 모든 정보를 아는 것이 아니라 필요한 것부터 익혀나가자. 코드를 보며 흐름을 이해해보자. 1. 서버 먼저 서버 코드를 보겠습니다. 우리는 지금 다중 채팅을 만들어보려고 합니다. 필요한 요소는 서버를 열어줄 ServerSocket 클래스 유저를 담을 동기화된 공간(userList) bind - accept를 while문 안에 사용하여 지속적으로 클라이언트의 연결을 수락할 바운더리 유저마다 생성될 thread 이걸 생각해보며 몇번씩 타이핑 해 보세요. 2. thread 큰 틀을 생각해보자 우리의 서버는 클라이언트와 “주고 받는” 것이 핵심이다. 이는 클라이언트에서도 핵심이 되는 내용이다. 주고 받는 것을 PrintWriter와 BufferdReader 를 생성하여 클라이언트와 통신할 수 있는 스트림을 설정한다! 2-1 근데 이걸 왜 쓰

2023년 8월 21일
·
0개의 댓글
·

외부 서버 간 http 통신 시 Socket timeout 이슈

외부 서버 간 http 통신 시 Socket timeout 이슈 1. 개요 프로젝트 진행 중 이전에 같은 고객사에서 진행했던 프로젝트에서 버그가 해결이 안되고 있다고 들어 잠깐 봐준적이 있었다. 해당 프로젝트의 시스템 구성은 dmz에 proxy 역할의 web server 두 대가 이중화 되어있고 내부망에 was가 이중화 되어 있는 구성이었다. web was로는 webtob, jeus를 사용했다. 2. 증상 was에서 외부 서버에 http rest api 통신을 할 때 간헐적으로 발생했는데 was 서버 내 로그에는 아무 에러로그가 안찍히고 jeus 내에 SocketInputStream.readSocket0 에러로그가 나오다

2023년 8월 21일
·
0개의 댓글
·
post-thumbnail

[C# 서버] 소켓 프로그래밍 - Serialization

Packet 서버와 클라이언트가 패킷통신을 할 때 패킷은 결국 Byte스트림으로 전송되는데 요청/응답 패킷에는 데이터가 있을 수 있다. 그렇다면 데이터를 패킷으로 변환하고 패킷을 데이터로 변환할 필요가 있는데 데이터를 패킷을 변환하는 것을 직렬화(Serialization)이라 하고 패킷을 데이터로 변환하는 것을 역직렬화(Deserialization)이라 한다. 패킷이 기본적으로 가지고 있어야 하는 정보와 인터페이스를 상위클래스로 묶어 나타내기 위해 Packet Class를 정의할 필요가 있다. 기본적인 정보는 패킷의 전체 크기와 패킷식별을 위한 패킷ID로 이를 정의한 코드는 아래와 같다.

2023년 8월 20일
·
0개의 댓글
·

[C# 서버] 소켓 프로그래밍 - PacketSession

PacketSession [소켓프로그래밍 - Session]에서 서버와 클라이언트 사이의 통신 Session을 구현하였는데 서버-클라이언트간의 패킷 통신같은 경우 받은 데이터를 패킷으로 조립하는 과정이 필요하다. 물론 사용할 때마다 패킷을 조립하는 부분을 구현해도 되지만 코드의 중복이나 구현시간을 고려하면 미리 PacketSession이라는 Session의 한 종류를 구현해 놓는게 더 효율적이다. 1. TCP Session을 구현한 TCP는 스트림 지향적인 프로토콜로 TCP는 데이터를 ByteStream으로 처리한다. ByteStream으로 처리한다는 것은 메세지의 경계를 구분하지 않는다는 것을 의미한다. 이로인해 아래 그림과 같은 상황이 발생할 수

2023년 8월 18일
·
0개의 댓글
·