묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 기반 REST API 개발
부트 + jupiter 인 경우 설정법
@SpringBootTest @AutoConfigureMockMvc @ExtendWith(RestDocumentationExtension.class) class EventControllerTest { private MockMvc mockMvc; private WebApplicationContext webApplicationContext; private final ObjectMapper objectMapper; private final EventRepository eventRepository; @Autowired public EventControllerTest(WebApplicationContext webApplicationContext, ObjectMapper objectMapper, EventRepository eventRepository) { this.webApplicationContext = webApplicationContext; this.objectMapper = objectMapper; this.eventRepository = eventRepository; } @BeforeEach public void setUp(RestDocumentationContextProvider restDocumentation) { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext) .apply(documentationConfiguration(restDocumentation)).build(); } //..... 이하 생략 }
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
질문드립니다
항상 친절한 강의와 답변 모두 감사드립니다! 강의듣다가 두 가지 질문이있는데요. MemberService.update Method 에서 return 값으로 Member를 넘기게 되면 영속성이 끊긴다고 하셨는데 그러면 Controller 쪽에서 Member updateMember = memberService.update(id, name); 라고 하면 이 updateMember 는 준영속 상태인가요 ? 그리고 일단 기본적으로 독립된 트랜잭션마다 각각 다른 영속성 컨텍스트가 생성되는 게 맞죠? (OSIV 는 추후 듣도록 하겠습니다!)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
datasource 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]SpringConfig 파일의 datasource 관련해서 문제가 생깁니다. 컴파일을 하고 localhost 페이지에 들어가는건 가능하지만, 회원 목록 페이지와, 회원 등록란에 등록버튼을 누르게 되면 오류가 생깁니다
-
미해결웹 게임을 만들며 배우는 React
useEffect, useState, 비동기 처리
useEffect(() => { if (isFoucused) { async function load() { try { const rawData: any = await AsyncStorage.getItem('data'); const savedData = JSON.parse(rawData); setData(savedData); } catch (e) { console.log('data load error'); } try { const newObject = data .filter(oneData => oneData.type == 'blank') .map(oneData => ({ key: oneData.key, value: '', })); setBlankDescription(newObject); } catch (e) { console.log('BlankDescription load error'); } } load(); } }, [isFoucused]); 이와 같은 방법으로 비동기를 처리하려 하면 이때 data는 setData가 정의되기 전의 값이 나옵니다. useState 값이 useEffect 내부에 있는 함수가 다 실행이 끝난뒤에 해당 값이 바뀌기 때문인가요? useEffect(() => { if (isFoucused) { async function load() { try { const rawData: any = await AsyncStorage.getItem('data'); const savedData = JSON.parse(rawData); setData(savedData); //이 부분이 문맥상 분리시켜줘야 깔끔할 것 같아서 //해당 부분을 다른 try구문으로 빼려고 했지만, //원활한 비동기 처리를 위해선 savedData를 바로 사용해줘야한다. const newObject = savedData .filter(oneData => oneData.type == 'blank') .map(oneData => ({ key: oneData.key, value: '', })); setBlankDescription(newObject); } catch (e) { console.log('data load error'); } } load(); } }, [isFoucused]); 위 처럼 savedData를 바로 사용해주면 원하는 대로 비동기 처리가 잘 진행 되었습니다. 이렇게 하지 않고 useState값을 변경해준 뒤에 그 useState 값을 사용하면 안 되는 이유 부탁드립니다.. ㅠㅠ
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
멀터를 사용하는데 파일은 저장되지만 @uploadedFile()에서 파일을 불러올 수가 없습니다.
안녕하세요 윤상석님. 윤상석님께서 멀터 강의를 하실 때 사용하신 코드를 제가 잘 재구성해서 사용하고 있습니다. // multer.config.ts import { Logger } from "@nestjs/common"; import { MulterOptions } from "@nestjs/platform-express/multer/interfaces/multer-options.interface"; import * as fs from "fs"; import * as path from "path"; import * as multer from "multer"; export class MulterConfig { static createFolder(folder1: string, folder2: string) { const logger = new Logger("Multer"); try { logger.log("create uploads folder"); fs.mkdirSync(path.join(__dirname, "../../../uploads")); } catch (err) { logger.log("uploads folder is already exist"); } try { logger.log(`create ${folder1}folder into uploads foler`); fs.mkdirSync(path.join(__dirname, `../../../uploads/${folder1}`)); } catch (err) { logger.log(`${folder1} is already exist`); } try { logger.log(`create ${folder2}folder into uploads folder`); fs.mkdirSync(path.join(__dirname, `../../../uploads/${folder2}`)); } catch (err) { logger.log(`${folder2} is already exist`); } } static storage(folder: string): multer.StorageEngine { return multer.diskStorage({ destination(req, file, cb) { const folderName = path.join(__dirname, `../../../uploads/${folder}`); cb(null, folderName); }, filename(req, file, cb) { const ext: string = path.extname(file.originalname); const fileName = `${path.basename( file.originalname, ext, )}-${Date.now()}${ext}`; cb(null, fileName); }, }); } static apply(folder: string) { const result: MulterOptions = { storage: this.storage(folder), }; return result; } } 그리고 이미지 등을 업로드를 할때 다음과 같은 코드를 사용합니다. // upload.controller.ts import { Controller, Get, Post, Body, Patch, Param, Delete, UseGuards, UseInterceptors, UploadedFile, Res, } from "@nestjs/common"; import { UploadService } from "../../upload/services/upload.service"; import { ImageReturnDto } from "../../upload/dto/image-return.dto"; import { IsLoginGuard } from "src/common/guards/isLogin.guard"; import { MulterConfig } from "src/common/config/multer.config"; import { FileInterceptor } from "@nestjs/platform-express"; import { GetDecodedJwt } from "src/common/decorators/get-decoded-jwt.decorator"; import { JwtPayload } from "src/common/interfaces/jwt-payload.interface"; import { JSON } from "../../../common/interfaces/json-success.interface"; import { Response } from "express"; import { CookieOption } from "src/common/config/etc"; import { ProductImageCookieKey } from "./../../../common/config/etc"; import { IsAdmin } from "src/common/decorators/isAdmin.decorator"; @Controller("upload") export class UploadController { constructor(private readonly uploadService: UploadService) { MulterConfig.createFolder("image", "video"); } @UseGuards(IsLoginGuard) @UseInterceptors(FileInterceptor("image", MulterConfig.apply("image"))) @Post("/image-for-product") async uploadImgForProduct( @IsAdmin() @UploadedFile() file: Express.Multer.File, @GetDecodedJwt() jwtPayload: JwtPayload, @Res() res: Response, ): Promise<JSON<ImageReturnDto>> { console.log("logging image info ->\n", file); const result = await this.uploadService.uploadImgForProduct( file, jwtPayload, ); res.cookie(ProductImageCookieKey, result.url, CookieOption); return { statusCode: 201, message: "사진을 업로드 하였습니다.", result, }; } } 상품 사진을 업로드 하기 위해서 만든 코드인데 상품에 사진 하나만 사용하기 위해 FilesInterceptor대신 FileInterceptor를 사용했습니다. 그리고 폴더를 만드는 메서드는 분리해서 따로 사용합니다. 포스트맨 등으로 해당 api에 사진을 formData에 담고 이미지를 아래 처럼 키값으로 담았습니다. 해당 이미지는 그림으로 배우는 SQL 입문이라는 책의 표지입니다. 요청을 보내면 아래에 storage 메서드에 콜백 함수안에 제가 브레이크 포인트를 걸어두어 저쪽에 도달합니다. storage 메서드를 실행하고 이제 컨트롤러에 도달하면 uploads/image 디렉터리에 사진이 저장됩니다. 이미지를 열어보면 정상적으로 불러와집니다. 근데 문제가 @UploadedFile()데코레이터를 file에 붙여 주었고 타입을 Express.Multer.File로 붙여 주었는데도 file을 콘솔로찍으면 undefined가 나옵니다. 어디가 문제인지 알 수 있을까요? 그리고 번외로 상품을 만든다고 가정할 때 body에 form 데이터와 raw/json값을 동시에 담지 못해서 저는 먼저 이미지를 업로드 하고 이미지의 url을 쿠키로 보내어서 상품 정보를 만드는 컨트롤러에서 쿠키에 있는 url과 상품 정보를 같이 데이터베이스로 보내서 상품 하나를 만듭니다. 혹시 이런방법이 실무등에서 쓰이게 되나요? 아니면 더 좋은 방법이 있을까요?
-
미해결CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
시스템 콜이 없다면 커널모드는 어떻게 들어갈수있나요??
안녕하세요 강사님 강의를 듣다가 궁금해졌습니다 시스템콜로 인해 OS별로 신경쓰지않고 동일한 코드 한줄로 코딩할수있게 되며, 없을경우 OS별로 직접 따로 정의해주어야한다고 이해했습니다 근데 시스템콜로인해 커널모드로 진입하는걸로 알고있는데 시스템콜이 없을경우 커널모드로 진입할수없게되면 커널모드의 기능은 사용하지못하는것 아닌가요??
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
개정판이랑, 이전 책 차이
안녕하세요 책은 예전에 구매했어서 2021년도 버전인데 2022년도 버전으로 또 나왔더라고요 강의는 어제 구매하여 2022년도 버전인데 2021 버전의 책을 보면서 2022 버전의 강의를 보는데 큰 무리는 없을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
hbm2ddl 설정 관련 안전장치
정말 예민한 옵션부분인걸 강사님께서 강조를 많이 해주셨는데 혹시 프로그램적으로 안전장치를 걸 수 있는 방법은 없을까요? 그냥 배포하거나 실행하기전에 개발자가 꼼꼼히 볼 수 밖에 없나요 ?
-
미해결데브옵스(DevOps)를 위한 쿠버네티스 마스터
jupyterlab 은 pod로 실행할수 있을까요?
jupyter lab은 ML, 학습등 작업을 걸어두고 기다리는 경우가 잦은데, pod는 언제든지 삭제될 수 있잖아용 그럼 jupyter lab같은 것들은 순수 컨테이너로만 사용해야하나요? 아니면 다른 k8s기능이 있을까요/>?
-
해결됨[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
static
static 사용하는 도중에 궁금한 점이 있습니다. 일단 제가 수강하면서 작성한 코드입니다. void main() { Employee seulgi = Employee('seulgi'); Employee chocho = Employee('chocho'); seulgi.printNameAndBuilding(); chocho.printNameAndBuilding(); Employee.building = 'OTO'; seulgi.printNameAndBuilding(); chocho.printNameAndBuilding(); Employee.printBuilding(); } class Employee { //static 은 instance에 귀속되지 않고 class에 귀속된다. static String? building; final String name; Employee( this.name, ); void printNameAndBuilding() { print('My name is $name. $building is my workplace'); } static void printBuilding() { print('im working on $building'); } } 여기서 static을 사용할떄 Employee.building을 사용했는데 building은 constructor안에서 사용되지 않았으니 class같은데 맞나요? 그렇다면 class안에서 선언된 name도 static처럼 값을 바꿔도 되나요?
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
맥북 환경
안녕하세요 강의 잘 듣고 있습니다! 제가 지금 맥북 로컬 환경에서 코드를 실행 시켜려고 하는데 cfg.device = 'cpu' 로 설정하고 train_detector(model, datasets, cfg, distributed=False, validate=True) 를 실행했을 때 아래와 같은 오류가 발생합니다. RuntimeError: DataLoader worker (pid(s) 11663) exited unexpectedly 로컬 환경에서 돌리기 위해서는 nvidia GPU 컴퓨터에서 cuda를 따로 설치하여야 이번 강의 코드를 실행 시킬 수 있는 건가요? cuda 관련하여 아직 지식이 많이 부족합니다 ㅜ 혹시 맥북에서 cpu를 사용하여 실행 시킬 수 있는 방법이 없을 까요?
-
미해결Vue.js 끝장내기 - 실무에 필요한 모든 것
대부분 파일에서 첫번째 단어에 붉은 밑줄이 생기며 오류가 뜹니다.
ESLint 에러가 화면에 표시되지 않게 하는 방법 까지 했는데 저렇게 오류가 나서 진도를 못나가고 있어요 ㅠㅠ
-
미해결데브옵스(DevOps)를 위한 쿠버네티스 마스터
namespace 사용
안녕하세요 강사님. namespace를 사용하다 궁금한점이 있어서 질문드립니다. namespace는 application 별로 구분하는 것이 좋은가요? 예를 들어, airflow, granfa, prometheus 각각 namespace를 갖는 방법 아니면, prd, dev 등으로 추상화하고 그 안에 모든 application을 넣는 것이 좋은가요? 실제로는 어떻게 사용하는지 궁금합니다.
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
node_module 질문 드립니다.
안녕하세요! 강사님. 강의 내용 중 궁금한점이 생겨 질문 작성하였습니다.Volume을 사용하여, Docker에서 Local 폴더 (혹은 파일)을 참조하는 부분에서 어떤 폴더(혹은 파일)이 생성될지 미리 알고 있어야 하나요?예를들어, 1. node를 활용한 application을 만들 때, 종속성을 담은 node_module 폴더가 생긴다는 사실을 이미 알고 있다.2. docker의 volume 기능을 활용하고자, -v /usr/src/app/node_module -v $(pwd):/usr/src/app으로 docker를 실행한다. 여기서 1번처럼 미리 알고있어야 하는걸까요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
네트워크 입출력이 아닌 파일입출력에서의 직렬화
파일 입출력 할 때 파싱하는것과 패킷 열어보는거랑 비슷한 느낌이 들었습니다. 그렇다면 엔진같은곳에서 저장하는 프리팹, 씬 등의 정보도 직렬화 시켜서 저장하는게 더 효과적인가요? 강의 내용처럼 저도 학원에서 통째로 저장하다가 터져서 하나씩 따로 수동으로 했었는데 3편까지 보고오니 굉장히 효율적이라고 생각나서 질문드려요 결론 : 네트워크 외의 모든 저장할 파일은 직렬화를 통해 저장하는게 좋나? 가 궁금증입니다
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
반례를 알고 싶습니다!
const solution = (m, arr) => { let min = Math.floor(arr.reduce((acc, cur) => acc + cur, 0) / m); let sum = 0; let result = 0; for (let i = 0; i < arr.length; i++) { if (sum + arr[i] >= min) { result = sum + arr[i]; sum = 0; } sum += arr[i]; } return result; };
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
이전 오류는 해결했지만 여전히 input box text내용이 추가가 안됩니다.
해결을 못 하고 있습니다..
-
미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
NonBlocking IO와 코루틴 에 대한 질문이 있습니다.
강의에서 (08:29) "서브와 메인이 서로 제어권을 주고받는 게 NonBlocking IO 이며, 타 함수는 작업을 지속한다" 라고 필기를 해주셨는데요. 여기서 의문이 생겼습니다. 서브와 메인이 서로 제어권을 주고받는 건 코루틴인데.. 제가 코루틴을 이해하기로는 코루틴이 작업을 끝내기 전까지 다른 함수(메인)들이 그 작업을 기다리고 있는 것으로 알고있었습니다. 어떻게 코루틴이 작업을 하는동안 타 함수가 일을 지속할 수 있는지 이해가 잘 안됩니다. 제어권을 전달한다는 자체가 Blocking 작업이라는 거 아닌가요? 저는 오히려 코루틴은 Blocking 이고 스레드가 NonBlocking 이라고 이해가됩니다. 제가 틀린건가요?
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
권한요청드립니다.
-인프런 아이디 : sunny_pk@naver.com -인프런 이메일 : sunny_pk@naver.com -github 아이디 : park.sunny74@gmail.com -github username : sunnypk74
-
미해결PHP 7+ 프로그래밍
터미널로 php 실행시 document root 지정
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. $php -S localhost:8080 -t lang/BasicSyntax/HTMLTemplate/ 이부분에서 경로 지정시 강의 내용을 보면 현재 파일 위치가 d://Development/php/phplec/lang/BasicSyntax/HTMLTemplate 인것 같은데 document root 지정시에서는 저렇게 lang 폴더부터 써줘도 되는건가요? 다른 설정이 필요한건지 제 윈도우에서는 제대로 진행이 되지 않습니다.