자바를 처음 공부하게 되면, 마지막 즈음에 배우게 되는 Thread라는 개념이 있다.
취업을 하고, 실무에서 spring, spring boot를 다루며 직접적으로 Thread라는 코드 본 것은 약,, 1-2번? 이었던 것이었다.
분명 자바 배울 때 배웠던 개념인데
실무에서는 별로 중요하지 않은것인가? 하는
-
이상한 호기심이 생겼다.

Thread? 그거 왜 씀?
자바에서 여러가지 일을 동시에 처리하기 위해 사용한다.
저는 멀티가 안되는 사람이라... 한 번에 한가지 일 밖에 못하지만,...
컴퓨터는 똑똑하니까 한 번에 여러가지 일을 하면 당연히 효율적이잖아요? ◠‿◠
들어가기 전에...
Thread를 알아보기 전에 꼭 알아야 더 잘 Thread를 이해할 수 있는 Process를 먼저 알고 갑시다.ᐟ.ᐟ
프로세스
다들 컴퓨터하면서 작업관리자 열어서 왜 느린지 확인한 적 있나요?

프로세스란 바로 지금 이 컴퓨터 CPU에 올라가 있는(= 실행 중인 프로그램)을 말합니다.
컴퓨터는 각각 자신만의 메모리 공간을 포함한 독립적인 실행환경을 가지고 있습니다.
사람도 내 방 안에서 독립적으로 공간분리를 해서 사용하죠? 그거랑 똑같은 겁니다. 컴퓨터도 원룸에서 각각 공간마다 독립적으로 실행환경을 나눈다고 생각하면 👍🏻
Thread는 JVM(가상머신인데 모르면 이 정도는 찾아보기ෆ)에 의해 관리된다.ᐟ.ᐟ
Thread란
- 애플리케이션 코드를 하나씩 순차적으로 실행하는 것
- 자바 어플리케이션 main()을 실행하게 되면 main()이 동작하는 것
- Thread 없이는 자바 애플리케이션이 동작할 수 없음
- Thread는 한 번에 하나의 코드라인만 수행할 수 있음
외워서 적었던 public static void main( )
실습을 하면서 이유도 모르고 그냥 외웠다..
main( )이 꼭 있어야 한다니까..그냥 그런 줄로만 이해했다...

자바 어플리케이션을 실행하면 main() 스레드가 자동으로 시작된다. 왜⸌◦̈⃝⸍ʷʰʸˀ̣ˀ̣ˀ̣ 그럴까..?
(Thread를 이해하기 위해 심플하게 생각하면)
프로세스에는 적어도 한 개 이상의 Thread가 존재해야 하기 때문이다.
자바는 일단, Main 스레드 하나로 시작하여 개발자가 스레드를 추가로 생성하게 되면 멀티 스레드 환경이 됩니다.

이제 효율적으로 프로세스들을 처리하겠다 이말입니다~
그럼, Thread를 계속 만들어서 동시에 1000, 100000개가 돌아가게 하면 나는 꽤 기특한 개발자겠지? 🤔

바로 등짝 스매시 ◠‿◠ ;;...
Thread 등짝 스매시 안 맞는 법
- 스레드는 프로세스의 리소스를 공유하기 때문에 효율적이지만, 잠재적인 문제점에 노출된다.
- 스레드의 생성비용은 매우매우매우 비싸다.. 비싸다 Expensive..
- 고객의 요청이 올 때마다 스레드가 생성된다면 response 응답 속도는 저하된다.
- Context switching 비용도 발생된다.
- 생성에 제한이 없다(......)
- 고객의 요청이 너무 많으면 CPU나 메모리 임계점을 넘겨 서버가 죽을 수 있다😇
이 내용들을 반드시 알고 Thread를 써야 등짝 스매시를 피할 수 있다.
갑자기 이거보고 스레드 안 쓴다는 사람 있을까봐 장점도 소개하겠다.
그럼에도 불구하고 Thread를 사용하는 이유
- 동시 요청을 처리할 수 있다.
많은 사용자들이 같은 요청했는데 한 번에 한개만 처리하면 나머지는 계~~속 대기해야한다. 성질급한 한국사람은 절대 못기다린다. - 리소스가 허용하는 한 처리가 가능하다.
우리에겐 CPU와 메모리가 있다. 이 엄청난 친구들이 허용하는 범위에서 처리할 수 있다는 건 굉장한 것이다. - 하나가 지연되어도 신에게는 아직 2개의 스레드가 남아있습니다😎
작업 중 하나의 Thread가 지연된다면 나머지는 정상 동작한다. 따라서 영향을 안받으니까 내 할일을 잘 할 수 있다. - Thread Pool과 함께라면 오히려 좋아.
내부에 Thread Pool을 두어 보관하고 관리하며, 무엇보다 총 생성 개수를 제한할 수 있다. 또한 대기, 거절을 통해 WAS의 부하를 줄일 수 있다.
실무에서 Thread Pool
WAS의 주요 튜닝 포인트, 최대 스레드 수
값을 낮게 설정했을때, 동시 요청이 많아진다면?
서버 리소스는 여유롭지만 클라이언트 응답에 지연이 발생 할 수 있다.
값을 높게 설정했을 때, 동시 요청이 많아진다면?
CPU, 메모리 리소스 임계점 초과로 서버가 다운된다.
Thread의 적당한 개수는 몇 갠가요?
- 애플리케이션 로직의 복잡도, CPU, 메모리 리소스 상황 등 여러가지를 고려해야 한다.
- 성능 테스트를 통해 확인해보세요.
- 최대한 실제 서비스처럼 유사하게 고객의 요청도 많이보내고해서 테스트 해보세요.
- 아파치 DB, 제이미터, nGrinder 사용하시면 됩니다.
끝.
'Program Language > java' 카테고리의 다른 글
| 객체지향 생활체조 8, 일급 컬렉션이란 (2) | 2023.11.23 |
|---|---|
| 프로젝트, 패키지, 메소드, 클래스 네이밍 규칙 (1) | 2023.10.21 |
| 객체지향을 위한 생활체조, 클린코드를 지향합니다. (0) | 2023.10.18 |
| 지금까지 당연하게 쓰던 Java8, 함수형 프로그래밍으로 다시 이해하기 (1) | 2023.10.11 |
| 인터페이스 네이밍은 어떻게 해야할까? (0) | 2023.10.10 |