반응형 전체 글79 STORIFY (0207) - .env 요청 시도 왜 nestjs를 사용했는지 이유를 찾자. 오늘 아침 해킹시도가 있었다.. env파일을 찾기 위한 시도가 있었지만 ignore에 있었기에 찾지 못했다. 이런 경험을 한 후 우리의 단점을 빨리 보완해야겠다는 생각이 들었다. 1. 동화 생성이 악의적으로 무제한으로 가능하다. 2. 금액 제한이 걸려있어 일정 생성 후 생성이 안되긴 하지만 한 명의 악의적인 시도로 인해 다른 유저가 동화생성을 할 수 없게 된다. 3. 회원가입이 너무 쉽다 -> 이는 초기 회원가입을 쉽게 하기 위함이었다. 어떻게 해결해야 할까 미들웨어 사용 미들웨어는 요청과 응답 사이에서 동작하는 함수로서, 요청이 들어올 때마다 실행되므로 이를 이용해 특정 패턴의 요청을 거부할 수 있다. import { Injectable, NestMiddlew.. 2024. 2. 7. STORIFY (0205-0206) - kakao, google 로그인 추가 목표: 회원가입을 쉽게 만들자. - 사용자가 회원가입 시 쉽게 할 수 있도록 username과 password만 받고 있음 - 로그인 후 email, nickname update시 중복확인 해야 함 - kakao, google 로그인 추가하기. kakao에서 어떤 정보를 받아서 저장해야 할까 storify에서는 userId과 비밀번호만 입력해도 회원가입이 가능하다. 책을 만들면 작성자가 userId으로 나온다. kakao에서 현재 받아올 수 있는 정보는 nickname과 프로필 이미지. 필요한 정보를 가져와 auth.service에서 회원정보를 저장한 후 이후 다른 기능을 사용할 때는 우리의 토큰을 사용해 유저를 확인한다. kakao에서는 아래 보이는 것처럼 토큰을 사용해 유저 정보를 가져올 수 있게 되.. 2024. 2. 6. DOCKER 1. 도커에 커널이 없어도 되는 이유는 뭘까도커는 OS 수준에서 가상화를 제공하는 컨테이너 기반의 오픈소스 플랫폼입니다. 이는 가상 머신(VM)과는 달리 각 컨테이너가 자체 OS를 가지고 있지 않다는 것을 의미합니다. 이러한 특성으로 인해 컨테이너는 더 적은 리소스를 사용하고 더 빠르게 시작되며 더 많은 애플리케이션을 같은 하드웨어에서 실행할 수 있습니다. 그럼 왜 도커에서는 커널이 없어도 되는 걸까요? 그 이유는 도커 컨테이너가 호스트 OS의 커널을 공유하기 때문입니다. 도커 컨테이너는 호스트 시스템의 커널과 직접적으로 상호작용하며, 각 컨테이너는 독립적인 사용자 공간을 가집니다. 이렇게 되면 컨테이너는 가볍고 빠르게 실행될 수 있으며, 각 컨테이너가 자체 커널을 필요로 하지 않게 됩니다. 즉, 도커 .. 2024. 2. 3. STORIFY (0202) - 유저 프로필 추가 유저 프로필 추가 - 나는 로그인해서 내 프로필을 볼 수 있다. - 나는 내 프로필을 수정할 수 있다. - 다른 사람이 내 프로필을 볼 수 있다. profile 관련은 user 모듈에 추가했다. user.schema에 정보를 추가해서 담아 저장할것이기 때문이다. users.controller 중 @ApiBearerAuth() @UseGuards(AccessTokenGuard) @Patch('profile') @ApiConsumes('multipart/form-data') @ApiBody({ description: 'User Profile and Avatar Data', type: FileUploadDto, }) @UseInterceptors( FileInterceptor('avatar', { limits.. 2024. 2. 2. STORIFY (0201) - 프로젝트 피드백 피드백: ** 코치님 계속 읽어서 문제. 요정이 읽는 거 너무 긺. 갯수를 좀 줄이면 좋겠음. 상황극을 좀 해주면 좋겠음. 상기님과 누군가와 대화하면서 공백시간을 메꿔주면 좋겠음. 원래는 기술적으로 해결을 해야하는 부분임. TTS가 음질이 좋지 않으면 기분이 좋을지는 모르겠음. 그렇게 좋아보이진 않음. 궁금증만 가질 수 있도록 책장 도입부가 화려하던지 이걸 애니메이션 생성이 아니라 에니메이트되게 잘한다던지. 추가적으로 뭔가 필요할 듯. 성능을 끌어내는게 필요하는데 그냥 잘 조합한거 같음. 엔지니어링 실력이 필요함. 물량을 할지 엣지가 있는 기술을 녹여볼지. 상황이 필요함. --------------------------------------------------------------------------.. 2024. 2. 2. STORIFY (0131) - Socket.IO(2) socketIo를 효율적으로 사용하는 방법: 로그인할때 soketio와 연결된다. 이후 로그아웃할때까지 유지된다. 이렇게 했을 때 서버에 부하가 갈것이다. 하지만 우리의 서비스에서 부하가 갈만큼 유저가 한번에 접속하는 경우가 없을거라고 예상하기에 socketio를 사용할것이다. 만약 서버에 부하가 갈정도로 유저가 많은 서비스라면 여러대의 서버를 사용할것이고 그렇게 되면 socketio보다는 messageQueue를 사용하는 방식을 고려하는것이 좋을수도있다... 만약 알림을 받아야할 유저가 로그인 상태가 아니여서 socketio에 연결되어 있지 않을때는 어떻게 해야하는가? 그때는 DB에 저장해 유저가 로그인할때 socketio가 아닌 그냥 Restful API로 알림을 보내주면 될거라고 생각한다. 정리 1.. 2024. 2. 1. STORIFY (0130) - Socket.IO(1) objectId 수정: objectId는 repository안에서만 사용해야한다. 현재는 mongoDB를 사용하고 있지만, 추후 DB를 교체할 일이 생겼을때 작업이 수월하게 이뤄지게 하기 위해서는 repository안에서만 처리하는것이 좋다. socketIo추가: 서버를 여러대 사용하는 서비스인 경우 메세지큐를 사용하는것이 좋다. storify는 서버 1대이므로 socketio를 사용하는게 맞다고 생각한다. 왜 그럴까? 1. 실시간 통신: 우선 Socket.IO는 클라이언트와 서버 간에 실시간 양방향 통신을 가능하게 한다. HTTP와 달리 연결을 유지하므로, 서버가 클라이언트에게 즉시 데이터를 전송할 수 있다. 2. 단순함: 서버가 한 대일 때는 복잡한 구성이나 부가적인 관리가 필요 없기 때문에, Soc.. 2024. 1. 31. STORIFY (0129) - 예외 처리 적용, GlobalExceptionFilter 예외처리 적용 'NestJS에서 controller 메서드는 일반적으로 `try-catch` 블록 없이 작성됩니다. 이는 NestJS 자체가 예외 처리 메커니즘을 내장하고 있기 때문입이다. controller 메서드에서 발생하는 모든 예외는 NestJS에 의해 자동으로 캐치되어 처리됩니다. 그러나, 특정 유형의 예외를 사용자 정의로 처리하려면 `try-catch` 블록을 사용하거나, 더 나은 방법으로 필터나 인터셉터를 사용할 수 있습니다. 이를 통해 특정 예외 유형에 대한 공통 처리 로직을 중앙에서 관리할 수 있습니다. `GlobalExceptionFilter`는 application에서 발생하는 모든 예외를 캐치하여 처리합니다. 이 필터를 사용하면 각 컨트롤러 메서드에서 `try-catch` 블록을 작.. 2024. 1. 29. STORIFY (0127) - 좋아요~ 추가 swagger 순서 조정 1.updateBook추가, deleteBook 수정 작성자만 update, delete가능하게 수정 2. Friend 모듈 수정 사용자 스토리 - 나는 로그인해서 친구 신청을 '수락'(friendReqs에서 하는 작업) 할 수 있다. ● - 나는 내 친구목록을 볼 수 있다. ● - 나는 내 친구 목록에서 친구를 삭제할 수 있다. ● !! 작업중 오류: 현재 controller, service에서 ObjectId를 다루는 작업들을 하고있다. controller, service에서 ObjectId를 string으로 받고, db에 저장하는 repository에서만 ObjectId를 다루는게 맞지 않을까? 라는 생각이 들었다. 찾아보니 MongoDB의 ObjectId는 데이터베이스에서.. 2024. 1. 27. 이전 1 2 3 4 5 6 7 ··· 9 다음 728x90 반응형