묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
ctrl+alt+m 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]ctrl+alt +m / ctrl+alt+m 누른 후 m / ctrl+alt+shift+t 누른 후 extract method 클릭 모든 방법으로 다 했는데도 불구하고 저렇게 뜨는데 어떻게 해결해야 할까요
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
아스키코드 질문 있습니당
String[][] seats3 = new String[10][15]; char ch = 'A'; // 아스키코드 넣기 for (int i = 0; i < seats3.length; i++) { for (int j = 0; j < seats3[i].length; j++) { seats3[i][j] = String.valueOf(ch) + (i + 1); // 아스키 코드를 문자열로 바꿔서 } ch++; } 여기서 ch라는 변수에 넣은 아스키 코드는 기본적으로 문자열로 넣은걸로 알고있는데 반복문 안에 들어가면 정수형으로 자동 형변환 되는건가용? 왜 에러가 뜨고 메소드를 써야하는지 더 자세한 설명이 궁금합니다 원리가 따로 있는건지....seats[i][j] 여기는 각각 index번호가 들어가야 하지 않나용
-
해결됨Java/Spring 주니어 개발자를 위한 오답노트
테스트 하기 쉬운 코드에서 테스트의 범위?
영상에서 종종 "테스트 하기 좋은 코드는 잘 설계된 코드일 것이다." 라는 말을 해주셨습니다. 어떤 테스트를 기준으로 테스트 하기 좋은 코드가 잘 설계된 코드일까요?- 예를 들어 단위 테스트, 통합 테스트, 인수 테스트가 존재한다 하면, 세가지 테스트 중 어떤 테스트를 테스트하기 편한 코드를 기준으로 잡는게 좋을까요?
-
해결됨Java/Spring 주니어 개발자를 위한 오답노트
스프링에서 서비스 레이어(Apllication Layer) 테스트에 대한 질문입니다.
제 개인 프로젝트를 진행하면서, 서비스 레이어에서는 단순히, 도메인 레이어에 존재하는 다른 객체들을 호출해서 비즈니스 로직을 처리하는 책임만을 담당하다보니, 서비스 레이어에 존재하는 객체를 테스트하는 코드를 작성하게 되면 대부분 테스트할 내용이, 메소드의 실행순서를 올바르게 실행해줬는가? 와 같은 부분만 테스트할게 없었는데 이 부분이 제가 잘못 설계한 부분이 아닌 오히려, 객체간의 책임을 잘 나누고 서비스 레이어의 책임에 맞게 코드를 작성한것 같다는 확신을 강의를 보고나서 알수 있었습니다 좋은 강의 감사합니다😊
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
Repository 대신 Reader / Writer 사용 질문있습니다!!
안녕하세요.회사내에서 Reader, Writer 개념을 도입하여 사용하고 있습니다. 흐름은 아래와 같습니다controller -> service -> reader or writer -> repository제가 궁금한것은 JPA를 사용하고 있어 단건데이터 수정시 더티체킹을 하고 있는데요.writer내에서 더티체킹을 위한 엔티티를 조회하는거 조차 하면 안되는지 궁금합니다!안된다면 reader에서 엔티티를 조회하고 서비스로 반환한 다음 해당 엔티티를 writer로 넘겨줘야 하는지요..!!아 그리고 해당 강의가 지식공유자 답변 미제공 강의더라구요 ㅠㅠ 답변이 의무는 아니시지만 선생님의 지구 내핵 같은 깊은 배려심으로 답변을 해주시는거신지요.. 한줄기 빛 같은 강의(강의보다 시력 0.2 감소됨) 감사드립니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
instanceof의 의미
안녕하세요 선생님.다형성 수업 중if (factoryCam instanceof FactoryCam){ } ;부분의 필요성이 궁금합니다.어짜피((FactoryCam)speedcam).detecFire();와 같은 코드는 실행이 불가능한데다형성 수업 중 적어주신 if 문 내용과instanceof 의 쓰임이 왜 필요한지, 어떤 의미를가지는지 궁금합니다.감사합니다.
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
ProductService부분에서 리팩토링 언급 질문
안녕하세요. 강의 너무 잘 듣고 있습니다.섹션2의 '스프링에서 OOP와 안티패턴 : Transactiojn script' 회차를 듣던 중 10분 42초 부분에서 ProductService 코드를 리팩토링하고 싶다고 말씀해주셨는데 어떤 부분에서 리팩토링 하고 싶으신건지 궁금합니다!! 제 부족한 지식으론 딱히 건드릴게 보이질 않아서요 ㅠㅠ※ 3년차 개발자이지만 회사 내 사수가 없어 좌절하고 있던 시기에 우근님의 강의를 듣는 순간 가뭄의 단비와 같으며 세상에서 가장 달콤한 술을 먹은 것 마냥 취하게 해주셔서 감사합니다..
-
미해결스프링 핵심 원리 - 기본편
request 빈 주입 시점질문입니다.
이미 logDemo() 메소드가 실행되는 시점에 request 스코프가 주입되는 것이 아닌 것인지 궁금합니다.request : 웹 요청이 들어오고 나갈 때 까지 유지되는 스코프프록시 모드를 테스트할 때 위와 같이 myLogger를 조회합니다.허나 이 때는 이미 request를 통해 http요청을 받았을 때입니다.제 생각에는 http 요청을 받았으니 이미 프록시 객체가 request 빈 스코프로 대체가 되어야한다고 생각이 드는데 출력에서 프록시 객체가 출력이 됩니다.이미 logDemo() 메소드가 실행되는 시점에 request 스코프가 주입되는 것이 아닌 것인지 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
Order 객체 생성 위치 질문
안녕하세요 너무 이해가 안되서 질문 드립니다. 회원가입 처리시에는 맴버의 객체를 생성하고 데이터 베이스에 저장하는 것을 봤을땐 MemberApp MemberService memberService = new MemberServiceImpl(); Member member = new Member(1L, "memberA", Grade.BASIC); memberService.join(member); Member findMember = memberService.findMember(1L);MemberApp에서 Member라는 객체를 생성 후 memberService에서 join으로 회원가입 처리를 하는 흐름인데 주문 처리시에는OrderAppOrder order = orderService.createOrder(memberId, "첫 주문", 10000); OrderServiceImpl public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discountPrice = discountPolicy.discount(member, itemPrice); return new Order(memberId, itemName, itemPrice, discountPrice); } orderService.createOrder 메서드에서 Order 에 관한 데이터를 모두 가공후 Order 객체를 생성하고 리턴을 해주는것으로 나오는데요.질문 1)회원가입때에는 MemberApp 에서 member 객체를 생성하고,주문할때는 OrderApp에서 안하고 OrderServiceImpl 에서 order 객체를 생성 하는 이유가 궁금합니다. 질문 2)OrderServiceImpl createOrder 메서드는 주문데이터를 가공하는 메서드 라고 생각이 드는데 모두 가공후 Order 객체를 생성하는게 더 좋다라고 한다면예로들어 회원가입때 날짜별로 등급(BASIC, VIP)을 주는 기능, 정책이 추가가 되었다라고 한다면 주문 할때 처럼MemberApp MemberService memberService = new MemberServiceImpl(); Member member = memberService.createMember(); // createMember 에서 가공 후 join으로 데이터베이스에 저장하는 식 memberService.join(member); Member findMember = memberService.findMember(1L);createMember (createOrder와 같은 개념) 메서드를 생성해 회원 정보를 가공(날짜별로 등급을 나눠지는 기능) 해서 return 값으로 member 객체를 생성해 리턴 해주면 된다 라고 생각하면 될까요?
-
미해결스프링 핵심 원리 - 기본편
OrderServiceImpl 오류
안녕하세요!OrderServiceImpl 에서 자꾸 오류가 나는데 이유를 모르겠어서요 ㅠㅠ OrderServiceImplAppConfigAppConfig의 return 부분에서 빨간 줄이 뜹니다 ..!! MemberRepository랑 DiscountPolicy가 분명 생성자로 있는데도 왜 적용될 수 없는 타입이라고 뜨는지 모르겠습니다 ㅠㅠ
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
M2 실리콘칩은 자바 버전 어떻게 설치해야하나요? [현재 17.0.7 버전]
M2 실리콘칩은 자바 버전 어떻게 설치해야하나요? [현재 17.0.7 버전] 5:24 부터 따라해도 문제없을까요? 터미널에서 설치하고나면 되돌리는 방법을 몰라요 ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
ComponentSacn 의 디폴터 설정에 대한 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요? 컴포넌트 스캔에 대한 강의를 듣던 중 궁금해서 테스트를 해보던 중에 이해가 안가는 부분이 있어서 질문을 드립니다.@Configuration@ComponentScanpublic class AutoAppConfig {}강의에서 excludeFilters 설정한 것을 빼고 디폴트 @ComponentScan 을 적용해서 테스트를 해봤습니다....if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {System.out.println("beanDefinitionName = " + beanDefinitionName + " value = " + beanDefinition);} 바로 위와 같이 전에 테스트했던 코드를 참고해서 내용을 찍어봤는데... beanDefinitionName = autoAppConfig value = Generic bean: class [hello.core.AutoAppConfig$$SpringCGLIB$$0]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=nullbeanDefinitionName = applicationContextExtendsFindTest.TestConfig value = Generic bean: class [hello.core.beanfind.ApplicationContextExtendsFindTest$TestConfig$$SpringCGLIB$$0]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null; defined in file [D:\400.Projects\01.SpringCore\core\out\test\classes\hello\core\beanfind\ApplicationContextExtendsFindTest$TestConfig.class]beanDefinitionName = applicationContextSameBeanFindTest.SameBeanConfig value = Generic bean: class [hello.core.beanfind.ApplicationContextSameBeanFindTest$SameBeanConfig$$SpringCGLIB$$0]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null; defined in file [D:\400.Projects\01.SpringCore\core\out\test\classes\hello\core\beanfind\ApplicationContextSameBeanFindTest$SameBeanConfig.class]beanDefinitionName = statefulServiceTest.TestConfig value = Generic bean: class [hello.core.singleton.StatefulServiceTest$TestConfig$$SpringCGLIB$$0]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null; defined in file [D:\400.Projects\01.SpringCore\core\out\test\classes\hello\core\singleton\StatefulServiceTest$TestConfig.class]beanDefinitionName = appConfig value = Generic bean: class [hello.core.AppConfig$$SpringCGLIB$$0]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null; defined in file [D:\400.Projects\01.SpringCore\core\out\production\classes\hello\core\AppConfig.class]beanDefinitionName = coreApplication value = Generic bean: class [hello.core.CoreApplication$$SpringCGLIB$$0]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null; defined in file [D:\400.Projects\01.SpringCore\core\out\production\classes\hello\core\CoreApplication.class]beanDefinitionName = rateDiscountPolicy value = Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=applicationContextExtendsFindTest.TestConfig; factoryMethodName=rateDiscountPolicy; initMethodNames=null; destroyMethodNames=[(inferred)]; defined in class path resource [hello/core/beanfind/ApplicationContextExtendsFindTest$TestConfig.class]...위와 같이 root 패키지 내의 모든 빈이 등록되는 것 같았습니다. 예상으로는 @Component, @Configuration 이 붙어 있는 빈들만 등록될 줄 알았는데 왜 이렇게 나오는 걸까요?
-
미해결스프링 핵심 원리 - 기본편
@Configuration 관련하여 질문 드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. public class BeanLifeCycleTest {@Test public void lifeCycleTest(){ConfigurableApplicationContext ac1 = new AnnotationConfigApplicationContext(LifeCycleConfig.class);// ConfigurableApplicationContext ac2 = new AnnotationConfigApplicationContext(LifeCycleConfig.class); NetworkClient client1 = ac1.getBean("networkClient",NetworkClient.class); NetworkClient client2 = ac1.getBean("networkClient",NetworkClient.class); System.out.println(client2); System.out.println(client1); Assertions.assertThat(client1).isSameAs(client2); ac1.close(); ac1.close(); }// @Configuration static class LifeCycleConfig{// @Bean @Bean(initMethod = "init" , destroyMethod = "close")public NetworkClient networkClient(){NetworkClient networkClient = new NetworkClient(); networkClient.setUrl("http:://hello-spring.dev"); me(); return networkClient; }public void me(){System.out.println("test"); }}}다음과 같이 @Configuration을 지웠다 넣었다 해보면서이전에 배운 싱글톤에 대한 테스트를 해보고 있는데요 제 생각에 @Configuration을 빼면 빈에 등록 한번 등록된 객체의 값을 참조해서 가져오기만 하는 싱글톤 방식과 다르게 객체를 계속 생성해서 테스트 코드도 통과하면 안되고 connect도 두번 일어야 한다고 생각했습니다. 하지만 계속 테스트 코드를 통과하는 상황입니다. 제가 왜 이런걸까요?
-
미해결스프링 핵심 원리 - 기본편
Assertions.assertThat() 오류
안녕하세요!Assertions.assertThat() 에서 오류가 나는데, 해결이 안되어 질문드립니다!< 오류 화면 > < 시도한 것 > import org.assertj.core.api.Assertions.*;import static org.assertj.core.api.Assertions.*;둘 다 해도 계속 오류가 뜨네요 ㅠㅠ 이렇게 뜨길래 라이브러리에 추가하고Reload 까지 해봤는데 여전히 import가 안됩니다 !! < 그 외 코드 첨부 > 뭐가 문제일까요 ??? ㅠㅠㅠㅠㅠ 어디를 수정해야될지 모르겠습니다..!!
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 2(마스터편)
여러 가지 보조 스트림 클래스들
여러가지 보조 스트림 클래스들 강의에서 BufferedInputStream과 BufferedOutputStream 예제에 왜 while( ( i = bis.read()) != -1){ bos.write(i); }-1로 두는지 잘 이해가 되지 않습니다
-
미해결스프링 핵심 원리 - 기본편
gradle이 아닌 maven 프로젝트 open 방법
안녕하세요. 강의 중 프로젝트를 처음 열 때, 여는 방법에 대해 알려주셔서 관련하여 질문드립니다.프로젝트가 gradle인 경우, 해당 프로젝트 내의 build.gradle 파일을 선택해 open하는 것으로 알려주셨는데요. maven의 경우에는 어떤 방법으로 여는 것이 올바르게 여는 것인지 궁금합니다.기존에 gradle 프로젝트를 열었을 때에는 프로젝트 경로에 들어가 해당 프로젝트를 바로 여는 방식으로 했는데 이 방법이 올바르게 여는 방법이 아닌지도 함께 질문드립니다.감사합니다.
-
미해결스프링 핵심 원리 - 기본편
프로젝트 open 방법
안녕하세요. 강의 중 프로젝트를 처음 열 때, 여는 방법에 대해 알려주셔서 관련하여 질문드립니다. 프로젝트가 gradle인 경우, 해당 프로젝트 내의 build.gradle 파일을 선택해 open하는 것으로 알려주셨는데요. maven의 경우에는 어떤 방법으로 여는 것이 올바르게 여는 것인지 궁금합니다. 기존에 gradle 프로젝트를 열었을 때에는 프로젝트 경로에 들어가 해당 프로젝트를 바로 여는 방식으로 했는데 이 방법이 올바르게 여는 방법이 아닌지도 함께 질문드립니다.감사합니다.
-
해결됨스프링 핵심 원리 - 기본편
로그가 갑자기 안나옵니다 ㅠㅠㅠㅠ
강의들으면서 라이브 코딩 계속 진행했는데... 어느순간 부터 로그가 안나옵니다 ㅠㅠㅠㅠ위 그림처럼 로그가 나와야 하는데...아래처럼 실행해도 로그가 안나옵니다 ㅠㅠㅠ 도와주세요 ㅍ
-
해결됨스프링 핵심 원리 - 기본편
빈 생성 로그가 보이지 않아요
안녕하세요!강의를 따라하고 있었는데 선생님은 OrderApp MemberApp을 실행하면 빈생성 로그가 보이는데 저는 보이지 않습니다.추가적으로 프로퍼티파일에 로그찍히도록 설정해줘도 되지않아요ㅜㅜ 해결할 방법이 있을까요?감사합니다!
-
미해결스프링 핵심 원리 - 기본편
Spring boot 사용시 @Configuration 대한 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제가 이해한 부분은 @ComponentScan은 해당 어노테이션이 붙은 클래스 패키지부터 시작해서 하위 패키지를 모두 뒤지고 @Component 가 붙은 부분을 스프링빈으로 컨테이너에 등록한다는것으로 이해했습니다.그리고 Spring boot의 경우 @SpringBootApplication이 CoreApplication에 붙어있고 해당 어노 테이션은 @ComponetScan 내포하고 있고 그 위치가 프로젝트 최상위에 위치하다보니 결국 @ComponetScan 을 쓸필요가 없어지는것으로 이해했습니다. 이해가 안되는것은 @Configuration 에 대한 내용인데요. @SpringBootApplication 로 들어가보니 @Configuration는 포함하고 있지 않던데 어떻게 Spring boot에서 @Configuration이 사용되는건가요?