Java
💡 Java 의 Project Loom 이 만들어지고 있어요! 조금만 기다려주세요!
흥부가귀막혀
2022. 8. 26. 15:18
Project Loom 이란?
- Project Loom 은 Java 의 동시성 처리 개선을 위해 Ron Pressler(Quasar 라는 Java 경량 스레드 라이브러리 개발자)가 제안하여 2017년에 시작된 프로젝트다.
- 최근에 완성도 높은 형태의 얼리 엑세스 빌드가 제공되어 올해 정식 릴리즈가 되지 않을까 하는 기대감이 생겼다.
Project Loom 의 동기 🗽
- 하나의 서버에서 수백만개의 소켓을 다룰 수 있지만, OS 스레드를 직접 사용하는 Java 에서는 동시에 수천개 이상의 요청을 효율적으로 다루기 어렵다. 즉, 현재 Java 의 스레드는 자원 사용면에서 효율적이지 못하다.
- 비동기 관련 API 들이 나왔지만 사용하기 어렵고 디버깅이 쉽지 않아 유지보수에 좋지 않다.
Project Loom 의 목표 🏁
- 동기 코드를 작성하듯이 사용하기 쉽고 비동기 코드처럼 서버 자원을 효율적으로 사용할 수 있어야 한다.
- 이를 위해 수백만개를 생성할 수 있는 경량 스레드를 정의하여 기존의 동기 코드처럼 작성해도 비용(서버 자원)이 적게 들어가도록 한다.
Project Loom 이 해결한 것
- 제어 흐름을 잃는 문제. 비동기 프로그래밍을 하게 되면 조건 분기나 반복문 같은 간단한 제어 흐름을 복잡하게 구성해야하는 경우가 생기고 이로 인해 콜백 헬이나 부가적인 코드가 많이 발생하게 되는데 Project Loom 은 코드를 동기식으로 짤 수 있게 만들었기 때문에 이런 문제가 발생하지 않는다.
- 컨텍스트를 잃는 문제. 비동기 프로그래밍에서는 스레드를 넘나들며 요청이 처리되기 때문에 거쳐온 컨텍스트가 스택 트레이스에 쌓이지 않게 되고 이로 인해 스택 트레이스가 유용하지 않게 되버린다. 하지만 Project Loom 은 스레드를 넘나드는게 아닌 경량 스레드를 실행하는 구조이기 때문에 이 문제가 없어진다.
- 함수의 색 문제. https://careerly.co.kr/comments/63069?utm_campaign=self-share 에서도 언급했던 내용인 전염성 혹은 함수의 색문제로 인해 동기/비동기 함수간에 연동이 쉽지 않고 개발단계와 유지보수에 영향을 미치게 된다. Project Loom 은 블록킹 코드로 작성되고 내부적으로 논블록킹으로 동작하기 때문에 동기/비동기 코드간에 벽이 허물어진다.
Project Loom 이 해결하지 못한 것
- 비록 낮은 수준이지만 동기화 요소를 직접 다루는 컨셉이기 때문에 기존에 나와있는 비동기 처리 솔루션들의 장점인 우아하고 자연스러운 동시성 처리를 하는것에는 한계가 있어 보인다.
Project Loom 이 가져올 변화와 기대되는 점
- Tomcat 과 같은 Servlet 기반 웹서버의 성능이 눈에 띄게 향상될 것이고 이에 대한 사용도 늘어날 것으로 기대.
- Spring Webflux 사용이 줄어들 수 있을 것 같지만 Spring 에서 Project Loom 으로 어떤 멋진걸 만들지도 기대된다.
- 코틀린 코루틴 대신 Project Loom 을 활용하는 케이스가 많아질 것 같다.
- Akka 와 같은 기존 Java Thread 의 한계를 극복하기 위해 나왔던 솔루션들이 Project Loom 을 어떻게 수용하고 변화할지 기대된다.
- Java Thread 의 한계로 다른 솔루션(Go 나 NodeJS)으로 건너간 개발자들이 다시 돌아올 수 있을지, Java 가 지금보다 더 크게 활성화 될 수 있을지 기대된다.