Skip to content

이경민 2주차 학습일지

KyungMin Lee edited this page Jul 7, 2024 · 9 revisions
2024-07-01 (월)
2024-07-02 (화)

- 🛠️ ThreadPoolExecutor의 동작방식

  • 일반적으로 사용하고자 할 때 Executors의 펙토리 메서드를 사용해서 구성한다!

    • 가장 일반적인 사용 시나리오를 Executors에 미리 구성해놓고 사용하기를 권장함!
      • Unbonded Thread Pool의 경우: Executors.newCachedThreadPool()
      • Fixed Size Thread Pool의 경우: Executors.newFixedThreadPool(int)
      • Single Background Thread의 경우: Executors.newSingleThreadExecutor()
  • 코어 풀 사이즈와 맥시멈 풀 사이즈 설정의 역할은?

    • .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) 메서드로 처리됩니다!

출처

- 🔍 HTTP RequestAcceptHTTP ResponseContent-Type 살펴보기

  • 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 예외를 발생시키면 됩니다 👍🏻

출처

- 🥊 BufferedReader vs InputStreamReader

  • InputStreamReader

    • 바이트 스트림에서 문자 스트림으로 연결되는 다리 역할을 한다
      • 바이트를 문자로 디코딩
    • .read() 메서드를 호출할 때마다 하나 이상의 바이트를 읽어 온다(I/O 작업을 한다.)
  • BufferedReader

    • 문자, 배열 및 줄을 효율적으로 읽을 수 있도록 버퍼링을 활용해 입력 스트림에서 텍스트를 읽어오기!
    • 버퍼 크기는 지정하거나 기본 크기(8192 바이트) 사용이 가능해요
  • BufferedReader 사용이 권장될까?

    • 내부적으로 버퍼를 사용해서 한 번에 많은 양의 데이터를 읽어와 필요한 만큼만 데이터를 반환할 수 있다.
    • 한번에 데이터를 하나씩이 아닌 버퍼를 채운 후 버퍼에서 데이터를 가져오기에 I/O 에서 이점이 매우 크다!

출처

2024-07-03 (수)

❓ URL 디코딩 살펴보기

  • 왜 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 vs 302

  • 301 Move Permantely
    • 요청된 리소스가 영구적으로 새로운 URL로 이동했음을 알려줍니다. -> 앞으로 모든 요청을 여기로 보내야해요!
    • 웹사이트 구조를 재편성하거나 도메인을 변경하는 영구적인 변경에서 사용합니다!
    • 브라우저가 리다이렉트를 캐시합니다!
  • 302 Found
    • 리소스가 일시적으로 다른 URL에 위치함을 알려줍니다.
    • 원래 URL을 사용해서 계속 요청을 보내야 합니다!
    • 브라우저가 리다이렉트를 캐시하지 않습니다!

출처

2024-07-05 (금)

👼 개인 활동을 기록합시다.

개인 활동 페이지

🧑‍🧑‍🧒‍🧒 그룹 활동을 기록합시다.

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally