묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
2:58 질문 있습니다.
안녕하세요. 궁금한 게 있어서 질문 남깁니다.구조체를 선언하는 방식에서 변수명을 함께 선언할 때는 구조체 명이 필요가 없는건가요?강의 설명에는 struct 구조체명 { 내용} 변수명;이라고 나와있지만 예시에서는sturct 만 작성했습니다. 구조체명을 써도 상관이 없는 선택사항인건지,아니면 아예 필요가 없는건지가 궁금합니다. 만약에 사용해도 된다면, person1.age에 접근할 때 어떤식으로 접근해야 하는지가 궁금합니다. 답변 기다리겠습니다. 감사합니다.
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
ExecutorService close() 메소드 동작 설명 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]ExecutorService 우아한 종료 - 구현01:07 close() 메소드 설명 부분에"shutdown() 을 호출하고, 하루를 기다려도 작업이 완료되지 않으면 shutdownNow() 를 호출한다." 에 오류가 있어 보입니다. [내용 정정]"shutdown() 을 호출하고, 작업이 완료될 때까지 무한정 반복대기한다. 인터럽트가 발생하면 shutdownNow() 를 호출한다." 로 변경해야 하지 않나요? [근거]Eclipse Temurin-21.0.4+7 (JDK 21) 버전 코드 원문public interface ExecutorService implements Executor, AutoClosable { // .. @Override default void close() { boolean terminated = isTerminated(); if (!terminated) { shutdown(); boolean interrupted = false; // 작업 미완료시 재시도 while (!terminated) { try { // 하루간 작업 종료 대기, 작업 미완료시 `false` 반환 terminated = awaitTermination(1L, TimeUnit.DAYS); } catch (InterruptedException e) { if (!interrupted) { shutdownNow(); interrupted = true; } } } if (interrupted) { Thread.currentThread().interrupt(); } } } }1일이 지났다고 해서 interrupt() 를 호출하지 않고 재시도 하는 것으로 보입니다. [증명 코드]MyExecutor 로 close() 메소드 대기 시간을 1일 -> 1초로 조정하여 오버라이드합니다.10초간 대기하는 Task 를 실행시킵니다.class ShutdownTest { record CallableSleepTask( String name, long sleepMs ) implements Callable<Long> { @Override public Long call() throws Exception { sleep(this.sleepMs); return this.sleepMs; } } static class MyExecutor extends ThreadPoolExecutor { public MyExecutor() { super(1, 1, 0, TimeUnit.SECONDS, new LinkedBlockingQueue<>()); } @Override public void close() { boolean terminated = isTerminated(); if (!terminated) { shutdown(); boolean interrupted = false; while (!terminated) { try { // 종료 대기 시간 1초로 조정 terminated = awaitTermination(1L, TimeUnit.SECONDS); } catch (InterruptedException e) { if (!interrupted) { shutdownNow(); interrupted = true; } } } if (interrupted) { Thread.currentThread().interrupt(); } } } } @DisplayName("Should wait infinitely when .close()") @Test void executorServiceCloseTest() { // given try (ExecutorService myExecutor = new MyExecutor()) { log("작업 시작"); CallableSleepTask sleepTask = new CallableSleepTask("test", 10_000L); myExecutor.submit(sleepTask); // 10 초간 테스크 실행 log("작업 진행중.. close 대기"); // 기다리지 않고 .close() 자동 호출 } } }실행 결과18:38:39.524 [ main] 작업 시작 18:38:39.527 [ main] 작업 진행중.. close 대기 (약 10초 대기 후 종료) Process finished with exit code 0테스크 종료를 위해 10초 대기가 이뤄졌습니다.close 가 조정된 대기시간인 1초 뒤에 인터럽트를 발생시켰다면 인터럽트 로그가 남았을 것이고, shutdownNow()가 호출됐다면 10초 대기없이 즉시 종료되었을 것입니다. 따라서 정정이 필요해보여요.close 메소드는 "shutdown() 을 호출하고, 작업 완료시까지 무한정 반복대기한다. 인터럽트가 발생하면 shutdownNow() 를 호출한다."
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
강의 인덱스 접근 관련 문의드립니다.
안녕하세요! 강사님 늘 강의 잘 듣고 있습니다.다름이 아니고 아래 사항에 대해 궁금한 부분이 있는데요. (아래 강의 20:16 시점입니다)https://inf.run/1668esecondary index -> clustered index로 limit 개수만큼 접근해주신다고 설명해주셨는데요 !where board_id = 1만 조건이 있어서 이미 어떤 row인지 세컨더리 인덱스에서 판단이 가능할 것 같은데, 클러스터 인덱스로 접근하게 되는 이유가 어떻게 되는걸까요?만약 where board_id = 1 AND writer_id = 1이 있다면 writer도 검증이 필요하기 때문에, 클러스터 인덱스 까지 가는 부분은 이해되기는 합니다만 board_id만 조건이 걸린 상태에서 클러스터 인덱스도 간다는 부분을 보고 이해가 잘 안되어서 문의드립니다 .. !
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
24시간 이내의 최신글 API 설계 관련 질문
쿠케님 안녕하세요!그간 안녕하셨는지요. 몇 주 놀다가 다시 반성하고 각성 모드로 강의 시청 하고 있습니다. Redis에 24시간 이내의 최신글을 저장하는거 까지는 이해했습니다!그렇다면 레디스에 저장한 최신글은 프론트에서 어떻게 활용할수 있는 걸까요?제가 생각한 아래 흐름이 맞는지 검토 부탁드립니다! 서버게시판 종류마다 24시간 이내의 최신글을 레디스에 저장게시판 종류와 데이터 개수를 request로 받는 최신글 API를 별도로 만듬 프론트사이트의 메인 페이지 일부 화면에 특정 게시판의 최신글을 뿌려주는 요구사항이 존재서버의 최신글 API를 호출하여 각 게시판 종류마다 최신글을 뿌려줌 감사합니다~!
-
해결됨김영한의 실전 자바 - 중급 1편
지역변수와 캡처 변수의 값이 달라지는게 문제인 이유?
지역클래스가 접근하는 지역 변수는 사실상 final이어야 하고,그 이유는 '지역 변수의 값과 캡처된 변수의 값이 서로 달라지는 문제가 발생하기 때문' 이라는 것은 이해했습니다! 그런데 지역 변수의 값과 캡처된 변수의 값이 서로 달라지는게 왜 문제인가에 대해서 의문이 남아서 질문 드립니다 ㅠㅠ 제가 의문을 가지는 부분을 말씀드리면캡처된 지역변수를 가지고 있는 지역클래스의 인스턴스를 생성 후 사용하는 시점에서는 어차피 원래 지역변수가 있던 스택은 제거된 상태이고,그래서 값이 서로 같고 다름을 떠나서 아예 없는건데 애초에 동기화 문제 자체를 신경쓸 필요가 없는것 아닌가요??
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계와 연관관계의 주인 주의점 및 정리 강의에서 질문입니다~
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 강의에서 마지막에 “처음 JPA로 설계할 때, 무조건 단방향 매핑으로 설계를 완료”하는 것이 좋다고 해주셨는데,여기서 얘기하는 단방향 매핑이 1:N 연관관계에서 N쪽에서만 연관관계를 맺는 걸 말씀하신 걸까요?@ManyToOne@JoinColumn(name=“TEAM_ID”)private Team team;이런식으로요~
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
InterruptedExceptionThreadStopExample 질문입니다.
InterruptedExceptionThreadStopExample 를 돌리면 강의 로그에서는============= 중단 스레드가 작업 스레드를 중단 시켰습니다.인트럽트 상태 1 : true=============형태가 찍히는데 제 로컬에서는=============중단 스레드가 작업 스레드를 중단시켰습니다.인트럽트 상태 2 : false=============가 찍히는데 이건 확률적으로 로그가 찍히는 걸까요? 답변 부탁 드립니다!
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
테이블 설계관련 문의
안녕하세요.예전부터 목록 조회 관련 궁금한게 있었는데 어떻게 설계하는게 좋은지 몰라서 문의드립니다.강의의 예제처럼 하나의 테이블에 대해서 게시글 목록을 보여주는 기능들은 어떻게 해야하는지 잘 이해가 됩니다. 근데 보통 개발을 하다 보면 리스트를 보여주는 경우가 많잖아요.그런 ux들을 보면 3~4개 이상의 테이블을 join하고, 여러 테이블에 대한 필터링도 하고, 여러 테이블의 여러 컬럼에 대해서도 정렬까지 하고, 페이지네이션까지 해야 하는 경우가 많았던 것 같습니다.거기에 N:M구조를 join하는 경우가 있다면... 이런 기능들을 구현하려면 아무리 머리를 굴려도 full scan이 발생할 수 밖에 없을 거 같은데요.필터링이나 정렬이 각각 다른 테이블 기준으로 선택이 된다면 속도가 나올 수 없어 보입니다. 대책을 생각해보면그냥 원래 느리니까 db 성능을 믿고 그냥 join해서 보여줄수도 있고, 아니면 전체를 join 한 새로운 테이블을 만들기도 하는건지 궁금하네요. 근데 만약 새로운 테이블을 만들었더라도 N:M구조가 있었다면 또 1:N 구조가 여전히 남아있을테니 또 성능이 좋지 않을것이기에 생각이 많아지네요.
-
미해결Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부
Webflux의 Non-Blocking 특성에 대해 문의 드립니다.
WebFlux의 Non-Blocking의 장점이"여러 작업에 대해서 단일 스레드로 이벤트 루프 방식으로 Blocking 없이 여러 작업을 번갈아 가며 처리 가능하다"라고 이해를 했습니다. 강의의 예제도 보았고 또 여러 예제를 만들어 돌려 보아도,단일 스레드로 여러 subscribe() 요청을 번갈아가면서 처리하는 것을 확인하지를 못하였습니다. 물론 publishOn이나 subscribeOn, parallel을 이용 혹은flatMap과 delayElements를 사용하여 별도의 스레드를 띄워 구현한다면여러 스레드가 병렬로 동시에 여러 요청의 작업을 처리 할 수 있다는 것은 알고 있습니다.하지만 이 방법은 결국 다수 스레드를 생성하여 각각의 스레드가 각각의 작업을 처리 하는 구조가 되어Tomcat기반의 동기 MVC 방식에서의 Blocking 멀티스레드와 별반 차이를 체감하지 못하였습니다. 예를 들어 reactor.netty.ioWorkerCount=1 로 설정하고Rest API "/api/stream" 를 만들어 클라이언트 A가 GET 호출로 구독 시클라이언트 B는 A가 연결을 끝날때 까지 대기하였습니다. (Blocking MVC와 동일 동작)(기대한 것은 단일 스레드로 클라이언트 A와 B의 요청을 번갈아가며 처리) 또다른 테스트로main메소드에서 퍼블리셔에 대해 2개의 subscriber가 거의 동시 구독하였을 경우먼저 시작한 subscriber의 처리가 다 끝나고 그다음 subscriber가 처리 진행하였습니다.(물론 스케줄러나 delayElements, webclient 등 내부적으로 별도 스레드를 띄우면 병렬 처리 됨)[제가 테스트한 결과 1 - 단일 스레드 순차 수행][main] WebFluxExample - main - A1 시작[main] WebFluxExample - main - A2 완료[main] WebFluxExample - main - A3 완료[main] WebFluxExample - main - A 체인 최종 결과: A1 -> A2 -> A3[main] WebFluxExample - main - B1 시작[main] WebFluxExample - main - B2 완료[main] WebFluxExample - main - B3 완료[main] WebFluxExample - main - B 체인 최종 결과: B1 -> B2 -> B3[제가 테스트한 결과 2 - 멀티 스레드 병렬 수행][main] DEBUG reactor.util.Loggers - Using Slf4j logging framework[boundedElastic-1] WebFluxExample - boundedElastic-1 - A1 시작[boundedElastic-2] WebFluxExample - boundedElastic-2 - B1 시작[boundedElastic-1] WebFluxExample - boundedElastic-1 - A2 완료[boundedElastic-2] WebFluxExample - boundedElastic-2 - B2 완료[boundedElastic-1] WebFluxExample - boundedElastic-1 - A3 완료[boundedElastic-2] WebFluxExample - boundedElastic-2 - B3 완료[boundedElastic-1] WebFluxExample - boundedElastic-1 - A 체인 최종 결과: A1 -> A2 -> A3[boundedElastic-2] WebFluxExample - boundedElastic-2 - B 체인 최종 결과: B1 -> B2 -> B3 [원하는 결과 - 단일 스레드 병렬 수행][동일스레드] WebFluxExample - 동일스레드- A1 시작[동일스레드] WebFluxExample - 동일스레드- B1 시작[동일스레드] WebFluxExample - 동일스레드- A2 완료[동일스레드] WebFluxExample - 동일스레드- B2 완료[동일스레드] WebFluxExample - 동일스레드- A3 완료[동일스레드] WebFluxExample - 동일스레드- B3 완료[동일스레드] WebFluxExample - 동일스레드- A 체인 최종 결과: A1 -> A2 -> A3[동일스레드] WebFluxExample - 동일스레드- B 체인 최종 결과: B1 -> B2 -> B3하여 진정한 Webflux의 Non Blocking, 즉 단일 스레드로 (동시 병렬이 아닌) 여러 작업을 번갈아가며 처리하는 것이 가능하다면 처리하는 예제와 결과를 보여주시면 감사하겠습니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
내장타입과 메서드2
12분31초 index_of_4면 숫자4가 인덱스 몇번인지 물어보는건가요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
경고성 콘솔창 출력
[질문 내용]혹시 이 부분은 어디서 해결할 수 있을까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
@KafkaListener에 대해서
안녕하세요 강의 잘보고 있습니다.알아보니까 @KafkaListener가 비동기로 실행되는 줄 알았는데 동기로 실행이 되네요강의를 보면서 느낀점이 카프카로부터 구독할 때 비동기로 실행되어야 하지 않나싶은데 어떤지 알려주시면 감사합니다
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
업캐스팅
//7에서 만약에 자식 클래스에도 getA() 메서드가 있지만 parent클래스를 명시해서 호출 한다면 parent class의 getA()를 호출했겠죠? 업캐스팅 되면 자식클래스의 재정의된 메서드로 가는거지만 parent클래스를 명시한다면 parent 클래스를 사용할 수 있는건가요?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
객체에 관하여.
클래스와 객체 강의 3분 53초대에 객체에 대해서 설명을 해주셨는데 좀 더 상세하게 설명을 해주실 수 있으신가요?
-
미해결김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍
MyFuction과 switch문을 활용한 메서드는 고차함수 방식이 아닌가요?
수업 9분 50초 부근에서 "함수를 인자로 받아서 로직을 결정하는 형태가 전형적인 고차 함수이다."라는 부분이 있습니다. 하지만 getOperaion 함수를 보면 Myfunction을 반환하지만 인자로 코드 조각을 받지 않고 getOperation 내부에서 로직을 작성하게 되는 형태인데, 그럼 getOperation 함수는 고차함수라고 부르기 어려운걸까요??고차함수의 특징은 함수형인터페이스를 파라미터로 받아서 클라이언트 코드쪽에서 로직(코드 조각)을 람다식으로 받아서 처리하는 형태를 고차함수라고 이해하고 있습니다.하지만 getOperation은 파라미터로 String 타입 하나만 받고 람다식을 getOperation 내부에서 정의하고 있기에 코드 조각을 파라미터로 받지 않았으니 고차함수라고 보기 어려운걸까? 라는 의문점이 있습니다
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
상속을 정리하는 문제 10개 / 3가지 질문있습니다.
안녕하세요 주말코딩님 고생많으십니다.3가지 질문이 있어 적어보았습니다. 7분50초 유형 2자식 show에 this.value가 아닌 그냥 value여도 20을 출력하는지? 12분유형 4 부모에서 y=a없이 프린트문에 Y대신 a로 출력을 하면 안되나요? 20분 유형 10 child에서 int x를 정의하고 child()->child(x) 로 변경하면 부모와의 매개변수 숫자가 동일하니 오류가 안나나요?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
정적변수,정적메서드 강의 3분대
파풀레이션 변수 앞에 스태틱이 안붙었다면Person.파풀레이션과 p3.파풀레이션 출력 값은 어떻게 될까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
7강 관련 질문
7강에서 유저 생성 APi를 만들때 user클래스를 따로 또 만드는데 전에 덧셈이나 곱셈 api에서는 객체를 dto에서 바로 만들어서 가져왔는데 여기서는 domain-user처럼 따로 또 클래스를 만들어서 객체를 호출하는 이유가 있을까요?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
9강 19:30에 있는 문제
int i,j,count = 0 이라는 식이 i=0, j=0, count=0 이라는 말 아닌가요? 밑에 for 문에 i=1, j=1이 초기식이어서 헷갈립니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
2024년 3회 10분 50초대 Python 질문
(기출) 2024년 3회 10분 50초대 Python 문제질문elif 문 type(value) == type(""): 에서"" 이거는 빈 문자열 같은데 이 경우에도 type이 'str'로 나오나요?C언어에서 빈 문자열은 NULL로 인식된다고 했던 거 같아 질문드립니다.