Today I Learned
날짜
2024년 9월 19일 목요일
내용
건방지지만 좋은 친구
인스타그램 관련된 쇼피파이 앱을 새로 생성했다. 임베디드 앱으로 만들었기 떄문에, 샵이 앱을 다운로드 받은 직후 세션토큰을 검증해주어야 한다. 기존에 다 구현해봤던 로직이라, 과거에 썼던 걸 그대로 가져와 썼다. 근데 토큰이 자꾸 잘못되었다고 뜬다. 분명 Shopify Docs에서 설명한 그대로 했는데…
마지막 원본 서명과 비교할 때 자꾸 다른 값이 뜬다.. GPT한테 물어봐도 제대로 된 해결책을 내놓지 않는 와중에, GPT가 내게 물어왔다.
“님 근데 pyjwt 쓰면 편한데 왜 안씀?”
“그뭔씹”
“jwt 토큰을 자동으로 디코딩해 검증해주는 파이썬 라이브러리입니다. 수동으로 할 떄의 오류를 줄여주어 간편하고 정확합니다.”
“확인”
내 로직이 정확한 상황에서, 감히 쇳덩어리가 말해준 방법으로 바꾼다고 뭐가 달라지랴 싶었으나 밑져야 본전이라 해봤다.
그랬더니 오류메시지가 바뀌었다.
1
2
3
4
5
6
7
{
"result": false,
"detail": {
"message": "Invalid crypto padding",
"access_token": "\"token\""
}
}
액세스 토큰을 가져올 때, 앞에 따옴표까지 가져와 디코딩해서 생기는 문제라고 한다. 따옴표 제거해주는 코드만 추가해주니 만사 OK였다. 역시 고집은 부릴게 못된다.
EC2 폭발의 원인
지난주부터, 인스타그램 실서버에 사용하는 EC2가 접속하면 잠시 후 폭발하는 문제가 발생했다. 정확한 문제 상황은 다음과 같다.
- EC2 인스턴스에 접속한다.
- 터미널을 킨다.
- 무언가 돌아가고 있다는 듯이, 커서가 나타나지 않는다. 잠시 후 메시지가 뜬다.
1
2
3
4
/usr/bin/sh: warning: shell level (1000) too high, resetting to 1
/usr/bin/sh: warning: shell level (1000) too high, resetting to 1
/usr/bin/sh: warning: shell level (1000) too high, resetting to 1
bash: warning: shell level (1000) too high, resetting to 1
- 메시지가 30초 ~ 1분 간격 으로 메시지가 반복된후 접속이 끊긴다.
- EC2 인스턴스의 상태를 확인해보면 CPU 사용률이 치솟아있다.
지난주에는 Docker 관련된 문제라고 생각했는데, 그게 아니었다. 애초에 도커파일은 다른 서비스들과 다 비슷한데 애만 터지는 것도 이상하고… 쉘 초기화 스크립트에 문제가 있을수 있다고 하여 열어봤다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# .bash_profile 파일
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
newgrp docker
# .bashrc 파일
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific environment
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
then
PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
if [ -d ~/.bashrc.d ]; then
for rc in ~/.bashrc.d/*; do
if [ -f "$rc" ]; then
. "$rc"
fi
done
fi
unset rc
newgrp docker
여기서 둘 다 내가 추가한 newgrp docker
가 문제가 됐다. 이 명령어는 현재 셸을 종료하고 새로운 그룹 ID를 가진 새로운 셸을 시작한다. 이 명령어가 최초 셀 스크립트 초기화에 포함되어 있으니, 계속 새로운 스크립트가 반복되어 실행되는 무한루프에 빠져버린 것…
ec2에서 항상 도커 컨테이너가 돌아가도록 하기 위해 뭣 모르고 추가해놓은 코드인데 이렇게 될 줄은… newgrp
명령어는 조심하자
회고
GPT에게 질문을 한번 하면 냉각수가 0.5L가 필요하다는 썰을 들었다. 나에 비하면 친환경이다.