묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
검증시 변수값이 아니라 상수값으로 비교하는 이유가 있나요?
문제가 발생한건 아니고 단순 질문입니다! 테스트 짜실 때 보면,// 1번 코드 assertEquals("상수값", findComment.getAuthor()); // 2번 코드 assertEquals(addComment.getAuthor, findComment.getAuthor());1번처럼 상수값과 비교를 많이 하시는데, 저는 2번처럼 저장하려고 했던 객체와 실제로 저장된 후 리턴된 객체간의 비교를 많이 하는 것 같습니다. 2번이 유지보수의 측면으로 봤을 때 더 좋아보이는데 1번 스타일로 테스트 코드를 짜는 이유가 있으실까요?
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
List<Domain> -> List<Response> 변환을 Controller에서 하는 게 맞나요?
Domain -> Response 변환 코드를 Domain에 정의해두고Controller에서 Domain 메서드를 호출해서 Response를 변환하는게 맞나는 건 이해했습니다. 근데 실제 API에 해당 내용을 적용하려고 보니 Domain 단 건 조회보다는 List<Domain>을 반환하는 경우가 훨씬 많았습니다. 따라서 List<Domain>을 List<Response>로 변환해야 하는데 해당 작업을 for문이나 Stream으로 Controller로 처리하려니 Controller 코드도 지저분해지고 Controller가 하는 역할에 부합하지 않게 되는 것 같습니다.List<>를 변환할 때는 어디서 하는게 올바른 것인지 질문드립니다!
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
계층형 테이블에 매핑된 엔티티 컬렉션을 fetch join으로 가져올 때 쿼리 개수 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]코드는 마지막에 첨부되어 있습니다.게시글 엔티티 Post가 게시글에 달린 댓글 엔티티 Comment의 컬렉션을 프로퍼티로 갖습니다. 댓글 엔티티 Comment는 COMMENT, REPLY 타입으로 구분되며, 프로퍼티로 parentComment와 replies를 갖습니다. COMMENT 타입은 parentComment == null이며, REPLY 타입은 replies == null입니다. Post.comments는 Comment의 타입을 고려하지 않고 모두 갖고 있습니다.위 상황에서 게시물 상세 정보를 가져올 때, comments를 fetch join하여 Post 엔티티를 가져와 댓글들을 타입 계층에 따라 분리하는 작업을 합니다. 이때 REPLY 타입의 replies에 접근하지 않습니다. COMMENT 타입의 replies에는 접근하며 해당 replies는 모두 같은 게시물에 속해있습니다.예상했던 쿼리의 개수는 1 혹은 (1 + COMMENT 타입 수) 였습니다. 애초에 둘 중 무엇인지 궁금해서 일을 진행했었습니다.테스트를 실행해보면, post.comments의 요소에 처음 접근할 때 REPLY 타입을 가져오는 쿼리가 발생합니다. 그런데 이후에 다른 COMMENT 타입에 접근할 때는 REPLY를 가져오는 쿼리가 발생하지 않습니다. 만약 Post의 COMMENT 타입 Comment.replies에 접근할 때 쿼리가 발생하는 거라면 COMMENT 타입의 개수만큼 발생해야 하는게 아닌가요? 제가 무엇을 놓치고 있는지 궁금합니다.논외로, Spring data JPA의 @Query를 통해 작성한 단순한 정적 쿼리가 계속 반복된다면 QeuryDSL로 옮겨 반복을 줄이는게 합리적일까요? 아니면 spring data jpa의 편리함을 유지하는게 합리적인가요? 감사합니다.public class Post extends BaseEntity { public static final int TITLE_MAX_LENGTH = 50; public static final int CONTENT_MAX_LENGTH = 10000; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "post_id", nullable = false, updatable = false) private Long id; @Column(name = "title", nullable = false, length = TITLE_MAX_LENGTH, updatable = false) private String title; @Column(name = "content", nullable = false, length = CONTENT_MAX_LENGTH) private String content; @Column(name = "hits", nullable = false) private Long hits; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "writer_id") private Member writer; @OneToMany(fetch = FetchType.LAZY, mappedBy = "post", orphanRemoval = true) @ToString.Exclude private List<Comment> comments = new ArrayList<>(); }public class Comment extends BaseDeleteEntity { public static final int CONTENT_LENGTH = 1000; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "comment_id", nullable = false) private Long id; @Column(name = "content", nullable = false, length = CONTENT_LENGTH) private String content; @Column(name = "type", nullable = false, updatable = false) private CommentType type; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "post_id", nullable = false, updatable = false) private Post post; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "writer") private Member writer; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent", orphanRemoval = true) private List<Comment> replies = new ArrayList<>(); @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "parent_comment_id", updatable = false) @ToString.Exclude private Comment parent; } @Query(value = """ SELECT p FROM Post p LEFT JOIN FETCH p.writer AS w LEFT JOIN FETCH w.profile LEFT JOIN FETCH p.comments WHERE p.id = :postId """ ) Optional<Post> findPostById(@Param("postId") final Long id); @Autowired EntityManager em; @Autowired PostRepository postRepository; @Test public void 정상작동테스트_추가적인_쿼리_발생_x() throws Exception { //given Post post = PostTest.create("username", "nickname"); Member member = post.getWriter(); em.persist(member); em.persist(post); Long postId = post.getId(); int commentCount = 10; int replyCount = 2; createComment(post, member, commentCount, replyCount); em.flush(); em.clear(); //when int totalCommentCount = commentCount * (replyCount + 1); Post findPost = postRepository.findPostById(postId).get(); System.out.println(); //then for (Comment comment : findPost.getComments().stream().filter(Comment::isCommentType).toList()) { // 이때 REPLY 타입을 조회하는 쿼리가 1회 발 System.out.println("comment = " + comment); System.out.println("comment.getReplies().get(0) = " + comment.getReplies().get(0)); } Assertions.assertThat(post.getComments().size()).isEqualTo(totalCommentCount); }[테스트 실행 시 쿼리]2023-11-02T11:45:00.154+09:00 DEBUG 51844 --- [ main] org.hibernate.SQL :selectp1_0.post_id,c1_0.post_id,c1_0.comment_id,c1_0.content,c1_0.created_by,c1_0.created_date,c1_0.deleted_date,c1_0.is_deleted,c1_0.last_modified_by,c1_0.last_modified_date,c1_0.parent_comment_id,c1_0.type,c1_0.writer,p1_0.content,p1_0.created_by,p1_0.created_date,p1_0.hits,p1_0.last_modified_by,p1_0.last_modified_date,p1_0.title,w1_0.member_id,w1_0.created_by,w1_0.created_date,w1_0.last_modified_by,w1_0.last_modified_date,w1_0.login_id,w1_0.login_type,w1_0.profile_id,p2_0.profile_id,p2_0.created_by,p2_0.created_date,p2_0.last_modified_by,p2_0.last_modified_date,p2_0.nickname,w1_0.user_role,w1_0.social_login_id,w1_0.usernamefrompost p1_0left joinmember w1_0on w1_0.member_id=p1_0.writer_idleft joinprofile p2_0on p2_0.profile_id=w1_0.profile_idleft joincomment c1_0on p1_0.post_id=c1_0.post_idwherep1_0.post_id=?2023-11-02T11:45:00.162+09:00 INFO 51844 --- [ main] p6spy2023-11-02T11:45:01.221+09:00 DEBUG 51844 --- [ main] org.hibernate.SQL :selectr1_0.parent_comment_id,r1_0.comment_id,r1_0.content,r1_0.created_by,r1_0.created_date,r1_0.deleted_date,r1_0.is_deleted,r1_0.last_modified_by,r1_0.last_modified_date,r1_0.post_id,r1_0.type,r1_0.writerfromcomment r1_0wherearray_contains(?,r1_0.parent_comment_id)[반복되는 spring data jpa 쿼리]public interface PostRepository extends JpaRepository<Post, Long>, PostQueryRepository { /** * Post 반환 시 Member, Profile을 fetch join한다. ~ToOne 매핑관계에 대한 fetch join은 별명을 사용할 수 있고, 연계하여 fetch * join할 수 있다. * * @param id must not be {@literal null}. * @return */ @Query(value = """ SELECT p FROM Post p LEFT JOIN FETCH p.writer AS w LEFT JOIN FETCH w.profile LEFT JOIN FETCH p.comments WHERE p.id = :postId """ ) Optional<Post> findPostById(@Param("postId") final Long id); /** * Post를 페이징 처리하여 Page<Post>로 반환한다. 이때 Member와 Profile을 fetch join한다. * * @param pageable the pageable to request a paged result, * can be {@link Pageable#unpaged()}, * must not be {@literal null}. */ @Query(value = """ SELECT p FROM Post p LEFT JOIN FETCH p.writer AS w LEFT JOIN FETCH w.profile """, countQuery = "SELECT count(p) FROM Post p" ) @Override Page<Post> findAll(final Pageable pageable); /** * WriterId가 memberId와 같은 Post를 페이징 처리하여 Page<Post>로 반환한다. 이때 Member와 Profile을 fetch join한다. * * @param writerId writerId가 일치하는 Post들을 반환한다. * @param pageable 페이징 정보 */ @Query(value = """ SELECT p FROM Post p LEFT JOIN FETCH p.writer AS w LEFT JOIN FETCH w.profile WHERE w.id = :writerId """, countQuery = "SELECT count(p) FROM Post p WHERE p.writer.id = :writerId" ) Page<Post> findAllByWriterId(@Param("writerId") final Long writerId, final Pageable pageable); }
-
미해결
Querydsl SQLExpressions에 listagg 관련 질문
안녕하세요, 김영한 님.Querydsl SQLExpressions에 listagg 관련하여 질문이 있습니다. 현재 Projections.constructoer 방식으로 조회한 결과를 Dto로 받고있는데요,SQLExpressions.listagg(컬럼, ",").withinGroup().orderBy(컬럼).getValue().as("listaggs")로 select후 Dto에서 String으로 못받는데 String으로 받으려면 어떻게 해야 될까요? 방법이 없는걸까요? 이미 같은 질문을 남긴 글이 있는데 미해결 상태라 다시 한번 글 올려 봅니다. 이방법을 사용하는 이유는 A 테이블, B 테이블이 있는데 1:N의 관계 입니다)A테이블 조회시 Response에는 B테이블의 컬럼 하나도 추가로 목록에 보여줘야 하는데 그럴때 B테이블의 해당 컬럼의 값이 다른 데이터가 2개 이상일시 A정보가 2건이 나오게 되서(페이징 처리시에도 총 카운트와 페이징 처리가 제대로 되지 않습니다.)한 row로 보여지게 하기 위해 사용하려 Querydsl SQLExpressions에 listagg 사용하려는데,String으로 받을수가 없더군요... 혹 Querydsl SQLExpressions에 listagg 아니더라도 다른 방법이 있을까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
gateway와 userService 간의 인증 정보 공유 문제에 관해 질문 드립니다!
안녕하세요 선생님 강의 잘 듣고 있습니다.강의 수강 중 질문이 생겨서요! user-service는 mvc 기반의 app으로 spring security를 통해 인증을 처리하므로, tomcat의 JSESSIONID 를 기반으로 하여 Security Context에 Authentication 객체의 유무를 통해 인증이 된 사용자인지 안 된 사용자인지 Security Filter Chain에서 체크를 하는 것으로 알고 있습니다.그런데gateway에서 설정하신 application.yml 에 따르면 모든 요청 헤더에 존재하는 Cookie를 삭제하고 --> 서버에서 매번 새 요청으로 인식gateway 는 netty 서버를 사용하고 user-service는 tomcat 서버를 사용하잖아요.그래서 두 서버 사이 Context가 공유가 안 될것 같아서요... 그래서 gateway에서는 인증을 했다고 요청을 넘기지만 user-service에서는 그 요청을 받았을 때 해당하는 SESSIONID 의 Context에 Authentication 객체가 존재하지 않아 인증이 필요한 url에 접근할 수 없을 거라고 생각했습니다. 어떻게 인증 완료 정보를 두 서비스가 공유할 수 있는 건가요?? 또한 gateway도 이중화 구성이 가능한가요?.. userService를 2,3중화 한 것처럼 gateway도 여러 대의 인스턴스로 기동하면 eureka에서 다중 구성한 서버로 인식해주는 건가요??... 혹시 gateway에도 Spring Security를 적용시키는 경우도 있을까요?.. 권한 별 접근 제어를 구현하기 위해서는 해당 라이브러리를 사용해야 할 것 같아서요!또한 gateway에서 커스텀 필터를 만들 때, apply 메소드의 return 타입이 GatewayFilter 로 되어있는데, Mono<Void> 타입으로 return을 해도 되는 건가요?... Mono<Void>는 mvc에서 return 타입이 void 인 것과 같은 의미 아닌가요?... 열심히 강의해주셨는데 질문의 너무 많아 죄송합니다..ㅠ 답변 기다리겠습니다! 항상 감사드립니다!!
-
미해결실전! Querydsl
Querydsl 버전 관련
안녕하세요! Querydsl 을 공부한 후 현재 인턴으로 있는 회사에서 프로젝트에 적용해보려고 합니다. 근데 해당 프로젝트의 스프링 버전이 2.2.0 release 버전인데 해당 버전에서 Querydsl은 어떻게 해야하는지 여쭤볼 수 있을까요 ?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
deleteUser 관련 질문
현재 코드에서는 name을 기준으로 delete를 하는데요, findByName(name)을 이용한 코드에서 DB 안에 같은 이름의 회원이 2명 이상인 경우엔 오류가 생깁니다. 그 이유가 find는 return 개수가 1건이기 때문에 rollback 된다고 생각했습니다.이 버그를 수정하기 위해서 deleteUser의 파라미터는 Long id 로 수정했는데, 또 안 되더라고요...?findAll을 쓰면 같은 이름을 가진 모든 회원이 삭제될 것 같고... 어떻게 하면 동명이인의 회원 중에서 내가 원하는 한 회원만 삭제할 수 있나요? + 추가 방금 다른 학생분의 질문과 답변을 읽었습니다. 같은 내용의 질문인 것 같네요!그러면 파라미터를 Long id 로 변경하되, 현재 실습 중인 UI에서도 코드를 수정해야하는 부분이 있기에 삭제가 안 되는 게 맞다고 이해하면 될까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
다대다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 다대다 매핑을 듣다가 의문이 생겼습니다.기존에 양방향 매핑을 최대한 지양하라고 하시걸로 이해하셨는데 다대다 매핑을 일대다, 다대일로 풀어내면 멤버에는 @OneToManyprivate List<MemberProduct> memberProducts = new ArrayList();를 가지게 되고 멤버프로덕트에는@ManytoOne@JoinColumn(name = "MEMBER_ID")private Member member;를 갖게 된느데다대다 매핑을 일대다 다대일로 풀어내면 두 객체는 항상 양방향 매핑이 되어야 하는 것인가요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
jdbc template findById method
@Override public Optional<Item> findById(Long id) { String sql = "select id,item_name,price,quantity where id =?"; template.queryForObject(sql, ((rs,rowNum)->{ Item item = new Item(); item.setId(rs.getLong("id")); item.setItemName(rs.getString("item_name")); item.setPrice(rs.getInt("price")); item.setQuantity(rs.getInt("quantity")); return item; }),id); return Optional.empty(); } **람다식에 두번째 매개변수를 1로 바꾸면 안되는 이유가 궁금해요 sql를 보면 id가 primary key 이므로 당연히 1개의 데이터셋이 추출될건데 rowNum값을 왜 1로 두면 안될까요??
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
빌드가 안됩니다ㅜㅜ
강의 자료 코드 다운 받아서 실행하니깐 아래와 같이 나옵니다..사실 처음에 빌드 에러 발생했었는데 그건 영한님께서 항상 settings하시는대로 따라하니깐해결된 거 같은데, 이제는 아래와 같은 문제가 발생합니다ㅠ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
컬렉션의 초기화 유무의 따른 size의 값이 다르게 측정됩니다.
@Transactional public void increasePoint() { Store store1 = storeRepository.findById(1L).get(); Point point = new Point(1); // System.out.println("store1.getPoints().size() = " + store1.getPoints().size()); store1.add(point); store1.add(point); store1.add(point); store1.add(point); store1.add(point); System.out.println("store1.getPoints().size() = " + store1.getPoints().size()); }@OneToMany(mappedBy = "store",cascade = CascadeType.ALL) private List<Point> points = new ArrayList<>();Store(1):Point(N) 입니다. Store 내부에 양방향으로 List로 갖고있고 현재 디비에 Store ID 1번을 외래키로 갖고있는 Point가 이미 2개가 있습니다. 위에서 첫번째 디버그 출력문을 주석처리하고 add를 5번 진행 후 마지막에 검증하게 되면 DB에 2개 + 1개 해서 사이즈가 3으로 측정됩니다.하지만 위에서 주석처리를 제거하고 size()를 통해 초기화 이후에 add를 5번 진행하고 사이즈를 출력하면 DB2개 + 5개해서 7개가 출력됩니다. 위에 두가지 상황에서 왜 초기화를 먼저 진행하고 add하는것과 add이후에 초기화 하는것이 결과가 다른지 궁금합니다. 같은 객체를 여러번 add해도 실제 DB에 인서트 쿼리는 1번만 발생하게 됩니다(위에 두 가지 경우 모두) 짐작은 되지만 정확한 이해가 되지 않는데.. 같은 객체라 영속성컨텍스트에서 관리하게 되면 이후에것은 이미 관리하고 있으니 저장하지 않는것으로 이해하면 될까요?위에서 point객체가 영속성컨텍스트에 관리되기 시작하는 시점은 언제인가요? 최초의 add호출인가요?PersistentBag의 add를 봤을때 컬렉션이 초기화 되어있지않다면 다른 리스트에 넣어두고 초기화되면서 합쳐주는것으로 확인했는데 왜 5개를 다 넣어주지 않고 1개만 넣어주는지 궁금합니다. (디버깅과정에서 자동초기화 되서 정확하지 않습니다.)
-
해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
pk, fk 연결
맛집 리뷰 서비스 만들어보는 부분 따라하고 있는데요궁금한점이 있어요. erd 보시면 맛집 id가 리뷰, 메뉴 테이블의 fk로 들어가 있잖아요그런데 코드단에서 이걸 연결해 주는 작업을 한 적이 없는 거 같은데h2에 생성된 디비에는 어떻게 연결이 되어있는 건가요?코드에서 이 작업을 해주는 부분이 어디인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
java.lang.IllegalStateException: Failed to load ApplicationContext 오류가 납니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]여기에 질문 내용을 남겨주세요.다른 답변들을 보고 모두 따라해 봤는데 아무 소용 없었습니다. h2 콘솔로는 실행이 되고 접속도 다 됩니다 근데 test를 하면 자꾸 java.lang.IllegalStateException: Failed to load ApplicationContext 이 에러가 생깁니다. at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:98) 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:248) 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$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)MVCC=TRUE 지우라고 한 답변들도 있어서 지우는데도 안되네요;;;
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
compile 시 에러
컴파일 시 아래와 같은 에러가 발생하는데 해결에 어려움이 있습니다. 도움부탁드립니다. "C:\Program Files\Java\jdk-11.0.17\bin\java.exe" -Dmaven.multiModuleProjectDirectory=D:\SpringPrj\cryptoWebService "-Dmaven.home=C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\plugins\maven\lib\maven3" "-Dclassworlds.conf=C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\plugins\maven\lib\maven3\bin\m2.conf" "-Dmaven.ext.class.path=C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\plugins\maven\lib\maven-event-listener.jar" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\lib\idea_rt.jar=49589:C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\plugins\maven\lib\maven3\boot\plexus-classworlds-2.6.0.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\plugins\maven\lib\maven3\boot\plexus-classworlds.license" org.codehaus.classworlds.Launcher -Didea.version=2020.3.1 compile[INFO] Scanning for projects...[INFO] [INFO] ----------------------< com.studyolle:studyolle >-----------------------[INFO] Building studyolle 0.0.1-SNAPSHOT[INFO] --------------------------------[ jar ]---------------------------------[INFO] [INFO] --- apt-maven-plugin:1.1.3:process (default) @ studyolle ---[INFO] [INFO] --- frontend-maven-plugin:1.8.0:install-node-and-npm (install node and npm) @ studyolle ---[INFO] Installing node version v4.6.0[INFO] Unpacking C:\Users\sonth\.m2\repository\com\github\eirslett\node\4.6.0\node-4.6.0-win-x64.zip into D:\SpringPrj\cryptoWebService\src\main\resources\static\node\tmp[INFO] Copying node binary from D:\SpringPrj\cryptoWebService\src\main\resources\static\node\tmp\node-v4.6.0-win-x64\node.exe to D:\SpringPrj\cryptoWebService\src\main\resources\static\node\node.exe[INFO] Installed node locally.[INFO] [INFO] --- frontend-maven-plugin:1.8.0:npm (npm install) @ studyolle ---[INFO] Running 'npm install' in D:\SpringPrj\cryptoWebService\src\main\resources\static[INFO] npm WARN package.json static@1.0.0 No description[INFO] npm WARN package.json static@1.0.0 No repository field.[INFO] npm WARN package.json static@1.0.0 No README data[INFO] [INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ studyolle ---[INFO] Using 'UTF-8' encoding to copy filtered resources.[INFO] Using 'UTF-8' encoding to copy filtered properties files.[INFO] Copying 2 resources[INFO] ------------------------------------------------------------------------[INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[INFO] Total time: 35.495 s[INFO] Finished at: 2023-10-31T22:25:42+09:00[INFO] ------------------------------------------------------------------------[ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources) on project studyolle: Input length = 1 -> [Help 1][ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.[ERROR] Re-run Maven using the -X switch to enable full debug logging.[ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles:[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionExceptionProcess finished with exit code 1
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
컨트롤러 부분만 컴포넌트 스캔을 하는 이유
서비스와 리포지토리는 빈등록을 수동으로 한 이유가 따로 있나요?? 공부차원에서 이렇게 하신건가요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
H2 데이터베이스 가 접속이 안되어요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. Database "C:/Users/mukim/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-224] 90149/90149 (도움말)이렇게 나와요 뭘 어떻게 해야하나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
어플리케이션 재구동 시 H2 DB table 및 data가 유지되게 할 수 없나요?
메모리 기반으로 설정했다고 해서 어플리케이션 재구동 할 때마다 Table 및 Data가 날라가는 것으로 알고있습니다.그런데 개인적으로 공부하면서 여러가지 시도를 하다보면 기존 Data가 유지되었으면 좋겠습니다.김영한 강사님의 다른 기초 강의에서는 H2서버의 Data를 유지하도록 설정했었는데,이 강의에서는 설정을 어떻게 해야 Data가 유지되는지요?
-
미해결
JPA 복합키에 localdatetime 사용 시 조회 안되는 원인
db 는 tibero 입니다..테이블은 키가 date, varchar 타입이고엔티티는 localdatetime, string 타입인데,문제는 각각 컬럼으로 조회는 되지만, key 객체를 생성해서 findById를 하면 조회가 되질 않습니다.euquals, hashcode 추가 했고, 컨버터도 사용해봤지만 이 문제는 아닌 것 같습니다. 생성한 키KEY(inspDt=2023-10-31T12:19:04, inspId=INP0000001)전체 조회해서 확인 한 키KEY(inspDt=2023-10-31T12:19:04, inspId=INP0000001) 혹시나 해서 db 테이블 index를 nonunique로 바꾸니까 조회는 되는데,이럼 인덱스를 거는 이유가 없어지는거 같아 고민하다 글을 씁니다. 도저히 원인을 못찾겠네요 ㅜ
-
미해결실전! 스프링 데이터 JPA
fetch join 쿼리 질문 드립니당
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] 페이징 처리를 하다가 갑자기 궁금해서(이전에 배웠는데 까먹은걸지도..모르겠네요) <질문> : @Query에서 페치 조인으로 팀을 가져왔는데, Team 엔티티에 있는 List<Members> members의 값은 왜 결과 쿼리에서 조회가 되지 않았는지 궁금합니다.패치조인을 하게 되면 member와 team의 모든 필드 값을 다 select 하게 되는거 아니였나요'? 맞다면 리스트 members도 가져와야 된다고 생각하는데 왜 안되는지 궁금하고, 가져올 수 있는 방법이 따로 있는 건지도 궁금합니다. @Query(value = "select m from Member m left join fetch m.team t", countQuery = "select count(m) from Member m")Page<Member> findByAge(int age, Pageable pageable); @Testpublic void paging(){//given memberRepository.save(new Member("member1", 10)); memberRepository.save(new Member("member2", 10)); memberRepository.save(new Member("member3", 10)); memberRepository.save(new Member("member4", 10)); memberRepository.save(new Member("member5", 10)); memberRepository.save(new Member("member6", 10)); int age = 10; PageRequest pageRequest = PageRequest.of(0, 3, Sort.by(Sort.Direction.DESC, "username")); //when Page<Member> page = memberRepository.findByAge(age, pageRequest); // PageRequest의 부모 인터페이스가 Page package study.datajpa.entity;import jakarta.persistence.*;import lombok.*;import java.util.ArrayList;import java.util.List;import static lombok.AccessLevel.PROTECTED;@Entity@Getter @Setter@NoArgsConstructor(access = PROTECTED)@ToString(of = {"id", "name"})public class Team {@Id @GeneratedValue @Column(name = "team_id")private Long id; private String name; @OneToMany(mappedBy = "team")private List<Member> members = new ArrayList<>(); public Team(String name) {this.name = name; }}
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA 질문이요!
엔티티에서 컬럼 아이디를 idx로 했을 때 findById().get() 했을 때(기본 제공 메소드)는 중복키오류가 안나오는데 레포지토리에 findByIdx(int idx) 이렇게 만든걸 호출했을때는 중복키 오류가 생기는데 차이가 어떻게 생긴건지를 모르겠습니다...save()를 호출안하고 set만 했는데 DB에 객체가 바뀌어서 저장되서 이 부분도 원래 이렇게 되는게 맞는지 궁금합니다...