20230106

Jin·2023년 1월 6일

읽은것, 쓴것

스터디 후기

시간순서로 생각의 흐름을 기록해보자.

  • 스터디를 하며 RunnableCallable 의 차이에 대해서 알아봄.
  • Runnable을 보다가 문득 TomcatCatalina에서 요청이 들어왔을때, 어떤식으로 스레드 생성 및 분배를 하는 것인지 궁금해짐.
  • 처음에는 DispatcherServlet에서 스레드를 생성해서 나눠주는 것인가라는 생각을 해서 찾아봄. 스레드 생성과 관련한 부분을 찾을 수 없었음.
  • ThreadPool을 이용할 거라는 생각에 Tomcat GitHub 레포지토리에서 ThreadPool 관련해서 검색함. 복잡한 구조탓에 정확히 어느지점에서 실행하는지 알 수 없었음.
  • 각 스레드마다 스택을 갖고 있으므로, stack trace를 보면 스레드가 시작한 지점을 알 수 있을 거라 생각함.
  • 다음과 같이 컨트롤러를 코딩하고, 예외를 냄.
      @RestController
    class GreetingController {
        @GetMapping("/")
        fun hello(): String {
            throw Exception("뭔가 잘못되었다.")
        }
    }
  • http GET localhost:8080


아래에서 부터 시간순으로 스레드가 생성되고 Coyote에서 소켓연결, HTTP 연결을 처리한 후, Catalina에서 DispatcherServlet을 거쳐서 메시지 파싱을 한 후에 각 Servlet에 분배가 되는 과정을 볼 수 있었음.

얻은 인사이트

이미 알고 있는 것을 최대한 활용하는 지점에서 경계가 보일때 새로운 것이 나타난다. 새로운 지식을 얻었을때 기존의 것과 충돌되는 부분을 찾지 않는다면, 새로운 것과 이전 것은 그저 개별적인 지식으로 머물게 된다.

경계에 부딪혔을때 증상은 당황되고 제대로 설명이 안되는 지점이 나타나는 것. 이때부터 진짜 재미있는 지점이 시작되는것 같다.

그리고, 이때부터 침착함이 필요한 것 같다. 새로운 연결을 만들기 위해서, 비교적 연관성이 낮게 설정되어 있던 지식을 탐색하거나 미지의 것을 찾아야하기 때문이다.

0개의 댓글