New World

[JAVA #5] Thread & 소켓 통신(TCP/UDP) 본문

Self-Study/Study

[JAVA #5] Thread & 소켓 통신(TCP/UDP)

hyeovi 2022. 10. 5. 22:44
728x90
반응형

Thread

프로세스 내에서 동시에 실행되는 독립적인 실행 단위

 

장점

  • 빠른 프로세스 생성
  • 적은 메모리 사용
  • 쉬운 정보 공유

단점

  • 교착상태에 빠질 수 있다.
    * 교착상태 - 다중프로그래밍 체제에서 하나 또는 그 이상의 프로세스가 수행 할 수 없는 어떤 특정시간을 기다리고 있는 상태.

Thread와 Process 차이
Process : 실행중인 프로그램
Thread : 프로세스 내에서 실행되는 각각의 일, 프로세스 내에서 실행되는 세부 작업 단위로 여러 개의 스레드가 하나의 프로세스를 이루게 되는 것이다.

 

Multi-Thread 환경에서의 개발

Field member

필드(field)란 클래스에 변수를 정의하는 공간을 의미하며 이곳에 변수를 만들어두면 메소드끼리 변수를 주고 받는 데 있어서 참조하기 쉬우므로 정말 편리한 공간 중 하나. 객체가 여러 스레드가 접근하는 싱글톤 객체라면 field 에서 상태값을 갖고 있으면 안된다. 모든 변수를 parameter 로 넘겨받고 return 하는 방식으로 코드를 구성해야 한다.

 

동기화(Synchronized)

Collections의 util 클래스에서 제공되는 static 메소드를 통해 해결할 수 있다.

 

ThreadLocal : 스레드 사이에 간섭이 없어야 하는 데이터에 사용

멀티스레드 환경

- 클래스의 필드에 멤버를 추가할 수 없고 매개변수로 넘겨받아야 한다. 스레드 내부의 싱글톤을 사용하기 위해 사용한다. 주로 사용자 인증, 세션 정보, 트랜잭션 컨텍스트에 사용

 

스레드 풀 환경

- ThreadLocal 변수에 보관된 데이터의 사용이 끝나면 반드시 해당 데이터를 삭제해야 한다. 그렇지 않을 경우 재사용되는 스레드가 올바르지 않은 데이터를 참조할 수 있다.

 

ThreadLocal 을 사용하는 방법

  1. ThreadLocal 객체를 생성한다.
  2. ThreadLocal.set() 메서드를 이용해서 현재 스레드의 로컬 변수에 값을 저장한다.
  3. ThreadLocal.get() 메서드를 이용해서 현재 스레드의 로컬 변수 값을 읽어온다.
  4. ThreadLocal.remove() 메서드를 이용해서 현재 스레드의 로컬 변수 값을 삭제한다.

 

CheckedException VS UnCheckedException

  CheckedException UnCheckedException
처리 여부 반드시 예외를 처리 예외 처리를 강제하지 않음
확인 시점 컴파일 단계 실행(Runtime) 단계
예외 발생시 트랜잭션 처리 Roll-Back 하지 않음 Roll-Back 함
예외 종류 Runtime Exception을 제외한 모든 예외 Runtime Exception 하위 예외

 

? Spring Web MVC에서 요청 마다 Thread가 생성되어 Controller를 통해 요청을 수행할텐데, 어떻게 1개의 Controller만 생성될 수 있을까요?

 

? Thread-safe 하다는 의미와 설계하는 법을 설명해보세요.

두 개 이상의 스레드가 race condition에 들어가거나 같은 객체에 동시에 접근해도 연산결과의 정합성이 보장될 수 있게끔 메모리 가시성이 확보된 상태

  • java.util.concurrent 패키지 하위의 클래스를 사용
  • 인스턴스 변수 X
  • 동기화 블럭에서 연산을 수행

 

? 병렬 프로그래밍에 대해 아나요?

병렬 프로그래밍은 큰 문제를 프로세스 혹은 스레드가 나누어 처리를 하기 때문에 처리 속도가 향상되지만 난이도가 높아 구현하기 어렵습니다. 어떻게 나눠 처리할 것인지에 대한 고민이 필요합니다.

? 병렬 프로그래밍을 할 때 어떤 부분을 유의해야 하나요? 세마포어와 뮤텍스에 대해 알고 있나요? 생길 수 있는 문제는?

뮤텍스 : 한 스레드, 프로세스에 의해 소유될 수 있는 key를 기반

세마포어 : 현재 공유자원에 접근할 수 있는 스레드, 프로세스의 수를 나타내는 값을 기반

뮤텍스나 세마포어를 쓰더라도 데드락이 발생할 수 있습니다.

소켓 통신(TCP/UDP)

TCP(Transmission Control Protocol) UDP(User Datagram Protocol)
연결형 서비스 제공 비연결형 서비스 제공 (데이터를 데이터그램 단위로 전송)
높은 신뢰성 보장 낮은 신뢰성
연결의 설정(3-way handshaking)
연결의 해제(4-way handshaking)
데이터 수신 여부 확인 안함(3-way handshaking과 같은 과정 X)
데이터 흐름 제어, 혼잡 제어 TCP보다 전송속도가 빠름
전이중, 점대점 서비스(양방향 송수신 서비스) 데이터의 전송 순서가 바뀔 수 있음

 

? OSI7계층과 그 존재 이유, TCP/IP 4계층에 대해 설명해보세요.

OSI7계층은 네트워크 통신을 구성하는 요소들 7개의 계층으로 표준화 한 것이다. 통신이 일어나는 과정을 단계별로 파악할 수 있어, 문제가 발생하면 해당 문제를 해결하기 편해진다. 실제로 우리가 사용하는 네트워크는 TCP/IP 4계층으로 통신에 실제로 사용되는 계층이고 1,2 계층이 1계층, 5, 6, 7계층이 4계층으로 운영된다.

 

? TCP 와 UDP의 차이점에 대해 설명해 주세요

TCP는 연결형으로 연결의 설정과 해제를 통해 양방향 송수신 서비스를 통해 높은 신뢰성을 보장해준다. UDP는 비연결형으로 데이터 수신 여부를 확인하지 않아 전송 속도가 빠르며 낮은 신뢰성을 갖는다.

반응형
Comments