티스토리 뷰

BackEnd/Java

Java Socket 통신

철철22 2018. 10. 8. 17:25
반응형

간만에 공부 블로그를 작성하는 것 같습니다.


web 개발을 할 때는 java Socket 통신이 아닌 HTTP 통신으로 restAPI 개발을 했었죠...


이번에 올릴 글은 java Socket 통신 입니다.


socket을 정확히 정의 하자 하면 저는 뭐라고 설명할지 몰라 우선 socket의 정의에 대해 검색을 해봤습니다. 위키백과에서는 다음과 같이 정의를 하고 있습니다.


네트워크 소켓(network socket)은 컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점이다. 오늘날 컴퓨터 간 통신의 대부분은 인터넷 프로토콜을 기반으로 하고 있으므로, 대부분의 네트워크 소켓은 인터넷 소켓이다.


인터넷 소켓은 다음과 같은 요소들로 구성되어 있다.


인터넷 소켓은 크게 두 개의 타입으로 분류할 수 있다.

  • UDP 프로토콜을 사용하는 경우
  • TCP 프로토콜을 사용하는 경우

라고 정의를 하고 있습니다.


ORACLE 의 What is Socket 에서는 socket을 다음과 같이 설명하고 있습니다.


근데 저는 영어를 못해서 다음 을 참고 했습니다. (영알못은 서럽습니다 ㅠㅠ)



출차 : https://stackoverflow.com/questions/40046981/java-tcp-socket-can-the-server-make-the-first-request-first출처 : https://stackoverflow.com/questions/40046981/java-tcp-socket-can-the-server-make-the-first-request-first


참고 글을 읽고 제가 아는 개념을 조합해서 socket 통신에 대해 정리하면


1. 서버는 특정 port가 바인딩된 소켓을 가지고 실행이 되며 클라이언트가 연결 요청을 할 때까지 대기상태가 됩니다.


2. 클라이언트는 연결할 서버의 호스트네임(ip주소) 및 연결할 포트를 알고 있어야 하며 다른 언어는 모르겠지만 java를 사용하는 클라이언트 또한 ip와 port가 바인딩된 소켓을 가지고 통신을 시도합니다.


3. 연결이 성공한다면 서버는 accept()를 하게 되며 그 이후에는 서로 주고 받고를 하다가 나중에 로직이 다 끝나면 소켓을 닫아주고 작업이 끝나게 됩니다.



java에서는 이러한 Socket 통신을 할 수 있게 패키지를 제공합니다. 

바로 java.net 패키지요. java api documentation을 참고해 주세요.



socket 통신 구현의 대표예제는 바로 채팅 프로그램인데요. 

한번 구현을 해보겠습니다.


이번 구현에서 제가 공부한 것들은


1. log4j 사용해보기

2. 채팅 내용을 DB에 저장해보기

3. 클라이언트 - 서버 통신이 끊겼을 때 재 접속 시도해보기

4. 접속 정보들을 properties로 빼보기


이 네가지 입니다.


log4j 는 console.log 가 아닌 logger를 남기기 위해 사용하였으며,

db는 mysql을 사용하습니다.


공부용으로 만들었기 때문에 허술하지만 프로젝트 구조는 다음과 같이 만들었습니다.





이 글에 소스를 다 보여주기에는 글이 너무 길어지니


구현 소스는 다음과 같이 올려놨습니다.


Chat-Server 

https://github.com/zlcjfalsvk/Chat-Server.git


Chat-Client

https://github.com/zlcjfalsvk/Chat-Client.git




참고

socket의 정의 (위키백과)

https://docs.oracle.com/javase/tutorial/networking/sockets/definition.html


java socket의 정의

https://docs.oracle.com/javase/tutorial/networking/sockets/definition.html

(한글)

http://www.daleseo.com/what-is-a-socket/

반응형

'BackEnd > Java' 카테고리의 다른 글

Apache Mina (아파치 미나)  (0) 2018.10.31
Thread pool(쓰레드 풀)  (0) 2018.10.22
cmd에서 java 실행  (0) 2018.10.01
string, stringbuffer, stringbuilder 차이점  (0) 2018.09.04
String(문자열)으로 Method(메소드) 호출  (0) 2018.08.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함