묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메소드 질문입니다.
어떤 엔티티 클래스에 작성해야하나요? Order에 ManyToOne으로 묶여있는 member OneToMany로 묶여있는 OrderItems 둘다 작성이 돼 있어서 어떤 규칙으로 어떤 엔티티 클래스에 작성해야 하는지 궁금합니다.,
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Exception 질문입니다.
안녕하세요 영한님, 매번 강의를 보고 커뮤니티 게시판에서 다른분들의 질문을 보고 저도 모르는걸 새로 배워가고있는데요 질문글 중 ====================================== 실무에서 보면 throw new xxxxException을 했을 경우 이를 호출하는 메서드에 뻘겋게 throw하거나 try catch하라고해서 똑같이 throw해주거나 했던거같은데... MemberService는 왜 이런게 없을까요? ============================== 라는 내용에서 질문이 있습니다. 구글링으로 checked와 unchecked의 차이에 대해서 알아보았습니다. 다만 checked는트랜잭션에서 롤백이 안되고 unchecked는 롤백이 된다고 하는걸 알았습니다. 여기서 궁금한게 있습니다. 강의 18:17에 validateDuplicateMember 매소드 내에서 if(!findMember.isEmpty() 일 경우 uncheck 예외를 던지게 됩니다. 같은 Unchecked인 IndexOutOfBoundException의 경우 배열의 크기를 잘못 접근하면 try catch로 묶지 않았을 경우 프로그램이 종료가 되더라구요, 하지만 RunTimeException을 상속받는 IllegalStateException은 따로 try catch문으로 잡아주지 않아도 프로그램이 종료되지 않고 예외가 발생하면 이미 존재하는 회원입니다. 라는 로그를 볼 수있습니다. 스프링 내부 어디선가 throw new IllegalStateException을 받아주는것인가요? 받는다면 어디서 받아주는 것인가요? 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberForm? Dto?
강의에서 구현한 MemberForm이 Dto와 같은 개념인가요? MemberForm을 사용하신 이유에 대해 설명하신것을 들어보면 Dto와 같은 것 같은데 만약 같은것이면 왜 Dto라 명명하지 않으신건지, 혹은 Dto와 다른 개념이면 어떤 점이 다른것인지 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 메소드와 setter
엔티티에서 Setter 를 사용하지 않아야 변경점을 줄일 수 있어 유지보수 할 때 유리하다고 하셔서 최대한 사용을 자제하려고 하는데요, 연관관계 메소드를 만들 때, setter 를 사용해서 만드셨는데 없이 만들 수 있는 방법이 있을까요? // Order - Delivery 연관관계 메소드 public void setDelivery(Delivery delivery){ this.delivery = delivery; delivery.setOrder(this); // Delivery 의 setter 사용 }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
1.Exception 관련, 2. Item에 정의한 메서드
1.MemberService에 이 메서드도 Exception에 두어도 될까요?validateDuplicateMember2.Item에 정의한 재고수량/제거 메서드를 Member와 같이 ItemService를 만들어 여기에 둔다면 조금 어색한 느낌인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
GET에서 던져준 new Form과 POST에서 제출된 Form간의 연관관계가 궁금합니다!
안녕하세요. 훌륭한 강의.. 완강하고 공부하던중 문득 의문이 들었습니다. GET에서 던져준 Form과 POST의 Form은 같은 객체일까? 하고 보니 다른 주소값의 객체이더라구요. 혼자 고민을 조금 해보았습니다. 생각해보니 POST에서 넘어온 것은 JSON형태의 데이터를 객체화?? 시켰을 뿐인 것일테니 당연한 결과 이겠더라구요.. 이어서 궁금한것은 GET에서의 Form의 역할 입니다. 그저 어떤 필드가 정의되어 있는지 알려줄 뿐인걸까요?? 그 대상은 타임리프인?? 그렇다면 BookForm.class 나 다른 방법을 통해 알려 줄 수 있을텐데 이런 방법을 택한 이유가 뭘까요?? 메모리 낭비와 코드의 간결함(가독성과 개연성 있는 문맥)을 저울질 했을 때 후자가 훨씬 가치 있는 거라서 그런걸까요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원가입 테스트 오류
안녕하세요 강사님 항상 좋은 강의와 피드백 감사드립니다 다름이 아니라 이번에 강의 중 '회원가입' 테스트를 그대로 따라 코딩하였으나 실행에 오류가 뜹니다. 관련하여 사진과 오류글을 그대로 올려보니 한 번 확인해주시면 감사하겠습니다! java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.ParentRunner.run(ParentRunner.java:413) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:221) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [jpabook.jpashop.JpashopApplication]; nested exception is 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.domain.MemberRepository] at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:189) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:771) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:763) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:438) at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:123) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) ... 25 more 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.domain.MemberRepository] at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.checkCandidate(ClassPathBeanDefinitionScanner.java:349) at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:287) at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:132) at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:296) at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250) at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:207) at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:175) ... 38 more
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
로직 배치
안녕하세요! 선생님 강의 잘 보고 있습니다. 강의를 보며 MyBatis로 개발된 프로젝트에 JPA를 적용해보고 있는데요. change 라는 메소드를 도메인객체에 작성하신 부분에 질문이 있습니다. 기존 프로젝트에서는 update 나 휴면계정처리 같은 메소드를 모두 dao에 배치했었는데 JPA를 적용하는 과정에서 update, 휴면계정처리 또는 로그인 상태 확인 과 같은 메소드는 어디에 배치하는 것이 좋을지 헷갈리기 시작합니다. 질문이 미시적인데요. 결과적으로 domain, repository, service, controller 에 배치되는 로직의 기준에 대해 팁을 알고 싶습니다. 맞는 말인지는 모르겠지만 예시를 들자면 아래와 같이요. ex) repository에는 DB에 접속이 꼭 필요한 메소드만 작성한다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
부트스트랩 적용 후 회색영역이 안 뜰 때 해결방법
그 회색 창 html을 보시면 class="jumbotron"으로 되어 있을텐데 부트스트랩4까지 지원해주던 클래스입니다. 부트스트랩5로 올라가면서 빠졌다고 합니다. 현재 부트스트랩 가장 최신 버전이 5.0.1이기 때문에 저처럼 최신 버전 받았다가 엥 왜 얘만 안되지 하시는 분이 있으실까봐 관련 정보를 남깁니다. 부트스트랩 4를 이용하시면 문제 없고 어차피 디자인적인 요소라 크게 신경 안쓰고 넘어가셔도 될 것 같습니다. - 부트스트랩5 점보트론 변경 정보 https://getbootstrap.com/docs/5.0/migration/#jumbotron - 부트스트랩4 다운로드 링크 https://getbootstrap.com/docs/4.6/getting-started/download/ - 다운로드 없이 cdn으로 적용하기 https://www.inflearn.com/questions/151764
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
getTotalPrice같은 조회함수가 왜 필요한지 모르겠씀니다=_=
totalPrice라는 변수를 만들어서 처음 주문 들어왔을떄 계산해서 넣어두고, 주문 취소라던지 하는 변경이 일어나면 그때 상황에 맞게 업데이트 해주는게 맞는거 아닌가요?? 일반적으로 변경보다는 조회가 빈번하니까 변경되었을때 미리 계산해두고 조회할떄는 가져다 쓰기만 하는게 더 맞지않나 싶어서요=_=
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
p6spy 성능 질문 드립니다.
안녕하세요. 강의를 듣고 사이드 프로젝트를 하면서 `p6spy` 를 잘 활용하고 있는데요. 강의 내용 중에 prod 에서는 성능 관련을 확인 후 사용해야 된다는 내용을 보고 궁금해졌습니다. 처음에는 그냥 `build.gradle` 에서 prod 설정에만 안뜨게 하면 되겠지 (dev, test 에서는 되는 것을 의도) 라고 생각했는데, profile 에 따라 `build.gradle` 이 동적으로 움직이는 건 application.xml 이랑은 다르게 좀 어렵더라구요; 그래서 질문은 2개 입니다. 1. profile 에 따라 `build.gradle` 의 설정 (특히 dependency) 이 동적으로 움직이게 하는 것을 어떻게 하면 좋을까요? 2. `p6spy` 와 같은 외부 라이브러리의 성능 검증은 어떻게 하는 것이 좋을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderController에 대해서 궁금한게 생겼어요
안녕하세요!! 컨트롤러를 보다가 단순 호기심이 생겨서요 MemberController와 ItemController에서는 회원가입을 하거나 상품을 등록할때, MemberForm클래스나 ItemForm클래스를 만들어서 파라미터값으로 넘겨주셨습니다. 그런데 OrderController에서는 주문을 할 때 OrderForm을 만들지 않고, 하나하나 @RequestParam으로 넘겨준 특별한 이유가 궁금해서 질문드렸어요 별다른 이유가 없으면 OrderForm을 만들어서 넘겨도 되는거죠??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강사님 프로그램 시작시 질문있습니다
제가 야생형 코스를 따라가고 있어서 아직까지 이해가 잘 가지 않고 그냥 따라치기 바쁘네요 ㅎㅎ 다름이 아니라 JPA를 사용하면 어플리케이션 실행 할때마다 테이블을 계속해서 만들고 시작하나요 ?? 그리고 제가 디비가 약해서 디비 관계에대해 잘 이해 못하는 부분들이 조금씩 있고 각 어노테이션들의 기능들을 기본편을 보지않고 와서 그런지 모르고 가고 있는데 계속해서 진도 진행해도 될까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
extends JpaRepository<> vs @Repository 질문
안녕하세요 기본편 강의 잘 들었습니다! 질문이 하나 있는데, DB에 접근하는 클래스를 만들 때 스프링 공식 사이트에서는 extends JpaRepository<> 있고 현재 강의에서는 @Repository로 접근을 하는데 둘의 차이가 있는 것 인가요? 추상적인 질문이었다면 죄송합니다 ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ItemServiceImpl.java 클래스를 만들지 않은 이유
강사님 안녕하세요, 강의를 듣다 궁금한 점이 있어서 글 올립니다. 보통 ItemService 같은 서비스 클래스는 구현체를 만드는 것으로 알고 있는데, 혹시 강의처럼 ItemServiceImpl 클래스를 안만들고 바로 구현해도 크게 문제되지는 않는건지 궁금합니다. (JPA라서 그런건지 아니면 예제이기 때문에 단순화 시키신건지 등 ..) 답변 부탁드리겠습니다! 감사합니다!!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
dto entity 변환은 어느 곳이 적절할까요?
1) dto -> entity 2) entity -> dto 각각의 변환은 어디가 적절할까요? 1번 2번 둘 다 controller 혹은 service 에서 하게 되는데 사람마다 스타일이 각각 다른 것 같습니다 영한님이 프로젝트에서 사용하시는 방법이 궁금합니다 (그리고 그것이 개인적으로 선호하는 방법인지도 알고 싶습니다 선호하는 것과 실제 프로젝트에서 사용하기 모호한 부분이 있을 수도 있기에 추가로 질문 드립니다) 영한님이 사용하시는 방법에 대한 이유도 알 수 있었으면 합니다 감사합니다
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
mappedBy와 cascade를 함께 썼을 때
mappedBy로 설정된 컬렉션은 읽기만 가능한 줄 알고 있어서 cascade가 적용이 안되는 게 아닌가..? 싶었는데 컬렉션에 엔티티를 추가할 경우 엔티티도 영속화 해주지만 그 엔티티의 FK 값은 반영이 안되는 것 같은데 제가 제대로 이해한 게 맞을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
gradlew dependencies
안녕하세요. 저는 windows10 사용자입니다.아래와 같이 인텔리제이 터미널 로컬에 입력하면 실패한다고 뜹니다.C:\study\jpashop>gradlew dependencies FAILURE: Build failed with an exception. * Where: Build file 'C:\study\jpashop\build.gradle' line: 39 * What went wrong: A problem occurred evaluating root project 'jpashop'. > Could not find method testImplementation() for arguments [org.junit.vintage:junit-vintage-engine, build_c5fjxfeq8g2hpdi6kd0zeexhk$_run_closure5@1757541f] on root project 'jpashop' o f type org.gradle.api.Project. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 1s =========================================다음은 환경정보입니다. C:\study\jpashop>gradlew -version ------------------------------------------------------------ Gradle 6.8.3 ------------------------------------------------------------ Build time: 2021-02-22 16:13:28 UTC Revision: 9e26b4a9ebb910eaa1b8da8ff8575e514bc61c78 Kotlin: 1.4.20 Groovy: 2.5.12 Ant: Apache Ant(TM) version 1.10.9 compiled on September 27 2020 JVM: 11.0.11 (Oracle Corporation 11.0.11+9-LTS-194) OS: Windows 10 10.0 amd64
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
로그 글씨 색깔
빌드해서 실행해봤을 때 아래 로그 색깔이 저는 전부 검은색인데 강사님 화면은 색깔이 다 들어가있어서 질문 드립니다. 따로 설정이나 설치해야 하는 플러그인이 더 있는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
insert 쿼리가 log에 안찍혀요!
test를 실행할 때 insert 로그가 안찍혀요... @Rollback(false)를 설정 했을때는 찍힙니다. @Rollback(false)를 설정하지 않아도 찍히게 하고싶은데 어떻게 해야하나요!?? yml 복붙해서 넣어드립니다... spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: format_sql: truelogging.level: org.hibernate.SQL: debug org.hibernate.type: trace