강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của seungbinkimdev2225
seungbinkimdev2225

câu hỏi đã được viết

Trong thực tế! Sử dụng Spring Boot và JPA1 - Phát triển ứng dụng Web

Tạo dự án

애플리케이션이 2번실행?됩니다.

Đã giải quyết

Viết

·

2K

0

롬복 테스트를위해서 강의영상처럼 똑같이  작성하였는데, 실행됬을 때 콘솔을 보면 data = hello가 2번 출력됩니다.

코드

콘솔

밑에 아무런 출력이나 넣고 다시 해보면 그 출력까지도 2번출력되네요. 마치 메인메서드 2번실행되는것처럼 나옵니다.

웹앱JPAjavaspring-bootspring

Câu trả lời 3

1

seungbinkimdev2225님의 프로필 이미지
seungbinkimdev2225
Người đặt câu hỏi

자세한 설명 감사합니다.!

1

yh님의 프로필 이미지
yh
Người chia sẻ kiến thức

안녕하세요. 승빈님

확인을 해보니 spring-boot-devtools가 포함되어 있네요^^

다음과 같이 코드를 실행해보면 명확하게 알 수 있습니다.

private static Logger logger = LoggerFactory.getLogger(JpashopApplication.class);

public static void main(String[] args) {
logger.info("hello!");
SpringApplication.run(JpashopApplication.class, args);
}

출력결과

15:35:43.408 [main] INFO jpabook.jpashop.JpashopApplication - hello!

15:35:43.547 [restartedMain] INFO jpabook.jpashop.JpashopApplication - hello!

원래는 JVM이 실행되면서 main 쓰레드에서 스프링을 실행해야 하는데, devtools가 포함되어 있으면 JVM이 실행되고, main을 호출하면서 main 쓰레드가 실행은 됩니다. 그런데 스프링은 main 쓰레드가 아닌 restartedMain이라는 쓰레드에서 실행됩니다. 이 과정에서 restartedMain 쓰레드에서 스프링 컨테이너를 실행하기 위해서 main 메서드를 한번 더 호출합니다. 참고로 이때는 main쓰레드에서 스프링 컨테이너를 실행하지는 않습니다.

devtools는 코드에 변화가 있으면 JVM은 그대로 유지한채 스프링 컨테이너만 다시 실행합니다(인텔리J의 경우 build-> recompile 실행). 그래서 자바 JVM을 실행하는 시간을 줄일 수 있습니다. 결과적으로 스프링을 실행하는 시간만 추가됩니다.

이런 메커니즘을 정상 수행하기 위해서 main 쓰레드가 아닌 별도의 쓰레드에서 dev-tools가 스프링을 실행하게 됩니다.

감사합니다.

1

yh님의 프로필 이미지
yh
Người chia sẻ kiến thức

안녕하세요. 승빈님

저도 정확한 이유를 모르겠네요. 전체 프로젝트를 압축해서 올려주세요.

감사합니다.

Hình ảnh hồ sơ của seungbinkimdev2225
seungbinkimdev2225

câu hỏi đã được viết

Đặt câu hỏi