21.09.24 16:28 작성
·
264
답변 1
4
안녕하세요, 포닥 님. 공식 서포터즈 codesweaver 입니다.
.
쓰레드의 정의는, 어떠한 프로그램 내에서, 특히 어떤 프로세스 내에서 실행되는 하나의 흐름을 말합니다.
.
질문하신 톰캣은 웹서버로써, 고객의 HTTP 요청을 처리하는 프로세스를 담당하며 이를 효율적으로 처리하기 위한 쓰레드풀을 운영합니다.
.
JPA도 하나의 프로세스로 스프링 컨테이너와 DB 사이에서의 중계자 역할을 맡고 있습니다. JPA또한 업무 효율을 위한 쓰레드풀을 별도로 운영합니다. (보통 HikariPool 이라고 하는 쓰레드풀 라이브러리를 사용합니다)
.
이 둘의 쓰레드는 별도로 관리되기에 서로 영향을 미치지 않습니다. 단, 어떤 HTTP요청이 많은 DB조회를 요구한다면 톰캣의 스레드 1개와 JPA의 스레드 여러개를 차지할 수 있습니다.
무슨 비유가 있을까 생각해봤는데, 스키장에 가서 스키를 빌려주는 창구가 톰캣의 스레드이고, 리프트를 탈 수 있는 창구가 JPA 스레드 라고 생각하시면 어떨까요. 창구는 창구대로 효율을 위해 창구의 갯수를 여러개 늘려서 운영하면 효율적이겠지요. 리프트도 마찬가지로 여러대를 운영할 수록 사람들의 대기 시간은 점점 줄어들지요. 하지만 창구와 리프트는 서로 영향을 미치지는 않습니다. (괜한 비유로 더 어려워졌나요? 죄송합니다)..
감사합니다.