[IT국비지원] 개발자 교육 34일 차 : JAVA(2023.09.12)fit.구디아카데미,김지훈 강사님

Nicole Gold·2023년 9월 12일
0

K-digital training

목록 보기
35/60

이하 구디아카데미 김지훈 강사님의 수업자료와 강의 내용 정리, 실습한 내용을 정리함

잠을 잘 자야 일도 잘하는 법이다... sleep 은 비효율적인데. 아무 말 대잔치╰(°▽°)╯

Thread Pool

Thread Pool 생성

  • Thread Pool 은 대여소 같은 역할을 수행한다.
  • Thread 를 보유하고 있다가 순서에 따라 빌려주고, 사용 후 돌려받는다.
  • Thread Pool 은 ExecutorService 객체를 통해 생성된다.
  • 생성 시에는 초기 코어 최대 스레드 수를 명시해 준다.

Thread Pool 생성 방법

  • cachedTreadPool : 스레드가 없다가 요청이 있으면 만든다. 요청이 있을 때 반납받은 스레드가 있으면 그걸 빌려준다. 반납받은 스레드가 60초 이상 빌리는 사람이 없으면 폐기한다.

  • FixedTreadPool : 평소에 n 개의 스레드를 유지한다.
    현재 cpu 에서 사용 가능한 스레드수를 int n 에 담아, n 개로 ThreadPool 를 픽스해서 만들어둔다. (코드상 이것을 pool2 변수에 담는다.)

Thread Pool 의 작업

  • Thread Pool 의 작업은 Runnable 과 Callable 로 생성한다.
  • 두 방법의 차이는 return 값의 유무이다.

  • 생성된 작업은 submit() execute() 로 실행 시킨다
  • Callable 을 구현받았으면 submit() 로 요청해야 하고
  • Runnable 을 구현받았으면 execute() 로 요청해야 한다. 그런데 submit() 으로도 요청할 수 있다.
  • Thread Pool 의 Thread 는 Main Thread 가 종료되더라도 계속 실행 상태로 남아 있는다.
  • 그래서 종료 메서드가 따로 존재한다.

Runnable

  • 사용 가능한 프로세스를 getRuntime 으로 가져와 변수 n 에 담는다.
  • FixedThreadPool 을 이용하여 n 을 pool 변수에 담는다.
  • Runnable 을 runnable 변수로 객체화해오면서 익명 함수 실행
  • void 타입 run 메서드로 "Runnable 처리" 를 콘솔에 찍는다.
  • pool 에 runnable 을 execute 를 사용해 실행시킨다.
  • 작업 중인 스레드가 있으면 종료까지 기다린 후에 pool 을 닫도록 pool.shutdown 메서드를 사용해 준다.
  • 이때 종료되지 않은 스레드가 있으면 기다리도록 awaitTermination 을 pool 에 사용해 준다.(1초 동안 기다리도록)
  • 결과값을 boolean 타입 변수 end 에 담는다.
  • end 에는 정상 종료되었다면 true, 강제 종료되었다면 false 가 담긴다.
  • 콘솔에 end 출력

callable

  • 사용 가능한 프로세스를 getRuntime 메서드를 통해 변수 n에 담아준다.
  • 변수 n을 FixedThreadPool 을 사용해 변수 pool 에 담는다(스레드 풀을 만들어줌)
  • Callable을 String 타입으로 객체화하여 call 변수에 담고 익명함수를 실행한다.
  • call 메서드 실행, 콘솔에 "callable 실행" 을 찍어주고 return 값은 "complete" fh gksek.
  • call 은 submit 함수를 통해 pool에 실행시키고 그 값을 result 에 받는다.
  • 콘솔에 result 값을 받아와 찍는다.
  • 작업 중인 스레드가 있으면 종료까지 기다린 후에 pool 을 닫도록 shutdown 메서드를 사용해 준다.
  • 이때 종료되지 않은 스레드가 있으면 1초 동안 기다리도록 awaitTermination 을 사용해 변수 end 에 담아준다.
  • 콘솔에 end 찍기

Thread Pool 10 번 출력

  • 가용한 스레드를 가져와 pool 을 만듦
  • Runnable 을 run 으로 객체화 후 익명객체 실행
  • run 메서드로 현재 실행 중인 thread 의 이름 콘솔에 찍어줌
  • for 문으로 1~10까지 run을 반복 실행해 줌
  • pool 을 모두 실행 후 닫아줌 > 실행 완료되지 않은 것 있으면 1초 기다림 > 콘솔에 end 값 찍기

Thread Pool Blocking

  • Thread Pool 에서는 runnable 과 callable 관계없이 작업 완료 후 Future 객체를 반환한다.
  • Future 객체를 가져 오는 get() 메서드는 join() 과 같은 역할을 수행한다.
  • 우리는 이것을 Blocking 이라고 한다.

Blocking1

Blocking2

