백엔드
-
[상태관리, Recoil] Recoil을 사용해보자!Front-end/State management 2022. 4. 8. 18:46
안녕하세요! 오늘은 상태관리를 위한 패키지 중 하나인 "Recoil"에 대해 알아보도록 하겠습니다! 상태관리를 위한 패키지 중에는 많은 것들이 있는데요. 대표적으로 "Redux"가 있죠! 👏🏻 저는 개인적으로 리덕스의 작동 방식이 너무 복잡하다고 느껴서 Recoil을 상태관리에 이용해볼려고 하고 있습니다! 물론, 대형 프로젝트에서 Redux는 그 힘을 충분히 발휘할 수 있겠지만, 소규모 프로젝트와 토이 프로젝트를 할 때에는 오히려 걸리적거리더라고요! 하지만 Recoil은 react hooks와 비슷한 재질(?) 이라는 느낌이 들어서 사용하는데 어색하지도 않고 직관적이라 개인적으로 좋은 것 같습니다! 저는 recoil을 연습하기 위해, 다크모드가 있는 간단한 투두 앱을 구현해보았습니다 😀 https://6..
-
[AWS S3, Nest.js] Nest.js에서 file S3에 저장하기Back-end 2022. 1. 24. 21:07
안녕하세요! 오늘은 Nest.js에서 AWS S3에 파일을 업로드 하는 법을 포스팅하려 합니다! 우선 Nest.js에서 파일을 핸들하기 위한 controller가 필요합니다. 우선 nest명령어를 통해 uploads라는 모듈을 만들어봅니다. nest g mo uploads 그리고 모듈이 만들어지면 uploads.controller.ts라는 컨트롤러를 생성해줍니다. https://docs.nestjs.com/techniques/file-upload Documentation | NestJS - A progressive Node.js framework Nest is a framework for building efficient, scalable Node.js server-side applications. It..
-
[TypeORM, Nest.js] ManyToOne 관계의 entity가 null return 될 때에러와 마주할 때 2021. 12. 26. 19:23
안녕하세요. 오늘은 서비스 개발 중 @ManyToOne 관계의 엔티티가 정상적으로 출력되지 않고, null로 리턴되는 경우를 만났습니다. 우선 출력하고자 하는 것은 한 가지의 부모 엔티티를 가지는 자식 엔티티입니다. 즉 ManyToOne의 관계를 가지고 있죠. 거기에서 부모 엔티티의 관계를 가져올려 하는데 null이 리턴되는 경우였습니다. 문제는 간단히 해결했습니다. 바로, 해당 데이터베이스 find등의 작업 시, relation을 설정해줘야 하는 것이였죠. nest.js의 service.ts의 코드입니다. provideImage가 부모 엔티티인 user를 가져와야 하는데 null을 리턴하고 있었습니다. 부모 엔티티를 가져오기 위해선 이 findOne이라는 데이터베이스와의 통신을 위해 relation을 ..
-
[Nest.js, Guard, Save request] Guard를 활용한 엔드포인트 보호Back-end 2021. 12. 13. 15:55
안녕하세요! 오늘은 프로젝트에서 허용되지 않은 접근에 대한 자원 request를 막을 수 있는 nest.js guard에 대해서 알아보도록 하겠습니다! 로그인을 한 유저만 엔드포인트에서 자원을 요청할 수 있는 작업을 해야할 때 우리는 이 nest.js의 guard를 사용할 수 있습니다. 미들웨어로도 처리해도 충분하지 않나요? 가드와 미들웨어의 차이는 실행 시기에 있습니다. 우선 미들웨어는 next() 함수를 호출한 후 어떠한 핸들러가 실행될 지 알 수 없습니다. 반면 가드는 ExecutionContext 인스턴스에 액세스할 수 있으므로 다음에 실행될 작업을 정확히 알고 있습니다. request와 response의 정확한 지점에 우리는 이 Guard를 삽입하여, 요청에 대한 거부, 혹은 승인을 할 수 있는..
-
[Authentication, Nest.js, JWT] Nest.js에서 JWT 동적모듈,미들웨어 구현해보기Back-end 2021. 12. 12. 21:40
안녕하세요! 오늘은 더 나은 사람들 서비스의 로그인 부분 진행 중 nest.js 환경에서 JWT를 이용해 로그인을 구현하고 있었습니다. 🐤 다들 로그인 인증 부분을 어떻게 처리하시나요? 👀 nest.js의 강력한 인증라이브러리인 passport가 있지만, JWT 동적 모듈을 따로 구현하여 컨셉도 다시 익히고 개념 정리도 하면서 포스팅을 할려고 합니다. 구현 방향은 다음과 같습니다. 프로젝트 내 구현 프로세스 1. 로그인 시 JwtService의 signToken 함수로 praviate key와 함께 토큰을 사인 (JSON 안의 내용은 다음과 같습니다.) const token = this.jwtService.signToken({ id: (await user).id, nickname: (await user)..
-
[Nest.js, TypeORM] RepositoryNotFoundError에러와 마주할 때 2021. 12. 11. 20:06
Nest.js 환경에서 서비스 개발 도중 만난 에러입니다. 새로운 모듈에서 데이터베이스 Entity를 생성하던 도중 에러가 발생하였는데, 결론부터 말하자면 app.module.ts에 존재하는 TypeOrmModule에 엔티티를 inject하지 않아서 발생한 에러였습니다. 에러 내용을 살펴보면, 현재 ImageContainer Entitiy가 등록되지 않은 것 같다는 에러를 보입니다. TypeORM은 app.modules.ts의 루트 모듈에 엔티티를 등록을 해줘야하는데 이 것을 하지 않아 발생하는 에러였습니다. TypeOrmModule.forRoot({ type: 'postgres', host: process.env.DB_HOST, port: +process.env.DB_PORT, username: pro..
-
[security] hashing password with bcryptBack-end 2021. 12. 10. 01:23
비밀번호의 보안? 백 엔드에서 유저의 비밀번호를 데이터베이스에 그대로 저장하는 경우가 있을까요? 🐱 그 것은 정말 엉망진창의 보안일 것입니다. 누군가가 데이터베이스에 접근 하더라도 유저의 비밀번호는 확인할 수 없어야하지만, 우리는 비밀번호를 Compare하여 로그인을 진행하여야 하기 때문에 비밀번호의 데이터베이스 저장은 필수불가결합니다. 그렇다면 어떻게 우리는 비밀번호를 숨길 수 있을까요? "그 것은 비밀번호를 Hashing 하는 것 입니다." 우선 비밀번호 해쉬화 알고리즘은 예전부터 발달되어 오던 기술입니다. 해싱에 관한 많은 알고리즘이 있지요. 그 중 우리는 Blowfish를 이용한 Bcrypt를 이용하여 비밀번호를 해싱할 것입니다. 많은 다양한 기술이 있습니다만 ex) SHA SHA를 사용하는 암호..
-
[Nest.js] TypeORM 사용기Back-end 2021. 12. 9. 23:43
i새로운 서비스(더 좋은 사람들 save earth) 를 기획하고 백 엔드를 Nest.js + graphql server + postgres DB 로 스택을 정하고 빌드를 시작했습니다. typescript를 더욱 강력하기 사용하기위해 TypeORM 라이브러리를 사용하기로 하였고, 간단한 세팅을 포스팅으로 남길려고 합니다. TypeORM은 우리의 백엔드에서 SQL문을 직접 작성하지 않아도, 데이터베이스와의 통신을 간편하게 해결해주는 라이브러리입니다. 이와 비슷한 라이브러리인 sequelize도 있습니다. 이 두 라이브러리는 코드를 통해 데이터베이스와 통신하고 상호작용합니다. 타입스크립트 코드로써 데이터베이스에 POST, GET등의 처리를 해결하는데 도움을 주는 라이브러리입니다. TypeORM은 Node.j..