안녕하세요 이번에 강의를 완강하고 스프링을 이용한 프로젝트를 해보려고합니다. 해보고 싶은 건 잠금화면 단어장 앱입니다. 휴대폰을 키면 나오는 잠금화면에 단어장에서 랜덤한 단어가 나와서 단어를 복습할 수 있고 제가 단어를 직접 등록할 수도 있고, 검색할 수도 있도록 만들고 싶습니다. 제가 생각하기로는 스프링 웹 서버를 휴대폰에 띄우고, DB도 휴대폰 내부 메모리에 띄우도록 작업하려고 하는데. 이게 가능한 것인지 궁금합니다. 또한 안드로이드 스튜디오를 써서 개발할 생각인데 안드로이드 스튜디오로 스프링 프로젝트를 생성하는 것부터 어떻게 해야할지 감이 잘 오지 않습니다. 제가 정말 개발초보라 질문이 두서 없지만 어떻게 해야할지 조언 부탁드립니다. 참고할만한 자료도 있으면 부탁드리겠습니다..!
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] https://drive.google.com/file/d/1h-MGfbVOOqUMAtIrqo7Ys52FE4UnV9Am/view?usp=drive_link MemberRepository를 실행했을 때 오류가 떠요 어쩔 수 없이 뒷강의를 듣다가 앞으로 넘어오게 돼서 Order나 Item, Delivery 클래스들이 만들어져 있는데 이것들 때문일까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] simplejdbcinsert를 여러 테이블에 적용해야 한다면 적용할 테이블 개수에 맞춰서 객체를 생성해줘야 할까요?
현재 강의에서 RabbitMq를 사용하여 어떻게 각각의 서버로 변경된 데이터를 전달하는지 아키텍처가 궁금합니다. 각각의 서버는 RabbitMq서버를 구독하고있는건가요? 푸시방식이라고 했는데 각각의 서버가 RabbitMq의 큐에서 메시지를 가져가는 폴링방식이 아닌가요? 구독하고있는 각 서버로 브로드캐스트하여 푸시하는 방식이지 폴링방식이 아니라는건가요? busrefresh를 통하여 큐에 메시지를 발행하고, 각 서버는 큐에서 메시지를 꺼내어가져가는건가요(폴링)? 아니면 큐에서 메시지를 RabbitMq가 직접 각각의 서버로 전송하는 푸시방식인가요? 푸시방식이 맞다면 AMQP프로토콜로 서버들이 실행할때마다 이미 연결이 되어있는 상태를 유지하고 있기 때문에 푸시가 가능한건가요?원리가 궁금합니다..
IDENTITY전략에서 allocationSize가 50개로 설정하면 50개를 가져와 메모리에서 쓴다고 하셨는데 제대로 이해를 하지 못한것 같습니다. DB에서 1부터 51까지 미리 늘려놓고? 51까지의 메모리..? 어떤 값을 가져와서 em.persist 할때마다 뭐 큐나 스택처럼 하나씩 빼면서 pk값을 넣는건지 궁금하네요. 또 메모리에서 쓴다는게 어떤건지 잘 모르겠습니다. DB에서 꺼내서 쓰는게 아닌것 까지는 이해했지만 메모리에서 쓴다..?를 잘 모르겠습니다
섹션3 플러시 부분을 듣다가 궁금증이 생겨 질문을 남깁니다. 3분에 말씀하신 내용에 따르면 try{ Member member = new Member(200L,"member200"); em.persist(member); em.flush(); //영속 System.out.println("===================="); tx.commit(); } catch (Exception e){ tx.rollback(); }finally { em.close(); } emf.close(); em.flush()를 하면 데이터베이스에 쿼리가 나가고 tx.commit()을 통해 트랜잭션 커밋이 된다고 하셨는데 트랜잭션 커밋을 언제 사용하는지?가 궁금합니다. 그냥 플러시를 하기 위해서 쓰이는 것인지 아니면 try catch문으로 되어있어서 try문에서 제대로 동작을 한다면 마지막에 DB에 잘 적용되었다는 느낌으로 commit을 하는것이 맞나요?
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요. 태현님, 좋은 강의 감사합니다. 오늘 BookService 코드를 같이 타이핑하던 도중 의문이 생겼습니다. 뭔가 점점 BookService에서 의존을 주입받는 레포지토리가 점점 늘어나고 있음이 그 원인이었는데요. 보통 커머스 서비스의 앱에서 주문 상세 버튼을 누르면 다음과 같은 정보들이 나오는데요. 가게 정보 메뉴 정보, 주문 자체의 정보(주문 일시, 주문번호) 메뉴와 옵션 선택 정보 쿠폰 적용 주문자의 개인정보(주소 및 연락처) 등등.. 물론 내부적으론 어떻게 해결이 되어있겠지만 벌써 주문 상세를 보여주는 기능을 처리하기 위한 서비스에서 엄~청 많은 레포지토리를 가져와야할 것 같은? 느낌이 듭니다. 이런 경우엔 의존 주입을 받는 객체의 갯수의 상한선을 따로 두고 개발하실까요? 아니면 이런 문제를 해결하는 방법론 같은 것이 이미 있나요? 혹은 제 생각엔 짤막하게 배운 디비 지식으로 주문과 같은 것은 반정규화로 테이블을 합쳐서 그 테이블과 대응되는 하나의 레포지토리로만 가져오나요? 감사합니다.
공부를 하다가 이전에 LazyInitializationException을 만난 적이 있었습니다. 그 때 원인이 Controller 단에서 Lazy로 가져오는 객체를 강제 초기화 할 때 일어나는 것임을 알 게 됐고 페치 조인으로 문제를 해결했었습니다. 그런데 왜 OrderSimpleApiController.java 에서 ordersV1와 ordersV2()는 Controller 단임에도 영속성 컨텍스트 내부에서 관리될 수 있는건가요? 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
강의에서는 다른 서비스 간에 통신을 위해 open feign 이나 rest template을 사용하고 있는데 같은 서비스 안에서 어떤 api가 다른 api를 호출할때도 마찬가지로 둘중 하나를 사용하나요? 그리고 그때는 @FeignClient url 주소값을 자기 자신으로 넣으면 되나요?
안녕하세요? JPA 활용 2편과 Querydsl 편을 수강하고 나서 코드를 작성하다가 알게 된 내용인데 원래 그런 것인지 알고 싶어서 여쭤봅니다. JPA 활용 2편에서 Order와 member, delivery를 한번에 조회하는 OrderSimpleApiController에서 V4를 Querydsl 버전으로 바꾸었습니다. OrderSimpleApiController.java OrderSimpleQueryDto @Data public class OrderSimpleQueryDto { private Long orderId; private String name; private LocalDateTime orderDate; private OrderStatus orderStatus; private Address address; @QueryProjection public OrderSimpleQueryDto(Long orderId, String name, LocalDateTime orderDate, OrderStatus orderStatus, Address address){ this.orderId = orderId; this.name = name; // LAZY 초기화 this.orderDate = orderDate; this.orderStatus = orderStatus; this.address = address; // LAZY 초기화 } } orderSimpleQueryRepository.findOrderDtosQuerydsl public List<OrderSimpleQueryDto> findOrderDtosQuerydsl(){ JPAQueryFactory queryFactory = new JPAQueryFactory(em); return queryFactory .select(new QOrderSimpleQueryDto( order.id.as("orderId"), order.member.name, order.orderDate, order.status, order.delivery.address) ) .from(order) .fetch(); } 이렇게 V4버전을 바꿨는데, 딱히 제가 join을 날린 게 없는데 join이 날라갑니다. 오히려 제가 fetchJoin용으로 코드를 작성하려고 from절의 아랫 부분에 다른 코드를 작성하는게 불가능했습니다. join( order.delivery , order).fetchJoin() 같은 코드는 작성이 안되고 join( order.delivery ).fetchJoin()은 semantic 오류라는 에러코드가 날라옵니다. Dto로 작성할 때 여러 테이블을 페치 조인해야하는 상황에서는 Querydsl을 어떻게 사용해야하나요? 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
JPA를 활용하여 여러 개의 row들을 업데이트하는 상황입니다. 하지만 전체를 동일하게 수정하는 것이 아니고, 하나의 Service 로직 상에서 여러 개의 row들을 서로 다른 값으로 업데이트해야하는 상황입니다. 이 경우에는 각 데이터에 대해서 일일이 변경 감지를 통해 update 하는 게 최선일까요?
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 실전! 스프링부트 JPA 활용편 1편 프로젝트 생성 부분에서 hello 부분 string이 왜 잘못되었는지 몰라서 질문 남깁니다. 어떻게 해야 출력 가능한지 알고 싶습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 2024-02-18T19:26:55.314+09:00 INFO 21364 --- [ restartedMain] jpabook.jpashop.JpashopApplication : Starting JpashopApplication using Java 17.0.3 with PID 21364 (C:\Users\HJ\Documents\GitHub\Spring-Study\out\production\classes started by HJ in C:\Users\HJ\Documents\GitHub\Spring-Study) 2024-02-18T19:26:55.316+09:00 INFO 21364 --- [ restartedMain] jpabook.jpashop.JpashopApplication : No active profile set, falling back to 1 default profile: "default" 2024-02-18T19:26:55.361+09:00 INFO 21364 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable 2024-02-18T19:26:55.361+09:00 INFO 21364 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' 2024-02-18T19:26:55.488+09:00 WARN 21364 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [jpabook.jpashop.JpashopApplication] 2024-02-18T19:26:55.740+09:00 ERROR 21364 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [jpabook.jpashop.JpashopApplication] at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:179) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:416) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:788) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:606) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.2.jar:3.2.2] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.2.2.jar:3.2.2] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.2.2.jar:3.2.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) ~[spring-boot-3.2.2.jar:3.2.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) ~[spring-boot-3.2.2.jar:3.2.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-3.2.2.jar:3.2.2] at jpabook.jpashop.JpashopApplication.main(JpashopApplication.java:10) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.2.2.jar:3.2.2] Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'memberRepository' for bean class [jpabook.jpashop.repository.MemberRepository] conflicts with existing, non-compatible bean definition of same name and class [jpabook.jpashop.MemberRepository] at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.checkCandidate(ClassPathBeanDefinitionScanner.java:361) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:288) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:128) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:306) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:246) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:197) ~[spring-context-6.1.3.jar:6.1.3] at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:165) ~[spring-context-6.1.3.jar:6.1.3] ... 18 common frames omitted Process finished with exit code 0 ----------------------------------------- 다음과 같은 에러코드를 받았습니다 위에 내용을 보면 Annotation-specified bean name 'memberRepository' for bean class [jpabook.jpashop.repository.MemberRepository] conflicts with existing, non-compatible bean definition of same name and class [jpabook.jpashop.MemberRepository] 해당 문구가 있는 것을 보고 같은 이름의 클래스가 2개 존재하여 bean이 중복되어 충돌이 일어난 것을 확인 하였는데 jpabook.jpashop.MemberRepository를 삭제했는데도 불구하고 해당 에러가 계속 발생합니다 왜일까요? .. 존재하지 않는 사진 첨부하겠습니다.