js 9

aws load balancer를 rest api 서버에 사용하는 경우 주의할 점

aws의 로드밸런싱 서비스를 이용하려 했다. 발급받은 무료 도메인으로 접속해도, aws ec2의 퍼블릭 ip로 접속해도 같은 문구가 나왔다. 502 bad gateway. aws ec2 콘솔의 사이드바에 있는 로드 밸런싱 대상 그룹에서 healthy가 아니라 unhealthy인지 확인할 필요가 있다. 필자는 처음에 Healthy check의 path에 '/'를 작성했었다. aws에서 해당 경로로 요청을 보내 제대로 200 응답이 오는 지 테스를 한다. 그러나 필자의 서버는 rest api라 '/' 경로에 해당하는 응답이 없었다. 그러니 200 응답이 가지 않았고 unhealthy였던 것이다. 그래서 '/api/v1'로 바꿔줬더니 healthy로 바뀌었다. path를 바꿔도 healthy로 바뀌기까지 체감..

js 2021.09.04

utf8mb4_general_ci와 utf8mb4_unicode_ci

ci는 무엇일까? case insensitive sorting and comparison에서 앞 두 단어의 앞 글자를 따서 만들어졌다. 대소문자 가리지 않는 정렬, 비교 방식이라는 의미이다. 차이는 무엇일까? utf8mb4_unicode_ci는 general_ci보다 나중에 나왔다. 둘은 비교와 정렬에 사용하는 알고리즘에 차이가 있다. utf8mb4_unicode_ci는 utf8mb4_general_ci보다 정렬, 비교 알고리즘이 복잡하다. 그래서 시간은 아주 조오오오금 더 오래 걸리지만 나은 정확도를 보인다. 현대의 컴퓨터는 충분히 빠르기 때문에 차이를 느낄 수 없는 속도라고 한다. 지금은 다른 버전도 나왔다. utf8mb4_0900_ai_ci 보다 자세한 건 stack overflow에서 확인할 수 ..

js 2021.08.17

sequelize-auto로 테이블 생성 시 손수 설정해줘야 할 것들

charset 설정 chartset: "utf8mb4", collate: "utf8mb4_general_ci", 각 테이블에서 필요에 따라 옵션에 위와 같은 설정이 필요하다. utf8도 아닌 utf8mb4가 의미하는 것은 이모지를 허용한다는 것이다. utf8로 설정하면 예기치 못한 버그가 생길 것이다. onDelete 설정 user_id: { type: DataTypes.INTEGER, allowNull: false, onDelete: 'CASCADE', references: { model: 'user', key: 'id', }, }, Foreign key에 해당하는 필드에서 onDelete를 작성해주자. CASCADE를 사용하면 저장된 user_id에 대응하는 데이터가 삭제되면 해당 테이블의 데이터도 ..

js 2021.08.17

sequelize-cli와 sequelize-auto

mysql workbentch를 사용하는 것도 db 모델링하는 좋은 방법이다. 하지만 sequelize-auto로 연동할 경우 init_models.js 수정, 클래스에서 created_at, update_at, defaultValue를 직접 설정해줘야 한다. 하지만 workbentch에서 테이블 간의 관계를 잘 만들어놓았으면 auto가 관계까지 잘 가져온다. mysql workbentch에 created_at, update_at 필드를 만들어주고 default value에 now()를 넣으면 updated_at: { type: DataTypes.DATE, allowNull: true, defaultValue: Sequelize.Sequelize.literal('CURRENT_TIMESTAMP') } 이..

js 2021.08.17

JWT 파헤치기

JWT는 json web token의 줄임말이다 로그인 인증 방식에는 대표적인 두 가지가 있다. 세션 인증 방식 토큰 인증 방식 세션 인증은 로그인 시 유저마다 만들어지는 세션을 저장할 데이터베이스가 필수이다. 서버를 여러 대 사용 중이라면 이 세션 데이터베이스를 공유하고 있어야 한다. 그렇지 않으면 로그인을 해서 세션이 만들어졌지만 다음 요청 시 다른 데이터베이스를 살펴보므로 세션이 없는 줄 알고 다시 로그인을 요청하게 되는 문제가 발생할 수 있다. 매 요청 시 세션을 확인하는 게 일반적이다. 토큰 인증은 어디에 토큰을 저장하는 지에 따라 또 나뉘게 된다. 브라우저의 로컬 스토리지나 세션 스토리지에 저장할 수도 있고 브라우저의 쿠키에 저장해서 서버에게 요청을 보낼 때마다 알아서 토큰도 같이 보내지게 할..

js 2021.08.12

express 앱을 aws ec2에 올리는 과정(에러 많음)

sudo apt-get install nginx aws가 깔린 우분투에 접속해서 위 명령을 치고 인바운드 규칙에서 http(포트 80)을 추가해준다. nginx가 서버 앱에 요청을 할 수 있어야 하기 때문이다. sudo service nginx start 를 하면 nginx가 켜진다. sudo service nginx status 를 통해 잘 켜졌는지 확인이 가능하다. 도메인을 통해 오는 모든 요청이 nginx로 가기 때문에 nginx가 express 서버 앱으로 요청을 보내주게 해야한다. 인바운드 규칙에 3000번 포트를 추가해줄 수도 있지만 리버스 프록시와 캐싱을 제공해주는 nginx를 사용하는 게 더 좋다. cd /etc/nginx/sites-available sudo rm default sudo ..

js 2021.08.07