Server/Spring Boot
[Springboot] 스레드와 프로세스를 구분해보자!
hoonylab
2025. 4. 18. 17:06
728x90
반응형
✅ 스레드와 프로세스의 차이점
프로세스(Process)는 실행 중인 프로그램으로, 운영체제로부터 독립적인 메모리 공간(코드, 데이터, 힙, 스택)을 할당받아 실행됩니다.
스레드(Thread)는 프로세스 내에서 실행되는 작업의 최소 단위이며, 하나의 프로세스는 여러 개의 스레드를 가질 수 있습니다.
구분 | 프로세스 | 스레드 |
---|---|---|
정의 | 실행 중인 프로그램 | 프로세스 내에서 실행되는 작업의 흐름 |
메모리 공간 | 독립적 | 공유 (코드, 힙 등은 공유하고, 스택은 별도) |
통신 방법 | IPC(Inter-Process Communication) 필요 | 메모리 공유로 간편 |
오버헤드 | 높음 (컨텍스트 스위칭 비용 큼) | 낮음 (가벼움) |
실행 단위 | 하나의 실행 단위 | 멀티 작업 가능 |
💡 Java Spring에서의 스레드 사용 예시
Spring 애플리케이션은 기본적으로 싱글 스레드로 동작하지만, @Async
를 사용하면 비동기 작업을 수행하는 별도의 스레드를 사용할 수 있습니다.
@Service
public class AsyncService {
@Async
public void runAsyncTask() {
System.out.println("비동기 작업 시작: " + Thread.currentThread().getName());
try {
Thread.sleep(2000); // 예시용 딜레이
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("비동기 작업 완료");
}
}
@RestController
@RequiredArgsConstructor
public class TestController {
private final AsyncService asyncService;
@GetMapping("/start")
public String startTask() {
asyncService.runAsyncTask(); // 별도 스레드에서 실행
return "요청 완료!";
}
}
주의: @EnableAsync
를 @SpringBootApplication
클래스에 추가해야 합니다.
@SpringBootApplication
@EnableAsync
public class MySpringApp {
public static void main(String[] args) {
SpringApplication.run(MySpringApp.class, args);
}
}
이렇게 하면 HTTP 요청이 와도 메인 스레드는 바로 응답하고, @Async
메서드는 별도의 스레드에서 비동기적으로 실행됩니다.
728x90
반응형