-
Notifications
You must be signed in to change notification settings - Fork 0
이경민 2주차 학습일지
KyungMin Lee edited this page Jul 7, 2024
·
9 revisions
2024-07-01 (월)
2024-07-02 (화)
-
일반적으로 사용하고자 할 때
Executors
의 펙토리 메서드를 사용해서 구성한다!- 가장 일반적인 사용 시나리오를
Executors
에 미리 구성해놓고 사용하기를 권장함!- Unbonded Thread Pool의 경우:
Executors.newCachedThreadPool()
- Fixed Size Thread Pool의 경우:
Executors.newFixedThreadPool(int)
- Single Background Thread의 경우:
Executors.newSingleThreadExecutor()
- Unbonded Thread Pool의 경우:
- 가장 일반적인 사용 시나리오를
-
코어 풀 사이즈와 맥시멈 풀 사이즈 설정의 역할은?
-
.execute(Runnable)
메서드를 통해 실행되는 스레드의 갯수가 코어 풀 사이즈보다 작으면 다른 스레드가 유휴 상태더라도 무조건 새로운 스레드를 생성해 작업을 시작합니다! - 코어 풀 사이즈보다는 많지만 맥시멈 풀 사이즈보다 적을때는? 큐가 꽉 차 있는 경우에만 새로운 스레드를 생성해요!
- Q. 코어 풀 사이즈랑 맥시멈 풀 사이즈가 동일하면요? -> A.
Fixed Size Thread Pool
이 생성됩니다! - Q. 맥시멈 풀 사이즈를
Integer.MAX_VALUE
로 설정하면요? -> A. 이론상 임의의 수 만큼 스레드 작업을 수행할 수 있다! - Q. 한번 정하면 못바꿔요? -> A. ❎.
.setCorePoolSize(int)
,.setMaximunPoolSize(int)
로 동적 변경이 가능함
-
-
큐?
- 모든
BlockingQueue
구현체는 스레드 풀에 요청된 작업을 전송하거나 보류하는데 사용할 수 있다. - 코어 풀 사이즈보다 많은 요청이 들어온다면 항상 큐에 요청을 추가합니다.
- 큐가 꽉 차버린다면 맥시멈 풀 사이즈를 초과하지 않도록 새로운 스레드를 생성해줍니다.
- 큐에는 3가지 전략이 존재합니다.
-
Direct handoffs
: 작업이 큐에 머무르지 않고 바로 스레드로 전달되는 전략.SynchronousQueue
와 같은 큐를 사용하며Integer.MAX_VALUE
만큼의 풀 사이즈가 필요합니다. -
Unbounded Queues
: 용량 제한이 없는LinkedBlockingQueue
와 같은 큐를 사용해 코어 풀 사이즈를 넘어가는 요청은 모두 큐에 추가하는 전략 -
Bounded Queues
: 크기가 제한된ArrayBlockingQueue
와 같은 큐를 사용해 큐에 저장되는 요청이 큐의 크기보다 커지는 경우 맥시멈 풀 사이즈까지 스레드를 생성하는 전략
-
- 모든
-
거절된 작업은?
-
RejectedExecutionHandler.rejectedExecution(Runnable, ThreadPoolExecutor)
메서드로 처리됩니다!
-
-
Accept
헤더-
MIME 타입
으로 표현되는, 클라이언트가 이해 가능한 컨텐츠 타입 종류를 서버에게 알려주는 역할을 담당하고 있습니다.-
MIME 타입
:Multipurpose Internet Mail Extensions
는 문서, 파일 또는 바이트 집합의 성격화 형식을 표현하며 RFC 6838에 의해 정의 및 표준화되어 있다!
-
- 문법:
<MIME_type>/<MIME_type>
,<MIME_type>/*
,*/*
-
q=
라는품질 값
가중치를 갖을 수 있으며, 이를 활용해 서버는 선호 순서를 정해 응답할 수 있다. -
품질 값
?- 구분된 목록에서 값의 우선순위를 설명하는데 사용합니다!
-
0
에서1
사이의 값을 포함하며 소수점은 최대 3자리까지 가능합니다. - 기본값은
1
(최대)
-
Accept
헤더의 응답은 여러MIME 타입
이 올 수 있다! 👍🏻
-
-
Content-Type
헤더- 응답하는 리소스의 미디어 타입을 표현하기 위해서 사용!
- 반환된 컨텐츠의 유형이 실제로 무엇인지 알려주기!
-
❓
Accept
헤더에서 요청한 MIME 타입과 일치한 반환 데이터가 존재하지 않을 때는 어떻게 해야하나요?-
406 Not Acceptable
예외를 발생시키면 됩니다 👍🏻
-
-
InputStreamReader
- 바이트 스트림에서 문자 스트림으로 연결되는 다리 역할을 한다
- 바이트를 문자로 디코딩
-
.read()
메서드를 호출할 때마다 하나 이상의 바이트를 읽어 온다(I/O 작업을 한다.)
- 바이트 스트림에서 문자 스트림으로 연결되는 다리 역할을 한다
-
BufferedReader
- 문자, 배열 및 줄을 효율적으로 읽을 수 있도록 버퍼링을 활용해 입력 스트림에서 텍스트를 읽어오기!
- 버퍼 크기는 지정하거나 기본 크기(8192 바이트) 사용이 가능해요
-
왜
BufferedReader
사용이 권장될까?- 내부적으로 버퍼를 사용해서 한 번에 많은 양의 데이터를 읽어와 필요한 만큼만 데이터를 반환할 수 있다.
- 한번에 데이터를 하나씩이 아닌 버퍼를 채운 후 버퍼에서 데이터를 가져오기에 I/O 에서 이점이 매우 크다!
2024-07-03 (수)
-
왜 URL을 인코딩 + 디코딩할까?
-
/create?userId=javajigi&password=password&name=%EB%B0%95%EC%9E%AC%EC%84%B1&email=javajigi%40slipp.net
-> 이미 인코딩 된 문장 - RFC-1738에 따르면 인터넷에서 URL은 US-ASCII 문자열을 이용해서만 전송하도록 명시하고 있다.
- 그렇다면 유니코드 문자열은 어떻하지? 라는 질문에 대한 해답으로 인코딩을 활용하게 되었다.
-
-
어 그렇다면 자바에서는 어떻게 읽어와야 하나요?
- 자바에서는
java.net
패키지의URLEncoder
, 'URLDecoder` 클래스를 활용해서 URL을 인코딩 및 디코딩 할 수 있습니다. -
URI
를 활용하는 경우에도 바로 디코딩이 가능하다는 점!
- 자바에서는
2024-07-04 (목)
-
301
Move Permantely- 요청된 리소스가 영구적으로 새로운 URL로 이동했음을 알려줍니다. -> 앞으로 모든 요청을 여기로 보내야해요!
- 웹사이트 구조를 재편성하거나 도메인을 변경하는 영구적인 변경에서 사용합니다!
- 브라우저가 리다이렉트를 캐시합니다!
-
302
Found- 리소스가 일시적으로 다른 URL에 위치함을 알려줍니다.
- 원래 URL을 사용해서 계속 요청을 보내야 합니다!
- 브라우저가 리다이렉트를 캐시하지 않습니다!