Java Socket CommuncationJava에서는 socket 통신을 위해 Socket 클래스와 서버 구성을 위한 ServerSocket 클래스를 지원하며, 아래와 같이 동작한다. Class SocketJava에서 Socket 클래스는 네트워크 상에서 두 프로세스 간 통신을 가능하게 하는 엔드포인트이다. 주로 클라이언트가 서버에 연결할 때 사용되며, TCP 기반으로 동작한다. (DatagramSocket은 UDP 기반) Socket의 기본 동작 흐름1. 클라이언트가 Socket 객체를 생성하여 서버의 특정 IP주소와 포트로 연결 요청2. 서버가 ServerSocket.accept()를 호출하여 클라이언트 연결 수락3. 클라이언트와 서버가 데이터를 송수신4. 통신이 끝나면 close()를 호출하여..
UDPUDP (User Datagram Protocol)는 비연결형, 속도 우선의 전송 계층 프로토콜로, 네트워크상에서 데이터를 빠르게 전송하기 위해서 설계됌. 특징비연결형 (Connectionless)UDP는 송신자와 수신자가 데이터를 교환하기 전에 연결 설정 과정이 없다. 이로인해 전송 지연이 적고 속도가 빠름.신뢰성 없음 (Unreliable)UDP는 데이터의 전달 여부를 확인하지 않는다.데이터의 신뢰성을 보장해야 하는 경우 애플리케이션 레벨에서 이를 별도로 처리해야 함.패킷 단위 전송UDP는 데이터를 데이터그램 단위로 전송한다.각 데이터그램은 독립적으로 처리되며, 패킷의 크기가 IP 패킷의 최대 크기를 초과하면 전송이 불가능함.빠른 속도신뢰성이나 순서 보장을 위한 부가적인 작업을 수행하지 않으므..
TCP (Transmission Control Protocol)TCP (Transmission Control Protocol)는 인터넷 프로토콜 스위트의 핵심 프로토콜 중 하나로, 신뢰성 있는 데이터 전송을 보장하는 연결 지향 프로토콜이다. TCP는 데이터의 전송 순서와 무결성을 보장하며, 패킷 손실 시 재전송을 통해 데이터의 완전성을 유지한다. 특징연결 지향 (connected-oriented)TCP는 데이터 전송 전에 송신자와 수신자 간의 연결을 설정한다.신뢰성 (Reliability)데이터가 손실되거나 손상된 경우 재전송을 통해 데이터의 무결성을 보장한다.흐름 제어 (Flow Control)송신자가 수신자의 처리 능력을 초과하지 않도록 데이터 전송 속도를 조절한다.혼잡 제어 (Congestion C..
Socket Communication(소켓 통신)소켓 통신은 네트워크상에서 두 프로그램 간의 통신을 가능하게 하는 기술이다.소켓은 IP 주소와 Port 번호로 구성되며, 클라이언트와 서버 간의 데이터 전송을 담당한다. IP Address (Internet Protocol Address, IP 주소)IP 주소는 네트워크상에서 장치를 구분하는 고유한 식별번호이다. IP 주소는 두 가지 버전이 있다.1. IPv4 : 32비트 주소 체계로, 4개의 8비트 숫자로 구성된다.예: 192.168.0.12. IPv6 : 128비트 주소 체계로, 8개의 16비트 숫자로 구성된다.예: 2001:0db8:85a3:0000:0000:8a2e:0370:7334 Port (포트)포트는 IP 주소와 결합되어 특정 네트워크 서비스나..
특징여러 개의 스레드를 만들어 두고 여러 번 재사용되는 작업자 스레드 그룹을 나타낸다.고정 크기로 생성된 스레드 풀에 Runnable object를 주고 실행을 요청하면, thread pool에서 thread를 가져와 실행한다.만약 스레드 풀에 남아 있는 스레드가 없다면, 유휴 스레드가 생길 때 까지 해당 작업은 실행되지 못하고 대기 상태에 있게 된다.실행 중이던 스레드는 작업이 완료되면 다시 스레드 풀로 돌아오게 되고, 대기 중인 작업이 있는 경우 다시 실행되게 된다.장점스레드 생성과 삭제에 따른 시간과 자원을 절약할 수 있다.스레드 생성을 제한함으로써, 무분별한 자원 사용에 따른 문제점을 방지할 수 있다.주의할 점DeadlockMulti-thread와 관련된 모든 프로그램에서 교착 상태가 발생할 수 ..
Deadlock은 mutual exclusion 과정에서 자원 접근 권한 획득과 자원 접근 권한 반환 관계의 꼬임으로 발생한다. Hold and Wait (점유 대기)다수의 스레드가 서로 다른 락을 획득한 후, 다른 락을 기다리며 무한 대기 상태에 빠지게 된다. Circular Wait (순환 대기)순환 대기는 점유 대기와 공유 자원 획득 후 다른 공유 자원 획득 시까지 무한 대기 상태는 동일 하지만, 서로 다른 자원을 점유하면서 서로의 자원을 기다리며 순환 대기 상태에 빠지게 된다. Starvation (기아 상태)다른 프로세스나 스레드가 공유자원의 접근 권한을 지속적으로 가짐으로써 발생할 수 있다.프로세스나 스레드가 공유 자원의 접근 권한을 해제하더라도 운영 방식 등의 이유로 인해 해당 프로세스나 ..
Thread는 하나의 프로세스 내에서 자원을 공유하면서 여러 개가 동시에 실행될 수 있다. Race Condition (경쟁 조건)Race condition은 둘 이상의 thread가 동시에 공유 자원 접근 시 발생한다. Critical Section (임계 구역)병렬 컴퓨팅에서 두 이상의 process 또는 thread가 동시 접근이 허용되지 않는 공유 자원에 접근하는 코드의 블록을 말함. Mutual Exclusion (상호 배제)Mutual exclusion이란 두 개 이상의 process 혹은 thread가 동시에 하나의 공유 자원으로 발생할 수 있는 race condition 문제를 해결하기 위해 어느 시점에서의 공유 자원 접근을 하나의 process 혹은 thread로 제한하는 것을 말한다..
메인 스레드 (Main Thread)자바 프로그램이 실행되면 JVM은 기본적으로 하나의 스레드를 생성하며, 이 스레드가 메인 스레드이다.메인 스레드는 public static void main(String[] args) 메서드를 실행하며, 자바 프로그램의 진입점 역할을 한다.메인 스레드는 자바 프로그램의 생명주기를 관리하며, 프로그램의 기본 스레드로 작동한다. 특징1. 프로그램의 시작점메인 스레드는 main() 메서드를 호출하며, 모든 프로그램 실행은 여기서부터 시작된다. 2. 프로그램 종료 관리자바 프로그램은 Main Thread와 그에 의해 생성된 모든 스레드가 종료될 때 프로그램이 종료된다. 3. 멀티 스레드 프로그램의 조정메인 스레드는 다른 사용자 정의 스레드를 생성하거나 조정할 수 있다.메인 스..
스레드란?프로세스 내에서 실행되는 여러 개의 실행 단위로, 경량화 프로세스라고 부르기도 한다.프로세스 내의 주소 공간이나 자원을 공유할 수 있다.각각 스레드는 각자의 스택과 레지스터 셋을 가지고 있다. 스레드 제어 블록 (Thread Control Block, TCB)스레드를 관리하기 위해 사용하는 데이터 구조스레드 ID (Thread ID)스레드 상태 (Thread State)프로그램 카운터 (Program Counter, PC)레지스터 값 ( Registers)스택 포인터 (Stack Pointer)우선순위 (Priority)스레드별 리소스 정보스레드 소속 정보동기화 정보 Thread 생성자바에서 멀티 스레드 프로그래밍을 구현하는 방법에는 크게 두 가지가 있다. 1. Thread 클래스 상속받아 구현..
프로세스란?프로그램을 실행시킨 인스턴스컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 (스케줄링의 대상이 되는 작업과 같은 용어로 쓰임)\프로그램 = 보조 기억 장치에 저장된 실행 코드프로세스 = 프로그램을 가동하여 프로그램 자체와 프로그램의 상태가 메모리상에서 실행되는 작업 단위같은 시간에 여러 개의 프로그램을 실행하는 것을 멀티태스킹 이라고 한다. 프로세스의 구성 요소코드 섹션 (Code Section)실행할 프로그램의 명령어(코드)가 저장된 메모리 영역CPU는 이 영역의 명령어를 읽고 실행한다.데이터 섹션 (Data Section)전역 변수 및 초기화된 데이터가 저장되는 영역프로그램이 실행되면서 공유되거나 수정될 수 있는 데이터가 포함됨.힙 (Heap)동적으로 메모리를 할당받는 영역런타임에 필요..