요약

  1. Runnable 은 반환 값이 없지만 callable 은 반환 값이 있다.
  2. callable 은 반환 값이 있으므로 submit() 만 사용 가능하다.
  3. execute() 는 예외를 일으킨 스레드를 죽인다.
  4. submit() 사용하면 join() 처럼 blocking 이 가능하다.

  1. 스레드 풀 사용의 장점은?
  • Thread 를 보유하고 있다가 순서에 따라 빌려주고 사용 후 돌려받는 형식으로, 낭비를 줄여준다.
  1. 스레드 풀 생성시 어떤 객체를 통해 생성하는가?
  • newCachedThreadPool / newFixedThreadPool
  1. 스레드 풀 생성 메서드에 들어가는 매개변수는 무엇을 나타내나요?
  • 현재 cpu 에서 사용 가능한 스레드 수 / 기본적으로 보유하고 있는 스레드 수
  1. 스레드 풀 생성 방법 2가지의 차이점은?
    -newCachedThreadPool : 요청이 있을 때 생성하고 없으면 폐기 / newFixedThreadPool : 기본적으로 보유하고 있는 스레드가 있어서 빌려줌
  2. Runnable 구현 클래스와 Callable 구현 클래스의 차이점은?
  • 반환값이 없다 / 있다
  1. execute, submit의 차이점을 설명하시오.
  • execute: Runnable 의 실행 메소드. void 타입으로 작업 처리 결과를 받지 못함. 작업 처리 도중 예외 상황에 스레드를 종료하고 풀에서 스레드 제거
  • submit : calluble 의 실행 메서드. 작업 처리 결과를 Future 를 통해 반환됨. 작업 처리 도중 예외 상황에도 스레드를 종료하지 않고 재사용.
  1. 종료 메서드를 사용해야 하는 이유에 대해 설명하시오.
  • 사용한 스레드를 종료해서 낭비를 줄이기 위해?
  1. Thread Pool 을 종료시키는 메서드 3가지는 무엇인가?
  • shutdown / shutdownNow / awaitTemination
  1. Shutdown 메소드의 대해 설명하시오.
  • 실행 중인 스레드가 모두 종료 후 스레드 풀을 닫아줌
  1. awaitTermination은 어떤 메소드 호출 이후 반환되는지 설명하시오.
  • Shutdown 메소드 이후.
  1. ShutdownNow의 단점을 설명하시오.
  • 실행이 마무리되지 않은 메서드를 무시하고 종료함
  1. blocking을 활용하기 위해서 Future 객체의 어떤 메서드를 사용해야 하는지
  • get() 메서드 사용
  1. blocking을 안 썼을 때와 썼을 때, 콘솔 창에서의 차이는?
  • 쓰지 않으면 메인메서드가 먼저 출력됨
  1. blocking을 쓰는 세 가지 방법은?
  • Runnable 에 submit 사용 / sleep 사용 / pool.submit(call).get(); // <- 의미 없는 값을 반환하도록 하여 Callable 구현



JAVA Network

정의

  • Network 는 서로 다른 computer 끼리 서로 연결되어 있는 망을 의미한다.
  • Computer 가 사물 (Thing) 로 변화하면서 IOT(Internet Of Things) 가 되는 것이다.
  • Network 에서의 첫 번째 과제는 목적지 컴퓨터 까지 어떻게 가느냐이다.
  • 실생활에서 현재 지점에서 약속 장소에 어떻게 가느냐와 마찬가지이다.
  • Network 에서는 그 주소가 IP 주소와 port 번호이다.
  • 그리고 이 주소를 알기 쉽게 하기 위해 우리는 domain 이라는 것을 사용한다.

Network 기초

  • network 세계에서 도착해야 할 목적 computer 를 server 라고 한다.
  • 그리고 그곳을 찾아가는 computer 를 client 라고 한다.
  • Client 는 특정 목적을 수행하기 위해 server 에게 찾아가 request 를 한다.
  • Server 는 Client 의 요청에 대해서 응답한다.

공인IP(public)
외부에서 알고 들어올 수 있는 주소
사설IP(private)
192 로 시작하면 사설 IP / 내부에서만 알 수 있는 주소

공유기(라우터)
공유기가 공인 IP를 받아서 내부적으로 뿌려준다.(사설IP)

IP 주소 얻기

  • Java 에서는 자신의 IP 를 얻을 수 있다.
  • 특정 domain 에 연결되어 있는 IP 도 찾아낼 수 있다.

TCP(Transmission Control Protocol)

  • TCP 는 연결 지향 프로토콜로, 데이터를 안전하고 정확하게 전달한다.
  • 단점은 데이터를 보내기 전에 반드시 연결을 형성해야 하며, UDP 보다 속도가 느리다.

  • TCP 를 통해서 Client 로 Server 에 접속해 보자.
  • 둘이 접속을 하기 위해서는 Socket 이 필요하다.
  • 이것을 소켓 통신이라고 부른다.



내일 할 것 미리...

Echo Server

  • Client 와 Server 가 접속했다면 Stream 을 통해 data 를 전송할 수 있다.
  • 받은 내용을 그대로 응답하는 Echo 서버 만들기.
profile
JAVA 개발자로 가는 길

0개의 댓글

관련 채용 정보