본 내용은 내일배움캠프에서 활동한 내용을 기록한 글입니다.
오늘 소셜 로그인 API 구현과 관련해서 인터넷에서 자료를 찾아보던 중 사용자 엔티티에서 이상한 점을 발견함
사용자 엔티티에서 refreshToken이라는 컬럼에 nullable:true 옵션이 없었음
어떤 점이 이상하냐면, null 값이 들어가도 된다는 옵션이 없는데 로그아웃에서 refreshToken에 null값을 넣고 저장하는 것임
혹여나 다른 곳에 옵션 처리가 되었는지 확인해 보았지만 없었음
결국 고민하다가 튜터님께 가서 이에 대해 여쭤 봄
처음에는 자바스크립트에서 null, undefined, 공백을 같은 의미로 보기 때문이라고 생각했음
실제로 로그아웃을 실행해 데이터베이스 쿼리 로그를 살펴보니 데이터베이스에 null 값이 전달되고 있었음
참고로 데이터베이스에서 Update와 Delete는 값을 반환하지 않기 때문에 잘못된 값이 들어가도 그냥 수정, 삭제 하고 끝냄
즉 null값이 전달되었지만 데이터베이스 상에서는 아래와 같이 공백으로 저장되는 것임
이 결과로 튜터님께서 궁금증에 대한 해답을 주셨음
이유는 STRICT_TRANS_TABLES
라는 데이터베이스 옵션이 활성화 되어 있지 않아서 그랬음
STRICT_TRANS_TABLES
옵션을 비활성화 되어 있으면 유효하지 않은 값이 들어와서 내부적으로 허용되도록 값을 변환시켜 줌
반대로 켜져 있으면 엄격하게 들어오는 값을 검사함
그래서 STRICT_TRANS_TABLES
옵션을 사용하면 null 값이 들어오는 경우를 엄격하게 체크할 수 있지만 튜터님께서 직접 데이터베이스를 튜닝하는 것은 나중에 어떤 영향이 있을지 모르기 때문에 코드로 제어하는 방법을 추천해 주셨음
아래는 튜터님께서 주신 키워드로 찾은 참고 자료임
https://medium.com/@su_bak/mysql의-sql-mode와-기본-sql-mode들이-하는-역할-b01c09d84cdc
내일은 오늘 하지 못한 카카오 소셜 로그인 구현을 할 예정
필요한 패키지 설치는 끝났기에 해당 블로그와 공식 문서를 참고해서 구현할 예정
오늘은 원래 계획에 있던 소셜 로그인 구현을 하지 못함
중간 중간에 조금씩 필요한 패키지를 설치하고 공식문서나 블로그로 조금 공부 했지만 실제로 구현에 들어가지 못함
대신에 계속 속을 썩이던 CD 멈춤 문제를 해결함
튜터님께서 퇴근하시기 전에 와주셔서 에러 해결을 도와주셨음
정말 오늘은 오타 찾기, 문제 해결로 하루를 보냈음
지난번부터 CD 부분에서 종종 에러가 걸려서 EC2가 아예 멈추는 현상이 발생함
처음에는 누군가 코드의 에러가 있는 상태로 Push해서 그런가 싶었음
하지만 로컬에서는 정상적으로 돌아가지만 CD 부분에서 에러가 발생했음
그래서 오늘 cd.yml 파일을 한 줄씩 살펴보니 .env 파일을 만드는 곳에서 오타가 있었음
하지만 오타를 해결해도 문제는 계속 발생했음
대부분의 에러는 아래처럼 Timeout 에러가 발생했음
위와 같은 에러가 발생하면 Git Bash나 AWS 인스턴스 콘솔로 우분투 서버에 접속 자체가 되지 않았음
결국 튜터님께서 이 문제를 해결해 주셨음
지난 기수에도 이러한 에러가 있었기에 금방 해결해 주셨음
문제는 aws-sdk
패키지 때문이었음
튜터님께서 이 패키지가 어마어마한 메모리를 잡아먹어서 메모리 누수로 인해 서버에서 다음 동작을 하지 못해서 Timeout이 발생했을 수도 있다고 하셨음
그래서 확인해보니 실제로 구 버전인 aws-sdk에서 메모리 누수가 발생한다는 이야기가 나왔음
https://github.com/aws/aws-sdk-js/issues/3128#issuecomment-1019998021
https://coder-shankar.medium.com/aws-sdk-memory-leak-63e23dcdc6f0
https://stackoverflow.com/questions/38069426/node-js-aws-sdk-sqs-memory-leak
결국 package.json
에서 aws-sdk
패키지를 삭제하고 CD를 재실행하니 정상적으로 동작함
[ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379 0|Ticketing | at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16)
위와 같은 에러가 발생함
하지만 신기하게도 서버 실행에는 문제가 없었음
인터넷에 검색해 보니 Redis 연결이 제대로 되지 않아서 그렇다고 함
위 내용을 참고로 우분투 서버에도 Redis 서버를 설치함
sudo apt-get install redis-server
를 통해서 설치 진행
이게 왜 해결….?
위 명령어로 해결이 되었다는 것은 어딘가에서 로컬 Redis 서버를 바라보고 있다는 것임
아무리 코드들을 찾아도 로컬 Redis 서버를 바라보는 곳을 찾지 못했기에 현상 유지로 결정