44,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
JwtService는 어떤식으로 mock해야하나요?
UserService가 아래처럼 UserRepository와 JwtService를 DI를 받아야합니다. (JwtService는 공식문서에서 본대로 nest자체에서 제공하는겁니다.) 그래서 우선 signup함수가 함수가 맞는지 비교하는 가벼운 테스트코드를 작성해봤는데 JwtService관련 에러가 나오는데 test code내에서 imports: [JwtService] 이런식으로도 해봤는데 해결이 어려워서 질문드립니다.
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
seeding관련
안녕하세요! seed 파일을 사용하여 더미데이터를 삽입하려고 하는데요. npm run seed:run 명령어를 실행하였을 때 아래와 같이 나오는데 데이터가 db에 들어가지를 않습니다. 선생님처럼 execute ~하면서 쿼리문이 실행이 안되는데.. 이것저것 살펴봐도 도저히 어느 부분에서 문제가 있는지 잘 모르겠습니다ㅠ!! 아래는 ormconfig.ts파일입니다. package.json의 scripts부분도 강의대로 설정했는데.. 도대체 어느 부분이 문제일까요? ㅠㅠ 답변 주시면 감사하겠습니다.
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
@nestjs/graphql , class-validator
안녕하세요 ㅎㅎㅎ 강의를 너무나도 잘듣고있습니다. 다른 코드를 보고있는데여 . graphql 를 사용해보지 않았지만 @nestjs/graphql 를 가져와서 마치.. class-validator 를 사용해서 dto 작성할때처럼 사용되어지는것을 봤습니다. 둘 비슷하다고 생각하면 될까요 ?? 아니면 완전 다른것일까요 .
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
dotenv는 그냥 개발할때만 쓰는건가요?
환경변수를 사용하는 이유는 여러 민감한 정보들을 숨기기 위함인데 dotenv를 사용해서 .env파일을 생성하면 나중에 배포용 서버를 aws같은 서버에 올릴 때는 .env 파일을 빼고 aws 인스턴스에 직접 환경변수를 설정해주는건가요? 아니면 배포할때도 .env파일을 같이 올리나요??
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
redis 연결 질문 가능할까요?
안녕하세요 강의 잘보고 있습니다. 저는 socket연결 + redis까지 활용해보고 싶어서 찾다가 공식문서에 보면 redis-adapter가 있어서 그걸 그대로 활용하려고 하는데요. gateway 코드 작성은 문제가 없는데 제가 만들고 싶은 기능중에 하나가 client에서 특정 api로 요청을 보내면 현재 redis server에 저장되어있는 정보들을 모두 주는 것입니다. redis에는 key는 roomName, value는 해당 room에 있는 user들을 저장하려고 합니다. 그럼 이 기능은 웹소켓이 아닌 http를 사용해야하니 service 파일에 작성해야 할텐데 문제는 redis server로부터 key와 value들을 가져오려면 적절한 instance를 depdency injection해주어야하는데 뭘 해줘야하는지를 모르겠습니다.. 혹시 도움을 주실 수 있을까요? 이해를 위해 그림 파일 첨부했습니다.
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
bcrypt 문제
안녕하세요 Postman으로 로그인 테스트 중인데 계속 권한에러가 떠서요 확인해보니 bcrypt.compare에서 false가 뜨네요 auth/auth.service.ts auth/local.Strategy.ts 그래서 Strategy로 넘어가질 못하는 거같은데 원인을 찾을 수가 없네요..
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
createQueryBuilder
createQueryBuilder 를 사용하실때 , 대부분 데이터를 가져올때 많이 사용을 하셨던데 , 데이터를 집어넣을땐, save() 를 사용하시나영?? 강의때문에 그러시고 실제론createQueryBuilder.() insert() 사용하시나여 ?
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
createQueryBuilder
아직 TypeORM 가 조금 헤깔려서 질문 남깁니다. ㅠ board.id = comments.boardId 을 join 걸어야하는데, erd 가 이렇게 구성되어있구요 . Board entity Comments entity 이렇게 구성되어져있습니다 ! boardId 를 가지고 board 의 작성 내용과 그밑에 comments 들을 들고올려고 하는데요 . 어떻게 작성 할수있을까요?? ^^ ; ㅎ
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
ApiResponse
ApiResponse 를 적용하고있는데여 . @ApiInternalServerErrorResponse({ description: '서버 에러', }) 이런 데코레이터는 전체다 먹이고 싶은데, 그럼 class 위에다가 데코레이터 넣으면 되는걸까요 ?
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
DTO
각각 dto 폴더를 만들고 그안에 dto 파일을 만들었는데여 예를들어서 .. create-workspace.dto.ts 이렇게요 ㅎㅎ 혼자 그냥 샘플 프로젝트 작성하고있는데 , 거기엔 제가 게시판을 api 를 작성하고있거든여 . 여기서 create 말고 put 이나 patch 부분에서 data : CreateBoardDto 이런식으로 가져다가 사용해도 되나요 ?? 아니면 보통 dto 를 각각 create dto , update dto 따로 만들게 되나요 ?
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
디비 관련 질문있습니다.
안녕하세요 제로초님. 디비에 관련된 질문입니다. 백엔드쪽 구성은 typeorm(mysql) + nestjs로 이루어져 있고, 여기서 궁금한점은 서로 다른 디비에서 데이터를 가져올 수 있을까요? 예를 들어 nodebird라는 스키마(디비이름)가 하나있고, Slack이라는 스키마가 있다고 가정했을때 백엔드에서 어떤 api는 slack이라는 디비에 접근해서 회원정보를 가져오고 어떤 api는 nodebird 디비에 접근해서 회원정보를 가져오게 할 수 있을까요? 어떻게 하면 좋을까요? 현재는 typeorm config에 DB_HOST값을 고정해서 쓰고 있습니다!
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
migrations
실제로 배포를 한 상태에서 , 만약에 데이터베이스를 변경사항이라던지 추가 사항이 생겼다고하면 , entities 를 바꾸고나서 , migrations create 한후에 raw query 로 작성을 해줘야 한다는 말씀이신거죠 ?
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
JWT
제로초님 ㅎㅎ 제로초님 강의들을 들어봤을때 , session , cookie 를 위주로 자주 사용하셨던데 , JWT 를 사용 하지 않으시는 이유가 있을까여 ?
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
interface 와 class 차이
export class 와 export interface 에서 그러면.. 어떠한 경우든 강제를 하게될때 export class 를 사용하는게 맞을까요 ? 사실 그러한 절대적인 경우는 없을꺼라 보긴한데 , 그럼 export interface 를 사용해야하는경우는 어떠한 경우일까요? interface 의 경우 다중상속이 가능 하지만 사실 상속의 개념보다 구현에 가깝고 , 추상클래스를 사용하게 되면 상속 하나만 되는걸로 알고있지만... JS 에서 export class 를사용하지 않고 export interface 를 사용하는 경우는 어떠한 경우일까요 ? 2:50 경에 말씀하신 interface 와 class 차이 말씀하신거 혹시 제가 볼만한 자료 링크를 받을수있을까요 ??
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
리액트 관련 질문입니다.
안녕하세요 제로초님. 리액트에서 혹시 공통적으로 서버에 요청을 보내는 것을 한곳(특정페이지 나 파일)에서 관리할 수 있을까요? 예를 들어 access_token이 만료되었을때 로그인페이지로 이동시키기 (모든 페이지에서 useEffect로 관리하기는 중복적인거 같아서요) 현재는 App.tsx에서 해당로직을 관리를 하고 있는데 새로고침시에만 실행되다보니 궁금해서 질문을 합니다 어떤방식으로 중복을 줄일 수 있을까요?
- 해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
질문있습니다
안녕하세요 제로초님. 트랜잭션에서 nest-typeorm폴더를 보니 트랜잭션이 적용이 안되어 있어서 back폴더의 express로 nest와 비교하며 공부하고 있습니다 router.post("/workspaces", isLoggedIn, async (req, res, next) => { const t = await sequelize.transaction(); try { const exWorkspace = await Workspace.findOne({ where: { url: req.body.url }, }); if (exWorkspace) { await t.rollback(); return res.status(404).send("사용중인 워크스페이스 URL입니다."); } const workspace = await Workspace.create( { name: req.body.workspace, url: req.body.url, OwnerId: req.user.id, }, { transaction: t, } ); await workspace.addMembers(req.user.id, { transaction: t }); const channel = await Channel.create( { name: "일반", WorkspaceId: workspace.id, }, { transaction: t, } ); await channel.addMembers(req.user.id, { transaction: t }); await t.commit(); return res.json(workspace); } catch (error) { await t.rollback(); next(error); } }); 1. 제가 이해한게 맞는지 헷갈립니당. 각각 네개의 Workspace.create, workspace.addMembers, Channel.create, channel.addMembers 에 두번째 인수로 transaction:t를 넣어주고 있는데 이는 이 네개중 하나라도 에러가 나면 모두 rollback되어서 4개 전부다 초기화 됩니다. 4개다 성공하면 commit되어 데이터베이스에 성공적으로 접근됩니다. 제가 이해한것이 맞나요?.. 2. const workspace = await Workspace.create( { name: req.body.workspace, url: req.body.url, OwnerId: req.user.id, }, { transaction: t, } ); await workspace.addMembers(req.user.id, { transaction: t }); const channel = await Channel.create({ name: "일반", WorkspaceId: workspace.id, }); await channel.addMembers(req.user.id); 그런데 만약 Workspace.create, workspace.addMembers,에만 두번째 인수로 transaction:t를 넣어주고 Channel.create, channel.addMembers에는 transaction:t를 빼주면 Channel.create, channel.addMembers에는 transaction에 적용을 받지는 않지만 정상적으로 디비에 저장되어야 하지 않나요?. 실제로 실험해보니 저장이 안되네요. 왜 그런지 궁금합니다 3. if (exWorkspace) { await t.rollback(); return res.status(404).send("사용중인 워크스페이스 URL입니다."); } 여기서 t.rollback이 왜 필요한지 궁금합니다. 이 코드를 기준으로 위에 코드에서 workspace를 find하는 코드이고 커밋이나 transaction:t 를 해준곳이 없고 , 또한 어차피 return되면 초기화일텐데 여기서 t.rollback()을 해주는게 궁금합니다.
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
선생님 안녕하세요
Interceptors의 사용 예제로써 Transaction 처리를할때도 사용할수 있을까요 ? 이 사진은 PostgreSQL 과 Node.js의 모듈을 연결해주는 인터페이스인 pg 인데요 pg의 공식문서의 Transaction처리를 보고나서 사용하려고 보니 Transaction처리를 해줘야하는 API가 늘어날수록 client.query("BEGIN"), COMMIT, ROLLBACK과 같은 코드가 중복되며 BEGIN과 COMMIT사이에 저희가 실제 실행을 원하는 쿼리를 놓게되는데요 이게 Interceptors로 처리가 가능할것같은데 맞는생각일까요?
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
선생님 안녕하세요
안녕하세요 제로초님 강의를 들으면서 API문서를 처음만든것만큼만이라도 자동으로 만들어주는것에 정말 감사하다는 느낌을 받았습니다. 그런데 강의가 진행될수록 본래의 소스코드 보다 API문서를 위한 코드가 점점더 많아지는것같아서 약간 배보다 배꼽이 더큰상황이 발생되는것 같습니다. 제가 생 typescript + express로 프로젝트를 진행할때는 아예 스웨거 yaml파일들을 따로 빼서 API문서를 만들었었는데요 이런식으로 따로 빼서 Swagger문서를 만드는 방법이 Nest에도 있을까요 ?
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
기존 DB 질문
entities 파일만들고 코드만 따라치라는게 치세요. 보세요. 이게뭔지 3-4강에서 테이블 다시 만든다는데 어디서 만드는지 깃에서 보고 그거대로 db세팅하고 강의를 들으라는건지 설명좀 적으셔야 할거같은데요.
- 미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
DI
@Injectable() 데코레이터가 있는 경우에는 해당 객체가 스프링처럼 싱클톤 패턴으로 객체가하나만 생성되면서 자원관리를 좀 더 효율적으로 하게 되나요?