묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
버퍼, 한번에 읽고 쓰기, 크기 질문이요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 궁금증이 생겨서 질문을 드립니다."I/O 기본1 정리"를 보고 들으면서, 버퍼에 한번에 가득 채워서 쓰기(bos.write(buffer)) 및 한번 만에 읽기(bos.readAllbytes())에서 궁금증이 생겼습니다. (7:25 부분)어느 정도의 파일 용량이 까지, 한번 만에 쓰기 및 한번 만에 읽기를 하는지 알 수 가 없었습니다.어느 정도가 파일 용량이 작은 거라고 생각하는지 알고 싶습니다. 답변 부탁드립니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@OneToMany,@JoinColumn 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요, 공부하다가 정리한 제 생각이 맞는지 궁금합니다.> @JoinColumn: 외래 키(Foreign Key, FK)를 소유하는 엔티티이며, 해당 필드를 가진 엔티티는 연관관계의 주인이다. JPA가 연관된 상대 엔티티에 name으로 지정한 Column을 추가한다.> @OneToMany: 기본적으로 연관관계의 주인이 아니며(1인 team에 FK값인 member_id를 가지면 불필요한 데이터 증가하기 때문) 연관관계 주인인 테이블에 추가적인 update SQL이 진행된다. 감사합니다.
-
미해결실전! 스프링 데이터 JPA
왜 select에서 left join을 수행하더라도 count에서는 left join을 수행하지 않나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요, 강의 잘 듣고 있습니다. 질문도 드리고, 맞다면 메뉴얼에 추가할 만한 내용이 있는 것 같아서 글 남겼습니다! Page를 조회해올 때, left join을 사용한 경우, countQuery에 대해 명시하지 않더라도 count 쿼리문에서는 join 문이 확인되지 않았는데, 이것 또한 하이버네이트6에서 최적화하여 join 문을 생략한 것일까요? 하이버네이트6에서 left join을 직접 추가하더라도 내부적으로 최적화하는 질문을 보고 메뉴얼("스프링 부트 3 - 하이버네이트 6 left join 최적화 설명 추가")도 확인했습니다.그럼에도 join을 강제로 수행시켜도 count 쿼리 또한 join 돼서 수행되는지 확인하고 싶어 다음과 같이 코드를 작성해봤습니다.@Query(value = "select m,t from Member m left join m.team t") Page<Member> findPageByAge(int age, Pageable pageable);@Test public 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)); int age = 10; PageRequest pageRequest = PageRequest.of(0, 3, Sort.by(Direction.DESC, "username")); Page<Member> page = memberRepository.findPageByAge(age, pageRequest); //then List<Member> members = page.getContent(); long totalElements = page.getTotalElements(); assertThat(members.size()).isEqualTo(3); assertThat(totalElements).isEqualTo(5); assertThat(page.getNumber()).isEqualTo(0); assertThat(page.getTotalPages()).isEqualTo(2); assertThat(page.isFirst()).isTrue(); assertThat(page.hasNext()).isTrue(); }테스트 코드는 강의와 똑같이 작성하고, 쿼리문에서 select m, t로 한 뒤 countQuery는 별도로 추가하지 않았습니다.이때, 수행되는 쿼리가 다음과 같은데,select m1_0.member_id, m1_0.age, m1_0.team_id, m1_0.username, t1_0.team_id, t1_0.name from member m1_0 left join team t1_0 on t1_0.team_id=m1_0.team_id order by m1_0.username desc fetch first ? rows onlyselect count(m1_0.member_id) from member m1_0countQuery를 명시하지 않았음에도, 강의와 달리 count 쿼리문에서는 join이 수행되지 않았습니다.
-
미해결개발 역량 + 자격증까지, Java로 PCCP 자격증 준비하기
실습 승인 부탁드립니다
5일 기다리는 건 너무 시간이 길어요 ㅜㅜ
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
ArrayEx6 문제 질문입니다
System.out.println(count+"개의 정수를 입력하세요. "); for (int i = 0; i < numbers.length; i++) { numbers[i] = input.nextInt(); if (numbers[i] > max) { max = numbers[i]; } if (min > numbers[i]) { min = numbers[i]; } } 이렇게 for문 안에서 max와 min 값을 계속 비교를 해도 상관없을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
트랜잭션 내에서 엔티티를 저장하는 경우. (+ Unique 제약 조건)
1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요! 현재 JPA 강의를 수강하고, 프로젝트를 진행중인데 의문점이 들어서 질문 드립니다. 상황은 다음과 같습니다!public UserService { @Transactional public void loginExample(String phoneNumber) { // 저장 Member member = memberRepository.save(Member.from(phoneNumber)); // JWT Logic. // // return; } }코드가 위와 같을때, Member Entity의 id 생성 전략이 IDENTITY 인 경우, save 호출 시점에 DB에 조회를 발생시켜 아이디를 가져오는 것으로 이해하였습니다. 만약 동일한 핸드폰번호로 동시에 요청이 들어오게 된다면,(핸드폰 번호는 Unique 제약 조건을 갖고 있습니다.)특정 트랜잭션 A에서 save 까지만 성공한 후, 컨텍스트 스위칭이 발생하여 트랜잭션 B에서 save 함수를 새로 호출하게 되는 시점에 트랜잭션 A가 아직 Commit 되지 않았는데 어떻게 충돌을 감지할 수 있는지 궁금합니다! * save 이후에 예외를 반환해도 Rollback이 되지 않고, 그대로 Row가 남아있는걸로 보아선, JPARepository.save 메서드는 부모 트랜잭션과 별개의 트랜잭션으로 동작하는 것일까요? 따라서, ID의 GenerationType 이 AUTO(IDENTITY)인 경우에 save 메서드는 부모 트랜잭션에 종속되지 않은 독립된 트랜잭션인 것인지가 궁금합니다..!
-
해결됨실전! 스프링 데이터 JPA
하이버네이트 프록시객체 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 영한 님 강의를 들으며 공부하던 중 findAll 메서드를 통해 가져온 List<Member> members의 각 Member들이 team 필드에 프록시 객체를 들고 있다고 말씀하셨는데, 해당 프록시 객체의 값을 디버깅해 본 결과 그 안에 이미 값이 존재 했습니다. console을 확인해보니 아직 db에 쿼리를 날리기 전인데(쿼리를 날리기 전인지 p6spy에 들어오기 전인지는 확인하지 못한 점 죄송합니다.) members의 각 Member들의 team필드에 프록시 객체가 존재하지만 그 안에 이미 team의 값이 들어있는데 em.clear()를 통해 영속성콘텍스트마저 비워줬는데 어떻게 이미 알고 있는 건가요?
-
해결됨김영한의 실전 자바 - 기본편
상속 관계에서 사용하는 this
package extends1.ex; class ClassA { String value = "A"; } class ClassB extends ClassA { String value = "B"; void printValue() { System.out.println(this.value); // this는 new ClassC()에 의해 생성된 참조로 접근하니 C가 나와야하는거아닌가? } } class ClassC extends ClassB { String value = "C"; } public class Main { public static void main(String[] args) { ClassC obj = new ClassC(); obj.printValue(); // B System.out.println(obj.value); // C } } this는 인스턴스 자기자신에 대한 참조입니다. 상속 관계에 있고 new ClassC()로 생성하였으니 this는 ClassC에 대한 참조라고 생각했습니다. main()의 obj.printValue()는 ClassC 부터 탐색하여 ClassB에서 발견되었습니다. 해당 메서드 안에서 this.value가 있는데 이 때의 this는 ClassC에 대한 참조로 접근해야하는거아닌가요? ClassB에 있는 value로 접근하는 이유가 궁금합니다.
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
NamedLock 테스트 실패
안녕하세요 상용님 좋은 강의 너무 잘 듣고 있습니다.namedlock부분에서 테스트 코드를 돌리는데 connectiontimeout 이후 테스트가 실패하여 질문 드리려 합니다.문제상황maximum-pool-size를 40으로 설정 후 테스트를 돌리면 다음과 같은 에러가 터지면서 테스트가 실패합니다. 사진에서와 같이 40개 스레드가 락획득을 시도한 후, 30초 후 락획득 시도조차 하지못한 60개의 스레드에서 타임아웃이 납니다.이후 락 획득을 기다리던 스레드하나가 타임아웃이 나고 나머지 스레드들이 39번의 재고 감소 로직을 실행합니다.추측제가 추측한 것은 다음과 같습니다.1. 현재 transactional propagation requiresnew로 되어있기에 하나의 재고 감소 로직 당 2개의 connection을 필요로한다.2. 처음 40개의 스레드가 순차적으로 lock획득을 시도하며 40개의 스레드를 점유한다.3. requires new로 새로운 트랜잭션을 시작하기 위해 새 connection이 필요하지만, 여유분이 없어 기다린다.(이때 데드락 상황)4. 30초 대기후 timeout이 나서 커넥션들이 순차적으로 반환된다.5. 이때 락을 획득 시도한 스레드(커넥션 점유중)가 반환되면6. 나머지 39개의 락획득 시도하던 스레드들이 실행된다.그래서 실제로 maximum pool size를 101개로 올리니 잘 실행되었습니다.그런데 선생님은 40개로도 실행이 되어서.. 의문이 남습니다.질문저의 추측이 맞을까요..? 틀리다면 어디가 틀린걸까요.왜 선생님은 40으로만으로도 된것인가요?이런 이유에서 강의 중에 datasource를 분리하라 하신걸까요?혹시 몰라 코드 첨부합니다.!
-
미해결김영한의 실전 자바 - 중급 2편
add 문의 드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]LinkedList<Integer> bucket = buckets[hashIndex];으로 하셨는데 bukets[hashIndex].add(value); 로 하지 않은 이유가 있을까요? 참조값은 똑같은데 변수 선언을 한 이유가 궁금합니다
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
화면이 안보입니다. 검은화면만 보여요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
댓글 테스트 작성 시 에러 발생
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요. 강의를 따라가던 도중 테스트 코드에서 에러가 발생해 질문 드립니다.섹션 3. 댓글 최대 2depth - CUD API 구현 강의를 들으며void deleteShouldMarkDeletedIfHashChildren() 테스트에서 에러가 발생했습니다.에러 내용은 PotentialStubbingProblem 에 관련된 내용으로 org.mockito.exceptions.misusing.PotentialStubbingProblem: Strict stubbing argument mismatch. Please check: - this invocation of 'countBy' method: commentRepository.countBy(1L, 0L, 2L); -> at shoon.board.comment.service.CommentService.hasChildren(CommentService.java:70) - has following stubbing(s) with different arguments: 1. commentRepository.countBy(1L, 2L, 2L); 위와 같이 에러가 발생했습니다.이 내용을 토대로 살펴보았을 때, 강의에서 제공된 코드가 아래와 같은데 @Test @DisplayName("삭제할 댓글이 자식 있으면, 삭제 표시만 한다.") void deleteShouldMarkDeletedIfHasChildren() { // given Long articleId = 1L; Long commentId = 2L; Comment comment = createComment(articleId, commentId); given(commentRepository.findById(commentId)) .willReturn(Optional.of(comment)); given(commentRepository.countBy(articleId, commentId, 2L)).willReturn(2L); // //when commentService.delete(commentId); // // //then verify(comment).delete(); }이때 comment는 mock 객체로 articleId와 commentId만 가지고 있는 상황이며 getArticleId와 getCommentId만 mocking이 되어있는데, 실제 countBy 메서드가 서비스 객체에서 private boolean hasChildren(Comment comment) { return commentRepository.countBy(comment.getArticleId(), comment.getParentCommentId(), 2L) == 2; }위와 같이 호출이 되는데, 이때 getParentCommentId()의 값이 존재하지 않는데 테스트가 정상적으로 작동할 수 있나요? 테스트 코드에서는 countyBy(articleId(1), commentId(2), 2)로 고정해두었는데, 실제 호출은 이와 달라지기 때문에 에러가 발생한다고 생각이 들었는데 맞을까요? 강사님 코드에서는 정상 작동하고 제 코드는 작동이 에러가 나서 이유를 정확히 모르겠네요 ㅜㅜ혹시 제 코드가 필요하실 수도 있을까봐 구글 드라이브 링크로 제 코드 파일도 남기도록 하겠습니다.https://drive.google.com/file/d/1tqV1PkvwpnaRqI9msxEj4X_t7iqg_CFr/view?usp=drive_link
-
해결됨김영한의 실전 자바 - 기본편
static 상속
[질문 내용]강의 17:01, 메서드 오버라이딩은 인스턴스 메서드에 해당하는 내용으로 static 메서드는 해당하지 않는다고 하셨습니다. 별도로 예제를 작성해서 테스트해보았는데, 자식 클래스에서 부모 클래스의 클래스 메서드를 호출할 수 있었습니다. static 메서드 역시 상속은 되지만 오버라이딩 대상이 되지 않는다고 이해하면될까요? 감사합니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
게시글 CRUD API 구현 부분에서 gradle 관련 에러가 발생합니다.
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.mysql:mysql-connector-j' implementation project(':common:snowflake') }이렇게 설정 하고 gradle 싱크를 맞췄을때 A problem occurred evaluating project ':service:article'.> Project with path ':common:snowflake' could not be found in project ':service:article'. 이렇게 에러가 발생합니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
질문이 있습니다.
[질문 내용]여기에 질문 내용을 남겨주세요.int 형과 String 형을 더하면 int 형이 자동으로 문자형으로 변하고 합쳐진다고 하셨는데 int 형이 영구적으로 문자형으로 변하는건가요?아니면 그냥 임시로 바뀌는건가요?int num = 20; String str = "a + b = "; System.out.println(str + num); //num이 문자형으로 변환 System.out.println(num); // 변환된 후에 num은 계속 문자형인가요? 아니면 위에 초기화된 int 형인가요?
-
미해결김영한의 실전 자바 - 중급 2편
안녕하세요. 강의록 오타 제보입니다.
파일: 9. 컬렉션 프레임워크 - Map, Stack, Queue.pdf위치: 22페이지 최상단 그림 양쪽에 poll이 아닌 pool로 나와있습니다
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
개인적인 궁금증입니다
강사님께서는 실무에서 JPA를 잘 사용하지 않으신다고 하신 걸 댓글에서 봤습니다.그러면 MyBatis나 JDBC를 주로 사용하시는 건가요?아니면 JPA는 사용하시는데 쿼리 메소드 기능 대신 @Query로 직접 native query를 작성하시는 건가요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
무한 스크롤 쿼리와 페이지 번호 쿼리 질문 있습니다.
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 페이지 넘버 쿼리무한 스크롤 쿼리 안녕하세요위 두 쿼리 모두 (board_id, article_id)를 인덱스로 설정해놔서 secondary index만 접근해도 될 것 같은데 페이지 넘버 쿼리에서 clustered index도 접근하는 것은 offset의 특성(?) 때문일까요? 무한 스크롤 쿼리에서는 secondary index의 정보(board_id, article_id)만으로 기준점을 찾아내고, limit 개수만큼 clustered index에 접근하는 것 같아서페이지 넘버 쿼리에서도 secondary index의 정보(board_id, article_id)만으로도 offset의 위치를 찾을 수 있을 것 같은데 왜 clustered index까지 접근하는 걸까요??
-
미해결자바 코딩테스트 - it 대기업 유제
현관문 출입순서
안녕하세요 강사님현관문 출입순서를 풀어보고 강사님 코드를 보면서 한 if문 조건이 불필요하다고 생각해서 질문드립니다. for(int t = 0, i = 0, cnt = 0; ; t++){ //아래 조건은 아직 현관문을 다 사용하지 않았다는 조건이다. if(enter.isEmpty() && exit.isEmpty() && i < n) { if(t < arrival[i]){이 부분에서if(t < arrival[i]) 는 필요 없는 것 같아서요혹시 이게 없다면 어떤 테스트 케이스에서 막히는지 알 수 있을까요?코드 자체가 바로 아래에서이미 시간을 건너뛰는 메커니즘 t = arrival[i] 을 갖추고 있어서 굳이 필요 없다고 느껴서요 알려주시면 감사하겠습니다 강의 잘 듣고 있습니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
localhost/hello 404에러
View 환경설정 부분에서localhost:8080/hello 부분이 접속이 안됩니다.작성코드 결과화면