[자바의 신] 28장 다른 서버로 데이터를 보내려면 어떻게 하면 되나요?

한지연·2023년 4월 30일
1

📘 네트워크 프로그래밍

  • 서로 다른 장비끼리 데이터를 주고 받는 작업
  • 레이어로 구분되어 있음

📚 OSI 7계층 (Open System Interconnection)

  • 네트워크 프로토콜이 통신하는 구조를 7개의 계층으로분리하여 각 계층 간 상호 작동하는 방식을 정해놓음
  • 개방된 시스템, 시스템 간의 상호 연결성을 부여하는 표준

7계층을 나눈 이유

  • 1980년대 다양한 통신망이 혼재 → 네트워크 유형에 관계없이 상호통신 가능한 지침 필요 → 국제표준화기구는 OSI 7계층을 발표, 서로 다른 컴퓨터 기기 간의 네트워크를 형성할 수 있도록 규정한 네트워크 모델 표준안 제시

1️⃣ 물리 계층

  • 전기, 기계적인 신호를 주고받는 역할
  • 디지털에서 아날로그 혹은 그 반대로 신호를 변환
  • 가장 복잡한 계층
  • 장비: 통신 케이블, 허브, 리피터, 어댑터 등

2️⃣ 데이터 링크 계층

  • 물리적인 연결을 통해 인접한 두 장치 간의 신뢰성 있는 정보 전송을 담당하는 계층
  • 에러 검출, 재전송, 흐름제어 역할
  • Point to Point 전송
  • MAC 주소를 통해 통신
  • 장비: 스위치, 브릿지, 이더넷 등

3️⃣ 네트워크 계층

  • 종단 간 주소(IP) 정하고 Route(경로) 선택, 패킷 전달
  • End to End, Host to Host 전송
  • 라우팅 기능, 목적지까지의 최적 경로 알고리즘 사용
  • 장비: 라우터, L3 스위치, IP 공유기 등

4️⃣ 전송 계층

  • 종단 간 신뢰성 있고 정확한 데이터 전송을 담당
  • 신뢰성 있고 효율적인 데이터 전송을 위해 오류 검출, 복구, 흐름 제어, 중복 검사 등 수행
  • 데이터 전송을 위해 port 번호 사용
  • 방화벽과 프록시 서버가 전송 계층 해당

5️⃣ 세션 계층

  • 통신 장치 간의 상호작용 및 동기화를 제공
  • TCP/IP 세션을 만들고 없애는 역할
  • 통신을 하기 위한 세션 확립, 유지, 중단 역할
  • 연결 세션에서 데이터 교환과 에러 발생 시 복구 관리

6️⃣ 표현 계층

  • 데이터를 어떻게 표현할 것인지 정하는 역할
  • 데이터 인코딩-디코딩, 압축-해제, 암호화-복호화 수행

7️⃣ 응용 계층

  • 인터페이스 역할을 하는 계층
  • 응용 프로세스 간의 정보 교환
  • 텔넷, 크롬, 이메일, 데이터베이스 관리 등등

📚 TCP와 UDP

TCP

  • 신뢰성 있는 데이터 전송을 지원하는 연결 지향성 프로토콜
  • IP와 함께 사용되어 IP가 데이터의 전송을 처리하면 TCP는 패킷 추적 및 관리를 함
  • 흐름 제어와 혼잡 제어를 지원하며 데이터의 순서 보장
  • 상대방이 데이터를 받았는지 확실히 보장 받을 수 있음

UDP

  • 비연결형 프로토콜
  • 데이터 수신의 보장없이 일방적으로 데이터를 전달
  • 혼잡 제어를 지원하지 않아 TCP보다 전송속도가 빠르고 저렴함
  • 패킷 손실이 발생할 수 있음
  • 실시간 스트리밍과 같은 서비스에 자주 사용

📚 Socket

  • Socket 클래스는 데이터를 보내는 쪽에서 객체를 생성하여 사용
  • 원격에 있는 장비와의 연결 상태를 보관

ServerSocket

  • 서버에서는 ServerSocket 클래스를 사용하여 데이터를 받음

생성자

ServerSocket()
ServerSocket(int port)
ServerSocket(int port, int backlog)
ServerSocket(int port, int backlog, InetAddress bindAddr)
  • backlog: 큐의 개수, 객체가 바빠서 연결 요청을 처리 못하고 대기 시킬 때 최대 대기 개수
  • InetAddress: 특정 주소에서만 접근이 가능하도록 지정
  • ServerSocket 생성자는 별도로 연결작업을 해야만 대기가 가능
  • 사용하지 않을 시 꼭 close() 메소드 사용해 줄 것

Client Socket

  • 클라이언트에서 Socket 직접 생성

생성자

Socket()
Socket(Proxy proxy)
Socket(SocketImpl impl)
Socket(InetAddress addr, int port)
Socket(InetAddress addr, int port, InetAddress localAddr, int localPort)
Socket(String host,int port)
Socket(String host, int port, InetAddress localAddr, int localPort)

소켓통신 예시

public class PracticeSocket {

    public void createServer(){
        ServerSocket serverSocket = null;
        Socket client = null;

        try{
           serverSocket = new ServerSocket(8888);
           while (true){
               System.out.println("-----------Server start----------");

               client = new Socket("localhost", 8888);

               System.out.println("-----------accepted.-----------");

               BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

               String chat = "";

                while (true){
                    if(chat == null) break;

                    chat = br.readLine();
                    System.out.println("text: " + chat);
                }



               if("bye".equalsIgnoreCase(chat)){
                   System.out.println("-----Finish Server-----");
                   break;
               }

               br.close();
               client.close();
               System.out.println("--------------------------------------------");
           }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            if(serverSocket != null){
                try {
                    serverSocket.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    }

}
profile
배우고 활용하는 것을 즐기는 개발자, 한지연입니다!

0개의 댓글