묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
RequestMappingHandlerMapping이 더이상 @RequestMapping이 붙은 클래스를 매핑 정보로 인식하지 않습니다.
안녕하세요 좋은 강의 항상 잘 보고 있습니다. 다름이 아니라 8분 경 RequestMappingHandlerMapping은 스프링 빈 중에서 @RequestMapping 또는 @Controller가 클래스 레벨에 붙어 있는 경우 매핑 정보로 인식한다 하였는데, 스프링 6 버전 이후부터는 @RequestMapping은 인식하지 않게 변경된 것 같아 말씀 드립니다. 관련 커밋 링크 참조합니다!https://github.com/spring-projects/spring-framework/commit/3600644ed1776dce35c4a42d74799a90b90e359e 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
문제가 발생 할 수 있는 이유가 이해가 되지 않습니다.
private void validateDuplicateMember(Member member) { List<Member> findMembers = memberRepository.findByName(member.getName()); if (!findMembers.isEmpty()){ throw new IllegalStateException("이미 존재하는 회원 입니다."); } }에서 memberA가 동시에 DB에 insert 될때 validateduplicate를 통과하면 동시에 memberA가 로직을 호출하게 되면 memberA라는이름으로 두명이 가입 됩니다. 그래서 memberA에 제약을 건다구 하셨는데제약을 거는거 어떤건지 잘 모르겠습니다. 1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결스프링 핵심 원리 - 기본편
수업질문
의존관계 자동주입에서 질문있습니다.(영상시간 18분 16초) @Autowired를 통해 의존관계 주입에서 자료타입에 따라 설정된다고 하였는데, DiscountPolicy 자료타입에서 rateDicountPolicy가 @Component 설정이 되어있어서 rateDicountPolicy 만 의존관계 자동주입설정된건가요? @Component 유무에 따라서 자료타입지정이 가능하면 자료타입 중(FixDiscountPolicy,RateDiscountPolicy) 하나만 설정으로 해야겠네요?? 여러개를 설정하면 충돌에러가 뜨나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
afterCompletion 에서의 에러 로깅
안녕하세요, afterCompletion() 에서 에러 로깅과 관련해서 질문드립니다.현재 강의에서는 컨트롤러에서 예외가 터지면 afterCompletion() 의 파라미터 ex 가 널이 아니니까 이 ex를 통해 어떤 에러가 났는지 로깅을 해주고 있습니다.그렇다면 만약 @ExceptionnHandler 를 이용해 컨트롤러의 예외처리를 한다면 이 ex 는 별도로 사용하지 않아도 될까요?(거의 사용을 안 하게 될 것 같은데, 맞나요?)항상 영한님과 서포터님들께 감사드립니다!🙇♂️
-
미해결스프링 핵심 원리 - 기본편
@Component로 등록한 빈을 조회하는 방법은 어떤게 있나요?
@Component로 등록한 빈을 조회하는 방법은 어떤게 있나요?궁금합니다. 아래와 같은 코드가 아니라 다른 클래스를 이용해야 하나요?AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class );
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
왜 addStock, removeStock 메서드를 사용하는 것이 왜 객체지향적인지
강의에서 setter 메소드로 재고 수량을 조절하는게 아니라 addStock 메서드, removeStock 메서드를 이용해 재고 수량을 조절하는 것이 객체지향적이라고 하셨는데 왜 이게 객체지향적인지, setter 메소드를 사용하는 것이 왜 객체지향과는 거리가 있는 것인지 자세하게 설명 부탁드립니다. 감사합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Entity 내의 로직들, 생성 함수에 대한 질문
안녕하세요! 간단한 질문이 있어서 살짝 남겨보게 되었습니다. 1. 지금까지 JPA 강의를 들으면서 - "Entity 에는 Setter 를 열어두지 말고, Getter 만 열어둔채, 초기값 Setting 에는 생성자를 사용하라. 그리고 변경에 대해서 setter 가 필요하다면 그 때 열어두고, 연관관계에 대해 수정시 setting 외의 로직을 수행해야 하기 때문에 change, modify 등의 수식어를 사용해서 함수를 만들어라 ". 정도로 이해하고 있었습니다. 이 관점에서 createOrder() 함수는 설명해주신대로 그냥 Order 을 생성해주는 함수고, 초기값을 setting 해주는 함수인데, 이게 생성자와 어떤 점에서 다른지 이해가 잘 되지 못했습니다. public Order(Member member, Delivery delivery, OrderItem ... orderItems){ this.member = member; this.delivery = delivery; ... OrderItem for 문 this.status = OrderStatus.ORDER; this.orderDate = LocalDateTime.now(); }위처럼 그냥 생성만 해주는 함수와 어떤 차이가 있는지 이해를 못하였습니다 ㅠㅠ2. 비즈니스 로직들을 Service 단에서 수행하지 않고, Entity Class에서 모두 짜는 이유가 잘 이해가 되지 않았습니다 ㅠ 애를 들면 cancel() 의 명령어 같은 경우, ~~ /orderItem/cancel/3 이런식으로 들어오게 된다면, Service Layer 에서 OrderItem 조회하고, Repository 를 호출하며 Order에 대한 \ 필요 로직 수행, Item에 대한 필요로직 수행을 하는것으로 생각을 했어서 그런 것 같습니다. 지금 현재 강의 부분과 같은 설계는 약간 영속성 컨텍스트를 계속 관리하면서 필요 SQL들이 자연스럽게 호출되게 하는 방식인 느낌인데 이런 방향이 맞을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@PersistenceContext 에 대하여
안녕하세요강의 중 @PersistenceContext 에 대해 궁금한 점이 생겨서 질문을 남기게 되었습니다.JPA 기본편 강의도 완강 후에 듣고 있는 상태인데요, 제가 이해했었던 바는, 한 영속성 컨텍스트에는 한 EntityManagerFactory 가 할당되고, 그 영컨에서 진행하는 각각의 트랜젝션들을 처리하기 위해 EMF가 각각 EntityManager를 생성하여 트랜젝션마다 할당해서 처리할 수 있도록 도와준다고 이해하였습니다.위에 이해한 바가 맞다면, 앱이 실행되면서 MemberRepository 가 싱글톤 컨테이너에 의해 관리되기 시작하면서, 이 때는 EntityManager 가 트랜젝션이 들어오지 않았기 때문에 할당받지 못한 상태여야 할 것 같습니다. 그리고 save, findOne, findAll 등의 트랜젝션을 수행하기 위한 함수들이 호출될 시 EntityManager 가 생성되고 할당받는 것이 맞을까요? 즉, 싱글톤 컨테이너 안에 있는 Repository 안에 있는 EntityManager em 은 트랜젝션이 수행되기 전에는 NULL이라고 보면 될까요?제가 이해한 내용이 맞는지 궁금해서 문의글 남기게 되었습니다. 항상 도움주셔서 감사합니다 :]
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
redirect RestController
안녕하세요.redirect를 써서 새로고침 시에중복 방지하는 것까지는 이해를 했습니다. 그런데 만약에,restcontroller일 경우즉 값만 받아서 저장하고 값만 돌려주는 경우에는따로 redirect 처리하지 않아도 되는 거죠?예를들면 javascript로 ajax를 사용해서값을 보내고 저장(또는 삭제, 수정) 하는경우일 때가 궁금한것입니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
./gradlew clean build 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.jpashop % ./gradlew clean build > Task :test JpashopApplicationTests > contextLoads() FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:98 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1804 Caused by: org.hibernate.service.spi.ServiceException at AbstractServiceRegistryImpl.java:275 Caused by: org.hibernate.HibernateException at DialectFactoryImpl.java:100 MemberRepositoryTest > testMember FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:98 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1804 Caused by: org.hibernate.service.spi.ServiceException at AbstractServiceRegistryImpl.java:275 Caused by: org.hibernate.HibernateException at DialectFactoryImpl.java:100 2 tests completed, 2 failed > Task :test FAILED FAILURE: Build failed with an exception. * What went wrong:Execution failed for task ':test'.> There were failing tests. See the report at: file:///Users/king/study/jpashop/build/reports/tests/test/index.html * Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 17s task.named 전부 주석처리 해보고 밑에 useJunutPlatform이부분도 주석처리 해보고 했는데도 오류 납니다 RunWith도 지워보고 해봣는데 안됩니다
-
해결됨스프링 핵심 원리 - 기본편
findAllBean()에서@Autowired질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기서 ac를 통해 DiscountService를 빈을 등록했는데@Autowired 어노테이션 사용시 에러나는 원인을 모르겠습니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
mvc2편까지 봤는데 쭉 나가도 될까요 선생님?
현재스프링 기본 -HTTP- mvc1편-mvc2편 까지 본 상태입니다또한 스프링부트+jpa 로드맵도 다 구매를 해둔 상태이구요병렬적으로 자바 / cs / 이론적인 데이터베이스 공부도 함께하고 있구요 다만 스타일이 한번 빠르게 쭉 보고 모르는게 있으면 체크 해둔 후진도를 나갈수록 계속 쓰이는데, 제가 반복적으로 헷갈리는 부분은 따로 적어두고 체크해두면서 1회독 후 2회독 3회독을 하는 스타일 입니다다만 스프링 기본~ mvc2편 까지 공부한 상태에서 한 번 더 보려고 하니 생각보다 시간이 많이 소요될 것 같다는 것을 느꼈습니다그래서mvc2까지 본 현재 상황에서나머지 스프링 로드맵들 db관련 내용(db1,2)+ jpa+스프링부트까지 빠르게 쭉 다 보고다시 처음 스프링부터 보는게 나을지, 아니면 다시 스프링 기본부터 복습하고 db및 jpa+스프링부트쪽 뒷 로드맵으로 넘어가는게 나을지 고민입니다! 항상 양질의 강의 감사드립니다 영한님 및 서포터즈 분들 새해복 많이 받으세요!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
input tag에 타임리프로 chekced를 넣는 방법
[질문 내용]안녕하세요 강사님! 강의 잘 듣고 있습니다. 다름이 아니라 타임리프에서 chekced를 표기하는 방법을 알고 싶습니다! html 소스보기 사진<div class="form-check form-check-inline"> <input type="radio" value="ETC" class="form-check-input" id="itemType3" name="itemType" /> <label for="itemType3" class="form-check-label" checked="checked" >기타</label> </div> 소스코드 <!-- radio button --> <div> <div>상품 종류</div> <div th:each="type : ${itemTypes}" class="form-check form-check-inline"> <input type="radio" th:field="*{itemType}" th:value="${type.name()}" class="form-check-input" th:checked="${(type.description == '기타')? 'true':'false'}" /> <label th:for="${#ids.prev('itemType')}" th:text="${type.description}" class="form-check-label" th:checked="${(type.description == '기타')? 'true':'false'}" > BOOK </label> </div> </div>위처럼 표시했는데 label 태그에는 나오고 input태그에는 나오지가 않습니다 ㅠ 이유가 무엇일까요? 또 thymeleaf로 표기하려면 어떻게 해야할까요? 그리고 formController에서 초기값을 설정하는 방법은 직접 해봤습니다! 타임리프에서 조건을 줘서 checked를 주는 방식이 궁금합니다! 감사합니다 ㅎㅎ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
process(paramMap,model) 질문
String viewName= controller.process(paramMap,model) 을 하게 되면 무슨 값이 들어가게 되나요?paramMap과 model 자체가 map 형태인데 어떻게 string 으로 치환이 되는건지 궁금합니다.process 메서드를 제가 잘 이해를 못한건지 이해가 잘 되지않습니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
임베디드 모드에서 Spring이 database를 선택하는 과정
Spring 공식 문서를 보면Spring Boot can auto-configure embedded H2, HSQL, and Derby databases. You need not provide any connection URLs. You need only include a build dependency to the embedded database that you want to use.You need a dependency on spring-jdbc for an embedded database to be auto-configured. In this example, it is pulled in transitively through spring-boot-starter-data-jpa.라고 나와있습니다.저는 현재 프로젝트의 경우build dependency= build.gradledependency on spring-jdbc= implementation 'org.springframework.boot:spring-boot-starter-jdbc' (build.gradle)라고 생각하는데, 이것이 맞는 내용인지 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
다양한 의존관계 주입 방법 강의 7분 42초 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.basicScan 메소드로 테스트 시sout을 해도 sout이 출력이 되지 않아 질문드립니다.어떤 부분을 확인해봐야 할까요?
-
미해결스프링 핵심 원리 - 기본편
스프링 컨테이너가 2개가 가능한가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]프로토타입 빈 요청 시 스프링컨테이너가 새로 생성된다 했는데그럼 2번 요청하면 스프링컨테이너가 2개 생성되나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
mv.getModel().put("member",member);
이 부분에서ModelView mv = new ModelView("save-result")mv.getModel().put("member",member);이렇게 하면 결과가 어떻게 되는 건가요?mv.setModel().put("member",member);을 해야 맞는거 같은데 잘 이해가 안되서 질문 드립니다.
-
해결됨스프링 핵심 원리 - 기본편
provider와 프록시에 관하여
1.이번 강의에서 설명하시는 과정에서 '프록시도 provider처럼 일단 가짜를 만들어서 처리한다'라고 말씀을 하셨는데바로 전 강의에서는 provider의 특징으로 getObject()를 호출하는 시점까지 request scope 빈의 생성 지연, 호출 후에 빈을 생성한다고 알려주셨습니다.그렇다면 request scope 빈의 생성 지연 <- 이 특징이 일단 가짜 객체를 만들어서 주입시킨다와 같은 의미인가요? (부연 설명을 붙이자면 일단 가짜 객체를 만들어서 주입시켜서 빈의 생성을 지연시킨다는 건지) 그리고 그 후에 프록시처럼 해당 request scope로 만들어놓은 로직을 호출 후에 빈을 생성하는 것인가요? 원래 강의에서는 24번, 25번 줄이 바꿔져있습니다. myLogger.setRequestURL 같이 호출하면 가짜 프록시객체가 실제 빈한테 위임한다고 하셨는데 정말로 위임하는지 궁금해서 사진처럼 순서를 바꿔봤습니다. 근데 실행을 해보니 똑같이 가짜 프록시 객체가 출력이 돼는데 왜 그런 것인가요?(출력 화면)
-
해결됨스프링 핵심 원리 - 기본편
Spring boot 버젼과 java 버젼에 대해서 질문이 있습니다.
https://www.inflearn.com/questions/700027/spring-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1안녕하세요!강의를 수강 중 spring boot 3.0으로 빌드를 하니 위의 답변처럼 되지 않아 spring boot 2.7.7으로 변경하였습니다. 다만 아래의 Junit에 대한 빌드부분에 대한 내용차이가 있어서 이 부분도 동일하게 가져가야하는 부분인지 혹시 몰라 질문드립니다!! 감사합니다.영한님 강의 빌드제 빌드