영한님, 안녕하세요. 또 좋은 강의로 다시 만나뵙게 되었네요. Spring, Java 로 강의를 듣다가 순수 DB 만 설명을 듣다보니 다소 적응이 되지 않는 감이 있는데요 ㅎ 카테고리의 비정형 속성을 관리하기 위해 Json 설계하는 부분을 설명해주셨는데 이런 경우, Java 에서는 보통 어떤 식으로 객체와 맵핑을 하는지요? 각 카테고리별로 도메인 객체를 분리해서 각각 연동을 하는 식인지, 아니면 단순히 Map 으로 활용하는지 궁금합니다. 저장할 때도 객체를 그대로 저장하면 되기 때문에 편리하다고 하셨는데 각 카테고리별로 별도 객체가 있고 이를 개별 저장하는 형태를 말씀하시는 것인지 질문드립니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. Future 의 cancel 기능에 대해 실험하면서 해결하기 어려운 부분을 만나 질문드립니다. 📋 실험 내용 Callable 의 call 메서드 내부에서 I/O 와 같은 블로킹 작업 진행(or Interrupt 가 되지 않는 작업) Future 의 cancel 진행 스레드 호출 대상은 CancellationException 예외 발생 후 진행 ※ 스레드 풀 의 스레드는 계속 실행 중임을 확인 💥 문제 사항 이런 방식으로 로직이 지속 실행되면 스레드 풀의 스레드는 종료되지 않으면서 고갈되어 가고 결국엔 작업이 쌓이다가 에러를 뱉어내고 오작동 하게 될 것이라 추측됩니다. ❓ 질문 내용 Q. cancel 기능은 Interrupt 를 발생해주면서 작업을 중단합니다. 만약 I/O 작업 처럼 Interrupt 가 먹히지 않는 로직에서는 어떻게 스레드의 실행을 종료하고 스레드 풀로 반납할 수 있을까요? 💻 코드 public class FutureCancelMain { private static boolean mayInterrupIfRunning = true; public static void main(String[] args) { ExecutorService es = Executors.newFixedThreadPool(1); Future<String> future = es.submit(new MyTask()); log("Future.state: " + future.state()); sleep(3000); log("future.cancel(" + mayInterrupIfRunning + ") 호출"); boolean cancelResult = future.cancel(mayInterrupIfRunning); log("cancel(" + mayInterrupIfRunning + ") result: " + cancelResult); try { log("Future result: " + future.get()); } catch (CancellationException e) { log("Future는 이미 취소되었습니다."); } catch (ExecutionException | InterruptedException e) { e.printStackTrace(); } es.close(); } static class MyTask implements Callable<String> { @Override public String call(){ boolean flag = true; // Scanner scanner = new Scanner(System.in); while(flag) { log("무한 작업 중..."); } return "Completed"; } }
시력 이슈로 Deprecated 안녕하세요. 영한님! 7장1, 2, 3page 오타 제보 합니다! 아래 쿼리를 실행해서 데이터를 생성하고, -- # 7. 통계 테이블 설계 -- ## 통계 데이터와 성능 문제 -- ### 원본 데이터 준비 DROP TABLE IF EXISTS orders; CREATE TABLE orders ( order_id BIGINT AUTO_INCREMENT PRIMARY KEY, customer_id BIGINT NOT NULL, total_amount INT NOT NULL, order_status VARCHAR(20) NOT NULL, order_date DATETIME NOT NULL ); -- 데이터 입력 (예시를 위해 소량만 입력하지만, 실제로는 수백만 건이라고 가정한다) INSERT INTO orders (customer_id, total_amount, order_status, order_date) VALUES (1, 10000, 'COMPLETED', '2026-01-01 10:00:00'), (2, 25000, 'COMPLETED', '2026-01-01 14:30:00'), (3, 15000, 'COMPLETED', '2026-01-01 18:20:00'), (4, 50000, 'COMPLETED', '2026-01-02 09:15:00'), (5, 30000, 'COMPLETED', '2026-01-02 11:00:00'), (6, 12000, 'CANCELLED', '2026-01-02 15:45:00'), (7, 45000, 'COMPLETED', '2026-01-03 10:00:00'); 아래 통계 쿼리를 실행하면, -- ### 원본 테이블 직접 집계의 유혹 SELECT DATE(order_date) as stat_date, COUNT(*) as order_count, SUM(total_amount) as total_sales FROM orders WHERE order_status = 'COMPLETED' GROUP BY DATE(order_date) ORDER BY stat_date; 아래와 같은 결과가 나온다고 적혀있는데요. 2026-01-02 데이터가 3개라서 실제로는 아래와 같은 결과가 나와야할것 같아요! 감사합니다.
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 스트림 강의를 보다가 질문 드립니다 웹 어플리케이션 기준으로 스트림은 보통 데이터를 처리하는데 쓰일 것 같은데요 많은양의 데이터라면 보통 디비단에서 최대한 필터링하고 걸러서 가져오는게 네트워크호출랴도 그렇고 이점이 많을것 같은데 그럼 스트림은 보통 언제쓰이나요? 데이터를 필터링하고 정렬하고 가공하는건 디비단에서 해서 가져오는게 더 효율이 좋다 했을 때 스트림으로 가공하는 데이터 수준은 디비단에서 다 할 수 있을 것 같아서요 같은 데이터를 가공하단 는게 필요하다고 해도 기존 sql 재사용 하고 스트림으로 재가공 하는것보다는 새로 sql문 날려서 가져오는게 더 낫지 않나요? 보통 웹 어플리케이션에서 어떤 상황에 쓰이는지 궁금합니다!
public int[] solution1(int[] weights) { int[] answer = new int[weights.length]; ArrayDeque<int[]> stack = new ArrayDeque<>(); for (int i = 0; i < weights.length; i++) { int weight = weights[i]; while (!stack.isEmpty() && stack.peek()[1] < weight) { var popped = stack.pop(); int poppedIndex = popped[0]; answer[poppedIndex] = i - poppedIndex; } stack.push(new int[] {i, weight}); } return answer; } 위와 같이 답변을 작성하였고, 강의에서 나오는 답과 변수명 정도 외에는 차이가 없어 보이는데, 시간 초과 오류가 발생합니다.
순위 함수 연습문제에서 INNER JOIN을 하신 후에 MAX(mg.year)을 사용하셔서 가장 최근의 연도를 찾으셨는데, 이미 GROUP BY와 COUNT(*) >= 5를 통해서 5년 연속인 작가를 찾았고 make_group에 year 정보가 들어가 있기 때문에 JOIN 필요없이 MAX(year)을 구할 있지 않나요.?
안녕하세요 !! 단원정리문제 질문드립니다. 179~180쪽 문제에 대한 해설을 보면, 57번 해설에서는 "NULL은 가장 큰값으로 취급하므로 ASC에서 맨 뒤에 배치"했는데, 왜 58번 해설에서는 "NULL 값은 기본적으로 ASC 정렬 시 맨 아래에,"라고 되어있습니다. 이는 문제 오류일까요 ?? 제가 궁금한 것은 SQLD 시험에서 문제를 풀때, 'NULL First나 Last가 없으면 NULL은 가장 큰 값 취급' 이라고 생각하고 풀어도 괜찮을까요 ??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 뭐가 문제일까요,,
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 봉우리 문제에서 쌤과 동일하게 작성하였는데 채점해보니 오답으로 나옵니다. 인텔리제이에서도 정답 올바르게 나오는것 확인하였는데 왜 오답일까요?? import java.util.Scanner; public class Main { int[] dx = {-1, 0, 1, 0}; int[] dy = {0, 1, 0, -1}; public int solution(int n, int[][] arr) { int answer = 0; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++){ boolean flag = true; for(int k = 0; k < 4; k++) { int nx = i + dx[k]; int ny = j + dy[k]; if(nx >= 0 && nx < n && ny >= 0 && ny < n && arr[nx][ny] > arr[i][j]) { flag = false; break; } } if(flag) answer++; } } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int[][] arr = new int[n][n]; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { arr[i][j] = kb.nextInt(); } } System.out.println(T.solution(n, arr)); } }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) MemberRepositoryTest가 실행이 안됩니다. 실행 시 Execution failed for task ':test'. > There were failing tests. See the report at: file:///C:/%EC%9D%B8%ED%94%84%EB%9F%B0_%EC%8A%A4%ED%94%84%EB%A7%81JPA_%EC%8B%A4%EC%A0%841/jpashop/build/reports/tests/test/index.html * Try: > Run with --scan to get full insights. BUILD FAILED in 2s 4 actionable tasks: 1 executed, 3 up-to-date 라는 오류가 계속 뜹니다. https://drive.google.com/file/d/1LNpdY4Fqk9nXDHT11tj0hEyGf_zKRgVr/view?usp=sharing
책 99페이지에서 만든 ProductController는 src/test/java 하위에 만들어져있는데, 이곳에 파일을 그대로 둔 채로 책 107페이지 스프링 빈 실습을 진행하면 제대로 진행이 되지 않았습니다. 혹시나 하여 test가 아닌 src/main/java 하위로 옮기고 진행하니 책의 결과와 같은 결과가 나왔습니다. 책 어디에도 ProductController의 파일 위치를 옮긴다는 말이 작성되어있지 않은데 옮기고 진행하는 것이 맞는지 궁금합니다!
같은 방식으로 작성 후 백준에 직접 제출했으나, 계속 틀렸습니다로 나옵니다.. 이유가 뭘까요? 제출한 소스 입니다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner( System.in ); int T = sc.nextInt(); for(int i=1;i<=T;i++){ int A=sc.nextInt(); int B=sc.nextInt(); int sum = A+B; System.out.print("Case #"+i+": "+sum); } } }