3월, 2023의 게시물 표시

Nodemailer 설정하기 (보안 수준이 낮은 앱의 액세스 기능 지원 중단)

이미지
개인프로젝트를 진행하면서 사용자 이메일 인증, 임시 비밀번호 발급 등을 위해 Nodemailer 라이브러리를 사용했다.  나의 경우 google Gmail 이메일 계정을 사용하여 Nodemailer를 사용했다. 예전에는 Nodemailer 공식 문서와 같이 코드를 작성하고 구글 계정에서 보안 수준이 낮은 앱의 액세스 기능을 키기만 하면 됐었다. 하지만 정책이 변경되어 다르게 설정이 필요해서 이와 관련해서 작성해보려한다. 1. 자신의 프로필 -> [Google 계정 관리] -> 보안 페이지 -> [Google에 로그인] 중 [2단계 인증]을 클릭 후 자신의 모바일 또는 sms 인증이 가능한 기기를 이용하여 2단계 인증을 완료시킨다. 2. 2단계 인증을 완료하고 바로 아래 앱 비밀번호를 클릭하여 비밀번호를 발급받는다. 해당 비밀번호는 창을 닫으면 다시는 확인할 수 없다. 따로 저장해두거나 새로 발급받아야 한다. 앱 선택은 기타를 선택해도 되고 아무거나 선택해도 된다. 3. 발급받은 번호를 기존의 Nodemailer 설정의 pass에 입력해주면 설정이 끝이난다. 추가적으로 Gmail 고객센터에서 제공하는 문서이다.  * 변경된 정책 확인 https://support.google.com/accounts/answer/6010255?hl=ko * 메일이 스팸으로 분류되는것을 방지하기 https://support.google.com/mail/answer/81126?hl=ko

[TypeORM] database update시 save() 메서드를 사용하면 주의할점

#  Updating in the database Now let's load a single photo from the database, update it and save it: import { Photo } from "./entity/Photo" import { AppDataSource } from "./index" const photoRepository = AppDataSource . getRepository ( Photo ) const photoToUpdate = await photoRepository . findOneBy ( { id : 1 , } ) photoToUpdate . name = "Me, my friends and polar bears" await photoRepository . save ( photoToUpdate ) Now photo with   id = 1   will be updated in the database.   공식 문서를 보면 위와 같이 사용자 정보를 최초로 저장할때가 아닌 업데이트 시에도 사용자 객체를 가져와 참조 값을 변경하고 save() 메서드를 사용해서 사용자 정보를 업데이트하도록 나와있다. 공식문서 첫페이지에 나와있는 방법이기에 그대로 그냥 사용했었다. 그런데 프로젝트 진행중 알 수 없는 문제가 발생했다. 데이터를 업데이트하는데 업데이트 되지않고 값이 추가적으로 insert 되는 상황이 발생했다. MySQL Workbench를 보면 값 업데이트가아닌 추가 되었는데 다시 해당 오류를 재현해보려했지만 동일한 오류를 재현하지 못했다. typeorm 처음 공부할때 공식문서와 여러 블로그를 봤는데 save() 메서드를 주의해서 사용해야 한다는 내용이있었다. 다시 찾아보니 TypeORM에서 save() 메서드는 entity에 작성되어있는 연결되어있는 모든 PK값을 WHERE 절에 함께 담아 SELECT 쿼리를 실행하...