묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결대세는 쿠버네티스 (초급~중급편)
nodePort와 hostPort에 대해 질문 있습니다!
hostPort는 DaemonSet을 생성할때 지정할 수 있는데DaemonSet에 의해 Kubernetes Cluster에 존재하는 모든 Node에 생성된 Pod에 대해Node ip/host포트번호 를 통해 접근할 수 있도록 해주는 것이고, nodePort는 하나의 service object 종류로서service에 연결된 모든 pod에 대해클러스터 외부에서 service를 접근하더라도 pod에 접근할 수 있도록 해주는 서비스가 맞는지제가 잘 이해했는지 궁금합니다!
-
해결됨차량 번호판 인식 프로젝트와 TensorFlow로 배우는 딥러닝 영상인식 올인원
크래프트 모델 다운 못받는 이유가 있을까요?
h5 모델 둘 다 같은 경로에 있는데 왜 이런걸까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
save() 테스트 시 findById() 사용 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용][선생님 테스트 로직]@Test void save() { Member member = new Member("hello", 20); Member savedMember = memberRepository.save(member); Member findMember = memberRepository.findById(savedMember.getId()); assertThat(findMember).isEqualTo(savedMember); }다음의 코드와 같이 선생님께서는 save() 테스트를 할 때 findById() 로직도 사용하시는 것을 확인할 수 있었습니다.하지만 findById() 로직은 아직 테스트를 거쳐서 검증받지 못한 로직이므로 findById()를 쓰는 것이 아닌 순수 save()만 가지고 테스트를 해야하지 않을까 하는 궁금증이 생겼습니다! [제 테스트 로직]@Test void save() { Member member = new Member("hello", 20); Member savedMember = memberRepository.save(member); assertThat(member).isEqualTo(savedMember); }그래서 이런 식으로 테스트 하는 것이 어떠한지 선생님께 질문 드리고 싶습니다!들여쓰기가 안 되어서 올라갔네요 ㅠㅠ..!! 수정해서 다시 올렸습니다 !
-
미해결홍정모의 따라하며 배우는 C언어
Printf 함수와 putchar 함수 관련 질문입니다.
강의를 듣다가 아래 사진은 제가 직접 짠 코드고 위의 사진은 교수님이 보여주신 정답코드인데 printf함수를 putchar 함수로 바꾸니 원하는 결과가 나왔습니다. Printf함수로는 왜 안되는건가요??
-
미해결
8080 포트 죽여도 죽여도 계속 살아납니다.
현재 Mac 이용중입니다. 8080 포트가 사용중이길래, 터미널 열어서 lsof -i: 8080 명령어 입력 후해당 port 를 종료하는 명령어를 입력해도계속 해서 8080 port 가 되살아납니다.매번 프로젝트 만들 때마다 8081로 변경하는 게 너무 불편한데,이런 경우는 어떻게 해결해야 할까요 ? 브라우저에 http://localhost:8080 을 입력하니이렇게 나오는데 뭐가 문제일까요 ?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
자바 17버전
나도 코딩님 강의로 자바를 수강을 완료한 후 스프링 공부를 위해 자바 17 다운 스프링 다운을 받았는데해당 화면이 되었습니다. 궁금한게 다시 하루에 한 번씩 나도 코딩님 강의를 복습하고 싶은데 자바 17에서 컴파일이 될까요? 똑같이 src 부분에서 (예) cha_04_ ) 이런식으로 작성 후 공부하면 될까요?그전에 나도 코딩님강의로 공부한 javaworkspace 프로젝트 파일을 다시 불러올수는없는건가요?ㅠㅠ
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
figma에서 code가 보이질 않아요.
figma에서 클릭을 해서 눌러도 옆에 properties/comment/Export 이 칸에서 code가 따로 보이지 않습니다. 어떻게 된건가요?
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
표의 행 부분(다중)을 반복 질문
안녕하세요. 일코님 강의 잘 보고 있습니다. 아래그림과 같은 표에서 빨간색 부분만 다중 행(동적으로 Data수량만큼)으로 만들고 싶은데,방법이 생각나지 않아.. 문의 드려요.. (답변 미리 감사드립니다.)
-
미해결스프링 핵심 원리 - 기본편
@Autowired 주입
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 중 @Autowiredpublic DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) { this.policyMap = policyMap; this.policies = policies; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); }이 코드에서 Autowired로 DiscountPolicy에 해당하는 빈을 불러와 Map에 저장하는걸로 알고있는데 수업 내용 중 @Autowired는 타입으로 조회를 해 2개 이상인 경우에는 오류나 난다고 배웠습니다. 그렇다면 1개를 선택해야하는데 2개 이상이 있기 때문에 오류가 발생하는것이고 Map처럼 여러 개를 넣을 수 있는경우는 상관이 없는건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링 핸들러매핑, 핸들러 어댑터, 컨트롤러
안녕하세요!스프링 MVC와 관련하여 궁금한 점이 있습니다.스스로 만든 프레임워크에서는 다양한 형태의 헨들러를 다루기 위해 핸들러 어댑터 목록과 핸들러 매핑을 도입한 것으로 이해하고 있습니다. 스프링 MVC의 경우 99.9% RequestMappingHandlerMapping 과 RequestMappingHandlerAdapter를 쓴다고 강의자료에 나와 있는데요, 그렇다면 사실상 핸들러(컨트롤러)도 하나의 통일 된 형태를 가지고 있는건가요? 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-F 질문입니다.
http://boj.kr/ffa390ab1d0145a8a863f6733fdf21f0k가 주어졌을 때, a n t i c은 무조건 배워야하니까 21개 중 k-5개를 뽑는 경우의 수에서 기저사례에서 최댓값을 갱신하는 방법으로 코드를 짰는데요..제 코드 시간 복잡도를 계산해보면 21C(k-5)*50*15로 계산했습니다(50은 단어의 최대개수,15는 k의 최대 범위). 궁금한 점은 1.저의 코드의 시간복잡도 계산을 저렇게 하는게 맞는지 2. 왜 시간초과가 나는지 모르겠습니다.
-
미해결김영한의 실전 자바 - 기본편
키보드 뭐쓰는지 궁금해요ㅠㅠ
학습과 관련은 없지만, 키보드 소리가 너무 좋아서요..
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
인텔리제이 자바버전 17버전..
스프링 공부떄매 17버전을 쓰고있는데 17버전에서는 해당 강의들으면서 실습 불가능한가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
repository 관련 질문입니다.
[질문 내용]안녕하세요 김영한님 강의를 듣다 의문점이 생겨서 질문을 드립니다. 무료 강의 수강 후 해당 강의를 JPA 기본서와 함께 공부 중인 학생입니다. repository관련해서 어떤 방식이 맞는지 헷갈려서 질문드렸습니다. 무료 강의 기준에선 repositry안에 있는 interface를 상속받아서 엔티티이름Repository형식으로 구현하셨는데 해당 JPA활용1 강의에선 상속 없이 class파일로 만들어서 어떤 방식이 맞는지 모르겠습니다.
-
해결됨[UI3 업데이트] 피그마 배리어블을 활용한 디자인 시스템 구축하기
ui component library 관련
안녕하세요, 현재 섹션4 라벨과 컨트롤그룹 수강하고 있습니다.강의보면 ui component library 예시로 보여주셨는데 공유를 해주시는 자료인가요? 열심히 수강 중인데 제가 놓친게 있나 해서 여쭤봅니다.감사합니다!
-
해결됨[R을 R려줘] R 기초다지기
스크립트 사이드바 x 표시
rstudio에서 script의 사이드바에 잘못된 문자열을 입력하였을 때 빨간색 x가 표시가 안되는데 표시가 되도록 하는 방법이 있나요?
-
미해결파이썬으로 영화 예매 오픈 알리미 만들기
python-telegram-bot 2021년 20 버전 이후
python-telegram-bot 20 버전부터는 비동기 프로그래밍이 적용되어 강의와는 다른 코드가 필요합니다. https://github.com/python-telegram-bot/python-telegram-bot/wiki/Introduction-to-the-API 위 깃허브 python-telegram-bot 공식 위키 페이지로 가시면 필수적이고 간단한 용례들을 보실 수 있습니다.
-
해결됨Flutter 앱 개발 실전
riverpod 코드 변경 질문
안녕하세요. Provider 로 된 코드를 Riverpod 로 변경 해보려고 하면 벽에 부딪쳐네요. class CartService with ChangeNotifier { List<CartItem> _cartItemList = const []; List<CartItem> get cartItemList => _cartItemList; // 상품 목록 // 선택된 상품 목록 List<CartItem> get selectedCartItemList { return _cartItemList.where((cartItem) => cartItem.isSelected).toImmutable(); // cartItemList에서 isSelected 값이 true 항목만 불변 배열로 반환하는 Getter를 구현 } // 상품 추가 void add(CartItem newCartItem){ _cartItemList = [..._cartItemList, newCartItem].toImmutable(); notifyListeners(); } // 상품 수정 void update(int selectedIndex, CartItem newCartItem) { _cartItemList = _cartItemList.asMap().entries.map((entry) { return entry.key == selectedIndex ? newCartItem : entry.value; }).toImmutable(); notifyListeners(); /*** * 업데이트하고 싶은 항목의 인덱스인 selectedIndex에 해당하는 항목을 * 새로운 newCartItem으로 변경하여 새로운 불변 배열을 생성하도록 구현 */ } // 상품 삭제 void delete(List<CartItem> deleteList){ _cartItemList = _cartItemList.where((cartItem) { return !deleteList.contains(cartItem); }).toImmutable(); notifyListeners(); /*** * 삭제하고 싶은 목록을 deleteList로 전달받고, * 해당 배열에 들어있지 않은 CartItem만 남긴 불변 배열을 생성하도록 구현 */ } } 위 코드를 아래와 같이 변경하고자 일부 구현을 해보고 있습니다. 틀린 부분 수정 및 상품 수정 코드를 어떻게 추가해야 될까요?final cartProvider = NotifierProvider<CartNotifier, List<CartItem>>(CartNotifier.new); class CartNotifier extends Notifier<List<CartItem>> { @override List<CartItem> build() => const []; // 상품 목록 // 상품 추가 void add(CartItem newCartItem){ state = [...state, newCartItem]; // state 는 immutable 데이터이기 때문에 직접적으로 state 를 변경할 수 없다. } // 상품 삭제 void delete(List<CartItem> deleteList){ state = state.where((cartItem) => cartItem != deleteList).toList(); } // 상품 수정 void update(int selectedIndex, CartItem newCartItem) { // CartItem 에 유니크한 id 값이 없는 거 같고, 선택한 index 값으로 찾아서 update 해야 하는데 모르겠음. } /* state = [ for (final item in state) if (item.id == id) newCartItem else item, ]; */ // 선택된 상품 목록 List<CartItem> get selectedCartItemList { return state.where((cartItem) => cartItem.isSelected).toList(); } }
-
해결됨이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
Content Brower 안뜨게 할순 없을까요?
안녕 하세요.언리얼 엔진을 처음에 구동하면Content Brower이 자동으로 뜹니다.이거 안뜨게 할순 없을까요?언리얼 에디터만 떴으면 좋겠습니다.
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
Exception Filter편에서 POST할 때 EntityMetadataNotFoundError에러가 납니다.
// users.module.ts import { Module } from '@nestjs/common'; import { UsersService } from './users.service'; import { UsersController } from './users.controller'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Users } from '../entities/Users'; @Module({ imports: [TypeOrmModule.forFeature([Users])], providers: [UsersService], controllers: [UsersController], }) export class UsersModule {}// app.module.ts import { MiddlewareConsumer, Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { ConfigModule } from '@nestjs/config'; import { LoggerMiddleware } from './middlewares/logger.middleware'; import { UsersModule } from './users/users.module'; import { WorkspacesModule } from './workspaces/workspaces.module'; import { ChannelsModule } from './channels/channels.module'; import { DmsModule } from './dms/dms.module'; import { UsersService } from './users/users.service'; import * as process from 'process'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Users } from './entities/Users'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true }), UsersModule, WorkspacesModule, ChannelsModule, DmsModule, TypeOrmModule.forRoot({ type: 'mysql', host: 'localhost', port: 3306, username: process.env.DB_USER, password: process.env.DB_PW, database: process.env.DB_NAME, entities: ['./entities/*.{js,ts}'], synchronize: false, logging: true, keepConnectionAlive: true, migrations: [__dirname + '/src/migrations/*.ts'], }), TypeOrmModule.forFeature([Users]), ], controllers: [AppController], providers: [AppService, UsersService], }) export class AppModule { configure(consumer: MiddlewareConsumer): void { consumer.apply(LoggerMiddleware).forRoutes('*'); } }// users.controller.ts import { Body, Controller, Post, Get, Req, Res, UseInterceptors, } from '@nestjs/common'; import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; import { JoinRequestDto } from './dto/join.request.dto'; import { UsersService } from './users.service'; import { UserDto } from '../common/dto/user.dto'; import { User } from '../common/decorators/user.decorator'; import { UndefinedToNullInterceptor } from '../common/interceptors/undefinedToNull.interceptor'; @UseInterceptors(UndefinedToNullInterceptor) @ApiTags('USER') @Controller('api/users') export class UsersController { constructor(private usersService: UsersService) {} //..... @ApiOperation({ summary: '회원가입' }) @Post() async join(@Body() body: JoinRequestDto) { await this.usersService.join(body.email, body.nickname, body.password); }import { HttpException, Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Users } from '../entities/Users'; import bcrypt from 'bcrypt'; @Injectable() export class UsersService { constructor() {} @InjectRepository(Users) private usersRepository: Repository<Users>; getUser() {} async join(email: string, nickname: string, password: string) { const user = this.usersRepository.findOne({ where: { email } }); if (!email) { throw new HttpException('이메일이 없습니다.', 400); } if (!nickname) { throw new HttpException('닉네임이 없습니다.', 400); } if (!password) { throw new HttpException('비밀번호가 없습니다.', 400); } if (user) { throw new HttpException('이미 존재하는 사용자입니다.', 400); } const hashedPassword = await bcrypt.hash(password, 12); await this.usersRepository.save({ email, nickname, password: hashedPassword, }); } }// a-nest/src/entities/Users.ts import { Column, Entity, Index, OneToMany, PrimaryGeneratedColumn, } from "typeorm"; import { Channelchats } from "./Channelchats"; import { Channelmembers } from "./Channelmembers"; import { Dms } from "./Dms"; import { Mentions } from "./Mentions"; import { Workspacemembers } from "./Workspacemembers"; import { Workspaces } from "./Workspaces"; @Index("email", ["email"], { unique: true }) @Entity("users", { schema: "sleact" }) export class Users { @PrimaryGeneratedColumn({ type: "int", name: "id" }) id: number; @Column("varchar", { name: "email", unique: true, length: 30 }) email: string; @Column("varchar", { name: "nickname", length: 30 }) nickname: string; @Column("varchar", { name: "password", length: 100 }) password: string; @Column("datetime", { name: "createdAt" }) createdAt: Date; @Column("datetime", { name: "updatedAt" }) updatedAt: Date; @Column("datetime", { name: "deletedAt", nullable: true }) deletedAt: Date | null; @OneToMany(() => Channelchats, (channelchats) => channelchats.user) channelchats: Channelchats[]; @OneToMany(() => Channelmembers, (channelmembers) => channelmembers.user) channelmembers: Channelmembers[]; @OneToMany(() => Dms, (dms) => dms.sender) dms: Dms[]; @OneToMany(() => Dms, (dms) => dms.receiver) dms2: Dms[]; @OneToMany(() => Mentions, (mentions) => mentions.sender) mentions: Mentions[]; @OneToMany(() => Mentions, (mentions) => mentions.receiver) mentions2: Mentions[]; @OneToMany( () => Workspacemembers, (workspacemembers) => workspacemembers.user ) workspacemembers: Workspacemembers[]; @OneToMany(() => Workspaces, (workspaces) => workspaces.owner) workspaces: Workspaces[]; } 서버 실행 후 http://localhost:3002/api/users URL로 빈 값을 POST로 보내면 콘솔창에 400 이메일이 없습니다. 라는 문구가 뜬 이후에C:\Users\xxx\Documents\Project\NestProject\a-nest\src\data-source\DataSource.ts:448 if (!metadata) throw new EntityMetadataNotFoundError(target) ^ EntityMetadataNotFoundError: No metadata for "Users" was found. at DataSource.getMetadata (C:\Users\xxx\Documents\Project\NestProject\a-nest\src\data-source\DataSource.ts:448:30) at Repository.get metadata [as metadata] (C:\Users\xxx\Documents\Project\NestProject\a-nest\src\repository\Repository.ts:53:40) at Repository.findOne (C:\Users\xxx\Documents\Project\NestProject\a-nest\src\repository\Repository.ts:597:42) at UsersService.join (C:\Users\xxx\Documents\Project\NestProject\a-nest\src\users\users.service.ts:13:39) at UsersController.join (C:\Users\xxx\Documents\Project\NestProject\a-nest\src\users\users.controller.ts:37:29) at C:\Users\xxx\Documents\Project\NestProject\a-nest\node_modules\@nestjs\core\router\router-execution-context.js:38:29 at processTicksAndRejections (node:internal/process/task_queues:95:5)위와 같이 EntityMetadataNotFoundError에러가 발생합니다. DB 커넥션 부분도 확인해보고, entities 부분이 문제인가 싶어 아래와 같이 변경도 해보았지만TypeOrmModule.forRoot({ entities: ['./entities/*.{js,ts}'], ],해결되지 않아 질문드립니다.추가적으로 \data-source\DataSource.ts 부분과\repository\Repository.ts부분은 실제 디렉토리에 없는 것들인데 왜 뜨는지도 모르겠습니다.해결 방법이 있을까요?