묻고 답해요
143만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
Nestjs의 라이프 사이클 관련 질문입니다.
한참 재미있게 배우고 있습니다!. Guard부분을 배우고 있는데 Middleware > Guard > Interceptor > Pipe > 로직 이런 순서로 이루어 진다고 하는데, Middleware부터 Pipe까지통으로 Express의 Middleware 에서 구현 가능한 하나의 기능과 유사하다고 생각되는데Nestjs에서는 Express의 middleware에서 하던 기능 중 유용하고, 자주 쓰이는 등의 로직을 저렇게 세분화 해서 더 유연하게 사용될 수 있도록 제공 하며 OOP의 장점을 살렸다?? 정도로 이해 해도 될까요?
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
common.service.ts-composeFindOptions
private composeFindOptions<T extends BaseModel>( dto: BasePaginationDto, ): FindManyOptions<T> { /** * where, order, take, skip 반환 * skip-> page based pagination에서만 */ /** * DTO의 현재 생긴 구조는 아래와 같다. * * { * where__id__more_than: 1, * order__createdAt: 'ASC, * } * * 현재는 where__id__more_than / where__id__less_than에 해당하는 where 필터만 사용중이지만 * 나중에 추가적인 where 필터를 넣고싶어졌을 때 모든 where 필터를 자동으로 파싱할 수 있을만한 기능이 * 필요하다.. * * 1) where로 시작한다면 필터 로직을 적용 * 2) order로 시작한다면 정렬 로직을 정용한다. * 3) 필터 로직을 적용한다면 '__' 기준으로 split 했을 때 3개의 값으로 나뉘는지 2개인지 확인한다. * 3-1) 3개의 값으로 나뉜다면 FILTER_MAPPER에서 해당되는 operator 함수를 찾아서 적용한다. * ex) ['where', 'id', 'more_than'] -> more_than을 실제 typeorm-operator로 적용 * 3-2) 2개의 값으로 나뉜다면 정확한 값을 필터하는 것이기 때문에 operator 없이 적용한다. * ex) ['order', 'createdAt'] -> operator 필요 X * 4) order의 경우 3-2와 같이 적용한다. */ let where: FindOptionsWhere<T> = {}; let order: FindOptionsOrder<T> = {}; for (const [key, value] of Object.entries(dto)) { if (key.startsWith('where__')) { where = { ...where, ...this.parseWhereFilter(key, value), }; } else if (key.startsWith('order__')) { order = { ...order, ...this.parseWhereFilter(key, value), }; } } return { where, order, take: dto.take, skip: dto.page ? dto.take * (dto.page - 1) : null, }; }여기서 함수가 실행되면 where, order은 빈 객체로 초기화 되는데 왜 for 문 안에선 ...where, ...order을 해주는건가요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
postgres connection 관련 질문입니다 !
지금 섹션 10?? 정도 듣고 있는데docker-compose.yaml 파일 작성 하고TypeOrmModule imports 해서 연결 하는 중인데궁금한게강의를 듣는 로컬 컴퓨터에도 postgres가설치되어 있어야 하나요??영상에는 설치에 대한 부분이 없던것 같아서요typeorm module 연결 하는 부분에서 database가 존재하지 않는다고 하는데 1번이 맞다면 postgres에서 db를 직접 만들어 준 다음에 typeormmodule 연결 해야 할까요?? << 이게 맞다면 영상이 누락된건가요?ㅠ마침 pgadmin이 깔려 있고 postgres 14버전에마침 postgres 라는 이름을 가진 db가 존재 해서섹션9 POSTGRES_DB: postgres 실습 까지는 마친것 같은데다음섹션에서 typeormstudy쪽은 이상하게 진행이 안되더라구요...연구 결과도커 컴포즈 파일의 ports 5432:5432중 앞의 포트는로컬 컴퓨터의 포트이다.로컬 컴퓨터에 postgres가 설치되어 있지 않다면 강의 영상처럼 따라하면 된다.로컬 컴퓨터에 postgres가 설치되어 있다면 로컬 5432 포트를 postgres가 사용 중일 것이다.3번이라면 5432 외의 다른 포트를 활용해 진행 하는 방법이 있고, postgres 설치 과정이 기억 난다면 app.module에서 typeorm 초기화 할때 설치하며 세팅했던 dbname, user, pwd 입력해 연결하면 된다.끗5432 포트 정보 확인 $ lsof -i tcp:5432// mac기준 윈도우는 검색... ```
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
테스트코드
강의 너무 잘 보고있습니다. ㅎㅎ혹시 테스트 코드 이번강의에 넣지 않으신 이유가 있나요 ?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
AuthService를 주입 받지 못하는 이유를 모르겠어요
코팩님 강의를 따라서 코드를 작성했는데, 강의 영상을 봐도 BasicTokenGuard에서 AuthService를 주입 못 하는 이유를 모르겠어요.. AuthModule에가 가서 imports이랑 provider에 BasicTokenGuard를 넣어도 해결되지 않네여.. 가드의 위치는 강의랑 똑같이 auth/guard 폴더 안에 위치하고 있어요.. 원인이 대체 뭘까요..?
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
Guard 사용 시 요청과 보안에 대한 질문
현재 Auth module에 있는 AccessTokenGuard 등을 보면 만약 어떤 사용자가 로그인했을 때 그 form에 있는 정보를 email:password로 받고 그것을 인코딩하여 서버로 전달하는 방식일텐데 결국 요청시에 base64로 잘 인코딩을 하여 보냈음에도 결국 Guard를 통과하면 req.user = user로 user에 대한 정보를 요청에 담은 후에 요청을 보내는 방식인 것 같은데 이러면 결국 요청에 user에 대한 정보가 담겨지는 것이고 이러면 보안상 문제가 생기는 것 아닌가요?
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
postPost UseGuard 관련 질문
현 강의에서 postPost에 UserGuard를 하기 위해 posts.module.ts에 UsersModule, AuthModule을 import해주었는데 이 UsersModule은 AuthModule에서 사용하기 때문에 import를 해줘야하는건가요? 그리고 실제로 깃헙에선 AuthModule에서 AuthService를 export했는데 postPost 매서드에서 사용하는 것은 AuthService가 아닌 auth 모듈의 guard 폴더 안에 있는 ts 파일인데 왜 AuthService를 export하는건가요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
양방향 연관관계에 대해서
JPA에서는 꼭 필요할 때만 양방향 연관관계를 맺으라고 권고하는 거 같던데 TypeORM은 오히려 양방향 연관관계를 지향하는 입장인 건가요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
socket io 와 rest api
socket 은 현업에서 사용해본적이 거의 없다가 개념만 이해하고 이번에 다시 강의로 공부를 하고있습니다.실제로 사용하게 된다면 조금 더 정리하는게 다가올것같긴한데그러면 socket.io 로 모든 요청과 응답을 구현해도 될것같은데 ? 라는 생각을 했습니다. 아니면 비용적인 측면때문에 rest api 로 요청때마다 응답을 보내도록하고 socket 은 정말 양방향으로 필요할때만 구현하고 있는걸까요 ??
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
postman 에서 GET을 했는데 왜 [] 만 출력될까요?
3000번 포트가 사용중이라고 에러가 나와서 main에서 3001 번으로 바꿔서 사용중 입니다. 코딩을 그대로 진행했고 포스트맨에서 /users [post] 하여Body에서 잘 입력하여 { "nickname": "study", "email": "study@naver.com", "password": "123123", "id": 10, "role": "USER"}로 출력이 됩니다. 그대로 GET 방식으로http://localhost:3001/users 를 입력했는데[] 만 출력이 되고 여태 저장한 값들이 나오지가 않습니다. 오른쪽 위에는 초록색으로 200 OK 로 나옵니다..왜그런걸까요?
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
리프레쉬로 리프레쉬 토큰 재발급 상황
안녕하세요 간단한 질문 하나 하겠습니다.단순하게 궁금증이 생겨서요엑세스토큰이 만료되었을때 서버에서 401을 반환하고클라이언트에서는 코드가 401일때 리프레쉬토큰으로 엑세스토큰을 재발급 받고 다시 요청을 보낸다 까지는 이해가 가는데,리프레쉬로 리프레쉬토큰을 발급받는 것은 어떤상황에 사용하는지 감이 안잡혀서 질문드립니다.
-
미해결처음하는 파이썬 백엔드 FastAPI 부트캠프 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
pydantic 2.8.2를 사용하고 있습니다
강사님 설명 열심히 듣고 있는 수강생입니다.예제를 따라 하다 보니 제 환경에서는 안되는 부분이 있어서 확인해보았습니다.저는 pydantic 2.8.2를 사용하고 있더군요pydantic 2.8.2에서는 dict() 메소드가 더 이상 사용되지 않으며 대신 model_dump()를 사용 한다고 합니다from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class Item(BaseModel): # Pydantic 모델 정의 name: str price: float is_offer: bool = None @app.post("/items/") def create_item(item: Item): #return {"item": item.dict()} # Pydantic v2.x부터 dict()->model_dump()로 변경 return {"item": item.model_dump()} # Pydantic 모델을 API에 사용 사용버전에 따라 다른 것 같아서 혹시나 올려봅니다
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
nest new nestjs_server 에러
nest new nestjs_server 를 cmd 또는 파워쉘에서 실행하면 아래와같이 나옵니다..yarn 을 잘 선택했구요!애초에 똑같이 하는데 에러가 너무 많이 나와서 nodejs 를 지금 영상에서 나오는 버전으로 검색해서 다운받고 진행했는데 여기서만 딱 에러가 나옵니다.. 구글링도 다 해봐도 안되네요 ㅠㅠFailed to execute command: yarn install --silent× Installation in progress... ☕🙀 Packages installation failed!In case you don't see any errors above, consider manually running the failed command yarn install to see more details on why it errored out.Failed to execute command: git initGit repository has not been initialized
-
미해결견고한 결제 시스템 구축
'더 견고해지기 위해 남은 작업' 수업자료
안녕하세요.다운로드한 수업자료에 '더 견고해지기 위해 남은 작업' 과 관련된 pdf 파일이 존재하지 않습니다 ㅠㅠ다른 질문글을 봤을땐 notion URL 를 제공했다고 하는데, 혹시 notion URL를 안내해주는 챕터가 어디일까요?더이상 Notion URL을 제공하지 않는다면 강의자료에 첨부해주실 수 있을까요?강의 잘 들었습니다. 감사합니다!
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
guard에서 요청객체 불러오기
bearerTokenGuadr와 basicTokenGuard를 작성했는데, 토큰 추출을 못합니다.에서 req 요청객체를 제대로 불러온 것인걸까요? 포스트맨에서 auth/token/refresh에서 authroization을 체크하거나 체크하지 않건 둘다 토큰이 없다고 나오는데.. 추출에 문제가 있어 보입니다. BasicTokenGuard는 잘 추출되서 로그인까지는 잘 되는데, BearerTokenGuard는 추출이 안되는지 에러메세지 '토큰이 없습니다.'가 나옵니다.
-
해결됨Real MySQL 시즌 1 - Part 1
전체 count(*) 내용에 대해서 문의 드립니다.
안녕 하세요..실제로 count(*) 때문에 고민이 많습니다.게시판 형태의 화면이 있는데요..데이터가 약 250만건 정도 입니다.조인된 테이블은 6개 이고요..테이블 6개를 조인 해서 보여주다 보니 검색 조건은 매우 많습니다.페이징을 20개씩 10페이지씩 보여주고 있는데요..강의 내용 대로 전체 count(*) 때문에 속도가 느립니다.전체 갯수를 소스 상에 써 놓고 테스트를 해보면 속도가 느리지 않거든여..강의를 보기 전에도 테스트 해본 결과 속도는 전체 갯수의 count(*) 문제 라고 판단 하고 있었는데요..시스템의 로우 갯수를 사용 하는 방법이나리눅스의 cron 으로 각 테이블의 갯수를 10분 단위로 입력 하는 것 등..여러가지 생각을 해보았으나..검색 때문에 포기 했습니다.검색을 하면 검색 결과에 대한 전체건수가 나와야 하는데..이건 실시간 아니면 파악할 수가 없으니까요..강의를 보면서 힌트를 얻고자 했으나..대략적인 건수..임의의 페이지 표기 통계 이용대략 이해는 됩니다만..만일 검색을 하게 되면..모두 사용 할 수 없는 것 아닌가요?강의 에서 얘기한 것들은 모두 아무런 조건이 없을 경우 이고..예를 들어 검색 조건이 10가지 정도 될 경우 어떤 조건으로 검색할 지 모르는 상황인데대략적인 건수를 표시할 수도 없고 임의의 페이지를 표시할 수도 없습니다.예를 들어 검색 조건 시 1개도 없는 경우도 있을 수 있는데..어떻게 대략적인 건수를 표시를 할 것이며..임의의 페이지를 표시 할 수 있을까요..검색결과가 1건도 나오지 않았는데 페이지를 1~10 까지 대략적으로 표시할 수는 없는 것 아닌가요?통계이용은 검색 시 더더욱 사용할 수 없고요..제시하신 방법으로는 문제가 해결 될 것 같지 않은데..제가 잘못 생각 하고 있는 걸까요?제 생각이 틀렸으면 좋겠습니다만..방법이 있을까요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
Paginate에서 overrideFindOptions 문제
overrideFindOptions에서 where절을 작성하면 dto에 있는 where 조건들이 제대로 동작하지 않는 거 같아요 paginateComments(dto: PaginateCommentsDto, articleId: number) { return this.commonService.paginate( dto, this.commentsRepository, { relations: { author: true, }, select: { author: { id: true, devName: true }, }, where: { article: { id: articleId }, }, }, `articles/${articleId}/comments`, ); }paginate에서 where조건이 있으면 병합하는 방법으로 해결해보려고 했는데 원하는대로 동작하지 않는거 같습니다. 어떻게 해결하면 좋을까요??
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
임시 폴더로부터 이미지 파일 이동시키기
임시폴더로 부터 이미지 파일 이동시키는 강의를 들었는데요.지금은 아직 S3 를 사용하지 않지만 만약 S3 를 사용할때도 임시폴더를 만들어두시고, 최종적으로 저장을하게 되면 이미지 파일을 S3에 이동을 시키시나요 ?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
file upload common module 관리
강의에서 image 업로드 시에common module 를 만들어서 업로드 진행하는것을 봤는데요.controller 단에서 타고와서 메서드에서 필터링 처리하는게 아니라,이미 module 에서 검증된것을 파일 올리기만 하니까 간편해보였습니다.만약 이미지 파일뿐만 아니라 , 엑셀파일로 업로드 받는다고 하면 어떻게하면될까요 ??그때도 common.modules.ts 파일안에 register 메서드에 조건문으로 처리하시나요 ??ex) if (ext === '.xlsx') { } elif (ext === '.jpg' && ext === '.jpeg' && ext === '.png') { }
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
이미지 업로드
안녕하세요 ㅎ이미지 업로드 방식에 대해서 말씀해주셨는데요.말씀하신것처럼 사용자가 이미지를 올렸다가 마음이 바껴서 다른 이미지를 올리고싶을때 다시 이미지를 여러번 교체할수있잖아요하지만 데이터베이스 상에서는 마지막으로 올린 S3 경로가 저장되어있을텐데요.이럴경우 데이터베이스상에는 저장이 되어있지않지만 S3 에 올라간 이미지들은 어떻게 하시나요 ?주기적으로 삭제 해주신다고 하셨는데 어떤방식을 하시나요 ?