안녕하세요 강의를 재밌게 수강하던 도중 궁금증이 생기어 질문 드립니다. 질문 select 의 row 매개변수의 순서와 FilmWithActor의 생성자 매개변수의 순서가 각 테이블 타입에 매칭되지 않을 경우 mapping이 정상적으로 이뤄지지 않는 현상이 있어 별도의 해결 방법이나 대안이 있는지 여쭙고 싶습니다. 정상 케이스(Film - FilmActor - Actor) dslContext.select( DSL.row(FILM.fields()), DSL.row(FILM_ACTOR.fields()), DSL.row(ACTOR.fields()) ).from(FILM) .join(FILM_ACTOR) .on(FILM.FILM_ID.eq(FILM_ACTOR.FILM_ID)) .join(ACTOR) .on(FILM_ACTOR.ACTOR_ID.eq(ACTOR.ACTOR_ID)) .offset((page - 1) * pageSize) .limit(pageSize) .fetchInto(FilmWithActor.class); public class FilmWithActor { private final Film film; private final FilmActor filmActor; private final Actor actor; public FilmWithActor(Film film, FilmActor filmActor, Actor actor) { this.film = film; this.filmActor = filmActor; this.actor = actor; } // ... 문제 케이스(Film - Actor - FilmActor) dslContext.select( DSL.row(FILM.fields()), DSL.row(FILM_ACTOR.fields()), DSL.row(ACTOR.fields()) ).from(FILM) .join(FILM_ACTOR) .on(FILM.FILM_ID.eq(FILM_ACTOR.FILM_ID)) .join(ACTOR) .on(FILM_ACTOR.ACTOR_ID.eq(ACTOR.ACTOR_ID)) .offset((page - 1) * pageSize) .limit(pageSize) .fetchInto(FilmWithActor.class); public class FilmWithActor { private final Film film; private final FilmActor filmActor; private final Actor actor; public FilmWithActor(Film film, Actor actor, FilmActor filmActor) { this.film = film; this.filmActor = filmActor; this.actor = actor; } // ...
release(m)에서 마지막에 lock = 0 을 해주어야 acquired(m)에서 해당 lock을 사용할 수 있는거 아닌가요..? 또한 a스레드에 의해 락이 획득된 상태에서, block() 함수를 통해 대기상태로 변하고 > 이후 release(m)를 통해 실행대기 상태로 변한 스레드들은 ( 목적이 critical section의 실행 ) do - while 구문을 통해 critical section을 반복적으로 실행할 수 있도록 되는 건가요?? 실행 대기 상태로 돌아왔을 때 어떻게 다시 락 획득 프로세스를 다시 진행할 수 있는 건지 알고 싶습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 문제와 풀이2 번째 ShoppingCart 클래스를 만들면서 어떻게 해야 이 습관이 고쳐질까? 라는 생각에 질문을 드립니다. 영한님의 ShoppingCart 클래스, displayItems()메서드를 보면, 전체가격합을 구할때 따로 메서드를 만들어서(calculateTotalPrice) 하시는 것을 볼수가 있었습니다. 근데 저가 코드를 하는 것을 보면 displayItems()메서드 안에서 계속 합을 구하더라고요. public void displayItems() { int itemsTotal = 0; for (Item item : items) { System.out.println("상뭄명: " + item.getName() + ", 합계: " + item.getTotalPrice()); itemsTotal += item.getTotalPrice(); } System.out.println("전체 가격 합: " + itemsTotal); } 이런식으로요. 이것을 고치는 방법이 있을까요? 답변 부탁 드립니다.
incrementAndGet() 메서드에서, 스레드 두개가 들어가고 동시에 실행 됐을때 마지막 스레드가 다시 compareAndSet(getValue, getValue + 1) 이 성공적으로 돌았을때 getValue의 값이 이미 2가 되는것으로 예상되는데 결과는 1이 반환이 되고, return getValue + 1;로 인해 결과값이 2가 어떻게 나오는 지 궁금합니다. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오)y 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)y 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)y [질문 내용] 여기에 질문 내용을 남겨주세요. H2를 삭제 후 재설치도 해봤지만 여전히 테이블이 생기지않습니다...
JPQL 로 한번에 가져오는 방식으로 변경해가면서 실제 db 로 날아가는 쿼리 횟수는 적어지지만 jpql 에 점점 더 많이 의존하게 되는것 같아요. 전 jpa 가 sql 쿼리 사용의 의존을 줄이고 애플리케이션 단에서 객체지향 적으로 코드를 짤 수 있다는 이유 때문에 사용하는 것으로 알고있는데요.. 물론 orm 만으로 모든 비즈니스 로직을 해결하기엔 힘든 경우도 있다는 것은 잘 이해하고 있지만, JPQL 을 많이 사용할 수록 mybatis 를 사용하는 것과 다를게 없다는 느낌이 드는데.. 현업에서는 n + 1 문제나 쿼리 횟수 최적화를 위해서 jpql 로 많이 작성하는지 궁금해요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 컬렉션 프레임 워크 - LinkedList MyLinkedListV1 에서 이해 못하는 소스가 있어서 질문 드려요. 아래 코드에서 x.item을 oldValue에 대입하고 반환하는지 궁금합니다. 그냥 x.item = element만 사용해도 되는거 아닌지? public Object set(int index, Object element) { Node x = getNode(index); Object oldValue = x.item; x.item = element; return oldValue; }
try catch finally에서 finally에서 발생한 예외로 try에서 발생한 핵심예외가 없어지고 finally에서 발생한 부가예외로 변경되어서 예외가 리턴되는데요, try with resources 와 같이 핵심예외를 반환하면서 부가예외를 반환하는 방법은 따로 없는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] 자바 중급까지 듣고 스프링 입문 강의를 한번 들어봤는데 자바 중급 강의 까지는 이해도 잘 되고 좋았습니다. 그런데 이번 스프링 입문 강의 들으니 이해가 쉽지가 않네요 스프링 기본 강의로 넘어가면 자바 강의했던거 처럼 차근차근 가르쳐 주시는건가요? 아니면 여기서 이해 안되는 것들 다 알고 넘어가야 하나요?
public void updateUserName(Long userId, String newName) { User user = userRepository.findById(userId) .orElseThrow(() -> new CustomException("User not found with id: " + userId)); user.setName(newName); userRepository.save(user); } 여기서 findById로 인해 영속성 컨텍스트에 user가 올라가있어서 setName만 해줘도 더티체킹으로 인해서 저장되는 걸로 알고있습니다. 그러면 userRepository.save (user);를 따로 해줘야하나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] 여기에 질문 내용을 윈도우에서 실행했는데 이런식으로 나옵니다. ㅠㅠ 왜이런건가요?
Optioanl<Member> findById(Long id)와 @Query("select m from Member m where m.id = :id) Optional<Member> findByid(@Param("id") Long id) 가장 위의 코드는 spring data jpa를 이용해서 작성했기 때문에 em.flush()가 호출될 때 바로 일어나지않고 아래의 코드는 jpql로 작성했기 때문에 로직 호출 시에 바로 em.flush()가 발생하는 거 맞나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 말 그대로 입니다. 영한님은 하루에 자바 강의를 찍을 때 평균적으로 하루에 시간을 얼마나 투자하시나요? ('어레이 리스트 에서 링크드리스트로 변환 할때 이런 것은 얼마나 생각을 해야지 나오지?(11:30~40)'라는 생각이 들어서 질문을 합니다.)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] fetchOne()은 결과 값이 없을 경우 null을 반환 하는데 왜 Optional<Member>로 반환 하지 않나요? fetchOne()은 member가 없을 경우 null 반환 합니다. 결과 값을 Optional.ofnullable()로 감싸서 반환 후 서비스 계층에서 null 이면 안될 경우 RutTimeException을 상속한 커스텀 Exception을 발생 시키고 advice에서 처리 하는게 맞나요?
안녕하세요 강의 잘 보고 있습니다. 파사드 패턴에 대해 질문이 있습니다. 얄코님이 올려주신 예시에선 다음과 같이 두 상황이 나온다고 이해했습니다. 다양한 서브 시스템을 파사드 클래스로 조합해 하나의 새로운 로직을 만듦. 여러 서브 시스템을 생성시키고 세부 로직을 파사드 클래스에 위임. 1번의 경우는 일종의 추상화로 이해하였으며, 2번의 경우 서브 시스템에 대한 의존성 주입을 파사드 클래스에 위임 및 세부적인 로직을 캡슐화하는데 의의를 두었다고 이해했습니다. 만약 의존성 주입은 자동으로 이루어지는 3-layer 아키텍쳐에서 파사드 패턴을 도입할 경우 이미 service 레이어에서 내부 로직에 대해 캡슐화가 되었으므로 다양한 서브시스템을 파사드 클래스로 조합하는 것(ex. 1번)에만 집중하면 될까요?
이전에 공부할 때 엔티티매니저에서 트랜잭션을 가져야 로직이 수행된다는 것을 알고 있었습니다. 그런데 이전에 JPA활용2편에 @Transactional을 따로 붙혀주지 않았는데 로직이 실행된걸로 기억하는데 @Service나 @Repository에 의해서 자동으로 트랜잭션이 걸리는 건가요?