묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
자동리소스등록?
src/main/resources/application.properties```groovy spring.profiles.active=local spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource.username=sa ```이렇게 설정만 하면 스프링 부트가 해당 설정을 사용해서 커넥션 풀과 DataSource, 트랜잭션 매니저를 스프링 빈으로 자동 등록한다.(앞에서 학습한 스프링 부트의 자동 리소스 등록 내용을 떠올려보자.) 이 부분에서 자동 리로스 등록내용이 어디 강의에 있나요..?
-
미해결토비의 스프링 6 - 이해와 원리
안녕하세요 PaymentConfig 질문드립니다.
13:39에 28라인에return new WebApiExRateProvider(apiTemplate());가 아니라 return new WebApiExRateProvider(apiTemplate());로 작성되야지 의도대로 코드가 작동하는 것이 아닌지 문의드립니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
REQUIRES_NEW 내부 커밋, 외부 롤백 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Requires_new를 통해 내부 트랜잭션이 시작되고 내부 트랜잭션은 커밋, 외부 트랜잭션은 롤백이라고 했을 때 그대로 동작한다고 이해하면 될까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderServiceTest id to load is required for loading
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]OrderServiceTest에서id to load is required for loadingorg.springframework.dao.InvalidDataAccessApiUsageException: id to load is required for loading에러가 발생합니다. ID값이 왜 NULL인지 찾고 있는데 잘 모르겠네요.. 도움요청합니다. package jpabook.jpashop.service; import jakarta.persistence.EntityManager; import jpabook.jpashop.domain.Address; import jpabook.jpashop.domain.Member; import jpabook.jpashop.domain.Order; import jpabook.jpashop.domain.OrderStatus; import jpabook.jpashop.domain.item.Book; import jpabook.jpashop.domain.item.Item; import jpabook.jpashop.repository.OrderRepository; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest @Transactional class OrderServiceTest { @Autowired EntityManager em; @Autowired OrderService orderService; @Autowired OrderRepository orderRepository; @Test public void 상품주문() throws Exception { //given Member member = new Member(); member.setName("회원1"); member.setAddress(new Address("서울", "강가", "123-123")); em.persist(member); Book book = new Book(); book.setName("시골 JPA"); book.setPrice(10000); book.setStockQuantity(10); //when int orderCount = 2; Long orderId = orderService.order(member.getId(), book.getId(), orderCount); //then Order getOrder = orderRepository.findOne(orderId); assertEquals(OrderStatus.ORDER, getOrder.getStatus(), "상품 주문시 상태는 ORDER"); } @Test public void 주문취소() throws Exception { //given //when //then } @Test public void 상품주문_재고수량초과() throws Exception { //given //when //then } }
-
미해결스프링 웹 MVC 완전정복
질문 있습니다.
안녕하세요 강사님,양질의 강의 감사합니다.현재 servlet 수강중입니다.강의에서 디버그 찍어서 보여주시는 데이 부분에 대해서시간과 여유가 되신다면디버그를 어떻게 찍는지영상으로 알려주셨으면 좋겠습니다. 환절기 감기 조심하세요.긍정적인 답변 기다리겠습니다!
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
helloMesage 테스트 관련 안녕이 아닌 hello가 나오는 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]질문은 아니지만 저와 같은 오류를 가진 분을 위해 남깁니다.기본적으로 MessageSource는 locale이 null일때 Locale.getDefault()의 결과 값을 이용합니다.이 값은 JVM의 기본 locale을 가져오므로, 만약 이 값이 en_US 등으로 설정이 되어있다면, 안녕이 아닌 hello가 출력되어 test가 실패하게 됩니다.저와 같은 오류를 겪는 분이 있다면 시스템의 기본값으로 적용되는구나 이해하고, 그 Test에 한해서만 Locale.setDefault(Locale.KOREA) 로 설정하시면 테스트는 통과할겁니다.
-
해결됨스프링 부트 - 핵심 원리와 활용
외부설정 @ConfigurationProperties의 내부 클래스에서 static을 사용하는 이유를 알고 싶습니다.
외부 설정 쪽을 보고 있는데요. application.yml 에서 설정한 값을 safe 하게 사용하기 위한 코드인데요. 내부 클래스에 static 을 사용한 이유가 있을까요? @Data@ConfigurationProperties("my.datasource")public class MyDataSourcePropertiesV1 { private String url; private String username; private String password; private Etc etc = new Etc(); @Data public static class Etc { private int maxConnection; private Duration timeout private List<String> options = new ArrayList<>(); }}
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
노션자료
노션같은것은 어디서 확인하나요? 코드같은거 복사해서 빠르게 넘어가고 싶은데 자료를 찾을 수 없네요
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@PostConstruct 관련질문
import javax.annotation.PostConstruct; @PostConstruct public void init(){ itemRepository.save(new Item("testA", 10000, 10)); itemRepository.save(new Item("testB", 20000, 20)); }PostConstruct에 대한 위에 쓴 경로로 import가 안됩니다.자동으로 import진행하면 아래와 같이 나옵니다. 이렇게 진행했을때 items.html화면에서는 상품ID만 바인딩되고,itemName, price 등 나머지 데이터는 null로 화면에 안 나타납니다.import jakarta.annotation.PostConstruct;
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Automatic Build 설정 방법 질문
위 사진과 같이 Build 가 자동으로 되도록 세팅을 변경하고 인텔리제이를 리부팅 해도 설정 적용이 잘 되지 않습니다.코드를 변경 후 Shift + Command + F9 를 눌러 수동으로 Build 하지 않고 그냥 실행할 경우 변경사항이 제대로 적용되지 않은 채 코드가 실행이 됩니다. 해결 방법이 있을까요?수동으로 Build 하면 잘 실행되는 것으로 보아 코드 문제는 아닌 것 같습니다...ㅠ
-
미해결스프링 핵심 원리 - 기본편
인터페이스의 경우에도 상속이라는 말을 사용하나요?
ApplicationContext 인터페이스가 BeanFactory 외에도 여러가지 인터페이스를 상속(?) 받아서 사용하는데 사실상 기능을 상속한다기 보다 메서드 시그니쳐만 물려주고 구현체에서 실제로 기능 구현을 하는게 아닌가 해서요...
-
미해결Practical Testing: 실용적인 테스트 가이드
CQRS에 대한 jpa interface에 대한 궁금증..
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 우빈님!테스트 강의 복습 중인데, 다시 들으니깐 너무 재밌네요... 다름 아니라, CQRS 에 따라서 강의를 진행하면서도 Controller와 Service를 CQRS에 따라 분리하고 있습니다.(패키지가 많아지긴하네요..ㅎㅎ..)그런데 궁금한 부분은 Repsitory쪽인데,JpaRepository를 상속받는 인터페이스들(강의로 예를 들면 ProductRepository, StockRepository, OrderRepository가 있겠네요)같은 경우인데, sprind data jpa 인터페이스에 CRUD 중에 CD 에 대한 책임을 줄 수는 있겠다 생각했고,U 는 변경감지에 책임을 맡기면 되겠다고 생각했습니다.. 그런데, 쿼리메서드 부분이 모호한데요.작성했던 쿼리 메서드 같은 경우는 Query에 대한 부분인데 책임을 분리하려고보니, command에 query가 묶여있는 형태더라고요.. 이 부분은 어떻게 나누는지가 궁금합니다..제 짧은 지식 선에서는 QueryDSL 로 나눠야 하나 싶지만, 쿼리 메서드라는 편리한 것이 있는데 굳이 돌아가는 것 같다는 느낌이 드네요제가 굳이 나누려는건지 싶기도 하구요...조언을 구해봅니다..
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.<form action="item.html" th:action th:object="${item}" method="post"> 이문법에서, th:action의 값이없는데 타임리프로 하면 경로가 어디로가는건가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
강의 수강에 대한 질문입니다,
선생님 강의 정말 잘 듣고 있고, 설명도 천천히 상세히 해주셔서 열심히 듣고 있습니다. 그러나 듣으면서 개념 자체는 이해가 가는데 코딩과정에서 순수하게 코드 자체가 문법적으로 이해가 안되면 일단 이 강의는 접어두고 자바부터 다시 시작해야 할까요? ㅜㅜ
-
미해결실전! 스프링 데이터 JPA
UsernameOnlyDto 타입 type mismatch 오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.UsernameOnly 인터페이스 타입과 지네릭스 타입으로 결과는 문제 없이 동작하지만UsernameOnlyDto 타입으로 결과 값을 받으려고 findProjectionsByUsername를 호출하면 type mismatch 오류가 생깁니다. Specified result type [study.datajpa.dto.UsernameOnlyDto] did not match Query selection type [study.datajpa.entity.Member] - multiple selections: use Tuple or arrayList<UsernameOnlyDto> result = memberRepository.findProjectionsByUsername("m1");package study.datajpa.dto; public class UsernameOnlyDto { private final String username; public UsernameOnlyDto(String username) { this.username = username; } public String getUsername() { return username; } }// List<UsernameOnly> findProjectionsByUsername(@Param("username") String username); List<UsernameOnlyDto> findProjectionsByUsername(@Param("username") String username); <T> List<T> findProjectionsByUsername(@Param("username") String username, Class<T> type); org.springframework.orm.jpa.JpaSystemException: Specified result type [study.datajpa.dto.UsernameOnlyDto] did not match Query selection type [study.datajpa.entity.Member] - multiple selections: use Tuple or array at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:341) at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:241) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:560) at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:343) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:160) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:136) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) at jdk.proxy2/jdk.proxy2.$Proxy149.findProjectionsByUsername(Unknown Source) at study.datajpa.repository.MemberRepositoryTest.projections(MemberRepositoryTest.java:403) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) Suppressed: org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:804) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:758) at org.springframework.test.context.transaction.TransactionContext.endTransaction(TransactionContext.java:135) at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod(TransactionalTestExecutionListener.java:272) at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:488) at org.springframework.test.context.junit.jupiter.SpringExtension.afterEach(SpringExtension.java:275) ... 2 moreCaused by: org.hibernate.query.QueryTypeMismatchException: Specified result type [study.datajpa.dto.UsernameOnlyDto] did not match Query selection type [study.datajpa.entity.Member] - multiple selections: use Tuple or array at org.hibernate.query.sqm.internal.SqmUtil.throwQueryTypeMismatchException(SqmUtil.java:1272) at org.hibernate.query.sqm.internal.SqmUtil.verifyResultType(SqmUtil.java:1209) at org.hibernate.query.sqm.internal.SqmUtil.verifySelectionType(SqmUtil.java:1159) at org.hibernate.query.sqm.internal.SqmUtil.verifySingularSelectionType(SqmUtil.java:1114) at org.hibernate.query.sqm.internal.SqmUtil.checkQueryReturnType(SqmUtil.java:1088) at org.hibernate.query.sqm.internal.SqmUtil.checkQueryReturnType(SqmUtil.java:1049) at org.hibernate.query.sqm.internal.SqmUtil.validateQueryReturnType(SqmUtil.java:1040) at org.hibernate.query.sqm.tree.select.SqmSelectStatement.validateResultType(SqmSelectStatement.java:153) at org.hibernate.query.sqm.internal.QuerySqmImpl.<init>(QuerySqmImpl.java:240) at org.hibernate.internal.AbstractSharedSessionContract.createCriteriaQuery(AbstractSharedSessionContract.java:1483) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:1443) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:143) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:320) at jdk.proxy2/jdk.proxy2.$Proxy136.createQuery(Unknown Source)
-
미해결3. 웹개발 코스 [Enterprise Architecture(EA) X 전자정부프레임워크]
http://localhost:8080/Egov_WEB/main2.do 요청 관련
3장 학습 테스트에서URL 이 https://inf.run/3Ujcb로 작동합니다. Controller에서의 RequestMapping은@RequestMapping(value="/main2.do") 로 정의되었습니다. URL에 "Egov_WEB" 이 왜 들어가야 하는 것인가요? 브라우저에서 "http://localhost:8080/main2.do" 로 입력하면 오류가 나구요.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
빌드 중단 시 오류 발생
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]build를 Gradle로 할 시 아래 사진과 같은 오류가 납니다 intellij로 하면 아래와 같은 오류가 안 나구요혹시 해결 방안이 있을까요?오류 원인은 무엇일까요? 참고로 오류 발생은 빌드 중단 시 납니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿 localhost8080
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 안녕하세요, 강의 수강 중 질문이 생겨 여쭤보게 되었습니다. 강의를 들으며 라이브 코딩 중 제 노트북에서 localhost 8080/hello를 입력 시 연결이 안되더라고요.. 이것 저것 해결하려 노력을 하였는데도 여전히 해결하지 못하였는데, 원인이 혹시 무엇인지 알 수 있을까요 ? 유료 버전 사용 중이고, openjdk 24, war을 선택하였습니다.좋은 강의 제공해주셔서 항상 감사드립니다!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿과 서블릿컨테이너 그리고 WAS
[질문 내용]HttpServletRequest 역할HTTP 요청 메시지를 개발자가 직접 파싱해서 사용해도 되지만, 매우 불편할 것이다. 서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱한다. 그리고 그 결과를 HttpServletRequest 객체에 담아서 제공한다.pdf보면 위 내용처럼 HTTP 요청 메시지를 파싱하고 그 결과를 Request 객체를 만드는게 서블릿이라고 적혀있는데WAS와 서블릿을 구분해서 공부를 하던 도중 개념이 헷갈려서 https://jakarta.ee/specifications/servlet/5.0/apidocs/jakarta/servlet/http/httpservletrequest공식문서를 찾아봤는데 The servlet container creates an HttpServletRequest object and passes it as an argument to the servlet's service methods (doGet, doPost, etc).요청 객체와 파싱은 서블릿 컨테이너가 한다고 나와있습니다. 찾아보니까 서블릿과 서블릿 컨테이너는 같은 의미는 아닌거 같고 그럼 여기서 말하는 서블릿 컨테이너는 WAS 같은건가요? 아니면 서블릿 = 서블릿 컨테이너 라고 개념을 익혀도 괜찮은건가요?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 전파 활용 - UnexpectRollbackException 관련 질문
트랜잭션 전파 활용까지 강의를 수강하고나니이전 질문해당 질문에서 질문했던 1번 경우에 대해서는 제 생각이 맞는 것 같다는 결론이 나왔습니다.그리고 활용 강의까지 들으면서 느낀건데애초에 UnexpectRollbackException 예외는실제 정상 운영중인 서비스에서는 발생하면 안되는 예외고테스트 과정같은 개발 환경에서 개발자가 캐치해서 이 예외가 발생하지 않게끔 코드를 수정하기위한일종의 알림같은 예외라고 생각이 되었습니다.그래서 굳이 exceptionhandler로 UnexpectRollbackException 예외를 처리하는것은 뭔가 옳지 않은 방법이지 않을까 하는 생각이 들었습니다.제 생각이 맞나요?