git repository 서비스를 제공하는 bitbucket, github, gitlab 등은 ssh key를 등록하여 사용한다. 내 ssh-keygen으로 생성한 비밀키/공개키 쌍 중에서 공개키에 해당하는 ~/.ssh/id_rsa.pub 파일의 내용을 복사해서 등록하는 방식이다. 그리고 ssh 로 해당서비스를 접근할 때, 사용자 이름을 git 으로 하면, 서비스에 가입한 ID를 화면에 출력하고 바로 접속을 끊는다. 아래 예에서는 "exampleuser" 로 가입했을 때 나오는 모습이다. $ ssh git@bitbucket.org PTY allocation request failed on channel 0 logged in as exampleuser You can use git or hg to conn..
ssh-keygen 서버에 접속하여 개발하는 사람들은 하나의 서버만 접속하는 일은 별로 없다. 또한 서버를 여러 단계를 거쳐 접속하는 경우도 많다. ssh (혹은 rsh 시절부터) 기반의 접속은 다음과 같은 편리함/불편함의 역사를 가지고 기능이 추가되어 왔다. 매번 비밀번호를 입력하는 것이 귀찮다. -> 인증된 서버에서 접속하는 것을 허락해 주시오 (.rhosts, .shosts) 인증된 서버가 취약하면 같이 취약하다 -> 인증된 사용자임을 증명(공개키)하면 접속을 허락해 주시오 (ssh-keygen) 인증된 사용자의 디렉토리의 비밀키 탈취가 가능하다. -> 비밀키를 passphrase를 넣어서 생성하시오 (ssh-keygen) passphrase 를 매번 입력하는 것이 귀찮다(1번!) -> 개인키 캐시..
시계 부품 중에서 엔진에 해당하는 "무브먼트"라는게 있다. (movement라니 이름이 너무 평범해서 마음엔 안들지만) 웬만해서는 분해를 해도 이것만큼은 안건드리는데, 이 부품을 억지로 분해 했다가는 그 안에 있는 톱니들이 와장창 제자리를 잃고 다시 조립하는것은 쉬운일이 아니기 때문이다. 그런데, 벽걸이나 탁상 시계는 건전지 가는 것 정도만 하다가, 시계바늘이 뭔가 정확히 12시에 만나지 않는다거나 알람을 1시에 맞췄는데 2시에 울린다거나 하는 정도가 되면 앞 유리 면을 열어야하는 정도의 분해는 해야한다. 시계 바늘이라는 것은 단지 중앙에 나와 있는 동심원 3개에 고정되어 있는 것이고, 바늘을 뽑고 다시 각도를 맞춰서 다시 꽂을 수 있으므로 이 정도만 알아도 일상을 살아가는데, 큰(?) 도움이 된다. 오..
법률이 제정되고 시행령, 시행규칙이 만들어지듯이 프로그램의 운영관점에서 보면, 법률은 프로그램과 같고, 시행규칙은 설정파일과 같다. 법률과 달리 소프트웨어에서는 시행규칙에 들어가야할 것이 프로그램에 들어가는 일이 많다. 운영 중에서 조정해야하는 시행규칙을 지원하는 프로그램 수정보다, 프로그램내에서 로직으로 바로 해결하면 간단하기 때문이다. 또, 설정 값으로 빼는 것이 굳이 이번 한 번만을 위한 것인데, 조금 거추장스러운 추상화 아닌가 싶기도 하다. 문제는 한참 뒤에 나타난다. 전체적인 프로그램의 추상화 레벨이 마구 섞여 있는 코드를 마주할 때 느끼는 가독성의 문제. 만약 추상화 단계가 다른 코드를 불가피하게 작성해야할 때는, 변명이라도 잘 써 놓을 수 있다면 좋겠다. 나중에라도 쉽게 고치게. -End-
도메인 소유기록을 찾아 보려고 domain history로 검색해 보니, whois 자료를 다 모아서 API로 제공하는 곳이 있더라, 많더라. 난 단지 도메인 한 개 알아 보고 싶었다만... https://whoisrequest.com/ Whois Search, Domain History, Reverse IP/NS Lookups and more Lookup IP, CIDR, ASN or Domain whoisrequest.com 이 사이트에서는 소유자는 공개하지 않고 누군가 사용했는지만 확인해 볼 수가 있다. 그나마 하나 찾아서 메모차 적어 둔다. 둘째 딸 낳고서 이름으로 도메인을 하나 2년간 구매하고, 만료시점에 4년을 더 연장을 해서 총 6년을 보유하고 있다가 어떤 이유에서인지, 연장을 안했다. 그리..
서버를 만들고, 여러 테스트하는 것 중에 영구 접속이 끊어지는 상황을 재현하는 것은 쉽지 않을 수 있다. 디버거를 이용하여 간단히 종료시켜 보는 법을 알아 본다. python으로 돌고 있는 데몬(pid 11688)이 있다고 하고, 데몬의 DB 접속은 영구 접속에 해당하는데, 이 접속을 강제로 종료시키는 것을 가정한다. $ lsof -n -p 11688 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME python 11688 pynoos cwd DIR 202,3 80 1636949 /misc/django_projects/app/broadcast python 11688 pynoos rtd DIR 202,3 4096 128 / python 11688 pynoos txt..
django로 만든 웹 서버가 메모리 릭이 있는 것 같아서, 임시로 클라이언트 요청 수에 제한을 걸고 새로 실행되도록 설정했다. 임시가 길어져 1년이 돼가는 동안 잊고 있다가 개발자의 자존심을 건드는 설정인지라 다시 봐야했다. 이 글은 메모리 릭을 잡았다는 것이 아니다. 서버들 중 적당히 스왑을 사용하고 있는 녀석을 골라서 들어갔다. gunicorn 들 중에 제일 pid가 큰 것을 골라낸 후, 해당 PID 에 strace 를 걸어서 GET/POST와 URL PATH에 해당하는 것만 출력하도록 awk 파이프 질을 했다. 동시에 "ps -efl" 로 해당 PID만 골라낸 다음 awk로 적당히 메모리 사용량 부분만 출력한다. 대략 512 개의 요청만 하면 사라지는 gunicorn의 PID이므로, 위 두 작업을..
Network Card의 PPS를 측정하는 아주 간단한 스크립트 linux, NIC eth0 의 PPS를 1초마다 측정한다고 가정하면, #!/bin/bash while true do echo $(cat /sys/class/net/eth0/statistics/tx_packets) $(cat /sys/class/net/eth0/statistics/rx_packets) sleep 1 done | awk '{DT=$1-TPREV; DR=$2-RPREV; if(TPREV) print strftime("%Y-%m-%d %H:%M:%S", systime()), "TX:", DT, "RX:", DR; TPREV=$1; RPREV=$2; }'
이 GS(링크)를 끌어다가 즐겨찾기에 떨어 뜨려 저장 후, 구글 검색 결과 창에서 누르면 주소를 정리해주는 북마클릿이다. 해당 내용은 아래와 같다. 만약 링크가 나오지 않는다면, 아무 북마크나 만들고 아래 내용으로 주소를 복사/붙여넣기를 하여 만든다. javascript:location.href=location.href.split('?').map(x=>x.split('&').filter(a=>a.startsWith('http')||(['q','hl','tbm','start'].indexOf(a.split('=')[0])!=-1))).map(b=>b.join('&')).filter( a => a).join('?') 구글 검색을 한 다음 나오는 페이지를 공유하고 싶으나, 그 URL에는 불필요한 정보가 실려 ..
객체의 생성이란 무엇인가, 플라톤의 이데아처럼 어딘가에 존재하는 것으로부터 현실에 필요한 속성을 부여하며 만들어지는 것인가, 아니면 옆에 있는 다른 객체를 복사하여 속성을 원하는 대로 고쳐쓰는 것인가? 개발자가 철학적인 사고를 하기 쉬운 것들은 이런 사고가 설계에 도움이 되기 때문아닌가? c/c++의 struct, class를 생각하면, 텅빈 설계도 같은 것에서 메모리를 차지하면 만들어지는 것은 플라톤의 이데아 같은 것이 생각나고, prototype 객체를 우선만들고 복사한 다음 속성을 변경하여 쓰는 Javascript 같은 것은 후자와 같은 모양 아닐까? 몇 년 된 간단한 생각을 일단 적어 둠.
- Total
- Today
- Yesterday
- BlogAPI
- 오픈소스
- TCP/IP
- 대화
- 구근
- tattertools
- 커피
- SSO
- Linux
- nodejs
- 덴드롱
- writely
- 식물
- 퀴즈
- macosx
- VIM
- SVN
- JavaScript
- 클레로덴드럼
- 수선화
- MySQL
- OpenID
- 디버깅
- 벤자민
- Subversion
- url
- Tattertools plugin
- perl
- 킹벤자민
- ssh
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |