묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
cascade 관련 질문입니다!
안녕하세요 김영한 강사님! 먼저 좋은 강의 만들어주셔서 감사합니다! 강의를 듣다가 cascade 관련하여 질문이 생겨서 질문 작성을 하게 되었습니다. 먼저 밑에 분이 먼저 해주신 질문과 강사님의 답변을 보고 cascade 옵션 자체는 연관관계 주인, 양방향등 관계 없이 1. 동일한 라이프 사이클, 2. 참조하는 주인이 private owner 일 때 라고 2가지 조건을 충족할 때 쓴다고 이해하게 되었는데, 그럼 order, orderItem, delivery에서 orderItem과 delivery가 각각 order만 참조하는, 다른 것이 참조할 수 없는 private owner인 건가요? private owner 라는 말에 대한 이해가 정확하게 되지 않아서 질문을 드립니다. 제가 이해한 것이 맞는 건가요? 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
도메인 모델 패턴식의 코딩관련 질문
안녕하세요 영한님~, 궁금한 것이 있습니다.영한님이 말씀하신 것처럼 아직은 도메인 모델 패턴이 생소하더군요. (실무에선 트랜잭션 스크립트 방식의 프로젝트들만 접해봐서요) [도움 받고 싶은 것] ddd가 어떤 식으로 구성되고, 어떻게 메시지를 주고 받는구나 하고 이해할 수 있는 샘플 프로젝트 알고 계신게 있을까요? 저는 깃허브에서 java ddd sample 검색해서 프로젝트들 다운받아서 기웃기웃 하고 있긴 한데, 아무래도 영한님이 ddd는 제가 아는 사람들 중에선 제일 잘 아는 것 같아서 여쭤봐요. 아니면 ddd 강좌나 책도 괜찮은거 추천 주시면 감사하겠습니다! ps] 실무에서 사이드성 프로젝트로(작은 서비스) 영한님 강좌에서 한 것처럼 도메인에 좀 더 많은 로직을 넣는걸로 시작을 했는데 점점 이게 커지면서, 어느순간 이 역할을 서비스 계층에 넣는게 맞나, 아니면 도메인이 처리를 하게끔 하는게 맞나 조금, 고민이 되는 순간이 오더라고요 엉엉. 그래도 영한님 강좌 덕분에 테스트 케이스도 많이 작성하면서 코딩하고, 재밌게 실무 하고 있습니다 :)
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
커맨드와 쿼리 분리
MemberService의 update 메서드에서 Member를 그대로 반환하지 않는 이유가 커맨드와 쿼리를 분리하기 위해서라고 하셨는데 정확히 이해가 가지 않습니다 ㅠ 1. Member를 update 메서드에서 그대로 반환하면 왜 영속상태가 끊킨 Member가 반환이 되나요? 2.Member를 그대로 반환하면 updateMemberV2 메서드에서 Member member = memberService.update(id, request.getName());return new UpdateMemberResponse(member.getId(), member.getName()); 이런식으로 되면 오히려 강의에서 수정한 Member를 찾는 Select 쿼리 안날라가서 커맨드와 쿼리를 분리할 필요가 없는게 아닌가요..? * 여담으로 스프링 MVC 강의 11월에 출시된다고해서 기다리고있었는데 12월로 미뤄졌네요ㅠㅠ 빨리 듣고싶어요~
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 영한님 질문있습니다.
안녕하세요 영한님. 바보같은 질문일 수 있는데, 상품주문() 단위테스트 작성하실 때 em.persist(member); em.persist(item); 엔티티를 영속성 컨텍스트에 저장, 을 해주는게 이득이라고 하셨는데, 어떤 이득이 있나요?? 1] 해당 코드 없어도 단위테스트는 통과해서요. 2] flush() 하는건 insert 쿼리문을 눈으로 할 수 있으니, 유용하겠구나 생각이 들었는데, persist()는 잘 와 닿질 않아서요 :)
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
id값이 갑자기 이상하게 되는 현상
강사님 강의를 보면서 h2 db로 똑같이 진행중이었는데요, id값이 1,2,3,4 이런식으로 잘 들어가다가 갑자기 33이 되어버렸습니다. 마침 밑 질문에도 저와 같이 33이 되신분이 있길래 답변을 봤는데 "자동 생성이 33부터 들어가는 것은 아마 이전에 값을 넣었다가 지웠다가 해서 그럴꺼에요^^" 라고 답변을 주셨더라고요 근데 저는 이전에 값을 넣었다가 지운적이 없습니다. 그래서 33이 왜나왔지 하고 33을 지웠더니 갑자기 이번엔 65가 나와버리네요 데이터를 다 지워도 이 id값은 안내려가는데 id값을 다시 1로 바꾸는 방법이 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
H2 실행 관련 질문 드립니다 ^^
안녕하세요 김영한 선생님. 스프링 관련하여 좋은강의 정말 잘듣고 있습니다 ^^; 수업을 열심히 따라가던 도중 H2 실행과 관련하여 아래와 같은 에러 내용이 발생하여,아래와 관련한 에러가 발생하였으나, 끝내 배치파일로 실행을 하지 못하고 h2.bat 실행시 Error: Could not find or load main class org.h2.tools.Console 조치방법 1. JDK 8 / JavaSE 11 버전을 모두 삭제한 후 openJDK 11 로 설치2. 시스템 환경변수 재설정 - JAVA_HOME : C:\jdk11\openjdk-11+28_windows-x64_bin - H2_HOME : C:\dev_h2_db\h2 - CLASSPATH : .;%JAVA_HOME%\lib - path 추가 %JAVA_HOME%\bin %H2_HOME%\bin 이렇게 조치하였으나, 실행이 되지 않아 열심히 찾던 도중 h2 공식 문서에 cmd 에서 h2\bin 폴더에 접근 후 java -jar h2-1.4.200.jar로 실행하는 방법이 있다고 하여 겨우 구동시킬수 있었습니다.일단 파일에는 문제가 없다는 것인데, 제가 시스템 변수를 어떻게 수정을 해야 배치파일로 실행이 가능할까요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
필드 주입(DI)
우선 좋은 강의 만들어 주셔서 감사합니다. 현재 취준생의 입장에서 정말 많은 도움이 되고 있습니다! DI의 3가지 방법 중 필드 주입 설명 부분에서 MemberService 를 바꿀 수 있는 방법이 없는 것이 단점으로 이해했습니다. 하지만 제 생각에는 필드 주입 시 final을 사용할 수 없어(스프링 컨테이너가 객체를 주입하므로) 바뀔 가능성이 있고, 생성자 주입에서는 final로 선언 시 생성자가 호출된 이후에는 MemberService를 바꿀 수 없게 될 것으로 생각이 됩니다. 제가 어떤 부분을 잘못 이해하고 있는지 궁금합니다. 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Entity의 Embedded타입 쿼리 질문드립니다!
안녕하세요 김영한선생님! 좋은 강의 잘 듣고 있습니다. 우선 강의는 완강하였고 다음 강의도 수강 예정입니다^^ 그전에 몇가지만 질문 드려요! 1. 현재 Member Entity에 Embedded타입으로 Email을 넣었습니다. @Embeddable class Email{ private String eHead; // '@'전까지 private String eBody; // 첫 '.'전까지 private String eTail; // 나머지 } 이때 email을 통해 멤버를 찾는 쿼리를 EntityManager를 통해 생성하려고 하는데요! 이메일을 통해 멤버를 찾는 쿼리는 어떻게 생성해야 할까요?? 단순히 public List<Member> findByEmail(Email email){ return entityManager.createQuery("select m from Member m where m.email =: email", Member.class) .setParameter("email", email) .getResultList();} 이런 방식으로는 같은 이메일임을 쿼리가 못 안다고 생각합니다 ㅠㅠ 그렇다고 email의 각 필드를 get해서 and로 처리하는 방법은 뭔가 비효율적인 것 같습니다! 더 좋은 방법이 있을까요? 2. 보통 실무에서 멤버의 썸네일과 같은 이미지 데이터는 어떻게 관리하나요?? 이또한 벡엔드 서버에 넣나요? 아니면 프런트엔드 서버에 따로 관리하나요?? 강의와는 좀 무관하지만 간략하게 답변해주시면 너무너무 감사하겠습니다!!
-
미해결스프링 핵심 원리 - 기본편
개발부터 배포 프로세스
안녕하세요, 좋은 강의 만들어주셔서 감사합니다. 현업에서는 개발, 배포 프로세스가 어떻게 진행되는지 궁금합니다 제가 지금까진 spring mvc쪽 만 해봤는데요, 뷰까지 통합해서 띄우기 때문에 하나의 프로젝트에서 모두 개발되었습니다. 하지만 요즘은 보통 프론트엔드 vue,react 백엔드은 spring으로 개발을 진행되자나요? 이렇게 개발될때 어떻게 진행되는지 전체적으로 궁금합니다. 1. 프론트쪽에서 빌드한뒤에 spring boot에 static쪽에 넣고 배포하나요? 2. 그리고 만약 프론트서버, 백엔드서버 따로 구축되어있으면 백엔드쪽 api를 호출하려면 프론트쪽에서 백엔드 ip를 알아야 api호출이 가능하자나요, 그럼 프론트쪽에 api ip가 다 공개되는건가요...? 보안상으로 안좋지않나요..? 백엔드하시는분인데 프론트쪽도 함께 질문하는게 아이러니합니다만 현업에서 어떻게 개발부터 배포까지 진행되는지 궁금하네요ㅜ 감사합니다.
-
해결됨스프링 기반 REST API 개발
한글깨짐현상
응답시에, defaultMessage를 한글로 줬는데, 깨지는 경우에는 어떻게 해결할 수 있을까요???
-
해결됨스프링 핵심 원리 - 기본편
질문 있습니다~!
안녕하세요. 영한님, 항상 좋은 강의 감사드립니다 :) 수업을 듣다가 몇가지 궁금한 점이 생겨 질문 드립니다. 1. 스프링 애플리케이션을 실행하면 스프링 컨테이너가 생성되고 bean이 생성될텐데, 스프링 컨테이너랑 bean은 모두 JVM의 heap 영역에 생성되는 건가요?? 2. heap 영역에 생성된다면, GC의 대상이 될 수도 있는건가요??
-
미해결스프링 핵심 원리 - 기본편
변수 만드는 단축키 뭐였나요??
안녕하세요 강의 너무 잘보고 있습니다 너무 짱짱이에요 제가 궁굼한건 new Member(,,,); 을 쓰고 어떤 단축키를 누르니 Member member = new Member(...); 로 만들어주는 단축키가 궁굼합니다 앞에 강의에서 설명해주셨던거 같은데 못찾겠네요 ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
orderServiceImpl에서 repository와 service
안녕하세요 강사님 강의 잘 보고 있습니다. 다름이 아니라 OrderServiceImpl에서 MemberRepository가 아닌 MemberServiceImpl을 써도 같은 결과가 나올 텐데요 왜 repository를 쓰셨는지 궁금합니다! 😊 단지 많은 접근으로 인한 메모리 낭비 문제인가요? 아니면 다른 이유가 있을까요??
-
해결됨스프링 기반 REST API 개발
무제한 경매
spring 에 관련한 질문은 아니지만.. 그냥 계속 궁금증이 맴돌아서 여쭤보겠습니다. 무제한 경매를 가정한 상황에서 basePrice 가 maxPrice 보다 크고 maxPrice가 0인 상황이 어떤 상황인가요..? 이벤트를 최초로 등록하는, (이벤트를 경매에 올리는) 상황을 의미하는 건가요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
순수 JDBC 에서 코드 입력후 실행시 에러
안녕하세요 선생님! 강의 정말 잘 듣고 있습니다. 강의 내용, 자료들 정말 좋은거 같아요 :) h2 데이터베이스 설치까지 잘 마치고, 메모리에서 JDBC로 바꾸는 과정에서 코드들 따라서 입력하고 run 하는데 아래같은 에러가 뜨네요. 비슷한 질문이 있었는데.. Cannot load driver class: org.h2.Driver 라는 부분이 있어서.. build.gradle 확인해서 runtimeOnly 'com.h2database:h2' 부분이 추가됐는지 확인했습니다. ========================================================== Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2020-11-23 22:07:11.756 ERROR 10184 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springConfig' defined in file [C:\study\hello-spring\out\production\classes\hello\hellospring\SpringConfig.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: org.h2.Driver at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:797) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:227) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1203) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879) ~[spring-context-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) ~[spring-context-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:405) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE] at hello.hellospring.HelloSpringApplication.main(HelloSpringApplication.java:10) ~[classes/:na] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: org.h2.Driver at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:655) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:635) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1176) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:884) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] ... 20 common frames omitted Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: org.h2.Driver at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:650) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] ... 34 common frames omitted Caused by: java.lang.IllegalStateException: Cannot load driver class: org.h2.Driver at org.springframework.util.Assert.state(Assert.java:97) ~[spring-core-5.2.10.RELEASE.jar:5.2.10.RELEASE] at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.determineDriverClassName(DataSourceProperties.java:223) ~[spring-boot-autoconfigure-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.initializeDataSourceBuilder(DataSourceProperties.java:175) ~[spring-boot-autoconfigure-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration.createDataSource(DataSourceConfiguration.java:43) ~[spring-boot-autoconfigure-2.3.5.RELEASE.jar:2.3.5.RELEASE] at org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Hikari.dataSource(DataSourceConfiguration.java:85) ~[spring-boot-autoconfigure-2.3.5.RELEASE.jar:2.3.5.RELEASE] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[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:566) ~[na:na] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE] ... 35 common frames omitted Process finished with exit code 1
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Wrong user name or password ?
안녕하세요. 테스트 코드 작성시 아래와 같은 코드 오류가 나서 문의 드립니다. user & password 는 지정한 부분이 없습니다. 확인해할 부분이 있을까요? org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:461) ~[h2-1.4.200.jar:1.4.200] at org.h2.engine.SessionRemote.done(SessionRemote.java:611) ~[h2-1.4.200.jar:1.4.200] at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:147) ~[h2-1.4.200.jar:1.4.200] at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:435) ~[h2-1.4.200.jar:1.4.200] at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:321) ~[h2-1.4.200.jar:1.4.200]
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
변경감지에 대해 질문 있습니다.
jpa를 이용해 게시판을 만들고 있는 중 입니다. 저는 repository 계층을 인터페이스에 JpaRepository를 상속해서 사용하고 있는데 수정 작업 시 영속이나 준영속 신경 안 쓰고 무조건 save로 데이터를 처리하는건 좋지않은 방법인가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Book 이외의 아이템 구현 질문입니다.
우선 강의 정말 유익했으며 친절한 답변도 항상 감사하고 있습니다~강의가 진심으로 재미있어요! 제가 강의를 마치고 이것저것 해보고 싶어서 시도중입니다.(JPA 기본강의 잘듣고있습니당)해보고싶은건 많지만 우선 Book 말고 Album과 Movie도 사용해보고 싶었습니다. 현재상황- Item 엔티티에 itemType 변수추가(어떤 item인지 식별하기 위해서)- Album,Movie의 Form객체,컨트롤러, 뷰(html)파일 등 생성-서비스는 따로 구현x ItemService만 사용 주문 목록에 올리는것까진 금방했는데 수정에서 좀 걸렸습니다. 삽질하다가 결국 생각해낸게 조금지저분하지만.. ItemType으로 어떤 아이템인지 if문으로 식별해서각 아이템에 맞는 수정페이지를 매핑하는 방법으로 했습니다. updateItem 메서드에서 파라미터로 받기위한 ItemForm 객체를 하나 만들어서 업데이트 했습니다.--------------- ItemController package jpabook.jpashop.controller;import jpabook.jpashop.domain.item.Album;import jpabook.jpashop.domain.item.Book;import jpabook.jpashop.domain.item.Item;import jpabook.jpashop.service.ItemService;import lombok.RequiredArgsConstructor;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;import java.util.List;@Controller@RequiredArgsConstructorpublic class ItemController { private final ItemService itemService; // 아이템 선택 페이지로 매핑 @GetMapping("/items/new") public String createForm(Model model) { //model.addAttribute("form", new BookForm()); return "items/createItemFormAll"; } // Book 클릭시 등록 페이지로 매핑 @GetMapping("/items/createItemForm") public String CreateBook(Model model){ model.addAttribute("form", new BookForm()); return "items/createItemForm"; } // 등록 페이지에서 버튼 클릭시 Book 생성 후 목록화면으로 매핑 @PostMapping("items/new/Book") public String create(BookForm form) { Book book = new Book(); book.setName(form.getName()); book.setPrice(form.getPrice()); book.setStockQuantity(form.getStockQuantity()); book.setAuthor(form.getAuthor()); book.setIsbn(form.getIsbn()); book.setItemType("Book"); itemService.saveItem(book); return "redirect:/items"; } // 상품 목록 클릭시 리스트 화면으로 매핑 @GetMapping("/items") public String list(Model model) { List<Item> items = itemService.findItems(); model.addAttribute("items", items); return "items/itemList"; } //상품 수정 화면 렌더링 @GetMapping("items/{itemId}/edit") public String updateItemForm(@PathVariable("itemId") Long itemId, Model model) { Item item = itemService.findOne(itemId); if(item.getItemType() == "Book"){ BookForm form = new BookForm(); form.setId(item.getId()); form.setName(item.getName()); form.setPrice(item.getPrice()); form.setStockQuantity(item.getStockQuantity()); model.addAttribute("form", form); return "items/updateItemForm"; }else if(item.getItemType() == "Movie"){ MovieForm form = new MovieForm(); form.setId(item.getId()); form.setName(item.getName()); form.setPrice(item.getPrice()); form.setStockQuantity(item.getStockQuantity()); model.addAttribute("form", form); return "items/updateItemFormMovie"; }else if(item.getItemType() == "Album"){ AlbumForm form = new AlbumForm(); form.setId(item.getId()); form.setName(item.getName()); form.setPrice(item.getPrice()); form.setStockQuantity(item.getStockQuantity()); model.addAttribute("form", form); return "items/updateItemFormAlbum"; }else { //에러처리.. } return null; } //상품 수정 @PostMapping("items/{itemId}/edit") public String updateItem(@ModelAttribute("form") ItemForm form) { itemService.updateItem(form.getId(), form.getName(), form.getPrice(), form.getStockQuantity()); return "redirect:/items"; }} --------------- ItemForm package jpabook.jpashop.controller;import lombok.Getter;import lombok.Setter;@Getter @Setterpublic class ItemForm { private Long id; private String name; private int price; private int stockQuantity;} 문제는 ItemForm을 이용하다보니 각 아이템의 고유필드값(Book-isbn,author Movie-director,actor 등)을 수정 못합니다.Category객체를 이용해야 되나 싶었는데 손을 못대겠더라구요ㅠ 결국 제가 궁금한것은 이거입니다.실무에선 어떤 방식으로 여러 item들을 사용하나요??어떤식으로 코드를 짜야하는지 궁급합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
findOne과 findByName 의 차이에 대해
안녕하세요 강사님. 다름아니라 제가 JPA 기초를 듣지않고 바로 실습으로 와서 그런지 몰라도 entityManager의 기능 중 find 는 id 로만 조회가 가능하고 나머지 프로퍼티( 예 : name ) 으로 조회할 때는 쿼리를 날려서 조회해야하는 건가요? 그리고 쿼리로 조회하면 건 수가 1개이더라도 무조건 List로 반환되는 건가요 ??
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
ArrayJson의 dto 관련
안녕하세요! 이번에 처음으로 jpa를 사용해서 토이프로젝트를 하고있습니다. 질문에 앞서서 이런 강의 만들어주셔서 너무 감사합니다 한눈에 쏙들어오고 이해가 됩니다 ㅎㅎ 제가 드릴 질문은 json방식이 Array방식일경우 dto에 자동으로 맵핑이 안되더라구요...어떤방식으로 해야자동맵핑이 될지 궁굼합니다.