3장의 초반 내용중에 read() 의 반환값이 byte가 아닌 int 인 이유를 설명해주셨는데요. (EOF 을 알기위해서...) 그렇다면 write(byte b) 가 아니라 write(int b) 인 이유는 뭘까요? 어차피 4byte 중에 하위 1byte만 write될 건데 write(int b) 로 한 이유가 궁금하네요. write(-1) 이렇게 한다고 해서 read()에서 -1로 읽혀서 EOF 라고 판단되지도 않을거 같아요.
프론트랑 협업 하실 때, 서비스 로직을 먼저 만드는게 아닌 반환값을 먼저 준다고 하셨는데(?) 예를 들어 어떻게 주시는지 궁금합니다. 하드코딩으로 그냥 데이터를 임의로 입력해주시는건지 예시를 보여주시면 감사하겠습니다 ! 컨트롤러, 서비스, 레포지토리에서 어떤식으로 진행되는지 궁금합니다.
안녕하세요. 앞서 db1강의에서 트랜잭션 관련 내용을 바탕으로 커넥션 관련해서 제가 이해하는 바가 맞는지 질문드립니다..! 트랜잭션을 시작하고 JdbcTemplate.update() 등등이 호출되면, 먼저 데이터베이스에 접근할 수 있는 커넥션을 얻는다. 이때 내부적으로 DataSourceUtils.getConnection()을 호출해서 트랜잭션 동기화 매니저에서 관리하는 커넥션을 가져오거나, 새로운 커넥션을 생성(등록된 dataSource로 부터 커넥션을 생성)한다. 그리고 나서 SQL 쿼리를 실행한다. 이때 커넥션을 통해 데이터베이스와 통신한다. 즉, JdbcTemplate을 통해 update 작업을 수행할 때, 커넥션을 사용하여 데이터베이스에 접근하여 SQL 쿼리를 실행하고, 그 결과로 데이터베이스의 내용이 업데이트된다. 트랜잭션을 시작하지않고 JdbcTemplate.update() 등등이 호출되면, 이때도 먼저 데이터베이스에 접근할 수 있는 커넥션을 얻는다. 이때 내부적으로 DataSourceUtils.getConnection()을 호출해서 트랜잭션 동기화 매니저에서 관리하는 커넥션을 가져오거나, 새로운 커넥션을 생성(등록된 dataSource로 부터 커넥션을 생성)한다. 그리고나서 SQL쿼리를 실행한다. 이때 커넥션을 통해 데이터베이스와 통신한다. 마찬가지로, 커넥션을 사용하여 데이터베이스에 접근하여 SQL 쿼리를 실행하고, 그 결과로 데이터베이스의 내용이 업데이트된다. 트랜잭션을 사용하지 않고 JdbcTemplate.update()를 호출하면, 커넥션은 기본적으로 자동 커밋 모드로 동작하여, 쿼리가 실행된 후 즉시 데이터베이스에 반영된다. 트랜잭션이 있든 없든 JdbcTemplate은 항상 커넥션을 사용하여 데이터베이스에 접근하고, 쿼리를 실행하여 그 결과로 데이터베이스의 내용을 수정하거나 조회하는 작업을 수행한다. 트랜잭션 및 커넥션 관련해서 이렇게 이해하면서 정리해보았는데, 이렇게 이해하면 될까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 헷갈리는 부분이 있어서요. 예시에 나온 Student 클래스를 예로 들면 student1 객체를 만들었을때 student1.name = "익명" 이라고한다면 name이라는 멤버변수에 접근을 해서 "익명"이라는 값을 할당하는게 실제 Student 클래스의 name에다가 해당 값을 할당하는게 아니라 Student 클래스를 바탕으로 만들어진 메모리 x001에 있는 name 변수에다가 값을 할당한다는거 같은데 제가 이해한게 맞나요?
FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring root project 'demo'. > Could not resolve all artifacts for configuration ':classpath'. > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.3.4. Required by: root project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.3.4 > Dependency requires at least JVM runtime version 17. This build uses a Java 11 JVM. * Try: > Run this build using a Java 17 or newer JVM. > 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. Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/8.10.2/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD FAILED in 2s 이런식으로 자바를 17로 올려주라고 하는데, 어떻게 수정해야 할까요?ㅠㅠ 구글에 검색해봐도 vscode 쪽에서 설정하는 방법이 자세하지 않아서요..ㅠㅠ
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 강의처럼 src 패키지에 main 클래스만 있는게 아니라 이상한 패키지가 다수 생성되는데 어떻게 하나요 ?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 해당 강의에서 5:35초를 보시게 되면, 원래는 fetch join이 아닌 join이지만 public List<OrderSimpleQueryDto> findOrderDtos() { return em.createQuery( "select new jpabook.jpashop.repository.OrderSimpleQueryDto(o) " + " from Order o" + " join fetch o.member m" + " join fetch o.delivery d", OrderSimpleQueryDto.class ).getResultList(); } fetch join을 하게 되면 v3메서드와 동일한 결과가 나옴과 동시에 쿼리문도 동일하게 1개가 출력된 것을 확인하였습니다. 여기서 드는 의문점은 ' fetch join은 select절에 entity가 아닌 DTO를 명시하게 되면 안된다' 즉, 'fetch join은 select절에 entity만을 명시해야 한다' 라고 질문 글을 찾아보며 알게되었습니다. 하지만 결과는 예상과 다르게 잘 작동하여 의문이 들게 되었습니다.
java 기출변형 강의 8분 업캐스팅 예외 사례문제에서 a.f() 는 스태틱에 의해 부모를 따라 가서 fp가 출력 된다는 것은 이해했으나, 아래에 있는 a.g()는 어째서 일반적인 업캐스팅의 형태로 자식인 gc를 출력을 해야하는 것인지 강의를 아무리 돌려봐도 이해가 안됩니다.
[질문 내용] Scanner scanner = new Scanner(System.in); int total = 0; while (true) { System.out.println("1 : 상품 입력, 2 : 결제, 3 : 프로그램 종료"); int option = scanner.nextInt(); scanner.nextLine(); // 이전에 입력된 개행문자 제거 switch (option) { case 1: System.out.print("상품명을 입력하세요. : "); String pName = scanner.nextLine(); System.out.print("상품의 가격을 입력하세요. : "); int pPrice = scanner.nextInt(); System.out.print("구매 수량을 입력하세요. : "); int pQuantity = scanner.nextInt(); total += pPrice * pQuantity; System.out.println("상품명 : " + pName + " 가격 : " + pPrice + "원 수량 : " + pQuantity + " 합계 : " + (pPrice * pQuantity)); break; case 2: System.out.println("총 비용 : " + total); total = 0; // // 결제 후 총 비용 초기화 break; case 3: System.out.println("프로그램을 종료합니다."); break; default: System.out.println("잘못된 접근입니다."); } } 김영한 강사님께서 마지막쯤에 switch() 로 활용해서 풀어봐도 좋다고 하셔서 해보았습니다. 그런데 switch문은 각 case마다 break; 를 넣어야지 해당 case 값에 속한 코드마다 수행을 할 수있는데 문제는 이게 while(true)로 무한반복중이라 3. 프로그램 종료 를 눌러봐도 콘솔에 계속 무한로딩이 끝나지 않고 있습니다. 어떻게 하면 좋을까요?