전체 글

무슨 생각을 해.. 그냥 하는거지
· Error
매번 새로운 컴퓨터에서 개발환경 셋팅하기가 귀찮다... 도커면 셋팅 과정이 훨씬 간단해지지 않을까? 라는 생각에서 출발 생각지 못하게 vscode 를 통해 쉽게 도커 환경을 셋팅했다. 회사에서 개발환경이 vue2, node12 버전을 사용 중이었다. 그러나 노드 12버전은 지원이 종료되었기 때문에 vscode를 통해 도커를 셋팅하려면 그래도 노드 14버전은 써야할 것 같았다. 다행스럽게도 Vue2는 node 14까지 지원한다. vue.config.js를 몇번 수정하니 node 14에서도 개발이 가능했다. 먼저 vscode에서 확장패키지를 몇개 설치 필요하다 Docker - Microsoft 2. Dev Containers - Microsft Dev Containers 패키지를 설치한 후 ctrl+shif..
logging 을 import하여 exc_info를 로그로 남길 수도 있겠지만.. 나는 에러가 발생했을 때 마다 slack으로 정확히 어떤 파일의 몇번째 줄에서 문제가 발생했는지 알림을 받고 싶었다. traceback 모듈을 사용해보자. traceback은 파이썬의 표준 라이브러리에 포함된 모듈이므로 별도 설치가 필요없다. :D (구버전 파이썬을 써야만 하는 상황이라 버전 안맞을까봐 걱정할 필요가 없다!) 에러 정보를 콘솔에 출력(print) 하려면 traceback.print_exc() 특정 변수에 예외정보를 담으려면? try: test = "이건 테스트지" print(test[100]) # test 문자열의 100번째 인덱스는 없으니 에러가 발생하지요 except Exception as e: impo..
· Server/sql
mysql에서 데이터를 조회하는 도중 갑자기 디비가 멈췄다. 띠용.. @-@ db에서 deadlock 를 발견함. 추정 원인으로는 데이터를 조회하던 도중 조회하는 테이블의 컬럼에 제약조건을 걸어서 그런 것 같다. 왜냐하면 Update ~ 를 친 후에 멈췄기 때문... 🥲🥲 일단 급하게 해결하려면.. show processlist 이렇게 조회된 데이터 가운데 time이 많이 걸린 행이 있을 것이다. 그 행의 id를 찾아 죽이자. kill {id} 실사용중에도 데드락이 발생할 수 있으니.. 왜 데드락이 발생했는지,데드락 발생시 알아서 process를 kill하는 방법을 알아봐야 할 듯 하다..
api를 만들 때 리스트로 만드는 것 보다 딕셔너리를 주로 많이 쓰게 된다. 내가 파이썬을 처음 배웠던 시절에는 딕셔너리 자료형이 순서를 보장하지 않는다고 했던 것이 기억나 가급적 순서보장이 필요할 땐 리스트를 주로 썼었다. 근데 아무리봐도 리스트보단 딕셔너리를 쓰는 것이 더 나아보이는 상황이 종종 있었는데 이것이 또 순서가 보장되었으면 했다. 그렇다고 키값을 요소로 가지는 리스트와 딕셔너리를 둘다 쓰긴 싫었는데... 다행스럽게 파이썬 3.6버전부턴 키 추가 순서가 보장된다!🎉🎉 https://blog.hwahae.co.kr/all/tech/6662 Python3.6 부터는 Dict가 순서를 기억한다. – 화해 블로그 | 기술 블로그 Python3.6 화해 개발팀에서는 닥블(닥치고 블로그)이라는 소모임을..
· Back-up/etc
putty 너무 못생겨서 못쓰겠어요(?) 쓰는 툴은 어느정도 아름다워야 쓸 맛이 난다고요.. putty말고 쓸만한 툴을 추천한다. putty는 디자인을 제외하고도 ftp는 별도로 파일질라를 다운받아야 하기 때문에 여간 불편한 것이 아니다. 나는 유료를 좋아하지 않기 때문에 무료만 추천한다. 밑의 소개하는 툴들은 모두 ssh, ftp둘다 사용이 가능하다. 윈도우 - Mobaxterm 윈도우 환경이라면 Mobaxterm 개인적으로 레트로 느낌나서 좋아하고 잘 쓴다. 정말 심심할 땐 저기서 게임도 한다(?) 기존에 putty를 썼다면 mobaxterm에 지금껏 연결했던 클라우드 접속 정보를 연동할 수도 있다. Max, 윈도우, ios, ... - Termius 맥 환경이라면 Termius Mobaxterm에 ..
· Back-up/etc
파이썬으로 openai에 요청하여 응답을 받아보자! 간지나는 무언가를 만들 수 있을 것만 같아요..? 예전에는 request를 통해서 openai에 요청하고 그랬는데 다시 알아보니 openai의 공식 python 관련 라이브러리가 따로 있었다. 정말 top-notch&full-fledged 개발자라면 자기 입맛에 맞게 requests를 사용해서 이것저것 할 수 있겠지만 나는 그냥 편하게 openai에서 직접 업데이트하고 호환성을 맞춰주는 라이브러리를 사용하겠다. 코드 보기 나는 어떤 녀석을 쓸거냐면... 코드는 얼추 이렇다. import openai openai.api_key='{당신이 발급받은 openai key}' def request_openai(input_text): try: chat_comple..
· Server
대충 누군가 셋팅해놨던 아파치와 Nginx만을 써보다가 이제 Nginx Configuration에 대해 좀더 알아봐야겠다 생각했다. 언제까지나 남이 셋팅해준 서버에 기대며 살 순 없으니까... 그것이..개발자니까..(우웁..) 대충 웹서버하면 원픽으로 떠오르던 것이 아파치 였는데 어느 순간부터 Nginx 가 급부상하기 시작했을까. 무슨 차이가 있길래 Nginx라는 녀석이 아파치를 앞질러서 급부상하기 시작했나? 간단하게 말하자면 Nginx는 아파치보다 큰 트래픽에 훨씬 유용하다고 볼 수 있다. 예를 들어 1000명의 사용자가 동시에 서버에 http 요청을 보내는 경우를 생각해보자. 아파치의 경우 1000명에 맞춰서 1000개의 멀티프로세스 쓰레드를 생성해야 하는 반면, Nginx는 하나의 프로세스로 100..
· Server
sudo systemctl nginx status 를 눌렀을 때 괜히 이런 찝찝한 화면이 나온다면? 처음엔 nginx.conf 파일의 pid경로가 /run/nginx.pid; 가 아닌 /var/run/nginx.pid로 바꿔줘야 하나? 했는데 그건 아니고... sudo vi /usr/lib/systemd/nginx.service 파일을 편집해서 ExecStartPost=/bin/sleep 1 를 추가해주면 끝난다. 그리고 다시 systemctl daemon-reload systemctl restart nginx 를 통해 nginx를 재부팅해주면 끝. 심각한 에러는 아닌데 그냥 찝찝하니까 없애준다. https://www.webconn.tech/kb/failed-to-parse-pid-from-file-ru..
· Back-up/etc
nginx.conf 파일 건드렸다가 제대로 재앙을 한번 맛봤다! 다시는 맛보고 싶지 않다! nginx.conf 파일을 건드렸다면 restart하기 전에 꼭..꼭 다음을 실행시킨 후에 확인하자 sudo nginx -t nginx의 syntax error를 확인할 수 있다. (나는 대체 무슨 야수의 심장으로 이런걸 확인도 안하고 수정하고 재시작한거니...) 문제가 없었다면 이제 nginx를 재시작하자. sudo systemctl restart nginx 그럼 이제 재시작이 되었을 것... 잘 돌아가고 있는지 마지막까지 확인하자. sudo systemctl status nginx 를 통해 잘 실행되고 있나 확인! 더불어서 내 서비스가 잘 실행되고 있는지도 확인합시다 sudo systemctl status 내서..
· Server/linux
리눅스에서 파이썬 버전 변경이 필요한 순간이 찾아온다.. 가령 높은 버전을 요구하는 pip를 설치 하려고 할 때 말이요. 개발 환경: Ubuntu 18.04.5 LTS aws의 ec2 환경인데 기본적으로 파이썬 버전이 3.6.9인듯 했다. sudo apt update sudo apt install software-properties-common sudo add-apt-repository ppa:deadsnakes/ppa sudo apt install python3.7 python3.7 -V // Python 3.7.9 라고 나올 것이다 이 과정에서 엄청난 오류가 있었고…그냥 에러창에서 하라는거 다 따라쳤다. 확인용 ls -al /usr/bin/python* 3.7버전이 잘 깔려있는 것을 확인할 수 있다...
· Back-up/etc
새삼 정말 무식하게 리눅스를 써왔다는 것에 반성하며 리눅스 명령어 정리해보기..^^ # 실행 ps가운데 user가 ubuntu인 것으로 실행중인 것 찾기 ps -aux | grep ubuntu # .. 마찬가지로 + 프로세스명에 anything이 들어간 프로세스 찾기 ps -aux | grep ubuntu | grep anything # text.txt에 ls -al의 결과물 작성 ls -al > text.txt # text.txt에 ls -al의 결과물을 이어서 작성 ls -al >> text.txt # 프로세스 강제 중지 kill -9 pid(프로세스id) # 터미널에서 다른 작업을 해야하거나, 실행시간이 걸릴 경우 background로 실행시키기 `command &`
· Server/linux
퍼미션 종류 (권한기호) 읽기(r): 읽기 권한 (2² = 4) 쓰기(w): 쓰기 권한 (2¹ = 2) 실행(x): 실행 권한 (2⁰ = 1) 예시 만약 소유자에게 읽기 권한만 주고 쓰기/실행권한을 주지 않는다면? 4 만약 소유자에게 읽기/쓰기 권한만 주고 실행권한을 주지 않는다면? 6 소유자(u)/그룹(g)/기타(o) rwxrwxrwx = 777 -> 소유자, 그룹, 기타에게 모두 읽기/쓰기/실행 권한이 부여됨 r-xr-xr-x = 555 -> 소유자, 그룹, 기타 모두 읽기/실행 권한만 부여됨 r-------- = 400 -> 소유자에게 읽기 권한, 나머지는 권한 없음 rwx------ = 700 -> 소유자에게만 읽기/쓰기/실행 권한이 부여됨
sovelop
so's devlog