묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
OOP 대해서..그중에 extends 로 여러번 상속될수 있는지 상속
OOP를 완강했습니다. 그런데 ...기본적으로 extends object가 있는건데 그렇되면 또 extends로 상속한다면 상속된 class를 또 상속할수 있다는 뜻인가요? 아니면 Object에 한정된 예외적인 경우인가요
-
미해결Vue.js + TypeScript 완벽 가이드
vue-advanced 프로젝트 권한 요청 부탁드립니다
안녕하세요 선생님 2번째 프로젝트 vue-advanced repository에 접속하기 위해서는 권한이 필요한 건가요? 그렇다면 부탁드리겠습니다. mallangyi@naver.com 입니다.
-
미해결지금 바로 D3.js 시작하기 : 웹 데이터 시각화
강의 잘듣고 있습니다.^^
강의 잘듣고 있습니다. 제가 필요한 그래프가 heatmap 그래프인데 연속적인 데이터(사이즈가 256x256 )가 들어가면서 heatmap 그래프가 대략 20ms정도의 주기로 업데이트가 되는데 제가 아직 enter, update,exit에 대한 개념이 약해 이게 속도가 이렇게 나오지 않네요 혹시 enter,update,exit에 대한 개념과 이게 합쳐진게 join 이라고 알고있는데 join에 대한 개념도 알수 있을까요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
질문이염!
질문드려영!
-
미해결Three.js로 시작하는 3D 인터랙티브 웹
얼굴을 그리려고 브러쉬로 그리는데
얼굴을 그리려고 브러쉬 검은색으로 해서 그리는데 얼굴 앞면에 그렸는데 색칠이 반대편에 됩니다... ㅠㅠ 그래서 반대편으로 돌려서 뒤통수에 색칠하면 이번엔 원래 얼굴쪽에 색칠이 되구요.. 관통되서 반대편에서 색칠되는데 이건 어떻게 하나요..? ㅠㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
인텔리제이가 jsp를 인식 못하는 거 같습니다..
url로 들어가보면 jsp가 잘 뜨긴하는데, ide에서는 인식이 안되는지.. 자동 import도 안되고.. 아래 사진과 같은 상황입니다 ..
-
미해결유니티 머신러닝 에이전트 완전정복 (기초편)
GridAgent.cs에서 sensor가 null입니다.
안녕하세요 GridAgent.cs 코드에서 public override void CollectObservations(VectorSensor sensor) { ... // sensor 부분이 null로 전달됩니다. // 일단 널처리는 했지만 왜 null로 오는지 궁금합니다. Debug.Log(sensor); if (sensor != null) { sensor.AddObservation(transform.position.x); sensor.AddObservation(transform.position.z); // 각각 도형에 대한 좌표 List<int> otherPos = area.otherPos; for (int i = 0; i < otherPos.Count; i++) sensor.AddObservation(otherPos[i]); } } 감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
return할 때 질문이 있습니다!
bindingResult에 오류가 있으면 editForm으로 돌아가는데, 이때 리다이렉트를 사용해서 돌아가도 문제가 없는지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
인텔리제이가 jsp를 인식 못하는 것 같습니다..
(사진)
-
미해결[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과 상품 정보를 같이 데이터베이스로 보내서 상품 하나를 만듭니다. 혹시 이런방법이 실무등에서 쓰이게 되나요? 아니면 더 좋은 방법이 있을까요?