안녕하세요. 섹션 27의 8-5 CURD API 강의를 듣다가 문득 궁금한 점이 생겨 질문드립니다. 해당 강의에서는 boards.resolver.ts 파일에 fetchBoards함수와 createBoards 함수를 정의하기 위해 board.entity.ts 파일, create-board.input.ts 파일, boards-service.interface.ts 파일을 아래와 같이 만드셨습니다. 아래 세 파일은 구조가 거의 동일한데, 왜 이렇게 같은 구조의 파일을 세개나 만들어서 타입스크립트 타입 정의에 사용하는 것인지 이해가 가질 않습니다. 그리고 어떤 것은 class로 정의하여 타입스크릡트에 사용하고, 어떤 것은 interface로 정의하여 타입스크립트로 사용하는데 어떤 차이인지 질문 드립니다. // board.entity.ts 파일 import { Field, Int, ObjectType } from '@nestjs/graphql'; import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; @Entity() @ObjectType() export class Board { @PrimaryGeneratedColumn('increment') @Field(() => Int) num: number; @Column() @Field(() => String) title: string; @Column() @Field(() => String) contents: string; @Column() @Field(() => String) writer: string; } // create-board.input.ts 파일 import { Field, InputType } from '@nestjs/graphql'; @InputType() export class CreateBoardInput { @Field(() => String) writer: string; @Field(() => String) title: string; @Field(() => String) contents: string; } // boards-service.interface.ts 파일 import { CreateBoardInput } from '../dto/create-board.input'; export interface IBoardsServiceCreate { createBoardInput: CreateBoardInput; }
비전공자를 위한 풀스택 맛집지도 만들기 프로젝트!: Front, Back-end 그리고 배포까지
안녕하세요. certbot 실행 이후 git clone이 되지 않아 질문을 남겼었던 질문자입니다! 당시 얼추 인도해주신 솔루션이 인스턴스 설정 초기화 후 새로 설치 였던터라 시간이 걸릴것으로 예상이 되어서 우선순위를 좀 뒤로 미루고, 다른 일들을 하다가 오느라 이제야 다시 질문의 일로 돌아왔습니다. 그런데 이제와 생각해보니 certbot 과 git의 충돌이 유력한 원인이라면... certbot을 재설치? 재실행? 하면 되지 않을까 싶어서 인터넷에 검색을 해봤는데 자동갱신에 관한 글뿐이 없더군요.. 해서 혹시 certbot을 날렸다가 다시 설치하거나 certbot의 설정파일들이 임시로 작동하지 않도록 하는 방법이 있을까요? 만약 임시 비활성화가 가능하다면 그 사이에 git clone을 진행하고, 다시 활성화 하면 될것 같아서.. 혹시 아시는 방법이 있으실지 여쭤봅니다
강사님 제가 토스페이로 테스트를 진행중에 결제성공 메시지가 나오는데 db에 데이터 변경점이 없어서 확인해보니까 토큰이 만료된 상태더라구요. 토큰 만료됐을때 graphql에서는 unauthorization에러가 나왔는데 html liveServer에서는 따로 알 수 있는 방법 없을까요? 그리고 실제 서비스라면 accessToken이 만료되었을때 자동으로 refreshToken이 accessToken으로 변환되면서 고객이 느낄때는 결제 진행에 아무 무리없는 상태로 표시되나요? 테스트할때는 refreshToken도 직접 요청해서 받아오고 다시 header에 세팅하고 테스트하는거라서 이게 실제 서비스에서는 어떤 로직으로 자동화되는지 궁금합니다.
섹션 27. Nest.js 08-06 Docker 패키징 강의를 따라서 docker-compose build 를 했더니 아래와 같은 에러가 나옵니다. > [5/6] RUN yarn install: #0 2.639 yarn install v1.22.19 #0 3.290 [1/4] Resolving packages... #0 5.360 [2/4] Fetching packages... #0 66.77 info There appears to be trouble with your network connection. Retrying... #0 100.1 info There appears to be trouble with your network connection. Retrying... #0 141.5 error @graphql-tools/merge@9.0.0: The engine "node" is incompatible with this module. Expected version ">=16.0.0". Got "14.21.3" #0 141.5 error Found incompatible module. #0 141.5 info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command. ------ failed to solve: process "/bin/sh -c yarn install" did not complete successfully: exit code: 1 챗gpt 한테 물어보니까 이 오류는 @graphql-tools/merge 모듈의 버전 9.0.0이 설치되지 않았으며, 해당 모듈은 Node.js 엔진의 버전이 16.0.0 이상이어야 작동한다는 것을 의미합니다. 그러나 현재 사용 중인 Node.js 버전은 14.21.3이기 때문에 설치할 수 없다는 오류입니다. 라고 하길래 Dockerfile 의 FROM node: 14 이 부분을 FROM node: 16 으로 수정하고 다시 docker-compose build 를 했더니 에러가 안나는데 이렇게 node를 16으로 수정하고 강의를 따라가도 문제가 없을까요?
Utility 부분 강의에서 type의 Partial, Required 등을 이용하여 모든 프라퍼티를 옵션으로 바꾸거나 필수로 바꾸는 방법을 가르쳐주셨는데, 특정 하나만 옵션으로 하거나, 특정 하나만 필수인자로 바꾸는 방법은 없을까요? interface IProfile { name: string; age: number; school: string; hobby?: string; friend:? string; } 으로 정의했다고 하면 여기서 school만 옵션으로 바꾸고 싶다면, 방법이 없을까요?
이런 식으로 코드를 사용중입니다 from PyQt6.QtWidgets import * from PyQt6.QtCore import * class thread (Qthread): def __init__(self): super().__init__() def run(self): while True: mainbot_window.fun1() class UI (QWidget): def __init__(self): super().__init__() self.inits() self.T1 = thread() self.T1.start() def inits(self): print("각종 변수 설정") def fun1(self): print("run code") def main(args=None): global mainbot_window app = QApplication(sys.argv) mainbot_window = UI() mainbot_window.show() try: app.exec() except KeyboardInterrupt: pass if __name__ == '__main__': main() 여기서 global 변수를 사용하지 않고 싶습니다. 글로벌 변수를 사용하지 않고 Thread 에서 Qwidget 의 함수를 사용할 방법이 있을까요? 시도한것 thread 에서 pyqtsignal.emit 을 사용해서 시도해봤는데 ui가 검은 화면으로 뜬체 작동하지않습니다. Qthread 대신 Qtimer 를 사용 =>작동은 잘되나 ui를 표시하는데 약간의 딜레이가 생깁니다. 그래서 되도록이면 Thread를 사용하고싶습니다.
안녕하세요 3강 콘다 가상환경에서 비주얼 스튜디오 터미널에서 conda activate myST해도 터미널에 계속 PS로 표시되며 가상환경으로 들어가지 않습니다. cmd에서는 같은 명령어를 입력하면 들어가지는데 비주얼 스튜디오 터미널에서는 들어가지지 않는 것 같습니다. 뭐가 문제일까요?
// 6. generic 타입 - 3 function getGeneric3<T, U, V>(arg1: T, arg2: U, arg3: V): [V, U, T] { return [arg3, arg2, arg1]; } const result6 = getGeneric3<string, number, boolean>("철수", 123, true); 타입명을 T1, T2, T3 에서 T, U, V 로 줄일 수 있다고 보여주셨는데 T, U, V 는 무엇의 줄인 말인가요? 그냥 의미 없는 알파벳인가요?
RestAPI로 배울때 swagger를 만들었던 경험이 있는데, graphql은 그 자체로 swagger의 역할까지 한다고 생각하면 될까요? 뭔가 swagger가 보기에 더 직관적이고 더 설명서 같은 느낌이 있어서 graphql을 사용하면서도 swagger처럼 만들 수 있는 방법이 있는지 여쭤봅니다!
restapi사용시에는 gql-auth.guard와 같이 별도로 가드폴더에 파일을 만들필요없이 그냥 스트레티지폴더에있는거 그대로 쓰면 되는건가요? restapi사용시에는 contxet 변환이 필요가 없어서 이럴경우 가드를 별도로 만들지않고 그냥 스트레티지 그대로 쓰면 되나요?
Dockerfile 에 FROM node 또는 FROM mongo 를 입력하여 도커를 만드는 걸로 배웠습니다. 그런데 FROM node나 FROM mongo라는 명령어를 통해 어떤 운영체제에 어떤 것이 설치되고 실행되는지지 등 해당 명령어에 대한 정보를 어떻게 알 수 있나요? 예를 들면 Dockerfile.mongo 파일에서는 따로 RUN과 같이 프로그램을 실행시키는 명령어를 입력하지 않더라구요. FROM node에서도 따로 yarn이나 우분투를 설치하지 않고서도 이미 포함이 되어있었구요. 도커허브 사이트 들어가서 mongo를 검색해봐도 그냥 mongo 자체에 대한 설명만 있더라구요 ㅠ