[2024.07.29 TIL] 내일배움캠프 73일차 (최종 팀프로젝트, CD 멈춤 현상, EC2 인스턴스 ioredis 에러, 데이터베이스의 null과 공백 문자)

My_Code·2024년 7월 29일
0

TIL

목록 보기
88/113
post-thumbnail

본 내용은 내일배움캠프에서 활동한 내용을 기록한 글입니다.


💻 TIL(Today I Learned)

📌 Today I Done

✏️ 데이터베이스의 null과 공백 문자

  • 오늘 소셜 로그인 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



📌 Tomorrow's Goal

✏️ 카카오 소셜 로그인 구현



📌 Today's Goal I Done

✔️ 문제 해결의 날

  • 오늘은 원래 계획에 있던 소셜 로그인 구현을 하지 못함

  • 중간 중간에 조금씩 필요한 패키지를 설치하고 공식문서나 블로그로 조금 공부 했지만 실제로 구현에 들어가지 못함

  • 대신에 계속 속을 썩이던 CD 멈춤 문제를 해결함

  • 튜터님께서 퇴근하시기 전에 와주셔서 에러 해결을 도와주셨음

  • 정말 오늘은 오타 찾기, 문제 해결로 하루를 보냈음



⚠️ 구현 시 발생한 문제

✔️ CD workflow 멈춤 현상 (Timeout)

  • 지난번부터 CD 부분에서 종종 에러가 걸려서 EC2가 아예 멈추는 현상이 발생함

  • 처음에는 누군가 코드의 에러가 있는 상태로 Push해서 그런가 싶었음

  • 하지만 로컬에서는 정상적으로 돌아가지만 CD 부분에서 에러가 발생했음

  • 그래서 오늘 cd.yml 파일을 한 줄씩 살펴보니 .env 파일을 만드는 곳에서 오타가 있었음

  • 하지만 오타를 해결해도 문제는 계속 발생했음

  • 대부분의 에러는 아래처럼 Timeout 에러가 발생했음


✔️ AWS EC2 인스턴스 ioredis 에러 발생

[ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379 0|Ticketing | at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16)
  • 위와 같은 에러가 발생함

  • 하지만 신기하게도 서버 실행에는 문제가 없었음

  • 인터넷에 검색해 보니 Redis 연결이 제대로 되지 않아서 그렇다고 함

  • https://stackoverflow.com/questions/8754304/redis-connection-to-127-0-0-16379-failed-connect-econnrefused

  • 위 내용을 참고로 우분투 서버에도 Redis 서버를 설치함

  • sudo apt-get install redis-server 를 통해서 설치 진행

  • 이게 왜 해결….?

  • 위 명령어로 해결이 되었다는 것은 어딘가에서 로컬 Redis 서버를 바라보고 있다는 것임

  • 아무리 코드들을 찾아도 로컬 Redis 서버를 바라보는 곳을 찾지 못했기에 현상 유지로 결정


profile
조금씩 정리하자!!!

0개의 댓글