inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

도메인 모델 패턴식의 코딩관련 질문

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요 영한님~, 궁금한 것이 있습니다. 영한님이 말씀하신 것처럼 아직은 도메인 모델 패턴이 생소하더군요. (실무에선 트랜잭션 스크립트 방식의 프로젝트들만 접해봐서요) [도움 받고 싶은 것] ddd가 어떤 식으로 구성되고, 어떻게 메시지를 주고 받는구나 하고 이해할 수 있는 샘플 프로젝트 알고 계신게 있을까요? 저는 깃허브에서 java ddd sample 검색해서 프로젝트들 다운받아서 기웃기웃 하고 있긴 한데, 아무래도 영한님이 ddd는 제가 아는 사람들 중에선 제일 잘 아는 것 같아서 여쭤봐요. 아니면 ddd 강좌나 책도 괜찮은거 추천 주시면 감사하겠습니다! ps] 실무에서 사이드성 프로젝트로(작은 서비스) 영한님 강좌에서 한 것처럼 도메인에 좀 더 많은 로직을 넣는걸로 시작을 했는데 점점 이게 커지면서, 어느순간 이 역할을 서비스 계층에 넣는게 맞나, 아니면 도메인이 처리를 하게끔 하는게 맞나 조금, 고민이 되는 순간이 오더라고요 엉엉. 그래도 영한님 강좌 덕분에 테스트 케이스도 많이 작성하면서 코딩하고, 재밌게 실무 하고 있습니다 :)

  • JPA
  • java
  • spring-boot
  • 웹앱
  • spring
이기영 댓글 1 좋아요 1 조회수 166

커맨드와 쿼리 분리

해결됨

실전! 스프링 부트와 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
  • java
  • spring-boot
  • spring
이지훈 댓글 2 좋아요 3 조회수 410

안녕하세요 영한님 질문있습니다.

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요 영한님. 바보같은 질문일 수 있는데, 상품주문() 단위테스트 작성하실 때 em.persist(member); em.persist(item); 엔티티를 영속성 컨텍스트에 저장, 을 해주는게 이득이라고 하셨는데, 어떤 이득이 있나요?? 1] 해당 코드 없어도 단위테스트는 통과해서요. 2] flush() 하는건 insert 쿼리문을 눈으로 할 수 있으니, 유용하겠구나 생각이 들었는데, persist()는 잘 와 닿질 않아서요 :)

  • 웹앱
  • java
  • JPA
  • spring
  • spring-boot
이기영 댓글 2 좋아요 0 조회수 330

id값이 갑자기 이상하게 되는 현상

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

강사님 강의를 보면서 h2 db로 똑같이 진행중이었는데요, id값이 1,2,3,4 이런식으로 잘 들어가다가 갑자기 33이 되어버렸습니다. 마침 밑 질문에도 저와 같이 33이 되신분이 있길래 답변을 봤는데 " 자동 생성이 33부터 들어가는 것은 아마 이전에 값을 넣었다가 지웠다가 해서 그럴꺼에요^^" 라고 답변을 주셨더라고요 근데 저는 이전에 값을 넣었다가 지운적이 없습니다. 그래서 33이 왜나왔지 하고 33을 지웠더니 갑자기 이번엔 65가 나와버리네요 데이터를 다 지워도 이 id값은 안내려가는데 id값을 다시 1로 바꾸는 방법이 있을까요?

  • MVC
  • spring
  • java
  • spring-boot
댓글 2 좋아요 0 조회수 402

H2 실행 관련 질문 드립니다 ^^

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

안녕하세요 김영한 선생님. 스프링 관련하여 좋은강의 정말 잘듣고 있습니다 ^^; 수업을 열심히 따라가던 도중 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 로 실행하는 방법이 있다고 하여 겨우 구동시킬수 있었습니다. 일단 파일에는 문제가 없다는 것인데, 제가 시스템 변수를 어떻게 수정을 해야 배치파일로 실행이 가능할까요?

  • spring
  • spring-boot
  • java
  • MVC
