[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
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
지금 섹션 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기준 윈도우는 검색... ```
지금 카드를 3d로 뒤집는데 그냥 뒤집히는게아니라 카드의 뒷면이 무엇인지 왼쪽아래나 왼쪽면부터 조금씩 뒤집어지는 느낌으로 뒤집기 위해선 animation3에서 이미지를 나눠서 보여준것처럼 효과를 줘야할까요? 그냥 카드가 3d로 휙 뒤집히는게 아닌 책장넘길때처럼 구현하고싶은데 뒷면을 확인할때 긴장감을 주기위해서 혹시 어떤 방법이 있을까요?
안녕하세요, 2.2)단락 평가 11:28 인수 전달 관련하여 질문 드립니다. function printName(person){ const name= person && person.name; // const age = person && person.age; console.log(name || "person의 값이 없습니다.") // console.log(age || "나이를 추정할 수 없습니다.") } printName({name:"이정환"}); 객체 값을 인수로 전달했을 때 name 변수에 인수로 전달받은 객체 값들이 정상적으로 저장되고 콘솔 창을 통해 출력되잖아요. printName함수의 person라는 매개 변수 형식?을 어디에서도 선언, 정의하지 않았는데 객체 타입으로 함수 호출 시 정상 출력되는 점이 혼란스럽습니다. 이전에 학습한 7가지 Truthy 한 값들 중 객체가 속해 있기에 Truthy 가 나오고, 그런 성질을 이용하여 변수에 name : "이정환" 이 저장되어 콘솔창에서 확인 가능한 결과가 나온다고 이해하면 될까요? 친절히 설명해주셔서 감사합니다.
[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
코팩님 강의를 따라서 코드를 작성했는데, 강의 영상을 봐도 BasicTokenGuard 에서 AuthService 를 주입 못 하는 이유를 모르겠어요.. AuthModule에가 가서 imports이랑 provider에 BasicTokenGuard를 넣어도 해결되지 않네여.. 가드의 위치는 강의랑 똑같이 auth/guard 폴더 안에 위치하고 있어요.. 원인이 대체 뭘까요..?
[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
현재 Auth module에 있는 AccessTokenGuard 등을 보면 만약 어떤 사용자가 로그인했을 때 그 form에 있는 정보를 email:password로 받고 그것을 인코딩하여 서버로 전달하는 방식일텐데 결국 요청시에 base64로 잘 인코딩을 하여 보냈음에도 결국 Guard를 통과하면 req.user = user로 user에 대한 정보를 요청에 담은 후에 요청을 보내는 방식인 것 같은데 이러면 결국 요청에 user에 대한 정보가 담겨지는 것이고 이러면 보안상 문제가 생기는 것 아닌가요?
[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
현 강의에서 postPost에 UserGuard를 하기 위해 posts.module.ts에 UsersModule, AuthModule을 import해주었는데 이 UsersModule은 AuthModule에서 사용하기 때문에 import를 해줘야하는건가요? 그리고 실제로 깃헙에선 AuthModule에서 AuthService를 export했는데 postPost 매서드에서 사용하는 것은 AuthService가 아닌 auth 모듈의 guard 폴더 안에 있는 ts 파일인데 왜 AuthService를 export하는건가요?
import React from "react"; const Viewer = ({ count }) => { return ( <div> <div>현재카운트 : </div> <h1>{count}</h1> </div> ); }; export default Viewer; 이걸 했을떄 .. import React from "react"; const Viewer = ( count ) => { return ( <div> <div>현재카운트 : </div> <h1>{count}</h1> </div> ); }; export default Viewer; 두개 차이가 멀까요 계속 해깔리는데 이거.. 구조 분해형태인거 까진 알겠는데 부모에서 import logo from "./logo.svg"; import "./App.css"; import Viewer from "./component/Viewer"; import Controller from "./component/Controller"; import { useState } from "react"; function App() { const [count, setCount] = useState(0); const onClickButton = (value) => { setCount(count + value); }; return ( <div className="App"> <h1>Simple Counter</h1> <section> <Viewer count={count} /> </section> <section> <Controller onClickButton={onClickButton} /> </section> </div> ); } export default App; GPT 물어보니 ({ count }) : 이 방식은 구조 분해 할당 을 사용한 것입니다. 함수의 인자로 객체를 받고, 그 객체의 count 라는 속성을 변수로 바로 할당합니다. 예를 들어, Viewer 컴포넌트가 { count: 5 } 라는 객체를 인자로 받으면, count 변수는 바로 5가 됩니다. (count) : 이 방식은 구조 분해 할당을 사용하지 않은 것 입니다. 함수의 인자로 객체를 받고, 그 객체를 count 라는 이름의 변수로 할당합니다. 따라서 count 는 객체가 되며, count 객체의 속성에 접근하려면 count.count 처럼 접근해야 합니다. 이렇게 하면 const [count, setCount] = useState(0); 에서 count는 객체가 아니라 그냥 변수 아닌가요 ??? <button onClick={() => { onClickButton(-1); }} > <button onClick={ onClickButton(-1);} > 이거 2개의 차이가 멀까요 저는 onClick이 함수니까 함수를 전달해줘야 한다고 생각해서 { } 안에 바로 함수를 넣었거던요 ..후자 . 근데 보니까 ()=>{ } 여기다가 함수를 넣는건 onclick의 매개 함수의 리턴값으로 함수를 넣는건데 ..두개의 차이가 뭔지좀 궁금합니다.
강의 12.13 마지막에서 메인컨테이너가 화면 끝까지 안내려 오는 문제를 해결하기 위해서 index.css의 body 태그 스타일에 flex 를 주셔서 해결하셨는데요. 그 원리를 조금 더 설명해 주실 수 있나요? flex는 요소들을 한줄에 배치하기 위해서 사용 하는데 여기선 요소가 다음 줄 까지 덮도록 쓰여진것 같아 좀 헷갈립니다.
[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
socket 은 현업에서 사용해본적이 거의 없다가 개념만 이해하고 이번에 다시 강의로 공부를 하고있습니다. 실제로 사용하게 된다면 조금 더 정리하는게 다가올것같긴한데 그러면 socket.io 로 모든 요청과 응답을 구현해도 될것같은데 ? 라는 생각을 했습니다. 아니면 비용적인 측면때문에 rest api 로 요청때마다 응답을 보내도록하고 socket 은 정말 양방향으로 필요할때만 구현하고 있는걸까요 ??
[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
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 로 나옵니다.. 왜그런걸까요?