월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 핵심 원리 - 기본편
섹션 9 정리한거 맞는지 확인 해주세요 !!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. request 스코프 빈의 포록시 기반 동작 원리에 대해서 강의도 듣고, 따로 찾아봐서 정리했는데 맞는지 봐주세요. !! 스프링 컨테이너가 초기화될 때, ScopedProxyMode.TARGET_CLASS 설정을 사용하면, 스프링은 원본 클래스를 상속받는 프록시 클래스의 인스턴스를 생성한다. 이 프록시 클래스는 원본 클래스의 모든 메서드를 오버라이드하고, 오버라이드된 각 메서드에는 실제 원본 빈의 메서드를 호출하는 위임 로직이 포함되어 있다. 생성된 프록시 객체는 스프링 빈으로 스프링 컨테이너에 등록되고, HTTP 요청이 있을 때, 클라이언트가 프록시 객체의 메서드를 호출하면, 메서드 내의 위임 로직이 활성화되어 실제 해당 HTTP 요청에 맞는 원본 빈의 해당 메서드를 (찾아) 실행한다. 만약, 해당 HTTP 요청에 맞는 실제 원본 빈이 스프링 컨테이너에 없으면, 위임 로직은 새로운 원본 빈 인스턴스를 생성하여 스프링 컨테이너에 등록한 후, 그 인스턴스의 메서드를 실행한다.맞나욤.. ㅎㅎ
- 미해결스프링 핵심 원리 - 기본편
빈 소멸
public class SingletonTest { @Test void singletonBeanFind(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class); SingletonBean singletonBean1 = ac.getBean(SingletonBean.class); SingletonBean singletonBean2 = ac.getBean(SingletonBean.class); System.out.println("singletonBean1 = " + singletonBean1); System.out.println("singletonBean2 = " + singletonBean2); ac.close(); System.out.println("singletonBean2 = " + singletonBean2); } @Scope("singleton") static class SingletonBean { @PostConstruct public void init(){ System.out.println("singletonBean.init"); } @PreDestroy public void desrtoy(){ System.out.println("singletonBean.desrtoy"); } } } 스프링 컨테이너가 close() 메서드로 종료될 시점에 컨테이너는 빈 객체의 소멸을 처리한다라고 알고있습니다. 그런데 close() 이후에 singletonBean의 참조변수를 출력해보면 null이 아니라 빈의 참조값이 출력되는 이유가 먼가요? 제가 잘못 알고있는 부분이 궁금합니다아래는 Test 결과 입니다singletonBean.initsingletonBean1 = hello.core.scope.SingletonTest$SingletonBean@530712dsingletonBean2 = hello.core.scope.SingletonTest$SingletonBean@530712dsingletonBean.desrtoysingletonBean2 = hello.core.scope.SingletonTest$SingletonBean@530712d
- 미해결스프링 핵심 원리 - 기본편
ObjectProvider 사용하는 대신에 prototype 객체가 singleton 객체를 주입 받으면 안되나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. "프로토타입 스코프 - 싱글톤 빈과 함께 사용시 Provider로 문제 해결" 강의를 보던 도중에 궁금한 것이 있어 질문을 남깁니다.강의에서 singleton object가 prototype object를 주입받을 때 생길 수 있는 문제를 이야기 하면서 해결방법을 알려줍니다. ObjectProvider를 이용해서 prototype object를 singleton object method 내부에서 매번 생성하는 방법으로 말이죠. 그런데 이 방법도 제가 보기에는 조금 복잡해 보입니다.singleton object가 prototype object에 의존하는 방식을 역전하면 더 간단해지지 않을까요? 반대로 prototype object가 singleton object에 의존한다면 provider를 사용할 필요가 없어집니다. 클라이언트가 직접 prototype object를 destroy 하면 되지요.이에 대해 어떻게 생각하시나요? provider와 비교했을 때 장단점을 알 수 있을까요?
- 해결됨스프링 핵심 원리 - 기본편
myLoggerProvider.getObject() 메서드시 동시성관련 질문있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]클라이언트1,2,3,4,5이 동시에요청했을때myLoggerProvider.getObject()실행해서 my Logger 객체를 받아올때 (컨트롤러or서비스)request요청이 여러개니까 myLogger객체는 이때 여러개인데...똑같은 객체가 계속 반환되는걸 보장해주는 이유가 있나요? @PostConstruct public void init(){ uuid = UUID.randomUUID().toString(); System.out.println("[" + uuid + "]" + "request scope bean create: "+this); }거의 동시에 요청이왔다고 가정했을때init해서 각 request스코프객체에 UUID각각설정후getObject()를 각자 두번씩해서 myLogger를 얻게되는데이때 myLogger타입 객체는 여러개가있을수있고이걸 init했을때-처음getObject()-두번쨰getObject-close이런순서로 진행될때처음 init할떄랑 close할때는 객체주소가 같은건 당연하지만그사이에 getObject()했을때 객체가 바뀔우려가 있는건 아닌지 생각이듭니다 @RequestMapping("log-demo") @ResponseBody public String logDemo(HttpServletRequest request) throws InterruptedException { MyLogger myLogger = myLoggerObjectProvider.getObject(); <================여기 String requestURL = request.getRequestURL().toString(); myLogger.setRequestURL(requestURL); myLogger.log("controller test"); logDemoService.logic("testId"); return "OK"; } public class LogDemoService { private final ObjectProvider<MyLogger> myLoggerObjectProvider; public void logic(String id) { MyLogger myLogger = myLoggerObjectProvider.getObject();<==========여기 myLogger.log("service id = "+ id); }
- 미해결스프링 핵심 원리 - 기본편
어노테이션 사용법에 대해 (feat: @ComponentScan.Filter)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. "컴포넌트 스캔과 의존관계 자동 주입 시작하기" 강의를 듣던 중 궁금한 것이 생겼습니다. 다른 언어를 주로 사용한 제가 자바 어노테이션에 익숙하지 않아서 생기는 궁금증인 것 같습니다. 위의 코드를 보면 @ComponentScan의 인자로 @ComponentScan.Filter가 사용되는 것을 볼 수 있습니다. 근데 특이하게 '@'가 붙어있습니다. 반대로 Configuration는 어노테이션인데도 불구하고 "@Configuration.class"가 아닌 "Configuration.class"라고 쓰입니다. 왜 어떤 것은 @가 붙고 어떤 것은 @이 안 붙는지 알 수 있을까요? reference로는 뭘 보면 될까요?
- 해결됨스프링 핵심 원리 - 기본편
ApplicationContext가 여러 인터페이스를 상속받은 것이 어느곳에 활용되는지 잘 모르겠어요.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. "BeanFactory와 ApplicationContext" 강의를 보던 도중 궁금한 것이 있어 질문을 드립니다. ApplicationContext가 단순히 BeanFactory를 넘어 여러 강력한 기능을 제공하기 위해 다른 인터페이스도 상속한다고 합니다. 그런데 EnvironmentCapable를 제외하고 다른 인터페이스들이 ApplicationContext에서 무엇을 위해 활용되는지 잘 모르겠습니다. MessageSource, ApplicationEventPublisher, ResourceLoader들이 ApplicationContext 인터페이스에서 실무에서 어떻게 응용되는지 알 수 있을까요?
- 해결됨스프링 핵심 원리 - 기본편
@Configuration 어노테이션 지정하는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]메인 메서드에서 스프링 컨테이너를 생성하고 AppConfig 클래스를 구성 정보로 쓰기 위하여 ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class)를 하였습니다.그런데 AppConfig클래스를 환경 설정해주는 구성 정보 클래스로 지정하기 위해서 @Configuration 어노테이션을 지정하였는데 앞에서 AppConfig.class로 지정해줄 거면 굳이 @Configuration어노테이션으로 지정하는 이유가 궁금합니다
- 해결됨스프링 핵심 원리 - 기본편
[버그 가능성] "새로운 할인 정책 개발" 강의에서 int보다 floating point나 decimal을 사용해야 하지 않나요?
[질문 내용]안녕하세요. "새로운 할인 정책 개발" 부분을 보고 있다가 이부분이 그냥 마음에 걸려서 질문을 올립니다.사진을 보면 discountPercent를 int로 쓰셨는데 만약 price가 10 미만이면 discount가 항상 0이 나와서요. 아마 튜토리얼이라서 간단히 int를 쓰지 않았을까 하지만 질문을 올립니다. 감사합니다.
- 미해결스프링 핵심 원리 - 기본편
싱글톤 관련 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.아래 코드에서 보면 SingletonService 클래스를 정의하고 그 안에 스태틱 변수로 SingletonService 타입인 instance를 정의하고 있습니다. 클래스 안에 같은 클래스를 또 정의하는 것이 이해가 안가는데, static이라서 가능한 걸까요?public class SingletonService { private static final SingletonService instance=new SingletonService(); public static SingletonService getInstance(){ return instance; } private SingletonService(){ } public void logic(){ System.out.println("싱글톤 객체 로직 호출"); } }
- 해결됨스프링 핵심 원리 - 기본편
의존관계 자동주입 - 조회 빈이 2개 이상일 경우에 궁금증이 있습니다.
@Autowired 필드 명, @Qualifier, @Primary 강의 부분에서 궁금한 점이 생겼습니다.결국에 조회 빈이 2개 이상인 경우엔 위의 어노테이션을 활용해서 우선순위를 지정해준다고 되어있는데,필드명을 수정해주거나, Qualifier의 이름을 변경해야하는 상황이 생긴다면( ex) OrderServiceImpl의 discountPolicy를 fixDiscountPolicy 에서 rateDiscountPolicy 로 할인 정책을 변경하고 싶다면)직접 구현체들(클라이언트 코드)을 수정해줘야하는데( ex) Autowired 된 DiscountPolicy의 변수명을 수정하거나, @Qualifier의 이름을 수정해서)이는 OCP 원칙에서 위배되는 것은 아닌지 궁금합니다. 나아가 이런식으로 실제 구현체를 수정해줘야하는 것이라면 discountPolicy 의 타입명만 DiscountPolicy일 뿐이지, 타입명 자체를 FixDiscountPolicy 로 지정하거나 RateDiscountPolicy로 지정해서 사용하는 DIP 위반하는 코드들과 무슨 차이인지 잘 모르겠습니다. 순수 자바 코드 자체는 해당 원칙들을 지키고 있는 것이니까 상관없는것인가요?
- 미해결스프링 핵심 원리 - 기본편
질문있습니다
package hello.core.beanfind; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.NoUniqueBeanDefinitionException; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; public class ApplicationContextExtendsFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); @Test @DisplayName("부모 타입으로 조회 시, 자식이 둘 이상 있으면, 중복 오류가 발생한다.") void findBeanByParentTypeDuplicate(){ assertThrows(NoUniqueBeanDefinitionException.class,()->ac.getBean(DiscountPolicy.class)); } @Test @DisplayName("부모 타입으로 조회 시, 자식이 둘 이상 있으면, 빈 이름 지정하면 된다.") void findBeanByParentTypeBeanName(){ DiscountPolicy rateDiscountPolicy=ac.getBean("rateDiscountPolicy",DiscountPolicy.class); assertThat(rateDiscountPolicy).isInstanceOf(RateDiscountPolicy.class); } @Test @DisplayName("특정 하위 타입으로 조회") void findBeanBySubType(){ RateDiscountPolicy bean=ac.getBean(RateDiscountPolicy.class); assertThat(bean).isInstanceOf(RateDiscountPolicy.class); } @Test @DisplayName("부모 타입으로 모두 조회하기") void findAllBeanByParentType(){ Map<String,DiscountPolicy> beansOfType=ac.getBeansOfType(DiscountPolicy.class); assertThat(beansOfType).isEqualTo(2); for (String key : beansOfType.keySet()) { System.out.println("key= "+key+"value="+beansOfType.get(key)); } } @Test @DisplayName("부모 타입으로 모두 조회하기-Object") void findAllBeanByObjectType(){ Map<String,Object> beansOfType=ac.getBeansOfType(Object.class); for(String key:beansOfType.keySet()){ System.out.println("key = "+key +"value="+beansOfType.get(key)); } } @Configuration static class TestConfig{ @Bean public DiscountPolicy rateDiscountPolicy(){ return new RateDiscountPolicy(); } @Bean public DiscountPolicy fixDiscountPolicy(){ return new FixDiscountPolicy(); } } }여기서assertThrows(NoUniqueBeanDefinitionException.class,()->ac.getBean(DiscountPolicy.class)); 이 부분이 왜 부모 타입으로 조회하는 건지 이해가 안갑니다. 상속을 한 적도 없고 그냥 타입을 넣어줬을 뿐인데 말이죠..ㅠ
- 해결됨스프링 핵심 원리 - 기본편
xmlAppContext 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 계속 오류가 떠서 도움을 요청드리고자 글 남깁니다...해결 부탁드립니다..
- 미해결스프링 핵심 원리 - 기본편
질문있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 스프링 컨테이너에 등록하는 코드를 똑같이 작성했는데 기존과 실행결과가 같고, 디버그 실행문이 안뜹니다. 어디가 문제인가요?
- 해결됨스프링 핵심 원리 - 기본편
스프링 3.2 버전 이상에서 Run tests using 부분은 intelliJ IDEA 를 사용해도 되는지 궁금합니다.
제가 강의를 오랜만에 들어서 혹시 수정사항이 있을까 PDF를 다시 다운받아서 확인했는데,주의! 스프링 부트 3.2 부터 Gradle 옵션을 선택하자.스프링 부트 3.2 부터 앞서 Build and run using에 앞서 설명한 IntelliJ IDEA를 선택하면 몇가지 오류가 발생한다.따라서 스프링 부트 3.2를 사용한다면 다음과 같이 IntelliJ IDEA가 아니라 Gradle을 선택해야 한다.라고 PDF가 12월4일 경에 수정되었더라구요. Run tests using 부분은 intelliJ IDEA 를 사용해도 되는지 궁금합니다.제가 굳이 Run tests using 을 바꾸고 싶은 이유는, test 실행시에,@DisplayName 어노테이션, 메서드로 구분해둔 개별 테스트들의 테스트 결과가 나누어지지 않고 한번에 보여서 그럽니다.구글링 결과 해결법이 Run tests using 부분을 intelliJ IDEA 로 바꾸라는 것 뿐인데 바꾸면 어떤 치명적인 오류가 있는건가요? Run tests using 을 Gradle로 설정했을 때 테스트 실행 결과 화면Run tests using 을 intelliJ IDEA로 설정했을 때 테스트 실행 결과 화면
- 미해결스프링 핵심 원리 - 기본편
DiscountPolicy 상속
안녕하세요public int discount(Member member, int price, String discountCode) { DiscountPolicy discountPolicy = policyMap.get(discountCode); return discountPolicy.discount(member, price); }코드에서 참조변수 discountPolicy 에 FixDiscountPolicy 혹은 RateDiscountPolicy의 객체가 오게 될텐데요참조변수 선언을 DiscountPolicy 로 했는데 discount 메소드를 어떻게 사용할 수 있는것이죠?런타임 시점에 자식 타입으로 뿅 하고 변하는건가요? 바보같은 질문 죄송합니다 ^^,,;;
- 미해결스프링 핵심 원리 - 기본편
MyLogger 스코프
[질문 내용]requeste 스코프 예제 만들기 20:17초에 나오는 LogDemoService의 MyLogger에 관한 질문입니다. 해당 스코프가 request니까 각 http요청당 하나씩 생성되고 종료되는 거로 알고 있습니다. 처음 컨트롤러에서 생성된 MyLogger를 사용하고 그 다음 서비스에도 MyLogger를 사용하는데 이 때 컨트롤러에서 세팅한 값 MyLogger객체가 그대로 서비스에도 쓰이는 거 같은데 이게 어떻게 가능한거죠?? 컨트롤러와 서비스 코드 간에 같은 MyLogger 객체를 공유하는 어떤 기능이 있는 건가요? 동시에 100개의 http 요청이 들어왔을 때 구분을 어떻게 하는지 궁금합니다.
- 해결됨스프링 핵심 원리 - 기본편
의존 관계 주입이 끝나는 시점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]초기화 메서드는 의존 관계 주입이 끝난 후에 실행된다고 이해했습니다. 그런데 의존 관계 주입 단계라는 구간은 정확히 언제까지인가요? 이 코드의 경우엔 setUrl()에서 의존 관계 주입이 일어나지만스프링이 초기화 메서드를 실행하려면 의존 관계 주입이 끝났다는 것을 정확히 파악해야 할 것 같은데 스프링은 다음 중 어떤 식으로 의존 관계 주입이 끝났다는 것을 판단하나요? 1) setUrl()이 호출된 이후, 즉시 의존 관계 주입이 끝났다는 것을 판단할 수 있다.2) networkClient() 메서드 호출이 완전히 끝날 때(return문의 실행이 끝나고 나서)까지가 의존 관계 주입이라고 판단한다.3) 기타.. 혹시 강의 때 말씀하셨었나요? pdf로 복습하는 중인데 이 부분이 궁금하네요..
- 미해결스프링 핵심 원리 - 기본편
스프링 컨테이너가 아닌 순수한 자바로 테스트
안녕하세요강의 20:33 에서 스프링 컨테이너가 아닌 순수한 자바로 테스트할 수 있는 방법이 없다라고 해주셨는데요 AutoAppConfigTest.java 에서 메소드만 실행 시키면 순수한 자바 테스트이고 클래스 레벨에서 실행시키면 스프링 컨테이너의 도움을 받는건가요?@SpringBootTest 어노테이션이 붙어야 스프링 컨테이너 도움을 받는건가요 ..? 헷갈리네요
- 미해결스프링 핵심 원리 - 기본편
OCP 개방-폐쇄 원칙에 관해
OCP 개방 -폐쇄 원칙확장에는 열려있으나 변경에는 닫혀 있어야 한다.-> 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현그러면 소수의 메서드를 수정하고 싶은 경우, 본래 있던 클래스의 수정하지 않을 메서드들을 호출하여 사용해도 될까요?
- 미해결스프링 핵심 원리 - 기본편
이클립스 프로젝트 실행 시 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]1. 이클립스에서 Ctrl + F11 누르고 실행했는데 다음과 같이 뜨는게 맞나요...2. 저는 영한님과 다르게 Exit Code 0 이 Console 창에 뜨지 않는데 상관없을까요