묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 메서드 질문
예제에서는 Entity에 Setter가 존재하여 Entity class 내에 set이 가능했지만... 강의에서 강조했듯이 Setter를 제거하고 DTO를 사용을 하게된다면 연관관계 메서드는 DTO내에 존재하게 되는건가요? 아니면 생성자나 builder를 통해서 set 하게 되는걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OneToOne 관계 질문
안녕하세요 선생님 좋은 강의 너무나 감사드립니다. 다름이 아니고 강좌 듣는도중 궁금한 부분이 있어 질문드립니다. 이전 강의 "도메인 모델과 테이블 설계" 강좌와 이번 강좌내용에서 ORDERS와 DELIVERY는 OneToOne 단방향 매핑이라고 이해를 하였는데 [그림1] - 엔티티 클래스 개발1 강의 내용중 회원엔티티 분석 설계도중 일부 [그림2] - 도메인과 모델과 테이블 설계 강의 내용 강의 29분경 실제 엔티티를 설계하는 부분에선 mappedby를 사용하여 OneToOne 양방향 매핑한거 같아 질문드립니다. [그림3] Order 엔티티 [그림4] Delivery 엔티티 아직 학생인데 선생님 덕분에 JPA를 쓰는 회사로 취업하고싶네요. 좋은 강좌 정말 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문내역 생성 메서드 위치
선생님 왜 주문내역은 OrderService를 만들어서 save() 메소드에 적지 않고 Order에 직접 적어주는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 도중 에러 발생
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':test'. > No tests found for given includes: [jpabook.jpashop.MemberRepositoryTest](filter.includeTestsMatching) * 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 4s 테스트 맴버 실행 도중에 위와 같은 오류가 발생하였습니다. 뭐가 문제인걸까요? ㅠ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
DTO 변환 시 우아한형제들은 어떻게 처리하시나요?
샘플에서 DTO는 생략하셔서 아쉽습니다. DTO 변환으로 modelmapper나 mapstruct 정도 쓰는것같습니다.물론 mapper 없이도 하시는것 같던데요. 우아한형제들은 mapper에 대한 고견이 어떠신지 매우 궁금합니다!~
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
참조에 관해 질문드립니다
A->B->C 로 참조가 되어 있어서 A를 지우려면 B를 먼저 삭제하고 B를 지우려면 C가 먼저 삭제되어져야 한다고 했을 때, 만약 C가 A를 참조하게 될 경우 싸이클이 생겨서 서로 삭제가 안되는 문제가 생기는데인. 웹던이나 DB단에서 c->a로 참조를 걸려할 때 잘못된 것으로 인지하고 막고 싶은데. 보통 이럴때는 어떤식으로 해결을 해야하나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Controller에서 Repository 를 직접 사용할 때.
간단한 조회는 Controller 에서 직접 Repository 를 사용하기도 한다. 라는 설명에 대한 질문입니다. 예제에서는 모든 Transaction 이 Service layer 에서 관리되는데 Controller에서 직접 Repository 를 접근할 때에는 tx 가 암묵적으로 생성되는 것인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원기능 테스트 - insert 안나가는 이유
안녕하세요? 회원기능 테스트 강의 중 질문드립니다. @Trnasactional이 적용된 @Test에서 persist를 해도 DB에 안나간다고 하셨는데 이는 H2 DB에서만 그런건가요? MySQL도 그런가요? H2의 경우 sequence를 이용해 @GeneratedValue를 관리하는데 (로그 보면), MySQL의 경우는 auto_increment를 사용하면 DB에 한번 다녀와야 (flush되어야 = insert가 나가야) member의 id를 알 수 있는게 아닌가 해서요. 비슷한 사례(?)로 Spring Data JPA에서 .save(entity)만 해도 flush 되서 insert 쿼리가 나가는 것처럼요. 강의 잘 보고 있습니다! 답변 미리 감사드립니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원기능 테스트에서 질문드립니다.
dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' compile('com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7') compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test'} spring: datasource: url: jdbc:h2:tcp://localhost/~/Dev/projects/book/db;MVCC=TRUE username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: show_sql: true format_sql: truelogging: level: org.hibernate.SQL: debug org.hibernate.type: trace package com.ym.book.shop.service;import com.ym.book.shop.domain.entity.Member;import com.ym.book.shop.repository.MemberRepository;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import org.springframework.transaction.annotation.Transactional;import static org.junit.Assert.*;@RunWith(SpringRunner.class)@SpringBootTest@Transactionalpublic class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입()throws Exception{ //given Member member = new Member(); member.setName("Kim"); //when Long saveId = memberService.join(member); //then assertEquals(member, memberRepository.findOne(saveId)); } @Test public void 중복_회원_예외()throws Exception{ //given //when //then }}결과 :2019-10-06 14:52:56.074 INFO 2244 --- [ Test worker] o.h.h.i.QueryTranslatorFactoryInitiator : HHH000397: Using ASTQueryTranslatorFactory 2019-10-06 14:52:56.173 DEBUG 2244 --- [ Test worker] org.hibernate.SQL : select member0_.member_id as member_i1_4_, member0_.city as city2_4_, member0_.street as street3_4_, member0_.zipcode as zipcode4_4_, member0_.name as name5_4_ from member member0_ where member0_.name=? Hibernate: select member0_.member_id as member_i1_4_, member0_.city as city2_4_, member0_.street as street3_4_, member0_.zipcode as zipcode4_4_, member0_.name as name5_4_ from member member0_ where member0_.name=? 2019-10-06 14:52:56.204 DEBUG 2244 --- [ Test worker] org.hibernate.SQL : insert into member (member_id, city, street, zipcode, name) values (null, ?, ?, ?, ?) Hibernate: insert into member (member_id, city, street, zipcode, name) values (null, ?, ?, ?, ?) 2019-10-06 14:52:56.216 INFO 2244 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test: [DefaultTestContext@4d40c3e testClass = MemberServiceTest, testInstance = com.ym.book.shop.service.MemberServiceTest@b322034, testMethod = 회원가입@MemberServiceTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@1ee9b049 testClass = MemberServiceTest, locations = '{}', classes = '{class com.ym.book.shop.ShopApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@275315df, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@47bf348f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@7db5eaa6, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@2cda0ac3], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true]] 2019-10-06 14:52:56.223 INFO 2244 --- [ Thread-6] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor' 2019-10-06 14:52:56.223 INFO 2244 --- [ Thread-6] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2019-10-06 14:52:56.226 INFO 2244 --- [ Thread-6] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2019-10-06 14:52:56.231 INFO 2244 --- [ Thread-6] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. BUILD SUCCESSFUL in 5s 5 actionable tasks: 3 executed, 2 up-to-date 2:52:56 PM: Tasks execution finished ':cleanTest :test --tests "com.ym.book.shop.service.MemberServiceTest.회원가입"'.이렇게 결과가 나옵니다.select, insert가 2번씩 실행이 되는데요혹시 제가 설정이 잘못된 게 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
DB Insert할 때 질문입니다.
회원 서비스 개발에서 validateDuplicateMember를 할 때에 동시에 회원가입이 이루어질 때 방지로 name에 유니크를 걸어 주신다고 했는데 이해가 잘 되지를 않습니다. 보통 이름이 같은 사람도 많은데 name 에 unique를 주어도 되는건지 궁금하고요. 동시에 일어났을 때 방지하는 법에 대해 좀 더 자세히 알고 싶습니다~
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@ManyToOne, @OneToMany연관관계 조회 시 순환참조가 일어나는 부분은 어떻게 해결하여야 하나요?
안녕하세요!다름이아니라 제가 수업을 따라해보던 중 @ManyToOne, @OneToMany으로 연관관계를 맺은 두개의 테이블을 조회 시 아래와 같은 에러를 확인하였습니다.@Entity @Table(name = "MEMBER") @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") Long id; @Column(name = "NAME") String name; @OneToMany(mappedBy = "member") List<Post> posts = new ArrayList<>(); } @Entity @Table(name = "POST") @Getter @Setter public class Post { @Id @GeneratedValue @Column(name = "POST_ID") Long id; String title; String description; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "MEMBER_ID") Member member; }Could not write JSON: Infinite recursion (StackOverflowError);제 생각에는 한쪽에서 다른쪽 테이블을 조회 시 순환참조가 일어나는것 같다고 생각하는데 이러한 경우에는 어떻게 처리를 하여야 하는지 궁금합니다.찾아보니 @JsonIgnore를 사용하는 방법이 있는것 같기는한데 올바른 방법이 아닌것 같아서 여쭈어봅니다.좋은강의 감사합니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
./h2.sh 실행시 퍼미션 에러가 뜨네요..^^ 참고하세요
-bash: ./h2.sh: Permission denied bin 폴더 경로에 가셔서 터미널 여시고 chmod 755 h2.sh <-- 입력하시면 됩니다. 참고로 터미널에서는 h2 DB 종료 단축키는 control + c 입니다.
-
미해결스프링 부트 개념과 활용
Bean 등록에 실패 한거 같은데 해결해보려 아무리 해도 안되서 질문드립니다.
Description: Field holoman in com.sun.springinit.HolomanRunner required a bean of type 'me.sun.Holoman' that could not be found. Action: Consider defining a bean of type 'me.sun.Holoman' in your configuration. 발생한 에러 로그입니다. 버전 2.1.4 에서 2.0.4 로 변경 후 run 해도 동일하게 발생합니다.. 어디 부분이 잘못 되었을까요..?
-
미해결스프링 부트 개념과 활용
log4j2적용 관련 질문드립니다.
이전 강의에서 Springboot2부터는 pom.xml에 exclusion없이 Common logging외 에서 SLF4j 또는 Log4j2를 사용할 수 있다고 하셨었는데...이 강의에선 logging을 exclusion하셨는데 둘이 다른 의미의 의존성 관리인가요?
-
미해결스프링 부트 개념과 활용
경고문이 뜹니다.
A context path must either be an empty string or start with a '/' and do not end with a '/'. The path [/] does not meet these criteria and has been changed to []이 경고는 어떻게 해결하면 되나요??? 단순히 '/'만 쓰지않고 뒤에 다른것을 써주면 문제가 해결되나요?그리고 2.1.1RELEASE에서는 톰켓실행이 안되는데2.0.3.RELEASE에는 문제없이 실행이 되는것을 확인할 수 있었습니다.톰켓버전의 문제가 있는것같습니다.
-
미해결스프링 부트 개념과 활용
docker에서 postgres를 사용할 때, role 에러.
기선님께서 올려주신 docker로 postgres사용하는 부분 중에서, su - postgres 명령어를 입력하고 psql spring boot를 하게되면, FATAL: role "postgres" does not exist라는 응답이 나오던데, 기선님도 이런 오류가 있으셨나요? 이 오류가 발생해서 여러가지 찾아본 결과 해결방법으로는 root에서 psql -U keesun springboot를 하게되면, DB에 연결이 되는걸 확인할 수 있었습니다. 추가로, Windows유저는 l을 해서 DB를 확인하면, OWNER가 docker run에서 POSTGRES_USER에서 설정한 유저로 바뀌어 있는 걸 확인했습니다. 혹시, Windows 10으로 이 강의를 보시면서, docker for windows를 통해 docker를 실습하시려는 분들은 이 오류가 발생하면 위에 해결방법을 활용해주세요.
-
미해결스프링 부트 개념과 활용
심각: A child container failed during start
어플리케이션 실행시 아래와같은 메세지가 뜨면서 톰캣실행이 안되는데 어떤부분을 확인해야할까요? 소스코드 어플리케이션 실행시 아래와같은 메세지가 뜨면서 톰캣실행이 안되는데 어떤부분을 확인해야할까요? package com.dope; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.startup.Tomcat; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class Application { public static void main(String[] args) throws LifecycleException { Tomcat tomcat = new Tomcat(); tomcat.setPort(8080); Context context = tomcat.addContext("/", "/"); HttpServlet servlet = new HttpServlet() { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter writer = resp.getWriter(); writer.println("<html><head><title>"); writer.println("헬로, 톰캣"); writer.println("</title></head>"); writer.println("<body><h1>Hello Tomcat</h1></body>"); writer.println("</html>"); } }; String servletName = "helloServlet"; tomcat.addServlet("/", servletName, servlet); context.addServletMappingDecoded("/hello", servletName); tomcat.start(); tomcat.getServer().await(); } } 에러코드 심각: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/]] at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:192) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1420) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1410) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) 심각: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/]] at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:192) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1420) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1410) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)`