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
반응형