구공일 댓글 4 좋아요 0 조회수 2144

벌크 수정 연산후 flush clear

해결됨

실전! Querydsl

강의 수정,삭제 벌크연산 9분대 부분에 대한 질문입니다. 벌크 연산 수행후 영속성 컨텍스트를 flush해주고 clear해주는 부분에 있어서 질문입니다 db와 영속성 컨텍스트의 정보가 맞지 않기 때문에 벌크 연산 '수행 후' 영속성 컨텍스트의 정보를 clear 하는 것은 이해가 됩니다. 그런데, 영속성컨텍스트에는 벌크연산으로 수정되기 전의 정보가 남아있는데 이를 flush해주면 벌크연산으로 수정된 정보가 다시 바뀌어야하는 것 아닌가요? 다시 생각해보니까 jpa가 항상 엔티티를 관리하면서 엔티티가 변경되면 이를 쿼리 지연 저장소에다가 보관해놓고 이것들을 flush할때 날리는 것인데, 벌크 연산 수행후에는 엔티티 자체는 더티체킹으로 변경이 감지되지 않았으니까 쿼리 지연 저장소에 쿼리가 저장되지 않아서 그런게 이유인가 하는데 맞는 것인지요?

  • java
  • JPA
피레스 댓글 2 좋아요 1 조회수 384

필드 주입(DI)

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

우선 좋은 강의 만들어 주셔서 감사합니다. 현재 취준생의 입장에서 정말 많은 도움이 되고 있습니다! DI의 3가지 방법 중 필드 주입 설명 부분에서 MemberService 를 바꿀 수 있는 방법이 없는 것이 단점으로 이해했습니다. 하지만 제 생각에는 필드 주입 시 final을 사용할 수 없어(스프링 컨테이너가 객체를 주입하므로) 바뀔 가능성이 있고, 생성자 주입에서는 final로 선언 시 생성자가 호출된 이후에는 MemberService를 바꿀 수 없게 될 것으로 생각이 됩니다. 제가 어떤 부분을 잘못 이해하고 있는지 궁금합니다. 감사합니다.

  • MVC
  • spring
  • spring-boot
  • java
SeungHyunYoo 댓글 1 좋아요 5 조회수 193

안녕하세요 강사님! 정렬에 대해 질문있습니다

미해결

실전! Querydsl

강의 잘 듣고있는 학생입니다! 강의를 듣던중 커스텀 정렬에 대해 궁금증이 생겨 질문을 하려고합니다! 만약 MainDto에 String 가격 String 품목 이 있다고 생각해보면, 가격같은 경우는 orderBy(mainDto.가격.desc()) 등으로 쉽게 정렬이 가능한데 품목과 같이 최상품 , 상품 ,중품 등으로 돼있다면 어떻게 내가 원하는대로 정렬할 수 있나요? orderBy(mainDto.품목......) 어떻게 작성 하나요?

  • java
  • JPA
pak7380 댓글 6 좋아요 1 조회수 408

Entity의 Embedded타입 쿼리 질문드립니다!

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요 김영한선생님! 좋은 강의 잘 듣고 있습니다. 우선 강의는 완강하였고 다음 강의도 수강 예정입니다^^ 그전에 몇가지만 질문 드려요! 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-boot
  • 웹앱
  • spring
  • java
  • JPA
cjswoudddn 댓글 1 좋아요 1 조회수 357

질문드립니다.

해결됨

실전! Querydsl

안녕하세요. 개발에 흥미를 많이 느끼고 있는 초보자인데요. 제가 배우기로는 controller -> service -> repository 상의 패턴방식이 정론(?)이라고 알고 있었는데 실무에서도 이 강의처럼 간단한 쿼리 조회 같은 경우 바로 repositoy 로 비즈니스 로직 없이 건너뛰어도 괜찮은 것인지 궁굼해서 질문 드립니다. 아니면 귀찮더라도 서비스를 만들어서 repository로 타고가는 것이 맞는지도 궁굼하네요. 감사합니다. 좋은 하루 되세요^^

  • JPA
  • java
