학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 영한님 query dsl 환경설정을 마쳤습니다.. clean 과 build 수행가능하고.. 어플리케이션 run을해보면 Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] Database driver: undefined/unknown Database version: 2.3.232 Autocommit mode: undefined/unknown Isolation level: undefined/unknown Minimum pool size: undefined/unknown Maximum pool size: undefined/unknown 로그가나오는데 나머지 로그를 봐서는 문제없어 보이는데 이게 뭔지 궁금합니다 구글링해보니 히카리 설정을 안줬다고 해서 hikari: maximum-pool-size: 10 connection-timeout: 5000 connection-init-sql: SELECT 1 validation-timeout: 2000 minimum-idle: 10 idle-timeout: 600000 max-lifetime: 1800000 이렇게 설정을 줘봤는데 똑같은 로그가 나와서... 궁금해서 질문드립니다.. 이거환경설정 정말 ㅋㅋㅋ 손많이가네용..
[질문 내용] 여기에 질문 내용을 남겨주세요. 처음에 클래스가 로드될 때, 코드를 훑어보며 문자열 리터럴을 사용하면, 미리 문자열 풀에 문자열 리터럴에 대한 인스턴스를 생성하고, 중복이 발견되면 문자열 풀을 살펴보며 중복이 있으니 문자열 풀에 인스터를 생성하지 않는다. 그리고 나중에 로드된 후, 실행될 때는 String 클래스 변수에 문자열 풀에 해당하는 참조값을 주기때문에, 여러 String클래스 변수가 같은 리터럴을 가진다면, 같은 참조값을 가져 ==연산자에서 비교하면 true가 나온다. 맞나요? 클래스가 로드되는 시점에 코드를 훑어보며, 문자열 풀에 "12345"라는 인스턴스가 있다고 가정하고, 나중에 코드가 실행될때 중간에 String str = "123" +" 45";라는 코드가 있으면, 새로운 객체를 만들어 str에 참조값을 넣어주는건가요? 아니면 문자열 풀에 같은 문자열이 있으니까 문자열 풀에 해당하는 인스턴스의 참조값을 주나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 다음으로에서 언급하신 데이터베이스는 업데이트 되어 있나요?
안녕하세요, 저는 "기초 탄탄! 독하게 시작하는 Java - Part 1 : 절차적 프로그래밍" 강의를 수강중인 학생입니다. 제목과 동일하게 "[필수실습 12-3] *출력 놀이 응용 질문" 강의에서 여쭤보고 싶은 내용이 있어서 질문 드립니다. 질문 내용 → 제가 해결을 위해 시도한 절차 역시, 3중 for문처럼 지양해야 할 1순위에 해당하는지 여쭤보고 싶습니다. 내용은, 작업 순서 - 설명 - 코드 순으로 배치했습니다. <작업 순서> // 1번 작업 줄넘김 // 2번 작업 공백 찍기 // 3번 작업 별 찍기 // 조건 == 공백 + 별 == 줄의 개수 for문만 사용해서 풀어야 한다고 생각하고 고민한 결과, 1번 for문 속에서 공백을 출력하는, 1번 for문(별을 찍기 전, 공백을 출력하는 로직) / 별을 출력하는, 2번 for문(기존 삼각형 별 찍기 로직)의 구성으로 해결했습니다. 이 또한, 지양해야 되는 코드인지 궁금합니다. (이 코드는 3중 for문과 유사한 코드인가요) <코드> (for문 부분만 넣었습니다.) // 작업 1번 for (int i = 0; i < 5; i++) { // 작업 2번 + [1번 for문] (공백을 4번 ~ 0번까지 출력하기 위한 for문) for (int k = 4; i < k; k--) { System.out.print("\t"); } // 작업 3번 + [2번 for문] (*을 1번 ~ 5번까지 출력하기 위한 for문) for (int j = 0; j < i + 1; j++) { System.out.print("*\t"); } System.out.print("\n"); } 이상입니다 긴 글 읽어주셔서 감사합니다.
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
31강에서 BookService 클래스에 강의와 똑같이 코드를 작성하였는데 실행하면 UserServiceV2 오류가 발생합니다. UserRepository의 Optional<User> 형식을 받지 못해서 생기는 오류인 것 같은데, 어떻게 수정해야 하나요? error: incompatible types: Optional<User> cannot be converted to User User user = userRepository.findByName(name); ^ UserServiceV2.java @Transactional public void deleteUser(String name) { //SELECT * FROM user WHERE name = ? User user = userRepository.findByName(name); if (user == null) { throw new IllegalArgumentException(); } userRepository.delete(user); } BookService.java @Transactional public void loanBook(BookLoanRequest request){ //1. 책 정보 가져오기 Book book = bookRepository.findByName(request.getBookName()).orElseThrow(IllegalArgumentException::new); //2. 대출 기록 정보 확인하여 대출 중인지 확인 //3. 대출 중이면 예외 발생 if(userLoanHistoryRepository.existsByBookNameAndIsReturn(book.getName(), false)){ throw new IllegalArgumentException("진작 대출되어 있는 책입니다."); } //4. 유저 정보 가져오기 User user = userRepository.findByName(request.getUserName()) .orElseThrow(IllegalArgumentException::new); //5. 유저 정보와 책 정보 기반 UserLoanHistory 저장 userLoanHistoryRepository.save(new UserLoanHistory(user.getId(), book.getName())); } UserRepository.java package com.group.libraryapp.domain.user; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface UserRepository extends JpaRepository<User, Long> { Optional<User> findByName(String name); } 우선 오류를 없애기 위해 UserRepository에서 Optional을 빼고 null처리를 하도록 수정하였는데, 실행 시 오류는 없지만 웹UI로 테스트하면 서버 내부 오류가 발생했다고 뜹니다. 어떻게 수정해야 제대로 처리되는지 모르겠습니다. 추가로 이렇게 수정하였을 때, 이후 코드를 작성할 때 Optional 형식이 아니어서 발생하는 다른 오류가 없는지도 궁금합니다. UserRepository.java package com.group.libraryapp.domain.user; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface UserRepository extends JpaRepository<User, Long> { User findByName(String name); } BookService.java @Transactional public void loanBook(BookLoanRequest request){ //1. 책 정보 가져오기 Book book = bookRepository.findByName(request.getBookName()).orElseThrow(IllegalArgumentException::new); //2. 대출 기록 정보 확인하여 대출 중인지 확인 //3. 대출 중이면 예외 발생 if(userLoanHistoryRepository.existsByBookNameAndIsReturn(book.getName(), false)){ throw new IllegalArgumentException("진작 대출되어 있는 책입니다."); } //4. 유저 정보 가져오기 User user = userRepository.findByName(request.getUserName()); if(user == null){ throw new IllegalArgumentException(); } //5. 유저 정보와 책 정보 기반 UserLoanHistory 저장 userLoanHistoryRepository.save(new UserLoanHistory(user.getId(), book.getName())); } UserServiceV2.java @Transactional public void deleteUser(String name) { //SELECT * FROM user WHERE name = ? User user = userRepository.findByName(name); if (user == null) { throw new IllegalArgumentException(); } userRepository.delete(user); }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) - 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) - 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 아니오 [질문 내용] 여기에 질문 내용을 남겨주세요. 제가 친형걸로 이걸 들으려고 하는데 이 로드맵 전반적인 과정은 스프링인지 스프링부트인지 알고 싶어서 이렇게 질문드립니다.
안녕하세요, st link를 교환받은 학생입니다. st link와 연결하여 위의 프로그램을 통해 업그레이드 진행은 성공적으로 되었습니다. 이후 st link와 보드를 연결하고 ide내부에서 업그레이드를 진행(HAL_INIT();디버깅 오류가 나서 업데이트 창이 뜸)하였으나 위와 같은 오류가 떴습니다. 보드에도 따로 usb케이블을 연결하여 전원을 공급하여 업그레이드를 진행하였으나 2번의 오류가 다시 발생합니다. ** st link와 보드를 연결시 보드에 불이 들어오지 않습니다. 이후 보드에 휴대폰 충전 어댑터를 이용해 전원을 공급하면 일시적으로 빨간불이 들어오나 이내 곧 다시 꺼집니다. 더 진행해봐야 할 사항이 있을까요? 해결하였습니다. 고속 충전용 휴대폰 어댑터를 사용해서 보드에 전원이 바로 꺼지는 것인가 싶습니다. 낮은 출력의 어댑터를 이용하여 보드에 전원 공급시 빨간불이 지속적으로 들어와있는 상태였고 3.IDE에서 기존 설정해둔 폴더와 파일을 삭제 후 다시 처음부터 프로젝트를 만들었습니다. 더불어 경로상에 한글이 없도록 지정해두었습니다. 위 3가지를 모두 적용하였더니 정상적으로 HAL_Init()에서 걸렸습니다. 이것이... 임베디드의 길인가요,, 추가질문 - 보드에 별도 전원을 연결하지 않을시 보드에 LED가 들어오지 않는다면 실습하는 동안은 계속 보조 전원을 통해 전원을 공급해야하나요?
너무 잦은 질문 죄송합니다. 몇번을 돌려봐도 리턴이 헷갈리네요 재귀함수를 통해 int res = 15 를 구한다음 메인함수에 int sum=nSum(n)에 들어 가는거 같은데 res가 갑자기 nSum에 리턴이 되는걸 어떻게 이해해야 될지 모르겠습니다. 첫번째 호출->자기자신 호출까지는 이해했는데 결과값이 리턴하는 순서? 공식?이 잘 정립이 안되네요 ㅠㅠ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 자주 묻는 질문에 혹시 답이 있을 수 있어요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 현재 Ds18b20_Init(); 을 할 경우에 제대로 값을 불러오지 못하고 있습니다. 혹시나 제가 다른 옵션을 건드렸을까 새로 프로젝트를 생성해서 확인해도 값을 불러오지를 못하네요 오늘 점심 쯤에 정상 작동하는 것을 확인했었는데, 갑자기 작동이 안되어 당혹스럽습니다... 온도계 모듈만 따로 구할 수 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] flush()를 할 때 영속성 컨텍스트 스냅샷이 갱신되는 지 확인받고 싶습니다. 다른 질문에서 해당 내용을 찾지 못했고, Baeldung과 같은 사이트, 또는 다른 블로그 글들에서 이와 같은 내용을 확인할 수 있는 곳이 없어 ChatGPT를 통해 확인했지만, 여전히 확신이 서는 곳에서 답변을 받은 것이 아니기에 질문 남겼습니다. 다음과 같은 코드를 실행할 때, EntityTransaction tx = em.getTransaction(); tx.begin(); // id는 1L, name은 AAA인 Member 엔티티 Member memberA = new Member(1L, "AAA"); em.persist(memberA); em.flush(); memberA.setName("NOTA"); tx.commit(); flush를 직접 호출하는 시점은 영속성 컨텍스트에는 memberA에 대한 엔티티는 있지만 스냅샷은 없는 상태로, flush()가 수행되면서 데이터베이스와의 동기화를 위해 INSERT 쿼리문이 날라갑니다. 제가 생각하기에는 이 때(첫번째 flush()), memberA에 대한 스냅샷이 생성되어야 memberA.setName()을 수행하면서 변경감지를 통해 비교할 대상인 스냅샷이 존재할 수 있다고 생각합니다. 그렇기에 commit()을 호출할 때, flush()가 자동으로 호출되면서 비교할 스냅샷을 통해 UPDATE 쿼리문을 생성할 수 있다고 생각했습니다. 이를 통해 제가 확인하고 싶은 것은 다음 2가지인데, 맞는지 확인 부탁드립니다. flush() 호출 시 영속성 컨텍스트에서 스냅샷이 갱신된다. persist() 시에는 스냅샷이 생성되지 않는다. 관련 자료를 확인하고 싶은데 혹시 이를 확인할 수 있는 자료가 있다면 알려주시면 감사하겠습니다. 강의 잘 보고 있습니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 인텔리제이로 화살표를 눌러서 스프링 애플리케이션 서버를 실행한다는 것은, 자바 JVM 내부에서 스프링 서버가 뜨는거라고 생각하면 되려나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 순수 JDBC 강의까지 듣고 질문이 생겨 올립니다~ DB커넥션을 얻어 애플리케이션이 DB 서버에 "소켓"으로 연결된다고 하는데, 이 의미가 "네트워크 상에서 돌아가는 두 개의 프로그램 간 양방향 통신" 을 할 수 있게 소켓이라는 통(?)이 생겨서 연결된다고 보면 되려나요? 그리고, application.properties에 url에 jdbc:h2:tcp://localhost/~/test 이렇게 적으면 소켓 연결이라고 하셨는데 이 url에 대한 더 자세한 이해를 하고 싶은데 이 url이 정확히 어떤 의미일까요? tcp는 OSI 7계층에서 어렴풋이 들어온 용어 같습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. [12:42]에서 " main 스레드는 TIMED_WATING 상태에서 RUNNABLE 상태로.. ." 설명과 함께 마우스 포인터로 가리키신 pdf 에서는 work 스레드 라고 표기되어 있습니다. 설명에 혼란이 있어서 제가 인터럽트 호출 부분을 다음과 같이 이해한 게 맞는지 확인 부탁드립니다..! 0. work 스레드 동작 main() 스레드 안에서 thread.start(); 호출(work 스레드 호출)한다. 1. main() 스레드 동작 Thread.sleep(4000)을 호출하여 TIMED_WAITING 상태로 들어간다. (4초 대기) 2. thread.interrupt() 호출 4초 뒤 main() 스레드가 깨어나고(RUNNABLE 상태), 바로 아래 코드인 thread.interrupt() 호출한다. -> 이때 work 스레드는 Thread.sleep(3000)으로 인해 TIMED_WAITING 상태였는데, main() 스레드의 인터럽트 신호로 인해 InterruptException이 발생하여 RUNNABLE 상태로 즉시 변경된다. 3. InterruptException 처리 work 스레드는 catch 블록에서 InterruptException 예외 처리 수행한다. 인터럽트 호출했다고 InterruptException 예외가 반드시 나는 것은 아니다. 설명에서 InterruptException 예외 발생한 이유는 main() 스레드에서 4초 대기 후 work() 스레드 인터럽트 호출할 때, work 스레드 상태가 TIMED_WAITING 였기 때문이다. work 스레드는 인터럽트 호출로 인해 TIMED_WAITING -> RUNNABLE 상태로 즉시 변경되고, work 스레드의 인터럽트 상태는 초기화 되어 false를 반환한 것이다. 이렇게 이해하면 될까요..?!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. JPA활용2편과 JPA 데이터 강의를 보면 DTO를 직접 반환하는 부분에서 질문드립니다. 강의 수강이전에 repository에서 가져온 Entity를 직접조회하여 가져온 값을 service계층에서 lombok의 builder어노테이션을 이용하여 DTO형태로 직접조립하여 클라이언트에게 반환하는 API를 주로 구성했습니다. 근데 실무에서는 주로 위와 같은 방법이 아니라 repository계층에서 DTO를 직접 불러와서 조립하는 방식을 선호되나요?
[질문 내용] 여기에 질문 내용을 남겨주세요. 7:36에서 obj1, obj2를 출력하는데, obj1, obj2의 객체 정보가 출력이 되었는데, 이유가 메인메서드 처음부분에, obj1과 obj2의 객체가 만들어 지는데, 이때 obj1의 객체 안에는(obj1, Object)클래스 정보가들어있고 obj2객체 안에는(obj2, Object)클래스정보가 들어있는데 System.out.println()메서드 안에 객체를 넣으면 내부에서 자동적으로 객체명.toString()메서드가 실행이 되는데, 자식클래스(obj1, obj2)모두가 toString()을 오버라이딩 하지 않아, Object의 toString()이 호출이 되는데, 호출하는 변수가 각각 obj1, obj2여서 호출하는 변수 타입의 객체 정보가 출력이 된다. 맞나요? 잠시 헷갈렸는데 맞을까여?