묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 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를 주어도 되는건지 궁금하고요. 동시에 일어났을 때 방지하는 법에 대해 좀 더 자세히 알고 싶습니다~
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
fetch join 시 paging 문제
fetch join시에 distinct를 해도 JPA의 어플리케이션 레벨에서 distinct를 해준다고 하셨는데, paging을 할 경우 제대로 paging이 되는지 궁금합니다~
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
아크 관계의 경우 JPA에서 어떤 식으로 매핑 해야 하나요?
안녕하세요 김영한님 강의 너무 재미있게 잘 보고 있습니다. 소개 영상에서 JPA 약을 어쩜 그렇게 잘 파시던지.. 보면서 "그래 이게 내가 원하는 세상이야" 하고 바로 결제하여 재밌게 보고 있습니다. 물론 책도 구매하여 모니터 받침으로 잘 쓰고 있습니다. ^^b 한 가지 궁금한게 있는데, 아크 관계의 경우에서는 JPA에서 어떻게 처리해야 될지 잘 모르겠습니다. 아크 관계가 실무에서 굉장히 빈번하게 쓰인다고 하는데, 우형에서는 아크 관계를 JPA로 어떻게 매핑 하여 처리하고 계신지 답변해 주시면 감사드리겠습니다.^^
-
미해결실전! 스프링 부트와 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를 사용하는 방법이 있는것 같기는한데 올바른 방법이 아닌것 같아서 여쭈어봅니다.좋은강의 감사합니다!
-
미해결자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!!
string과 char의 차이점
이 차이점을 잘 설명 안해주셔서 좀 아쉽습니다.
-
미해결자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!!
목소리가 조금 안들립니다!
마이크의 문제인건지 뭔가 멀리서 말하는 듯한 느낌이 들어서, 볼륨을 올려도 조금 아쉽습니다. 다만 강의가 하나하나 원리나 이유를 잘 설명해줘서 너무 좋습니다ㅎㅎ
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
DTO관련 질뮨드립니다
Member란 엔터티에 컬럼 a, b, c, d가 있습니다 selectA 는 a,b 를 보여주고 selectB 는 b, a를 불러주고 selectC는 a,b,c를 불러온다고 가정하였을 때 1. select A, B, C 에 대해서 다 DTO객체를 만들어주는 것이 괜찮을까요? 2. select A, B는 컬럼 순서만 다를뿐인데 하나의 DTO로 리턴해줄 때 순서를 바꿔줄 수 있나요? 3. 아님 a, b, c를 포함한 DTO를 만들어서 사용하는것이 나을까요? 이렇게하면 라턴해줄 때 null값( selectA를 호출한다면 필드c 가 null값) 생기어서요(프론트엔드 입장에서는 사용할 필드만 보고 싶어질수도 있을거같아서요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
./h2.sh 실행시 퍼미션 에러가 뜨네요..^^ 참고하세요
-bash: ./h2.sh: Permission denied bin 폴더 경로에 가셔서 터미널 여시고 chmod 755 h2.sh <-- 입력하시면 됩니다. 참고로 터미널에서는 h2 DB 종료 단축키는 control + c 입니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Group By가 필요할 때 JPA에서는 새로운 DTO 클래스를 만들어서 결과를 담으시나요?
실무에서 여러 테이블 조인하고 group by까지 해야할 때 ,기존의 엔티티 클래스말고 새로운 DTO 같은 클래스를 만들어서 결과를 받으시나요? 업무적으로 group by가 필요한 부분들은 어떻게 처리하시는지 궁금하네요. 기존의 엔티티로는 힘들어 보여서요.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
Group By질문드립니다.
활용편에서 나올 내용같은데 공부하다 궁금해서 문의드립니다. ㅠㅠ querydsl을 적용중이고 A Table year name value 2019 a 10 2019 b 11 2019 c 11 2020 d 9 2020 e 20 이 있을 때 , year로 그룹핑해서 value가 맥스인값을 보여주고 싶습니다. 2019 (b,11) , (c,11) 2020 (e, 20) 이렇게 값을 가져오게 하고 싶습니다. 최종적으로는 (b,11) (c,11)(e,20)로 출력하고 싶습니다. List<a>로 받고 싶습니다. 년도순, 이름순으로 값을 저장하고 싶습니다. a는 Qa를 a로 받은 것입니다. JPAQueryFactory.from(a).transform(groupBy(a.year).as(list(a))); 저는 이정도에서 더이상 진도가 안나네요. ㅠㅠ
-
미해결실전 JSP (renew ver.) - 신입 프로그래머를 위한 강좌
Cookie 선언할때, Cookie[] 와 Cookie의 차이가 있나요??
예제에서 1. Cookie [] cookies = request.getCookies(); 2. Cookie cookie = null 이렇게 두가지 선언이 있는데 Cookie[]는 배열이고 Cookie는 배열이 아닌것 인가요?? 차이가 있다면 어떤점이 다른건지 헷갈립니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JAVA11 - javax.xml.bind.JAXBException 에러
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException JAVA11 에서 에러가 발생하네요 <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </dependency> pom.xml에 해당 내용 추가하여 에러 없엤습니다 ㅎㅎ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
여러대 서버에서 사용하는 엔티티가 벌크 연산되는 경우 질문 드립니다.
아래와 같은 상황인 경우에, 어떤방식으로 엔티티들의 영속성을 유지할수 있을까요? - JPA 를 사용하는 API 서버 10대 - JPA 를 사용하는 BATCH 서버 2대 상황 - API 서버 몇개에서, BATCH에서 업데이트 될 엔티티가 영속 상태 - BATCH 서버에서 벌크 연산 수행 위와 같은 경우에 API 서버에서 엔티티들을 어떻게 관리해야하는지 궁금합니다.
-
미해결더 자바, 코드를 조작하는 다양한 방법
제네릭을 쓰는 클래스 생성방법은 없나요?
안녕하세요. 강좌 잘 보고 있습니다. 강좌를 보고 실습하고 있는데요. 제가 좀 변태적인 취향인지라... 제네릭한 클래스를 newInstance 를 이용해서 생성하려고 하는데요. 어떻게 해야할지 도통 감이 안잡히네요.
-
해결됨디자인 패턴 with JAVA (GoF)
싱글톤 패턴 LogWriter 예제 질문
LogWriter.java 에서 log 메서드에 synchronized 를 붙여주지 않으면 문제가 발생할 수 있다고 설명하셨는데, 현재 로직상으로는 사실상 synchronized 가 없어도 괜찮지 않나요? 문제가 발생하는걸 눈으로 확인하고 싶은데...
-
미해결실전 JSP (renew ver.) - 신입 프로그래머를 위한 강좌
doPost()가 안되는 이유가 뭘까요?
method="post"로 바꾸고 실행을 해도 doGet()만 실행이 되는데 어떤게 문제일까요? jsp자료 받고 저것 외엔 수정한 내역이 없는데도 그러네요
-
미해결예제로 배우는 스프링 입문 (개정판)
과제 진행중인데
아무리바꿔도 html 파일이 바뀌질않아요.. 로그에 에러도 뜨지 않고 html 파일을 다 지워도 처음 시작했던 그대로 나오는데 어떻게 해야하나요
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
Entity 클래스의 역할
안녕하세요. 강사님! 엔티티 클래스가 역할과 책임을 가지고 주도적으로 일을 하는 클래스가 되어야 할까요 아니면 그저 DTO 같은 데이터 저장소로써 역할만 하는것이 나은지 궁금합니다!
-
해결됨스프링 부트 개념과 활용
[해결] Tomcat 9.x 실행 문제
다음과 같이 코드 추가하시면 Tomcat 9.x 에서 8080포트로 실행 잘됩니다. 기존 코드 tomcat.start();tomcat.getServer().await(); 변경 코드 tomcat.getConnector();tomcat.start();tomcat.getServer().await();