dev_dev_dev 댓글 1 좋아요 2 조회수 351

한글깨짐현상

해결됨

스프링 기반 REST API 개발

응답시에, defaultMessage를 한글로 줬는데, 깨지는 경우에는 어떻게 해결할 수 있을까요???

  • spring
  • java
  • rest-api
jaden 댓글 3 좋아요 0 조회수 1241

양방향 관계 질문이 있습니다.

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요 영한님, 프로젝트를 하다가 막히는 부분이 생겨서 해당 부분 복습하다 이 부분에도 궁금한점이 생겨 질문드립니다! 1. Team team = new Team() ; team.setName( "java" ) ; Member member = new Member() ; member.setUsername( "kang" ) ; member.setTeam(team) ; em .persist(team) ; em .persist(member) ; 다음과 같은 상황에서는 insert 문이 2번 나갑니다. Team team = new Team() ; team.setName( "java" ) ; Member member = new Member() ; member.setUsername( "kang" ) ; member.setTeam(team) ; em .persist(member) ; em .persist(team) ; 위의 상황에서는 insert문 2번 후에 update 문이 나갑니다. 이 이유는 member.setTeam(team); 을 했지만 jpa는 엔티티 저장시에 연관된 엔티티들이 모두 영속 상태여야 하니깐(team의 id가 없으니깐?) team_id를 null 로 두어서 em.persist(team) 후에 update 문이 호출된 것으로 보이는데 맞나요 ?? 사실 이 질문을 드리는 이유는 제가 현재 진행하고 있는 프로젝트에서 어떻게 처리해야할지 의문이 드는 부분이 생겨서입니다. 2. 티켓판매 어플리케이션이고, Order 테이블이 있고 Ticket 테이블이 있습니다. 일대다 매핑을 해둔 상태입니다. 주문을 받으면 해당 티켓을 주문에 등록하는 느낌입니다. 그래서 Order 를 생성 시에 Ticket을 생성한 후에 Order와 매핑을 해주려고 했습니다. 그런데, 'Many'(Ticket) 쪽을 먼저 save 한 후에(영속성컨텍스트에 올린 후) 'One' (Order)에 집어넣고 order를 save 하면 1번 질문과 같이 update 문이 나갈 것이라는 것을 알게되었습니다. 이 로직은 OrderService -> OrderRepository 에서 일어나는 로직입니다. 설계가 잘못된건가요? Ticket 을 create 하는 부분에서 order를 생성을 먼저하는 것이 맞다고는 생각이 드는데, 실제 주문단계를 생각해보면 order 안에 ticket이 있는 것이라고 생각이 들어서 인지부조화가 오는 기분입니다... 어떻게 해야할까요? +) 생각해보니깐 jpa 활용 1편 주문 관련 부분이랑 굉장히 유사한 것 같은데 해당부분을 다시 복습해보겠습니다...

  • java
  • JPA
kangsy763 댓글 3 좋아요 3 조회수 666

무제한 경매

해결됨

스프링 기반 REST API 개발

spring 에 관련한 질문은 아니지만.. 그냥 계속 궁금증이 맴돌아서 여쭤보겠습니다. 무제한 경매를 가정한 상황에서 basePrice 가 maxPrice 보다 크고 maxPrice가 0인 상황이 어떤 상황인가요..? 이벤트를 최초로 등록하는, (이벤트를 경매에 올리는) 상황을 의미하는 건가요??

  • spring
  • rest-api
  • java
jaden 댓글 1 좋아요 0 조회수 344

순수 JDBC 에서 코드 입력후 실행시 에러

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

안녕하세요 선생님! 강의 정말 잘 듣고 있습니다. 강의 내용, 자료들 정말 좋은거 같아요 :) 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

  • spring-boot
  • MVC
  • java
  • spring
Sean Lee 댓글 4 좋아요 0 조회수 5011

Postgresql GenericeContainer로 안띄워지시는분 참고하세요~!

미해결

더 자바, 애플리케이션을 테스트하는 다양한 방법

