묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
HTTP도 소켓통신 인가요?
컴퓨터 네트워크는 OSI 7계층으로 통신한다고 하잖아요 그래서 응용계층의 HTTP 프로토콜도 통신하기 위해선 Transport Layer를 거쳐야한다는 건데... 1. 그렇다는건 웹서버도 리스너 소켓을 생성하는거겠죠? 그리고 크롬, 엣지, 파이어폭스 같은 브라우저들이 클라이언트라고 볼때 2. Connection을 요청하기 위해 브라우저들도 소켓을 생성하고 있다고 볼 수 있을까요? 3. 만약 그렇다면 http도 소켓 API를 사용하는데 왜 http는 소켓 통신과 다르다고 하는걸까요?
-
미해결Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념
여러 개 mixin을 전역으로 설정하여 사용할 때, 마지막 mixin 만 적용됩니다.
선생님 안녕하세요~ ^^;다크모드, 폰트크기를 로컬스토리지에 저장하여, 재 방문시에도 적용되게 하려고하는데,처음에 적용한 mixin은 적용되지 않고, 마지막 mixin만 적용됩니다.둘 중 하나만 적용하면, 잘 적용됩니다.어떻게 하면, 두 mixin 모두 적용되게 할 수 있을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Domain에 대해서 궁금한점이 있습니다
요즘 DDD관련 도서를 읽고 있는데 강사님이 스프링 강의때도 그렇고 Domain과 web을 분리해서 개발을 하시더라구요? 이게 도메인 주도 개발을 생각을 하시면서 무의식적으로 그렇게 개발을 하시는건가요??
-
미해결스프링 시큐리티
web ignoring을 설정해도 favicon.ico가 계속 302 redirect 됩니다.
안녕하세요, 강의 잘 보고 있습니다. 다만 실전 프로젝트 중 WebIgnoring 을 강사님이 하신 것 처럼 똑같이 따라 했는데도 불구하고 계속 favicon.ico가 302 redirect 됩니다. (아직 로그인 인증을 받지 않은 상태에서 루트 경로로 접속 시) 인텔리제이도 재시작 해보고, 인텔리제이 메뉴에서 invalidate caches/restart도 봤으나 결과는 계속 localhost:9090/login 으로 302 redirect 입니다. 제가 따로 web.ignoring().antMatchers("/favicon.ico", "/**/favicon.ico");와 같이 코드를 추가했어도 계속 302 redirect가 발생되네요. web.ignoring().antMatchers("/favicon.ico", "/**/favicon.ico"); [이 코드를 추가 하나 안 하나 변함 없이 302 redirect가 됩니다] 해결 방법이 있을까요? 감사합니다. (혹시 제가 이전에 올린 질문 글도 답변 부탁드려도 될까요...?) @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // memory 방식으로 사용자 build String password = passwordEncoder().encode("1111"); auth.inMemoryAuthentication().withUser("user").password(password).roles("USER"); auth.inMemoryAuthentication().withUser("manager").password(password).roles("MANAGER", "USER"); auth.inMemoryAuthentication().withUser("admin").password(password).roles("ADMIN", "MANAGER", "USER"); } @Bean public PasswordEncoder passwordEncoder() { ; return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } @Override public void configure(WebSecurity web) { web.ignoring() .antMatchers("/favicon.ico", "/**/favicon.ico"); web.ignoring() .requestMatchers(PathRequest.toStaticResources().atCommonLocations()); } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/").permitAll() .antMatchers("/mypage/**").hasRole("USER") .antMatchers("/messages/**").hasRole("MANAGER") .antMatchers("/config/**").hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin(); } } 감사합니다.
-
미해결해외취업 ASP.NET Core 웹개발 기본 강좌
마이그레이션 오류
마이그레이션을 시도할시 위와같은 오류가 발생하는데 혹시 원인이 어떻게 될까요?
-
미해결냉동코더의 알기 쉬운 Modern Android Development 입문
liveCounter 질문있습니다.
observe부분에서 "counter -> " 이부분의 counter는 viewmodel의 counter와는 다른것 맞나요? 그리고 viewmodel 의 counter와 다르다면 어떤걸 뜻하는지 알고싶습니다.
-
미해결스프링 기반 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번처럼 미리 알고있어야 하는걸까요?