묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
useState
TypeError: Cannot read properties of null (reading 'useState') 현재 27강 듣고있는데 저런에러가 나오네요.. 어떤게 문제인가요ㅜㅜ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
spring sync connection reset
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) Spring 환경설정 질문 입니다.2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네, 기존 Q&A에 없는 것 같습니다.3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네[질문 내용]안녕하세요. 초보 spring 입문자 입니다.강의 1. 프로젝트 환경설정 단계 질문입니다.강사님께서 말씀하신 스프링부트 스타터 사이트로 부터 해당 hello-spring 프로젝트 생성을 했습니다.이후 Intellij에서 project로 열면 spring library를 받아와야 할텐데 받질 못하고 있습니다. load Gradle project 를 누르면 hello-project:failed > Connection reset 알람이 뜨네요. 참고로 회사 사무실 PC 환경에서 발생하는 이슈이고,자택에서 사용시에는 잘 됩니다. 회사 방화벽 문제 일까요 ? 감사합니다.
-
미해결비전공자도 이해할 수 있는 Redis 입문/실전 (조회 성능 최적화편)
파라미터에 있는 값이 아닌 외부에 있는 값을 캐시 key에 넣을 수 있나요?
파라미터에 있는 값이 아닌 외부에 있는 값을 캐시 key에 넣을 수 있나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Spring boot로만 강의를 진행 하나요, 혹은 Spring 으로도 진행 하는걸까요?
안녕하세요~ 갑자기 궁금함이 생겨 질문 드립니다~영한님이 진행 해주시는 강의는 대부분 Spring boot로 진행 되는것으로 아는데, Spring으로 진행 하는 강의 가있나요?답변부탁드립니다.감사합니다.
-
미해결디지털포렌식전문가 2급 필기 핵심 요약집[전자책]
요약집 구입
오늘자 구매했습니다. 질문이 있어서요. 밑에 읽어보니 요약집 새로 수정해서 최신판(갱신) 올려주시나요??혹시 실기도 가르치시나요..?아울러 실기 무료 기초 강의도 듣겠습니다 감사합니다
-
미해결
intelliJ에서 프로젝트를 무한로딩하는 문제 (+generated 폴더 자동 생성)
intelliJ에서 프로젝트가 무한로딩됩니다. 그리고 generated폴더도 src/main/하위에 계속 생성이 되네요. 이전에는 없던 현상이었습니다.맥을 완전 초기화하고 java 다시 깔고 인텔리제이도 새로 깐 건데도 그래요.코드도 이 코드 저 코드 다 똑같습니다. 예전에 잘 되던 코드도 마찬가지로 무한로딩하네요. ㅠㅠ 아래 방법들을 시도해봤습니다. jdk 버전과 인텔리제이 버전 맞추기 (Temurin 21)커맨드 + 쉬프트 + a 누른 후 registry로 검색 -> awt.file.dialog.enable.filter 체크 해제 후 리붓Settings -> Build, Exe... -> Build and run using을 Gradle이 아닌 IntelliJ 로 바꿔보기. 반대로도 바꿔보기. Run tests using도 마찬가지.Gradle JVM 버전 맞춰주기 (Temurin 21)Repair IDE, Invalidate Caches다 해봤는데 여전히 무한로딩합니다. ㅠㅠ어떻게 하면 좋을까요 ㅠㅠ
-
미해결처음 시작하는 도커와 컨테이너
Bind Mount에서 마운트가 되지 않습니다. (파일/경로 동일)
1. 무엇을 하고 싶으신가요?강좌 bind mount에서 로컬과 도커 컨테이너간의 파일 또는 경로를 공유 (/usr/local/apache2/htdocs/) 를 하고자 하는데 계속 연결이 되지 않습니다. 2. 언제, 어떤 오류가 발생하시나요? [doyoung@dockers-m:/test]$ sudo docker run --rm --name httpd -p 8080:80 \> -v "$(pwd)"/index.html:/usr/local/apache2/htdocs/index.html:rw \> -d httpd:2.4a6223fce61285c77f71be99f448e28b4cdba768662030e240db12c6c3d827b55docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/test/index.html" to rootfs at "/usr/local/apache2/htdocs/index.html": mount /test/index.html:/usr/local/apache2/htdocs/index.html (via /proc/self/fd/6), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.[doyoung@dockers-m:/test]$ 3. 어떤 시도를 해보셨나요?로컬 index.html의 권한 변경 chmod 777 index.html 파일 경로 변경 /home/doyoung/~~~/~--> /test/ 4. 작성한 코드를 공유해주세요.sudo docker run --rm --name httpd -p 8080:80 \-v "$(pwd)"/index.html:/usr/local/apache2/htdocs/index.html:rw \-d httpd:2.4
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
docker-compose 가 Docker Desktop 에서 빠진건가요? command not found 라고 뜨네요
m1 pro 사용 중이고 docker desktop 설치되어 있습니다. 찾아보니 docker desktop 설치 시 docker compose 도 같이 설치된다고 하던데.. 커맨드 자체가 없는거보니 뭔가 바뀐것 같네요. 아래처럼 수동으로 설치도 잘 안돼서 진행을 못하고 있습니다..
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
anconda 에서 LightGBM 3.3.2 이 Setup 후 OpenMP 라이브러리에 의존하는데, 해당 라이브러리가 MacOS에 설치되지 않았기 때문에 발생하는 문제
안녕하세요 강사님 강의 모두 결제해서 듣고 있는 13년차 직장인 겸 학생입니다. MAC OS 아나콘다 환경에서 현재 4.4.5가 기본으로 깔리는데 처음문제는 early_stopping_rounds=50 였습니다. 그래서 3.3.2로 버전을 맞춰서 import lightgbm 하는데 문제가 생겨서 몇시간동안 헤매대가 결국 해결책을 찾아서 공유합니다.1. . MacOS에서 OpenMP를 설치하고 LightGBM이 이를 참조할 수 있도록 설정해야 합니다.1. Homebrew 설치먼저 Homebrew가 설치되어 있는지 확인하세요. Homebrew는 Mac에서 패키지를 관리하는 도구입니다. Homebrew가 설치되지 않았다면, 아래 명령어로 설치할 수 있습니다/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 2. libomp 설치libomp는 OpenMP 라이브러리입니다. Homebrew를 통해 쉽게 설치할 수 있습니다. brew install libomp이 명령어는 libomp를 설치하여, LightGBM이 OpenMP에 접근할 수 있게 만듭니다.3. Anaconda 환경에서 환경 변수 설정설치된 libomp 경로를 Anaconda 환경에서 참조하도록 설정해야 합니다. ~/.bash_profile 또는 ~/.zshrc 파일에 다음을 추가하세요. export PATH="/usr/local/opt/libomp/bin:$PATH"export LDFLAGS="-L/usr/local/opt/libomp/lib"export CPPFLAGS="-I/usr/local/opt/libomp/include"**팁Homebrew를 통해 설치된 libomp의 경로를 확인하려면 다음 명령어를 터미널에 입력하세요:brew --prefix libomp그 후 터미널에서 다음 명령어를 실행해 환경 변수를 적용하세요: source ~/.bash_profile # 또는 ~/.zshrc 4. LightGBM 재설치pip uninstall lightgbmpip install lightgbm==3.3.2~ 끝 ~ 강사님 항상 업데이트 잘해주셔서 저도 도움이 되고자 올립니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
스텟 연동 관련해서 질문이 있습니다.
제가 기존에 개발해둔 아이템 시스템을 연동시키면서 아이템의 스텟을 정할때 Resources/Stat폴더를 참조하고 그걸 기반으로 Enum으로 해당 스텟들이 있는 스크립트 파일을 만든 다음에 아래에 있는 버튼을 눌러서 일일히 Enum 파일을 동기화시켰는데 너무 번거로운것 같습니다. 생성, 삭제, 수정할때마다 동기화시키면 작업할때마다 딜레이가 너무 커지는데 다른 방법이 있을까요if (dataType == typeof(Stat)){GUI.color = Color.yellow;// Data를 이름 순으로 정렬하는 Button을 그림if (GUILayout.Button($"Press it after you finish editing")){StatEnumSynchronizer.SyncStatEnum();EditorUtility.SetDirty(database);AssetDatabase.SaveAssets();}}아래는 해당 enum파일을 만드는 스크립트입니다.using System;using System.IO;using System.Linq;using UnityEditor;using UnityEngine;public static class StatEnumSynchronizer{private const string StatFolderPath = "Assets/Resources/Stat";[MenuItem("Tools/Sync Stat Enum")]public static void SyncStatEnum(){if (!Directory.Exists(StatFolderPath)){Debug.LogError($"Directory does not exist: {StatFolderPath}");return;}var statFiles = Directory.GetFiles(StatFolderPath, "*.asset", SearchOption.TopDirectoryOnly);var statCodeNames = statFiles.Select(file => AssetDatabase.LoadAssetAtPath<Stat>(file)).Where(stat => stat != null).Select(stat => stat.CodeName).Distinct().OrderBy(name => name).ToList();string enumPath = "Assets/Scripts/Enum/ItemStatusAttribute.cs";using (var writer = new StreamWriter(enumPath, false)){writer.WriteLine("public enum ItemStatusAttribute");writer.WriteLine("{");writer.WriteLine(" Default,");foreach (var codeName in statCodeNames){string enumName = SanitizeEnumName(codeName);writer.WriteLine($" {enumName},");}writer.WriteLine("}");}AssetDatabase.Refresh();Debug.Log("Stat Enum synchronized.");}private static string SanitizeEnumName(string name){return new string(name.Where(c => !char.IsWhiteSpace(c) && (char.IsLetterOrDigit(c) || c == '_')).ToArray()).Replace(" ", "_").Replace("-", "_").ToUpper();}}
-
미해결김영한의 실전 자바 - 기본편
객체 생성과 메서드 호출에 대한 메모리 관점 흐름에 대해 질문 있습니다.
메서드 프레임은 메서드 영역에 있는 메서드 코드를 기반으로 생성되나요?객체 생성과 메서드 호출에 대한 메모리 관점 흐름을 정리 해봤는데 맞게 정리한건지 궁금합니다. "객체 생성시 힙 영역에 객체 저장 -> 메서드 호출시 메서드 영역에 있는 호출한 메서드 코드를 찾음 -> 찾은 메서드 코드로 스택 영역에 메서드 프레임을 생성함"힙 영역에서 메서드 영역에 있는 본인의 메서드 코드를 어떻게 찾는지 궁금합니다.
-
미해결Next + React Query로 SNS 서비스 만들기
로그인이 안 됩니다.
▲ Next.js 14.2.8 - Local: http://localhost:3000 - Environments: .env ✓ Starting... ✓ Ready in 4.2s ○ Compiling / ... ✓ Compiled / in 3.5s (1022 modules) GET / 200 in 4384ms GET / 200 in 81ms ✓ Compiled /api/auth/[...nextauth] in 364ms (493 modules) GET /api/auth/session 200 in 2386ms ○ Compiling /login ... ✓ Compiled /login in 1020ms (1035 modules) GET /api/auth/session 200 in 1561ms GET /login?_rsc=1pqm1 200 in 126ms ○ Compiling /(.)i/flow/login ... ✓ Compiled /(.)i/flow/login in 731ms (1050 modules) GET /api/auth/providers 200 in 44ms GET /api/auth/csrf 200 in 19ms [auth][error] CallbackRouteError: Read more at https://errors.authjs.dev#callbackrouteerror [auth][cause]: TypeError: Failed to parse URL from undefined/api/login at node:internal/deps/undici/undici:13178:13 [auth][details]: { "code": "ERR_INVALID_URL", "input": "undefined/api/login", "provider": "credentials" } POST /api/auth/callback/credentials? 200 in 40ms GET /api/auth/session 200 in 26ms윈도우 인데 memurai설치가 도저히 안 되어서 그냥 redis 설치했습니다. 백엔드 코드 실행시키면 redis connected라고도 뜨고, service에도 실행중도 뜨고, hello world도 잘 뜹니다.REDIS_URL=redis://127.0.0.1:6379 //백엔드 env NEXT_PUBLIC_BASE_URL=http://localhost:3000 //z-com 에 있는 .env이거로도 고쳐봤습니다. localhost:3000/login 여기로 넘어는 가는데 로그인이 안 됩니다.깃허브에서 코드 잘 가져왔고, 회원가입도 잘 되는데 로그인만 안 됩니다. 뭐가 문제일까요 ㅠㅠ
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
this에 대해 질문 있습니다.
객체를 생성하는 순간 힙 영역에 객체가 저장(필드값)된다고 알고 있습니다. 메서드를 호출하기 위해서는 우선 객체를 생성한 후에 메서드를 호출해야 한다고 생각합니다. 궁금한 부분은 언제 메서드 프레임의 this에 값이 저장 되는지 궁금합니다. 메서드 호출 할때 힙 영역에 저장되어 있는 객체의 주소값이 this로 저장이 되는건가요?
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
브루트 포스 BOJ 1182번에 관한 질문이 있습니다!
풀이 1번 (기본)에서 대부분의 코드를 이해했습니다.그런데# 인덱스가 lev인 원소 선택 Xsearch(lev + 1)에서 잘 이해가 되지 않습니다.혹시 lev이 0일 경우인가요?
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
ArgoCD와 docker hub 연동에 관해서 질문 있습니다.
실습에 문제 발생 시 최대한 캡쳐 화면을 꼭 올려 주세요. (원인 파악에 도움이 큽니다)영상 내용 질문 시 해당 영상 제목과 내용이 있는 시간을 같이 올려주세요. (내용을 다시 들어보고 답변을 드리기 위해서 입니다)긴 로그는 제 메일로 보내주세요. (k8s.1pro@gmail.com)카페 [강의 자료실]에도 많은 질문과 답변들이 있어요!cafe: https://cafe.naver.com/kubeops ((해결했습니다)) 안녕하세요. 강의 열심히 듣고 있습니다. ArgoCD와 docker hub를 연동하는 부분이 잘 진행되지않아 질문드립니다. 현재 2232 실습을 따라하고 있는데요 argo cd와 docker hub 연동하는 부분이 잘 진행되지않는데 원인을 정확히 모르겠어서 질문드립니다. 우선 git repository를 api-tester 소스 부분을 제외하고 모두 제 git으로 fork해서 진행하였습니다. 현재 docker image가 push되는 것 까지는 확인했는데요, argoCD가 변경을 감지하고 받아오는 부분이 안되는 것 같습니다.제가 이해한바로는 argocd와 docker hub가 연동될 때 필요한 인증 정보는 아래 설정에서 주입되는 것으로 알고 있습니다.해당 부분은 아래 설정으로 인해 jenkins credential에서 주입받는 것으로 이해하였구요.. jenkins에서 파이프라인을 돌렸을 때, 이미지 push가 정상적으로 진행됐다는 의미니깐 jenkins의 credential에는 문제가 없다고 판단됩니다. 결론적으로 argocd가 감지를 못하는 것 같다는 생각이 듭니다. argocd와 dockerhub 연동 관련해서 제가 직접 설정한 부분은 annotation을 제 docker hub 이름으로 바꾼 것 밖에 없는데요.. 혹시 제가 놓친 것이 있을까요?
-
해결됨Flutter 앱 개발 실전
late final 속성
part 'theme_color.dart'; part 'theme_deco.dart'; part 'theme_typo.dart'; abstract class ThemeCore{ late final Brightness theme; late final ThemeColor color; late final ThemeDeco deco; late final ThemeTypo typo; }코드를 복사해서 클래스 이름만 바꿔서 붙여 넣었습니다import 'package:custom_house/theme/foundation/theme_core.dart'; import 'package:custom_house/theme/res/base_typo.dart'; import 'package:custom_house/theme/res/palette.dart'; import 'package:flutter/material.dart'; class LightTheme implements ThemeCore { @override Brightness brightness = Brightness.light; @override ThemeColor color = ThemeColor( surface: Palette.grey100, background: Palette.black.withOpacity(0.55), text: Palette.black, subtext: Palette.grey700, toastContainer: Palette.black.withOpacity(0.85), onToastContainer: Palette.grey100, hint: Palette.grey300, hintContainer: Palette.grey150, onHintContainer: Palette.grey500, inactive: Palette.grey400, inactiveContainer: Palette.grey250, onInactiveContainer: Palette.white, primary: Palette.green, onPrimary: Palette.white, secondary: Palette.red, onSecondary: Palette.white, tertiary: Palette.yellow, onTertiary: Palette.white, ); @override late ThemeTypo typo = ThemeTypo( typo: const NotoSans(), fontColor: color.text, ); @override ThemeDeco deco = ThemeDeco( shadow: [ BoxShadow( color: Palette.black.withOpacity(0.1), blurRadius: 35, ), ], ); }이렇구요 기존 아래와 같은 코드에서 @override Brightness brightness = Brightness.light;다음과 같이 바꿔봤는데 @override late final Brightness brightness = Brightness.light;에러가 나는데 이해가 되지 않습니다. 어차피 나중에 초기화를 해도 되니까 late를 붙인거고 , 밝다라는 속성은 바꾸지 않을 거니까 final 키워드까지 썼는데 에러가 나는 이유를 모르겠습니다. implements로 구현하니까 이런 현상이 생기네요..
-
해결됨한 번에 끝내는 자바스크립트: 바닐라 자바스크립트로 SPA 개발까지
template 질문 있습니다.
template = [] template = ""문자열로 초기화 안하고 배열로 초기화 하는 이유가 뭔가요?
-
미해결간단하게 만들어 보는 iOS 설정앱
@ViewBuilder 사용 질문입니다
안녕하세요! 다름이 아니라 강의를 보면 @ViewBuilder 어노테이션을 사용하시는데 강사님이 쓰신 블로그인지는 모르겠지만https://dev200ok.blogspot.com/2022/05/swiftui.html(블로그 주인 이름이 강사님과 동일)위 링크에 따르면SwiftUI에서 UI를 그리다 보면, 뷰를 따로 떼어내서 작업을 해야하는 경우들이 발생@ViewBuilder 어노테이션을 붙여 뷰를 만들어 주는 메소드를 만들어 줄 수 있습니다. 뷰를 코드와 분리하기 때문에 코드의 가독성을 높여주며 다른 뷰를 독립적으로 보기 좋음@ViewBuilder를 붙여서 만든다면 암시적으로 해당 뷰 안에서만들어 사용하겠다는 뜻위와 같은 이유로 @ViewBuilder를 사용한다고 되어 있습니다 근데 제 코드를 보시면import SwiftUI struct ContentView: View { @State private var airplaneMode: Bool = false func Profile() -> some View{ NavigationLink{ Text("프로필 화면") } label: { HStack{ Image(systemName: "person.fill") .resizable() .aspectRatio(contentMode: .fit) .frame(width: 40, height: 40) .padding(.all, 10) .background(.green) .clipShape(Circle()) VStack(alignment: .leading, spacing: 3){ Text("홍길동") .font(.system(size: 24)) .fontWeight(.regular) Text("Apple ID, iCloud, 미디어 및 구입") .font(.system(size: 14)) } .padding(.leading, 6) } .padding(.vertical, 10) } } func ImageDesign(sysName: String, imgColor: Color) -> some View{ Image(systemName: sysName) .resizable() .aspectRatio(contentMode: .fit) .frame(width: 20, height: 20) .padding(.all, 4) .background(imgColor) .foregroundColor(.white) .cornerRadius(6) } func ListMenuLetter(sysName: String, NaviLinkText: String, imgColor: Color) -> some View{ HStack{ NavigationLink{ switch NaviLinkText{ case "WI-FI": Text("WI-FI 화면") case "Bluetooth": Text("Bluetooth 화면") default: EmptyView() // 빈 뷰를 반환 } } label: { switch NaviLinkText{ case "WI-FI": ImageDesign(sysName: sysName, imgColor: imgColor) HStack{ Text("WI-FI") Spacer() Text("IPTIME") .foregroundColor(.gray) } case "Bluetooth": ImageDesign(sysName: sysName, imgColor: imgColor) HStack{ Text("Bluetooth") Spacer() Text("켬") .foregroundColor(.gray) } default: EmptyView() // 빈 뷰를 반환 } } } } func ListMenu(sysName: String, NaviLinkText: String, imgColor: Color) -> some View{ HStack{ ImageDesign(sysName: sysName, imgColor: imgColor) if NaviLinkText != "에어플레인 모드"{ NavigationLink(NaviLinkText){ // 여기에 지금 label이 따로 지정되어 있지 않은데 이럴 경우 괄호 안에 있는 NaviLinkText가 label 역할을 함 switch NaviLinkText{ case "셀룰러": Text("셀룰러 화면") case "개인용 핫스팟": Text("개인용 핫스팟 화면") case "스크린 타임": Text("스크린 타임 화면") case "일반": Text("일반 화면") case "손쉬운 사용": Text("손쉬운 사용 화면") case "개인 정보 보호": Text("개인 정보 보호 화면") case "암호": Text("암호 화면") default: EmptyView() // 빈 뷰를 반환 } } } else{ Toggle("에어플레인 모드", isOn: $airplaneMode) } } } var body: some View { NavigationView { List{ Section{ Profile() } Section{ ListMenu(sysName: "airplane", NaviLinkText: "에어플레인 모드", imgColor: .orange) ListMenuLetter(sysName: "wifi", NaviLinkText: "WI-FI", imgColor: .blue) ListMenuLetter(sysName: "b.circle", NaviLinkText: "Bluetooth", imgColor: .blue) ListMenu(sysName: "antenna.radiowaves.left.and.right", NaviLinkText: "셀룰러", imgColor: .green) ListMenu(sysName: "personalhotspot", NaviLinkText: "개인용 핫스팟", imgColor: .green) } Section{ ListMenu(sysName: "hourglass", NaviLinkText: "스크린 타임", imgColor: .blue) } Section{ ListMenu(sysName: "gear", NaviLinkText: "일반", imgColor: .gray) ListMenu(sysName: "person.crop.circle", NaviLinkText: "손쉬운 사용", imgColor: .blue) ListMenu(sysName: "hand.raised.fill", NaviLinkText: "개인 정보 보호", imgColor: .blue) } Section{ ListMenu(sysName: "key.fill", NaviLinkText: "암호", imgColor: .gray) } } .navigationTitle(Text("설정")) // 타이틀 위치 코드가 맨 위가 아닌데 정상 동작하는 이유는 무엇인가 } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }Profile 함수나 ImageDesign 등 뷰를 함수로 따로 빼서 독립적인 코드를 구성했는데 @ViewBuilder를 사용하지 않고도 아무런 문제가 없이 정상적으로 동작합니다. 사용하지 않아도 문제가 없는데 강의에서 @ViewBulider를 사용하시는 이유가 궁금합니다 답변 주시면 감사하겠습니다!
-
해결됨Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부
Backpressure Drop 전략에서 다시 버퍼가 채워지는 시점에 대한 질문입니다.
안녕하세요 강사님. 오늘 Backpressure Example 코드 강의 수강 후 Backpressure Drop 전략에 대해 궁금했던 부분은 다른 분의 질문을 통해서 해결을 할 수 있었습니다.(질문 글 Link) 해당 글에서 강사님의 답변을 보면Drop 전략의 경우, 버퍼 안의 데이터가 Subscriber에게 한개 전달되면, 버퍼 공간이 한개 비니까 한개의 데이터가 채워지는것이 아니라 전체 버퍼 중에 70-80 퍼센트 정도(정확한 비율은 나중에 확인 후 말씀드릴게요)가 한번에 비워진다고 보시면 될것 같습니다.즉, 데이터 한개가 버퍼에서 비워지는 것이 아니라 버퍼가 가득찬 상태에서 Downstream이 데이터를 처리할 수 있는 상태가 될 때까지 Upstream에서 emit된 데이터는 Drop이 된다고 생각하시면 될것 같습니다.이런 부분이 있는데 혹시 어떤 파일의 어떤 메서드를 보면 해당 내용을 알 수 있을까요 ? ※제가 혼자서 디버그를 통해서 찾아보려고 했는데 잘 찾아지지가 않아서 여쭤봅니다. 😢
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
main 스레드와 생성한 스레드 관계에 대해 질문 있습니다.
자바 실행 시 main 스레드가 생성되고 실행이 되다가 중간에 아래와 같이 스레드를 하나 생성한다고 하겠습니다.MyRunnable runnable = new MyRunnable(); Thread thread = new Thread(runnable); thread.start();이럴 경우 생성한 스레드가 종료 상태가 될때 까지 main 스레드가 기다리는지 아니면 main 스레드는 생성한 스레드의 상태와 아무 관련없이 종료 상태가 되는지 궁금합니다.