어느 버전부터인지는 모르겠으나 postgres_password가 설정되지 않으면 컨테이너가 띄워지지 않네요. GenericContainer 에 POSTGRES_PASSWORD 설정을 주거나 POSTGRES_HOST_AUTH_METHOD 에 trust 속성을 주면됩니다! 개발 환경은 윈도우 10에 spring boot 2.4.0, testcontainer 1.15.0 입니다

  • testcontainers
  • ArchUnit
  • Chaos-Monkey
  • java
  • mockito
  • JMeter
  • JUnit
kjs 댓글 3 좋아요 3 조회수 443

Wrong user name or password ?

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

안녕하세요. 테스트 코드 작성시 아래와 같은 코드 오류가 나서 문의 드립니다. 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]

  • spring-boot
  • spring
  • java
  • MVC
Tony 댓글 5 좋아요 16 조회수 5558

강사님 where 다중 파라미터를 이용한 동적 쿼리 사용에 대한 질문입니다.

해결됨

실전! Querydsl

강사님 강의 잘 보고 있습니다. 다름아니라, where 다중 파라미터를 사용하면 가독성이 높아지는 건 이해했습니다. 영상 8분경의 메소드 private BooleanExpression allEq(String userNameCond, Integer ageCond) { return userNameEq(userNameCond).and(ageEq(ageCond)); } 에 대한 질문인데요 문제는 userNameCond가 null일 경우 userNameEq가 null을 반환하기 때문에 BooleanExpression으로 체이닝을 할 수가 없는데 혹시 이럴경우 null 걱정없이 강제로 체이닝 하는 방법은 없을까요? BooleanExpression을 체이닝 하려고 해봤는데 추상클래스라 객체 생성이 안되네요

  • java
  • JPA
갓다귀갓장국 댓글 9 좋아요 28 조회수 5234

변경감지에 대해 질문 있습니다.

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

jpa를 이용해 게시판을 만들고 있는 중 입니다. 저는 repository 계층을 인터페이스에 JpaRepository를 상속해서 사용하고 있는데 수정 작업 시 영속이나 준영속 신경 안 쓰고 무조건 save로 데이터를 처리하는건 좋지않은 방법인가요?

  • java
  • JPA
  • 웹앱
  • spring
  • spring-boot
이시열 댓글 2 좋아요 1 조회수 351

Book 이외의 아이템 구현 질문입니다.

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

우선 강의 정말 유익했으며 친절한 답변도 항상 감사하고 있습니다~ 강의가 진심으로 재미있어요! 제가 강의를 마치고 이것저것 해보고 싶어서 시도중입니다.(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 @RequiredArgsConstructor public 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 @Setter public class ItemForm { private Long id ; private String name ; private int price ; private int stockQuantity ; } 문제는 ItemForm을 이용하다보니 각 아이템의 고유필드값(Book-isbn,author Movie-director,actor 등)을 수정 못합니다. Category객체를 이용해야 되나 싶었는데 손을 못대겠더라구요ㅠ 결국 제가 궁금한것은 이거입니다. 실무에선 어떤 방식으로 여러 item들을 사용하나요?? 어떤식으로 코드를 짜야하는지 궁급합니다

  • spring
  • spring-boot
  • java
  • JPA
  • 웹앱
이지훈 댓글 1 좋아요 0 조회수 274

findOne과 findByName 의 차이에 대해

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요 강사님. 다름아니라 제가 JPA 기초를 듣지않고 바로 실습으로 와서 그런지 몰라도 entityManager의 기능 중 find 는 id 로만 조회가 가능하고 나머지 프로퍼티( 예 : name ) 으로 조회할 때는 쿼리를 날려서 조회해야하는 건가요? 그리고 쿼리로 조회하면 건 수가 1개이더라도 무조건 List로 반환되는 건가요 ??

  • spring
  • JPA
  • 웹앱
  • java
  • spring-boot
‍한상진 댓글 1 좋아요 1 조회수 279

인기 태그

인프런 TOP Writers

주간 인기글