묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결타입스크립트의 모든 것
색션 2, 데코레이터 개념이 아예 이해가 안됩니다.
안녕하세요. 타입스크립트 강좌 수강생 어민규입니다. 데코레이터를 이해하기 위해 필요한 기초지식들을 공부하기 위해 질문을 드립니다.JS가 코딩 입문언어로 그 외 언어들은 알지 못합니다. 그래서 데코레이터가 더 이해가 잘 안되는데요. 참고할만한 블로그나 기초 개념들을 알려주시면 감사하겠습니다.또한 데코레이터 -2 강의를 기반으로 한 프로그램에서 아래의 오류가 떠서 뭐가 문제인지 잘 모르겠습니다.// 데코레이터 - 2 // 팩토리 // : 데코레이터 함수를 리턴하면서 감싸고 있는 녀석 // f(g(x)) ----> f () { return g () }, g: 데코레이터 함수 // g ----> f(g(x)), f: 데코레이터 팩토리 (목적: 인자전달, param 전달) // 1. 데코레이터는 함수다 function Controller(constructor: any): any { console.log("Controller : ", constructor) return (target: any) => { console.log(target) } } function Get(params: any): any { // console.log("[GET] ", params) } function Post(params: any): any { // console.log("[GET] deco start") } function Column(params: any): any { // console.log("Column!!", params) } function UseGuard(): any { // console.log('UseGuard deco start') } // 2. 데코레이터는 무조건 class만 같이 쓴다. (내부 외부, 맴버 변수, 메소드, 파라미터...) // 데코레이터는 이렇게 쓴다. @Controller('/api/v1') class ExampleController { @Column('email') private _email: string; constructor(email: string) { this._email = email; // _email 변수를 생성자에서 초기화합니다. } @Get('/user') getReq() {} @Post('/board') postReq() {} } // 데코레이터 - 2 var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) { if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); }; // 팩토리 // : 데코레이터 함수를 리턴하면서 감싸고 있는 녀석 // f(g(x)) ----> f () { return g () }, g: 데코레이터 함수 // g ----> f(g(x)), f: 데코레이터 팩토리 (목적: 인자전달, param 전달) // 1. 데코레이터는 함수다 function Controller(constructor) { console.log("Controller : ", constructor); return function (target) { console.log(target); }; } function Get(params) { // console.log("[GET] ", params) } function Post(params) { // console.log("[GET] deco start") } function Column(params) { // console.log("Column!!", params) } function UseGuard() { // console.log('UseGuard deco start') } // 2. 데코레이터는 무조건 class만 같이 쓴다. (내부 외부, 맴버 변수, 메소드, 파라미터...) // 데코레이터는 이렇게 쓴다. var ExampleController = function () { var _classDecorators = [Controller('/api/v1')]; var _classDescriptor; var _classExtraInitializers = []; var _classThis; var _instanceExtraInitializers = []; var __email_decorators; var __email_initializers = []; var _getReq_decorators; var _postReq_decorators; var ExampleController = _classThis = /** @class */ (function () { function ExampleController_1(email) { this._email = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, __email_initializers, void 0)); this._email = email; // _email 변수를 생성자에서 초기화합니다. } ExampleController_1.prototype.getReq = function () { }; ExampleController_1.prototype.postReq = function () { }; return ExampleController_1; }()); __setFunctionName(_classThis, "ExampleController"); (function () { var _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; __email_decorators = [Column('email')]; _getReq_decorators = [Get('/user')]; _postReq_decorators = [Post('/board')]; __esDecorate(_classThis, null, _getReq_decorators, { kind: "method", name: "getReq", static: false, private: false, access: { has: function (obj) { return "getReq" in obj; }, get: function (obj) { return obj.getReq; } }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(_classThis, null, _postReq_decorators, { kind: "method", name: "postReq", static: false, private: false, access: { has: function (obj) { return "postReq" in obj; }, get: function (obj) { return obj.postReq; } }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(null, null, __email_decorators, { kind: "field", name: "_email", static: false, private: false, access: { has: function (obj) { return "_email" in obj; }, get: function (obj) { return obj._email; }, set: function (obj, value) { obj._email = value; } }, metadata: _metadata }, __email_initializers, _instanceExtraInitializers); __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); ExampleController = _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); __runInitializers(_classThis, _classExtraInitializers); })(); return ExampleController = _classThis; }(); 오류 메시지eominkyu@pisimingyuui-MacBookAir typeScript % tsc deco && node decoController : /api/v1/Users/eominkyu/Desktop/typeScript/deco.js:13 var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); ^TypeError: (0 , decorators[i]) is not a function at __esDecorate (/Users/eominkyu/Desktop/typeScript/deco.js:13:40) at /Users/eominkyu/Desktop/typeScript/deco.js:90:9 at /Users/eominkyu/Desktop/typeScript/deco.js:97:7 at Object.<anonymous> (/Users/eominkyu/Desktop/typeScript/deco.js:99:2) at Module._compile (node:internal/modules/cjs/loader:1254:14) at Module._extensions..js (node:internal/modules/cjs/loader:1308:10) at Module.load (node:internal/modules/cjs/loader:1117:32) at Module._load (node:internal/modules/cjs/loader:958:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) at node:internal/main/run_main_module:23:47Node.js v18.16.0
-
미해결Three.js로 시작하는 3D 인터랙티브 웹
강의에서 나온 이미지 색상보다 더 밝게 나와요
위의 사진처럼 강의보다 훨씬 밝게 나오는데 문제가 무엇일까요..? import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"; // ----- 주제: 여러 이미지 텍스쳐가 적용된 큐브 export default function example() { // 로딩 매니저 const loadingManager = new THREE.LoadingManager(); loadingManager.onStart = () => { console.log("시작"); }; loadingManager.onLoad = () => { console.log("로드 완료"); }; loadingManager.onProgress = (img) => { console.log(img + "로드 중"); }; loadingManager.onError = () => { console.log("로드 에러"); }; // 텍스쳐 이미지 로드 const textureLoader = new THREE.TextureLoader(loadingManager); const rightTex = textureLoader.load("/textures/mcstyle/right.png"); const leftTex = textureLoader.load("/textures/mcstyle/left.png"); const topTex = textureLoader.load("/textures/mcstyle/top.png"); const bottomTex = textureLoader.load("/textures/mcstyle/bottom.png"); const frontTex = textureLoader.load("/textures/mcstyle/front.png"); const backTex = textureLoader.load("/textures/mcstyle/back.png"); const materials = [ new THREE.MeshBasicMaterial({ map: rightTex }), new THREE.MeshBasicMaterial({ map: leftTex }), new THREE.MeshBasicMaterial({ map: topTex }), new THREE.MeshBasicMaterial({ map: bottomTex }), new THREE.MeshBasicMaterial({ map: frontTex }), new THREE.MeshBasicMaterial({ map: backTex }), ]; // 픽셀화 rightTex.magFilter = THREE.NearestFilter; leftTex.magFilter = THREE.NearestFilter; topTex.magFilter = THREE.NearestFilter; bottomTex.magFilter = THREE.NearestFilter; frontTex.magFilter = THREE.NearestFilter; backTex.magFilter = THREE.NearestFilter; // Renderer const canvas = document.querySelector("#three-canvas"); const renderer = new THREE.WebGLRenderer({ canvas, antialias: true, }); renderer.setSize(window.innerWidth, window.innerHeight); renderer.setPixelRatio(window.devicePixelRatio > 1 ? 2 : 1); // Scene const scene = new THREE.Scene(); scene.background = new THREE.Color("white"); // Camera const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 ); camera.position.y = 1.5; camera.position.z = 4; scene.add(camera); // Light const ambientLight = new THREE.AmbientLight("white", 0.5); scene.add(ambientLight); const directionalLight = new THREE.DirectionalLight("white", 1); directionalLight.position.set(1, 1, 2); scene.add(directionalLight); // Controls const controls = new OrbitControls(camera, renderer.domElement); // Mesh const geometry = new THREE.BoxGeometry(2, 2, 2); const mesh = new THREE.Mesh(geometry, materials); scene.add(mesh); // 그리기 const clock = new THREE.Clock(); function draw() { const delta = clock.getDelta(); renderer.render(scene, camera); renderer.setAnimationLoop(draw); } function setSize() { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); renderer.render(scene, camera); } // 이벤트 window.addEventListener("resize", setSize); draw(); }
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
안녕하세요 호돌맨님 예외처리2 에서 질문이 있습니다.
좋은 강의 정말 감사드립니다.호돌맨님 강의덕분에 기존에 공부했던 지식들 정리도 하고 더 좋은 설계가 어떤건지 잘 배우고 있습니다.제가 예외처리2 강의를 보고 컨트롤러 테스트를 하다가 게시글 작성 실패케이스에서 오류가 생겨서 질문드립니다. PostControllerPostCreatePostControllerTest글 작성 요청 시 제목, 내용 모두 null 인 케이스 테스트입니다.이 테스트에서 실패합니다.로그는 아래와 같습니다.응답 바디에도 아무것도 오지 않습니다.로그를 쫓아서 ErrorResponse 에 브레이크 포인트를 찍어봤습니다. ErrorResponse여기서 validation 이 null로 잡힙니다.PostControllerAdvice이쪽 ExceptionHandler 작성할 시점에 생성자에 validation 을 매개변수로 받지 않았을땐 오류가 발생하지 않았는데 validation 을 매개변수로 받고 나서 오류가 생기는거면 @Builder 가 ErrorResponse 의 validation 초기화를 무시하고 null 값으로 생기는 현상 같습니다.그래서 따로 빌더 안붙인 validation 을 받지 않는 생성자를 만드니 잘 돌아갑니다.그런데 강의 마지막에 전체 테스트 한번 돌리고 마무리 하신것 같은데 호돌맨님은 어떻게 테스트 실패가 안뜬건지 궁금합니다. 그리고 혹시 더 좋은 방법이 있는지 방향을 알려주시면 감사하겠습니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Lazy 로딩 , FetchJoin 그리고 @BatchSize
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]공부를 하면서 제가 생각하는 부분이 맞는지 확인차 질문 드립니다. 모든 XToOne 은 fetch:Lazy로 되어있다는 가정Member와 Order는 양방향 참조Member를 사용할 때 Order는 가끔 사용되는경우Lazy 로 하고 Order를 사용할 때 마다 쿼리 나감자주 사용되는 경우패치조인을 사용해서 한번에 같이 불러온다.컬렉션인 경우XToOne은 패치 조인 하고 @BatchSize를 사용해서 페이징 및 최적화 까지 챙긴다 제 생각으론 동작방법만 제대로 알고 있으면 실무에서는default_batch_fetch_size 는 계속 등록해서 글로벌로 사용하면 좋아보이는데 그게 맞나요 ?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
섹션 13에서 Bakec를 해도 벽을 타고 올라갑니다.
벽에는 파란색이 없는데도 왜 Player가 벽을 타고 다닐까요?
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
BTS 앱 이후 트와이스 앱을 실행 문의
트와이스 앱을 수정 실행 하면 왜 BTS의 매인 activity가 먼저 보여주고 트아와이스가 실행 되는지요?강사님 강의에서도 그렇게 되는데 궁급합니다분명 소스는 따로 존재하고 실행도 따로 하는데 앱이 하나 같이 보입니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
섹션 13 진행하다 보면 나오는 UnityChan 옆에 빨간 공이 뭘까요?
언젠가부터 씬에서 UnityChan 옆에 빨간 공들이 보입니다.이건 뭘까요?
-
해결됨스트림릿(Streamlit)을 활용한 파이썬 웹앱 제작하기
'기업의 평균 월급여, 연봉 추정하기 (국민연금 데이터 활용)' 강의 자료 요
'기업의 평균 월급여, 연봉 추정하기 (국민연금 데이터 활용)' 강의에서 소개된 kreditjob.com은 인터넷 검색을 해도 찾을 수가 없고, 주소창에 kreditjob.com을 입력했더니 'wanted insight'라는 회사명이 나옵니다. 해당 웹사이트를 뒤져봤지만, 강의 동영상에 노출된 것과 동일한 페이지는 찾을 수 없습니다.그리고, 강의 동영상에서 설명하신 '11-national-pension' 주피터 노트북 파일을 제공해 주실 수 있을까요?공공데이터 포털에서 다운받는 '국민연금공단_국민연금 가입 사업장 내역' 파일도 거의 100M에 육박하여 직접 포털에서 다운 받는 것 보다는 강의자료로 제공해 주시는 편이 좋을 것 같습니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
dio HTTP 요청 결과 처리
안녕하세요! dio 활용한 http 요청 처리에 대해 질문이 있습니다. 해당 프로젝트의 경우 http 요청의 response body에 맞는 model을 jsonSerializable로 생성하고, 해당 model을 return type으로 갖는 함수를 repository에 선언하여 response body를 model.fromJson 형태로 가져오는 걸로 이해했습니다. 하지만 이 경우 response body가 기존에 선언한 model의 형태와 동일한 경우에만 fromJson으로 받아올 수 있고, 다른 에러 코드 등(400 BAD_REQUEST)에 의해 response body가 다른 형태로 오게 된다면 처리가 불가능 할 것 같습니다. 이런 경우 프론트엔드에서 요청 처리를 어떻게 진행해야 하나요? repository의 함수에서 response.data 만 return 해주는 경우 해당 함수를 호출하는 다른 provider에서는 예외 처리가 어려울 것 같아서 질문드립니다!
-
미해결스프링 시큐리티
커스텀 필터 등록 시, ApplicationFilterChain 에 등록
안녕하세요 강의 잘 듣고 있습니다! SecurityConfig에서 커스텀 필터 등록 시 @Bean 형식으로 필터객체를 생성하여 등록하면 ApplicationFilterChain에 등록되는게 맞는걸까요? Bean 만 선언한다면 ApplicationFilterChain 에 등록되고addFilter(customFilter) 를 추가해주면 ApplicationFilterChain 리스트에도 등록되고SecurityFilterChain 에도 등록이 됩니다.문제는 제가 만든 커스텀 필터는, 특정 URL 에서는 동작 안하게끔 구현하고 싶은데@Bean으로 등록했기 때문에 ApplicationFilterChain에 등록되어 어떤 요청이 들어오든 동작하는 게 문제입니다. @Bean 방식이 아닌addFilter(New CustomFilter()) 로 하면 SecurityFilterChain에만 등록되긴 하는데 CustomFilter 는 스프링 컨테이너에 등록이 안되기 때문에 다른 Resource 객체들을 주입받지 못하는 상황입니다.결론은 ApplicationFilterChain에는 추가 안하고 SecurityFilterChain에만 커스텀 필터를 추가하고 싶은데 New 방식 말고는 없는 것인지가 궁금합니다!
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
캘린더 예제에서 한글 입력이 이상합니다.
캘린더 예제를 다 완성해서 돌려보고 있는데요.잘 돌아가는 거 같은데SW 키보드를 통한 입력도 그렇고HW 키보드를 통한 입력도 한글이 완성 조합이 안됩니다.정상) 테스트비정상) ㅌ ㅔ ㅅ ㅡ ㅌ ㅡ뭐가 문제일까요?
-
해결됨[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
로그 관련 질문입니다!
안녕하세요?선생님 강의와 똑같이 기입한 것 같은데선생님 화면에는 간단하게 "여기는 테스트 값입니다"가 나오지만 저는 저렇게 장황하게 나옵니다.혹시 이유를 알려 주실 수 있을까요?감사합니다.
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강신청 연장 요청 드립니다.
안녕하세요.좋은 강의 감사드립니다.시험일정을 차일피일 미루다 이제야 신청하게 되어, 수강시간 연장 요청 드립니다.확인 부탁드립니다.
-
미해결실무자를 위한 구글애널리틱스(GA4+GTM) 활용법(25년 Update)
트래픽 획득에서 세션 및 세션소스/매체와 관련하여
안녕하세요.애널리틱스에서 이렇게 소스/매체가 표시되고 있는데 이부분은 어떻게 삭제 및 변경을 할수 있는걸까요? 이렇게 utm을 심은 광고가 없는데 이렇게 나오고 있습니다.
-
해결됨[입문자를 위한 UE5] Part3. 언리얼 엔진 3D 게임 개발 입문
unreal C++
안녕하세요 강사님 너무 명 강의라서 unreal c++도 빨리 보고 싶은데 혹시 강의가 언제 올라오는지 알 수 있을까요? 그리고 만약 unreal 5.0 c++ 말고 이미 올려두신 unreal 4.0 c++을 본다면 5.0과 크게 차이가나서 학습의 효과가 떨어질까요?
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
DirectX 3D에 대해 질문이 있습니다
DX 3D를 배우면서 원초적으로 궁금한점이 생겼는데 저희는 지금 Vertex를 표현할때 x, y, z좌표를 사용해 도형을 표현해주는데 x, y 좌표는 모니터의 x, y 픽셀과 대응되기 때문에 자연스럽게 렌더링 시킬수 있다고하지만 z좌표는 도대체 어떻게 렌더링이 되는 건가요? 이건 DX 파이프라인에서 알아서 설정해주는 건가요?입력되는 데이터에 z좌표 하나를 추가로 넣어주는것 외에는 아무것도 하지 않았는데 어떻게 도형이 3D처럼 렝더링시킬 수 있는건가요?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
네이버 자동로그인
안녕하세요 네이버 자동로그인을 실행하면로그인 창이 떠요.from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By # 크롬 드라이버 자동 업데이트 from webdriver_manager.chrome import ChromeDriverManager # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option('detach',True) # 불필요한 에러 메시지 없애기 chrome_options.add_experimental_option('excludeSwitches',['enable-logging']) service = Service(executable_path=ChromeDriverManager().install()) driver = webdriver.Chrome(service=service,options=chrome_options) # 웹페이지 해당 주소 이동 driver.implicitly_wait(5) driver.maximize_window() driver.get('https://nid.naver.com/nidlogin.login?mode=form&url=https://www.naver.com/') # 아이디 입력 창 driver.find_element(By.CSS_SELECTOR,'#id') id.click() id.send_keys('sand12') # 비밃번호 입력 창 pw = driver.find_element(By.CSS_SELECTOR,'#pw') pw.click() pw.send_keys('yiiit!@') # 로그인 버튼 login_btn = driver.find_element(By.CSS_SELECTOR,'#log\.login') login_btn.click()
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
네이버 자동 로그인
안녕하세요 네이버 자동로그인 실행하면 네이버 로그인창이 떠요
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
vscode terminal 설정
안녕하세요 vscode terminal에서 cmd로 설정하면 한 번은cmd로 실행되고 두번 째 는 cmd 아래 python으로 실행됩니다여러가지로 cmd를 설정해도 마찬가지입니다답변 부탁드리면서 안녕히 계세요
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
Cannot resolve destination host 오류가 뜹니다
AccountServer #2 강좌에서 유니티 클라와 웹서버 연동 테스트하는 부분이 있는데테스트로 GameScene에다가 다음 두줄을 넣고 테스트하는 부분입니다. Managers.Web.BaseUrl = "https://localhost.5001/api"; WebPacket.SendCreateAccount("AAA", "1234"); 브레이크 걸고 확인해보니 웹서버에는 CreateAccount([FromBody] CreateAccountPacketReq req)가 실행조차 되지 않았습니다.웹서버에 연결 자체가 안되는 것 같은데 구글에 쳐봐도 잘 모르겠고어디가 문제인지 모르겠습니다.심지어 웹서버쪽 코드와 유니티쪽 WebManager.cs, Webpacket.cs 코드는 죄다 복붙으로 만들어서 오타가 있을 리가 없을텐데...로그가 생긴 함수는 다음과 같습니다.uwr.isNetworkError가 true라서 로그가 발생했습니다. IEnumerator CoSendWebRequest<T>(string url, string method, object obj, Action<T> res) { string sendUrl = $"{BaseUrl}/{url}"; byte[] jsonBytes = null; if (obj != null) { string jsonStr = JsonUtility.ToJson(obj); jsonBytes = Encoding.UTF8.GetBytes(jsonStr); } using (var uwr = new UnityWebRequest(sendUrl, method)) { uwr.uploadHandler = new UploadHandlerRaw(jsonBytes); uwr.downloadHandler = new DownloadHandlerBuffer(); uwr.SetRequestHeader("Content-Type", "application/json"); yield return uwr.SendWebRequest(); if (uwr.isNetworkError || uwr.isHttpError) { Debug.Log(uwr.error); } else { T resObj = JsonUtility.FromJson<T>(uwr.downloadHandler.text); res.Invoke(resObj); } } } 유니티 로그는 다음과 같습니다. Cannot resolve destination hostUnityEngine.Debug:Log (object)WebManager/<CoSendWebRequest>d__5`1<CreateAccountPacketRes>:MoveNext () (at Assets/Scripts/Managers/Contents/WebManager.cs:46)UnityEngine.SetupCoroutine:InvokeMoveNext (System.Collections.IEnumerator,intptr)