묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
테스트 코드 beforeEach() 메서드만 public 접근 제어자를 선언한 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요, 영한님.아래에 상황 - 의문 - 추측 - 결론 순으로 질문드리겠습니다! 상황:이번 시간에 AppConfig를 사용하도록 수정한 OrderServiceTest와 MemberServiceTest 코드에서 새롭게 다음 메서드를 만들었습니다.@BeforeEach public void beforeEach() { // ... } 의문1:그런데 이전에 만들었던 다른 메서드들의 경우 package-private로 접근을 제어하고 있습니다. 그래서 왜 두 경우에 다른 접근 제어자가 사용되었는지 의문이 들었습니다.@Test void createOrder() { // ... } 추측1:스택오버플로우 1을 보니 과거에는 리플렉션 기술을 통해 테스트 메서드를 식별해야 했기 때문에 public으로 열어두는 것이 필요했다.또한 이에 대한 JUnit5 탑 컨트리뷰터 Sam Brannen의 답변에서는 "less is more라는 원칙에 따라 더이상 public이 필요하지 않기 때문에 JUnit5부터는 작성하지 않아도 된다."고 하더군요. JUnit5 공식 문서에서도 "public 접근 제어자로 선언될 필요는 없다. 다만, private이면 안 된다."는 안내를 확인했습니다(아래 사진 참고). 결과적으로,위 내용들을 근거로 "과거 관례로 인해 영한님이 public을 사용하셨겠구나."라는 추측을 했습니다. 결론:결국 'JUnit5 이후부터는 테스트 메서드에 대해 public을 붙이지 않는 것을 권장한다(붙여도 문제는 없다).'는 것인데, (물론 개발팀 컨벤션에 따라 다르겠지만) 현업에서는 다음 두 경우 중 어떤 방식이 채택되는 경우가 더 빈번한지 여쭤봅니다!과거 관례에 이어 public을 여전히 작성한다.이제 public을 안 붙여도 되고, 이 방식을 JUnit5에서도 권장하기 때문에 더 이상 붙이지 않는다. 감사합니다.
-
해결됨스프링 핵심 원리 - 기본편
@Autowired 필드명 매칭으로 조회 대상 빈을 확정하는 부분 실습하는데 오류가 납니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의 영상 2:17 쯤 부분입니다.OrderServiceImpl 의 파라미터 명을 rateDiscountPolicy로 바꾸었습니다. 그리고 basicScan() 테스트 코드 하나만 돌렸음에도 available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy 오류가 납니다. 강의 영상에서도 분명 저 부분 하나만 바꿨고 똑같이 basicScan() 테스트 코드 하나만 돌려서 오류 없이 성공했는데 왜 제가 똑같이 시도했을 때 오류가 나는지 이유를 찾을 수없어 질문 드립니다. 이전에도 비슷한 질문이 있어 살펴보았으나 이 상황에 해결책이 되지 않았습니다. 제가 궁금한건 왜 강의를 똑같이 따라했음에도 왜 '필드명 매칭' 이 되지 않는지, 그리고 '필드명 매칭으로 테스트를 성공하기 위해서 어떻게 해야하는지' 즉 해결책 입니다. 아래는 제 코드 입니다.@Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy rateDiscountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = rateDiscountPolicy; } @Override 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); } // 테스트 용도 public MemberRepository getMemberRepository() { return memberRepository; } }@Test void basicScan() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class); MemberService memberService = ac.getBean(MemberService.class); assertThat(memberService).isInstanceOf(MemberService.class); OrderServiceImpl bean = ac.getBean(OrderServiceImpl.class); MemberRepository memberRepository = bean.getMemberRepository(); System.out.println("memberRepository = " + memberRepository); }그리고 오류 메시지 입니다. org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Users\user\Documents\인프런 강의 플젝\core\core\out\production\classes\hello\core\order\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1395) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1222) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1188) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1123) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:987) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:93) at hello.core.scan.AutoAppConfigTest.basicScan(AutoAppConfigTest.java:16) 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)Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy at org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:218) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1722) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1628) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:913) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ... 19 more
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
build 시 테스트 TASK 에러 발생
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?섹션3[2주차]설득력을 높이는 수치화 기술11강 2-4 프로젝트 기본 설정하기 & 로컬 모니터링 인프라 설정 2. 어려움을 겪는 부분어느 부분에서 막히셨나요? 14:08분 build 시 test 시 런칭 시점에 테스트를 모두 통과하도록 변경했다고 하는데, 실제 build시에 테스트 task 수행 시 DB에 연결할 수 없는 오류가 발생합니다docker compose up 후 bootRun시 localhost:8080/api/chapter2/boards시 응답 값은 제대로 나옵니다 3. 시도해보신 내용문제 해결을 위해 어떤 시도를 해보셨나요?에러가 발생했다면 어떤 에러인가요?EventJoinWithExternalApiUpdateFacadeTest > 외부 API 호출과 DB 업데이트 불일치 테스트 FAILED java.lang.AssertionError at EventJoinWithExternalApiUpdateFacadeTest.java:103SimpleEventListenerTest > 현재 코드 구조에서 @TransactionalEventListener는 작동하지 않는다 FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:143 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1770 Caused by: jakarta.persistence.PersistenceException at AbstractEntityManagerFactoryBean.java:421 Caused by: org.hibernate.exception.JDBCConnectionException at SQLExceptionTypeDelegate.java:49 Caused by: java.sql.SQLNonTransientConnectionException at SQLError.java:111 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1770 Caused by: jakarta.persistence.PersistenceException at AbstractEntityManagerFactoryBean.java:421 Caused by: org.hibernate.exception.JDBCConnectionException at SQLExceptionTypeDelegate.java:49 Caused by: java.sql.SQLNonTransientConnectionException at SQLError.java:111SimpleEventListenerTest > @TransactionalEventListener는 활성 트랜잭션이 필요하다 FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:143 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1770 Caused by: jakarta.persistence.PersistenceException at AbstractEntityManagerFactoryBean.java:421 Caused by: org.hibernate.exception.JDBCConnectionException at SQLExceptionTypeDelegate.java:49 Caused by: java.sql.SQLNonTransientConnectionException at SQLError.java:111 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1770 Caused by: jakarta.persistence.PersistenceException at AbstractEntityManagerFactoryBean.java:421 Caused by: org.hibernate.exception.JDBCConnectionException at SQLExceptionTypeDelegate.java:49 Caused by: java.sql.SQLNonTransientConnectionException at SQLError.java:111SimpleEventListenerTest > @EventListener는 트랜잭션이 없어도 정상 동작한다 FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:143 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1770 Caused by: jakarta.persistence.PersistenceException at AbstractEntityManagerFactoryBean.java:421 Caused by: org.hibernate.exception.JDBCConnectionException at SQLExceptionTypeDelegate.java:49 Caused by: java.sql.SQLNonTransientConnectionException at SQLError.java:111 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1770 Caused by: jakarta.persistence.PersistenceException at AbstractEntityManagerFactoryBean.java:421 Caused by: org.hibernate.exception.JDBCConnectionException at SQLExceptionTypeDelegate.java:49 Caused by: java.sql.SQLNonTransientConnectionException at SQLError.java:111 현재 작성하신 코드를 공유해주세요 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의자료 확인 요청
5. 회원 관리 예제 - 웹 MVC 개발.pdf 내의 소스중MemberForm클래스의 create() 메소드 내에MemberService memberService= new MemberService();가 빠져있습니다.
-
미해결견고한 결제 시스템 구축
seed 키 및 orderId 에 대한 질문
seed 키 값으로 LocalDateTime.now 로 설정하면 어차피 사용자가 연속으로 클릭을 한다고 해도 중복값으로 들어오지 않게 되는것 아닌가요?그러면 결론적으로 자료에서 설명하신 결제버튼을 누른만큼 Checkout API 가 호출되는것이 아닌지 궁금합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
35강에서 returnBook 에서 userLoanHistory 값 중복에 관하여
@Transactional public void returnBook(BookReturnRequest request) { User user = userRepository.findByName(request.getUserName()) .orElseThrow(IllegalArgumentException::new); user.returnBook(request.getBookName()); }위 코드의 BookService 에서 책을 반납할때 userLoanHistory 중 user명과 책 이름이 같은것을 가져와서 userLoanHistory 에서 리턴하는데 문제는 한 사람이 이미 같은 책을 빌렸고 반납한 기록이 있다면 중복으로 잡힙니다.public void returnBook(String bookName) { UserLoanHistory targetHistory = this.userLoanHistories.stream() .filter(history -> history.getBookName().equals(bookName)) .findFirst() .orElseThrow(IllegalArgumentException::new); targetHistory.doReturn(); }위의 User 엔티티에서 혹시 userLoanHistory 값이 여러개 나올때 혹시 .findFirst() 를 통해 그 중 가장 위즉, 여기선 가장 최근에 대출한 책의 기록인 userLoanHistory 를 가져와서 doReturn()을 진행하는 형태가 맞습니까?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
질문있습니다!
강사님께서 API 가 프로그램 간 정해진 약속을 해서 정해진 기능을 수행하는 것이라고 말씀해주셨는데 그럼 프로토콜과 API 가 같은 건가요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
소스는 어디잇나요?
너무 빨리 넘기시니 보면서 직접 타이핑도 못하고,갖다 붙일 소스코드 어디있나요?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
네임드락이 분산 환경에서 유리한 이유가 궁금합니다.
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?4-10 입니다 여기까지 이해하신 내용은 무엇인가요?네임드 락은 분산환경에서 유리하다. 2. 어려움을 겪는 부분어떤 개념이 헷갈리시나요?네임드 락이 분산 환경에서 유리하다 하신 내용에서, 데이터베이스 레벨의 락 제공이기에 유리하다고 이해하였습니다.하지만 비관적락, 낙관적 락 둘 다, db 단 에서 락을 획득하거나 버전 관리를 통해 이루어 진다고 이해하고 있어서 그렇다면 분산 환경에서 유리하다는 것이 네임드 락만의 장점이 아닌것 같다고 생각이 들었습니다.스프링에서 비관적락, 낙관적 락을 jpa 를 활용하여 걸게 된다면, dbever 에서 테스트 해본 것 처럼 db 단에서 처리되어 락을 수행하게 되는 내용이 정확히 맞는지 궁금합니다.만약 맞다면 네임드 락이 분산 환경에서 유리하다는 것이 db 단에서 처리되고, 그 방식 자체가 분산환경에 유리한 내용을 가지고 있는건지 궁금합니다.
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
Index type 질문 있습니다.
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분어느 부분에서 막히셨나요?코드의 어떤 로직이 이해가 안 되시나요?어떤 개념이 헷갈리시나요? 3. 시도해보신 내용문제 해결을 위해 어떤 시도를 해보셨나요?에러가 발생했다면 어떤 에러인가요?현재 작성하신 코드를 공유해주세요 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 안녕하세요 강의 잘 보고 있습니다.인덱스 타입은 인덱스만 조회하는 경우에는 단순히 논 클러스터 인덱스 안에 있는 칼럼 값들만 조회하기만 하면된다. 라고 말씀을 하셨습니다.근데 제가 클러스터 인덱스/논클러스터 인덱스/ 커버링 인덱스에 대한 개념을 아래와 같이 이해를 했습니다.클러스터 인덱스 - PK를 키로 리프 노드에 모든 데이터가 저장돼 있는 구조 논클러스터 인덱스 - 세컨더리 인덱스를 키로 가지고, 리프 노드에는 “해당 세컨더리 인덱스의 PK를 데이터로 가지고 있음”.커버링 인덱스 - 세컨더리 인덱스를 키로 가지고 있으며, 리프 노드에 “ 해당 세컨더리 인덱스의 PK와 실제 데이터를 가지고 있음” 그래서 위 사진과 같이 설명을 하셨을 때, 잘 이해가 되지 않은 부분이 price만 보는 경우에는 단순히 논 클러스터 인덱스 안에 있는 칼럼 값들만 조회하기만 하면 된다.라는 말씀이 잘 이해가 되지 않습니다.논 클러스터 인덱스의 경우에는 저는 아래와 같이 이해를 했습니다. 1.세컨더리 인덱스가 key이고, 리프 노드에 데이터로 PK를 가지고 있음2.그래서 세컨더리 인덱데스로 원하는 데이터를 직접 찾기 위해서는 리프 노드에 있는 PK를 이용해서 직접 클러스터 인덱스로 접근해서 데이틀 조회해야됨” 그래서 제가 이해한 부분 중에 틀린 부분이 있는걸까요?아니면 제가 이해한게 맞다면 “ price만 보는 경우에는 단순히 논 클러스터 인덱스 안에 있는 칼럼 값들만 조회하기만 하면 된다”라는 말씀이 잘 이해가 되질 않습니다.감사합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
오류 메시지 원래 없는건지? (5:41초에 나오는 밑에 at [source: 생략]) 아니면 무엇을 추가 했나요?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 궁금증이 생겨서 질문을 드립니다.영한님 강의를 따라 하면서 하는데영상의 의 사진처럼 저는 한 줄이 안보여서 그러는데, 혹 무엇을 추가 하신 적이 있으신가요?사진에 나오는,스프링 로그 밑에 나오는at [source : (pushbackInputStream); line 1, column:30) 이 코드요. 저의 경우에서는 포스트맨 에서, 실행을 send를 눌렀지만 이 로그는 보이지가 않아서 물어봅니다. 혹 무언가를 추가 하신 적이 있으신가요? 아니면 무료 버전 이어서 차이가 있는 건가요?답변 부탁 드립니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 목록 조회 fetch join 질문드립니다
주문 목록을 화면에 뿌려줄 때 N+1 문제가 발생하는 것을 확인하고페치 조인으로 이를 해결해보았습니다. OrderRepository.javapublic List<Order> findAllByString(OrderSearch orderSearch) { String jpql = "select o from Order o join fetch o.member m join fetch o.orderItems oi join fetch oi.item"; ... }다른 부분은 건들지 않고 문자열 jpql 만 위와 같이 변경했습니다.이처럼 변경 후 확인을 해보니 N+1 문제 없이 한방 쿼리로 주문 목록을 가져오는 것을 확인했습니다. 하지만, 기본편에서 페치 조인 대상에는 별칭을 줄 수 없다고 하셨습니다.물론 하이버네이트는 되지만 아래의 이유 때문에 가급적 사용을 금한다고 말씀하셨습니다.위의 o.member m 를 예로 들면 where 절에서 m.name like 와 같이 몇개만 따로 가져오는 것은JPA가 설계한 관련된 것들을 싹 가져온다 의 방향과는 맞지 않기 때문입니다. 여기서 질문이 있습니다질문 1) where 절에 member에 대한 조건이 없으면 별칭을 쓰지 않아도 될거같은데 이처럼 있는 경우는 어떻게 하면 될까요?(이 부분에 대해서 활용 2편에서 다뤄주시면 그렇다라고만 답해주셔도 됩니다)질문 2)기본편에서 페치 조인을 여러 단계 하는 경우는 간혹 별칭을 쓸 수 있다고 하셨는데 그게 위의 o.orderItems oi 에 해당될까요?(여기에 별칭을 안주고는 도저히 item을 가져올 방법이 떠오르지 않습니다..)
-
해결됨토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
Exception 정의 기준
application 쪽에서는 커스텀 예외를 정의해서 사용했는데 Profile과 Email 레코드에서 값 형식 검증 부분에서는 표준 예외를 사용하셨더라구요 예외를 분리해서 사용하는 기준이 무엇일까요?
-
미해결스프링 핵심 원리 - 기본편
H2 Database JDBC 추가 방법 문의
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.질문 1. H2 Database 설치 이후 설정 부분과 이름을 확인 했을 때, JDBC가 없이 JNDI로 되어 있는데, 강의를 수강하는데, 문제가 없는지와 문제가 된다면 JDBC 설정하는 방법에 대해서 알려주실 수 있는지 방법 공유 부탁 드립니다.질문 2. 이전에 ID 및 PW를 설정해둔 것 같은데, 강의하는 것처럼 아예 모두 초기화 할 수 있는 방법이 있으면 방법 공유 부탁 드리겠습니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
개인적질문
안녕하세요 토비님 가의 잘 보고 있습니다. DDD는 처음이고 헥사고날방식도 처음이라 질문 수준이 낮은 점 양해 부탁드립니다!이 강의까지 보고나서 전체코드를 봤을떄 궁금한 점들이 있어서 질문 드립니다!1번 질문:@Entitypublic class Member { @Embedded private Address homeAddress;} @Embeddable public class Address { private String city; private String street; private String zipcode;}@Embeded사용할때 데이터 필드를 의미 있는 하나의 묶음 이라는 의미로 사용하는데 profile 이나 email같은 경우에는 컬럼이 하나여도 @Embeded 로 묶으셨는데 그 기준(언제 사용해야하느지)가 궁금합니다. 저라면 그냥 생각 없이 String 으로 받았을거같은데 ….!2번 질문 : Aggregate root 로 접근해하면 메서드 체이닝 비슷하게 일어나는거 같은데 그런 점은 괜찮나요!?3번 질문 :. Aggreagate root로 접근하는 방식은 DDD에서만 사용하는지 ?? 기존 JPA + 레이어 아키텍쳐에서도 사용이 가능한건지....?4번 질문 : 강의에서는 1:1 이였지만 , ManyToOne 단방향 , ManyToOne OneToMany 양방향 관계에서도똑같이 Aggregate root로 접근해서 데이터를 처리해야하는지..?미리 감사드립니다!!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
뷰템플릿 사용 시
[질문 템플릿]1. 강의 내용과 관련된 질문인가요?예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 강의 수강 중 질문이 생겨 여쭤봅니다.api를 개발하는 과정에서 DTO를 사용하고, 혹여나 그렇지 않을 경우 @JsonIgnore을 사용하는 것을 이해했습니다.만약 스프링부트 1 강의처럼 뷰템플릿으로 개발할 때에는 컨트롤러 리턴 타입이 객체가 아니라 String이기 때문에 DTO가 필요없을까요 ? (굳이 필요하다면 form 객체..?) 마찬가지로 뷰 템플릿에서는 무한 참조 상황에서 @JsonIgnore을 사용하는 것이 아니라 양방향 편의 메서드로 무한 참조를 방지하면 해결이 되는지 궁금합니다!
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
커리큘럼 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 커리큘럼 관련 질문은 어디에 남겨야 좋을지 모르겠어서 여기에 남기게 됐씁니다 ㅠㅠ 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? [질문 내용]안녕하세요! 평소에 강의 너무 잘 듣고 있습니다! 데이터베이스 강의가 다양해서 좋지만 ! 순서가 고민돼서 질문드립니다. 저는 신입 또는 저년차 개발자로 입사하고 싶습니다! 기본적인 SQL 쿼리는 작성할 수 있습니다. 현재 자바, 스프링 핵심원리 기본, 스프링 MVC1 강의 들었습니다. 1. 데이터베이스 강의 순서 추천: 김영한의 실전 데이터베이스/ 스프링 DB/ 자바 ORM 표준 JPA 프로그래밍/ 실전! 스프링 데이터 JPA 등 다양한 데이터베이스 강의 중 어떤 순서로 학습하면 좋을까요? 2. 스프링 관련 강의 추천: 위에서 추천해주실 데이터베이스 강의와 함께 스프링 MVC2/ 스프링부트/ 스프링부트와 JPA 활용 강의 중 어떤 강의 수강하는 것이 좋을지도 추천 부탁드립니다!
-
해결됨서버개발자 과제전형 완벽가이드 - 1편
import 오류?
처음 세팅을 강사님처럼 naver-client 모듈을 생성하고 하지는 않았긴 했는데 이게 이유가 될 수 있나요? external에서 테스트할 때는 동일하게 common 쪽 import 하고 사용했을 때 테스트가 정상적으로 동작을 해서 뭐가 원인인지 모르겠습니다.C:\Users\82108\Desktop\PARK_BH\library-search\search-api\src\main\java\com\library\controller\BookController.java:3: error: cannot find symbolimport com.library.NaverBookResponse; ^ symbol: class NaverBookResponse location: package com.library
-
해결됨서버개발자 과제전형 완벽가이드 - 1편
JSON 역직렬화
강사님과 똑같은 상황인 기본 생성자가 없는 상태인데 저는 왜 문제가 발생하지 않을까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
글로벌 설정 이라는게 무엇을 말하는 건가요?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 궁금증이 생겨서 질문을 남깁니다.영상에서 나오는 "글로벌 설정"이라는게 정확히 어떤 의미에서 사용하였는지 모르겠습니다. 일단 코드를 따라하고, 영상을 다시 보기는 했는데. 저가 보기에는 그냥 글로벌 설정 하기 전 및 글로벌 설정을 하고 나서 차이점을 모르겠습니다.일단 생각하는 것은 글로벌 설정이 메시지랑 관련 있다? 라는 정도만 생각하게 됩니다. 글로벌 설정에 대해서 더 자세히 가르쳐 주시면 감사하겠습니다. 답변 부탁드립니다.