토요일, 10월 31, 2020

[B급 프로그래머] 10월 4주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: 변수명,함수명스펠링 틀렸다고 프로그래밍 실력까지 깍아내리는 경우를 왕왕 보는데... 존카멕(심지어 영어 네이티브!)도 스펠링 틀립니다. via @dgtman, 게임 엔진 블랙 북: 울펜슈타인 3D)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
보너스: 노래방기기에서 DOOM 돌리기
EOB

금요일, 10월 30, 2020

[유튜브 방송] (리눅스 업스킬 도전 #22-b) notepad++ 편집기로 EC2 원격 호스트의 파일 편집하기

[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 추가 팁인 22-b편을 공개해드리겠다. 22-b편은 notepad++ 편집기로 EC2 원격 호스트의 파일을 편집하는 방법을 설명한다.

2020년 10월 30일자 [리눅스 업스킬 도전 #22-b] notepad++ 편집기로 EC2 원격 호스트의 파일 편집하기 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 notepad++과 SFTP 지원 소개
  • 03:00 플러그인 설치
  • 04:24 플러그인 활성화와 원격 호스트 등록
  • 07:30 테스트

방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: 플러그인 설치
    1. 플러그인 --> 플러그인 관리 --> 사용가능 탭에서 NppFTP 설치
  • 단계 2: 플러그인 활성화와 원격 호스트 등록
    1. 설치 후 플러그인 --> NppFTP --> Show NppFTP window
    2. 우측 NppFTP 영역에서 톱니 바퀴 누르고, Profile settings
    3. Profile settings 대화상자에서 Add new 누르고 프로파일 이름을 지정
      • Connection 탭의 Hostname에 EC2 IP 주소, Connection Type을 SFTP, Port는 22번 그대로, username을 ubuntu(또는 ec2-user)로 설정
      • Authentication 탭의 Try private key file authentication에 체크박스를 켜고, Private key file에 EC2의 개인키(주의: ppk 형식이 아니라 pem 형식!)를 설정
      • Close를 눌러 닫고 나온다
    4. 우측 NppFTP 영역에서 툴바 가장 마지막 아이콘(Show message window)을 눌러 하단의 Output 영역을 활성화(접속시 문제가 생기면 로그를 확인할 수 있음)
  • 단계 3: 테스트
    1. 우측 NppFTP 영역에서 접속 아이콘을 누르고 앞서 지정한 프로파일 이름을 선택하고 암호를 입력하면(pem 파일의 기본 암호는 비어 있으므로 그냥 OK) 로그인
    2. 원하는 파일을 더블클릭하면 편집 창에 뜨고, 수정 후 저장하면 자동으로 서버로 올라감

참고: 위와 같은 방법은 vi와 같은 편집기에 익숙하지 않을 경우에 사용하는 패턴이며, VSCode, Atom, 이클립스, 서브라임 등 다양한 IDE(또는 편집기)에서 응용 가능하다!

EOB

목요일, 10월 29, 2020

[유튜브 방송] (리눅스 업스킬 도전 #22-a) EC2 인스턴스에서 계정 추가 후 공개 키 등록 방법

[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 추가 팁인 22-a편을 공개해드리겠다. 22-a편은 EC2 인스턴스에 계정을 추가한 다음에 SSH 접속을 위해 공개 키를 등록하는 방법을 설명한다.

2020년 10월 29일자 [리눅스 업스킬 도전 #22-a] EC2 인스턴스에서 계정 추가 후 공개 키 등록 방법 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 계정 추가 복습
  • 03:30 개인 키 생성(ppk)
  • 05:31 공개 키 확인
  • 06:38 공개 키 등록과 테스트

방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: 개인 키 생성(웹)
    1. EC2 관리 화면(네트워크 및 보안 --> 키 페어)에서 [키페어 생성]으로 새로운 키 생성
    2. ppk 형식으로 다운로드!(주의: 보안을 강화하려면 puttygen에서 passphrase를 지정해야 한다)
  • 단계 2: 공개 키 확인
    1. 공개 키는 puttygen으로 ppk 개인 키를 로드한 다음 상단에서 확인
  • 단계 3: 해당 사용자 계정으로 들어간 다음에 공개키 등록과 테스트(터미널)
    1. $ mkdir .ssh
    2. $ chmod go-rwx .ssh
    3. $ cd .ssh
    4. 확인된 공개 키를 ~/.ssh/authorized_keys 파일에 추가
    5. $ chmod go-rwx authorized_keys
    6. 마지막으로 putty를 하나 더 뛰워 IP 주소와 개인 키를 지정한 다음에 로그인해서 정상 동작하는지 확인
EOB

수요일, 10월 28, 2020

[유튜브 방송] (개발자 영어 #4) 개발 관련 질문과 대답 방법

오늘은 개발자 영어 4편을 공개해드리겠다.

2020년 10월 28일자 [개발자영어 #4] '개발 관련 질문과 대답 방법 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 개발자 영어에서 확인할 수 있다.

2020년 10월 28일자 방송 내용은 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 0:00 개발자 영어 소개
  • 1:14 질문과 대답이 중요한 이유
  • 3:41 질문 제대로 하기
  • 10:51 대답 제대로 하기
EOB

화요일, 10월 27, 2020

[독서광] (번역서) 게임 엔진 블랙 북: 울펜슈타인 3D

정말 간만에 번역서로 독자 여러분들을 찾아뵙게 되어 무척 기쁘다. 이번에 새로 선보일 책은 게임 엔진을 분석하는 블로거로 유명한 파비앙 상글라르가 집필한 게임 엔진 블랙 북 시리즈 중 첫번째 책인 울펜슈타인 3D다. PC에서 FPS의 신기원을 열었다고 평가받는 울펜슈타인을 만드는 과정에서 직면한 여러 가지 제약 사항을 극복하면서도 정말 재미있는 게임을 만들어나가는 내용이 담긴 이 책은 게임 제작자는 물론이고 게임 애호가들의 열정을 다시 한 번 불어일으키기게 충분하다는 생각이다.

무엇이 존 카맥을 움직여 이렇게 재미있는 게임을 만들게 했을까? 개발 팀원들 사이에서 협력은 어떻게 이뤄졌을까? 게임 파이프라인을 어떤 식으로 구축해 최단 기간 내에 완성도 높은 작품을 만들 수 있었을까? 단순히 연대기 순으로 개발 일지를 기록하는 방법도 있지만 이 책은 울펜슈타인의 원본 소스 코드를 중심으로 그 당시 열악한 하드웨어/소프트웨어 환경, 부족한 자료를 채우기 위한 아이디어 구상, 게임성을 높이기 위한 애셋과 지도 설계, 다양한 게임기로 이식 과정에서 일어난 절충안을 알기 쉽게 설명하고 있다.

번역과 교정지 검토가 끝난 다음에 출판사에 보낸 역자 서문(주의: 아래 글은 초안이며, 출판된 책과 다소 차이가 날 수 있음에 주의하자)을 여기 옮겨본다.


오픈 소스로 나온 소프트웨어를 분석하려면 가장 처음 버전부터 살펴보라는 조언이 있다. 가장 첫 버전은 이 소프트웨어가 추구하는 목표가 명확하며 아키텍처와 핵심적인 알고리즘이 한 눈에 들어오기 때문이다. 시간이 지날수록 사용자의 환경이나 요구에 따른 변화가 늘어나기 시작하며 꼭 있어야 하지는 않지만 있어도 좋은 기능이 추가되기 시작한다. 그리고 참여 개발 인원이 늘어남에 따라 일관성도 조금씩 균열이 가기 시작한다. 예외를 처리하기 위한 온갖 보호 코드가 들어가고 다양한 테스트 케이스가 추가된다. 어느 정도 안정화된 버전 3이 넘어가면서부터는 방대한 코드 기반이 자리를 잡게 되지만 그만큼 분석이 매우 어려워지고 전문적으로 프로젝트에 관여하지 않는 이상 소스코드에서 뭔가 더하거나 빼기 어려운 상황이 된다. 그렇다면 게임 부문은 어떨까? 대화 상자를 하나 띄우기 위해서도 온갖 프레임워크와 라이브러리 사용에 매몰되는 현 시점에서 진짜 게임 개발이란 무엇이며 게임의 핵심을 정확하게 파고드는 방법이 있긴 할까? 다행스럽게도 이드 소프트웨어가 공개한 울펜슈타인에서 답을 찾을 수 있다.

CPU가 장착된 물건을 보면 울펜슈타인을 포팅하려고 든다는 이야기가 탄생한 배경은 두 가지 때문이라는 생각이다. 먼저 소스 코드가 상위레벨(역공학으로 분석한 어셈블리어가 아닌 C와 같은 고급 프로그래밍 언어)로 존재해야 하며, 다음으로 재미있는 게임을 위한 핵심적인 알고리즘과 다양한 제한을 푸는 문제 해결의 열쇠가 소스 코드에 녹여져 있어야 한다. 울펜슈타인은 놀랍게도 기존에 바이너리 롬 이미지로만 존재하는 여느 게임과는 달리 두 가지 요건을 모두 충족하며 그 결과 뭔가 직접 만들고 싶어하는 개발자들이 다양한 환경에서 동작하게 이식 작업을 진행할 수 있었다. 울펜슈타인 애호가들은 지도를 편집하거나 애셋을 추가하는 방법으로 게임을 풍부하게 만들었고 최고의 실력자들은 자신이 보유한 컴퓨터나 게임기에서 동작할 수 있게 직접 소매를 걷어붙이고 뛰어들었다. 과거 추억이 떠올라 현재 보유한 컴퓨터에서 울펜슈타인을 돌려보는 애호가들도 많다. <[SW] Wolfenstein-3D 를 Windows용으로 컨버전 하기> 글에서는 윈도우 10에서 울펜슈타인을 돌리기 위해 개발 환경 설정부터 컴파일과 라이브러리 파일/애셋 설치에 이르기까지 전반적인 경험을 공유하고 있다. 개발 환경 구축이 어렵다면 비록 원본 코드와 거리가 멀긴 하지만 HTML5로 만들어진 코드를 이용해서 웹 브라우저에서 실행해볼 수도 있다. 무한한 가능성은 우리의 상상력이 제한할 뿐이다.

게임 업계에 울펜슈타인이 남긴 업적은 단순히 하드웨어적으로 적합하지 않아 보이는 업무용 PC에 3D 효과가 담긴 1인칭 게임의 가능성을 훌쩍 뛰어넘어서 이렇게 게임을 즐기고 만들고 싶어하는 모든 사람에게 불을 밝혀주는 등대가 되었다는 이정표라고 말해도 과언이 아니다. 게임을 만들고 싶어하는 많은 사람들이 울펜슈타인 코드를 읽으면서 시작했으며 처음 등장한지 28년이 지난 지금에 와서도 배울 교훈은 충분하다고 본다. 파편화되고 열악한 하드웨어, GPU는 고사하고 레지스터 레벨에서 저수준 조작을 가해야 가까스로 성능을 맞출 수 있는 그래픽 카드, 제한적인 메모리와 운영체제 지원 등 게임을 만들지 못할 이유를 열거하라면 끝도 없지만 창의력은 제약에서 나온다는 말이 있듯이 이드 소프트웨어의 열정적인 개발자들은 이 모든 어려움을 극복하고 FPS의 원형을 만들어내는 데 성공했으며 오픈소스로 공개하기 전부터 이미 다른 게임 제작자에게 엔진을 제공해 당시 게임 수준을 한 단계 높일 수 있었다.

그렇다면 호기심이나 장래 게임 제작의 뜻을 품고 울펜슈타인 코드를 보고 싶은 개발자라면 어디서 출발해야 할까? 지금은 존재하지도 않는 하드웨어와 찾기도 어려운 개발 환경을 이해하고 코드 이면에 숨어 있는 제약을 파악하는 과정은 결코 쉽지 않을 것이다. 다행히 이 책은 울펜슈타인이 동작하는 하드웨어 환경, 개발 환경, 소프트웨어 개발 과정에서 직면한 다양한 문제와 이를 해결하는 방안을 체계적으로 정리하고 있다. 원래 x86의 메모리 제약이 어떤 문제를 일으키며 이를 해소하기 위한 메모리 관리 기법은 무엇인가? 부동소수점 연산을 소프트웨어적으로 구현하려면 어떻게 해야 하는가? 그래픽 카드에 제약 사항을 해소하기 위해 어떤 방식을 사용해서 이중 버퍼링을 구현할까? 3차원 그래픽을 위해 수학을 어느 정도 알아야 하고 복잡한 연산을 회피하기 위해 어떤 기교를 부려야 할까? 적들의 상태를 관리하기 위해 상태 머신을 어떻게 구현해야 할까? 제한된 화면 해상도와 색상으로 어떻게 그럴싸하게 화면을 구성할까? 이와 같은 질문에 대한 대답이 이 책에 잘 정리되어 있다. 지금은 하드웨어가 발전하고 소프트웨어 개발 환경이 엄청나게 전문화되고 고도화되었기에 이 모든 질문과 대답이 무의미해보일지도 모르겠다. 하지만, 이런 온갖 제약에도 불구하고 사람들이 푹 빠져들만한 재미있는 게임을 만들기 위해 어떤 설계 결정을 내렸고 이런 설계 결정에 맞춰 알고리즘을 어떻게 구성하고 어떻게 구현했는지에 초점을 맞추면 또 다른 세계가 열릴 것이다.

이 책을 번역하는 동안 정말 간만에 옛날 생각이 많이 났었다. 80286 AT 컴퓨터에서 터보 C를 사용해 프로그램을 만들다 포인터 버그 때문에 프로그램이 시작하자 마자 바로 죽은 기억, 크롬 모니터와 허큘리스 그래픽 카드에서 게임을 하기 위해 램 상주 프로그램(TSR)인 CIMCGA를 설치한 기억, 사운드블래스터 사운드 카드를 구입한 다음에 IRQ 맞추고 충돌을 방지하느라 애를 먹은 기억, 게임을 할 목적으로 XMS/EMS 메모리 관리를 위해 AUTOEXEC.BAT과 CONFIG.SYS를 이리저리 수정한 기억 등이 지금도 엊그제처럼 생생하게 떠오른다. 역자와 마찬가지로 독자 여러분들도 1990년대 초반으로 돌아가 해커, 광기의 랩소디 : 세상을 바꾼 컴퓨터 혁명의 영웅들(복간판) 3부에 등장한 1980년대 게임 해커들의 정신을 이어 받아 몇 단계 진일보한 열정 넘치는 개발자들의 활약상을 함께 즐기면 좋겠다.


인터넷 서점에서 절찬 예약 판매 중이며, 과거 게임의 개발 역사가 궁금하신 분이라면 무척 흥미롭게 빠져들 것이다.

앞으로도 출판사에서 이런 고전을 펴내고야 만다는(한빛미디어 담당자에게 다시 한 번 감사 말씀 드린다) 어려운 결정을 내릴 수 있게 독자 여러분들의 많은 성원 부탁드리겠다.

EOB

월요일, 10월 26, 2020

[개발자 이야기] (10월 24일) AWS는 IPv4를 몇 개 확보했을까?

2020년 10월 24일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.

2020년 10월 24일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 0:00 금주 새로운 소식 개괄
  • 7:10 사고로 서비스용 데이터베이스를 날렸어요… 뉴뉴
  • 10:09 Security Headers - HTTP 응답 헤더의 보안 수준 점검
  • 13:06 bunkerized-nginx – 안전한 nginx 컨테이너 만들기
  • 15:40 아틀라시안 JIRA/Confluence/Bitbucket 서버 판매 중단!
  • 18:01 파이썬 3.9 개선 사항
  • 22:33 devhints.io – 개발자를 위한 커닝 페이퍼
  • 24:48 AWS는 IPv4를 몇 개 확보했을까?
  • 27:33 mmap이 시스템 호출보다 빠른 이유
EOB

토요일, 10월 24, 2020

[B급 프로그래머] 10월 3주 소식(빅데이터/인공지능, 읽을거리 부문)

(오늘의 짤방: 이쯤되면 번역도 예술의 경지에 올라가야 하는게 맞다 via @nakta5324)
  1. 빅데이터/인공지능
  2. 읽을거리
EOB

금요일, 10월 23, 2020

[유튜브 방송] (리눅스 업스킬 도전 #21-c) busybox에서 심볼릭 링크를 걸어서 실행할 기능을 알아내는 방법

[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 Q&A인 21-c편을 공개해드리겠다. 21-c편은 busybox에서 심볼릭 링크를 걸어서 실행할 기능을 알아내는 방법을 설명한다.

2020년 10월 23일자 [리눅스 업스킬 도전 #21-c] busybox에서 심볼릭 링크를 걸어서 실행할 기능을 알아내는 방법 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 argv 설명
  • 03:20 간단한 프로그램 작성
  • 06:57 심볼릭 링크를 걸고 PATH에 .(현재 디렉토리)를 추가하는 방법
  • 09:11 실제 실행과 테스트

방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: argv[0]의 비밀: argv.c 코드는 다음과 같다.
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char **argv) {
            if (!strcmp(argv[0], "ls")) {
                    printf("function ls is called\n");
            } else if (!strcmp(argv[0], " pwd")) {
                    printf("function chown is called\n");
            } else if (!strcmp(argv[0], " echo")) {
                    printf("function chgrp is called\n");
            } else {
                    printf("function is not recognized\n");
            }
            return 0;
    }
    
  • 단계 2: 빌드 후 실행
    1. $ gcc -o argv argv.c
    2. $ ln -s argv ls
    3. $ export PATH=".:$PATH"
    4. $ ls
EOB

화요일, 10월 20, 2020

[유튜브 방송] (리눅스 업스킬 도전 #21-b) (도커 컨테이너의 기반이 되는) chroot 소개

[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 Q&A인 21-b편을 공개해드리겠다. 21-b편은 (도커 컨테이너의 기반이 되는) chroot와 루트 파일 시스템 구성에 필요한 프로그램을 통합해서 제공하는 busybox를 설명한다.

2020년 10월 20일자 [리눅스 업스킬 도전 #21-b] (도커 컨테이너의 기반이 되는) chroot 소개 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 chroot 설명
  • 05:20 busybox 빌드와 설치
  • 14:57 root 파일 시스템 생성
  • 18:02 chroot로 생성된 root 파일 시스템 마운트하면서 셸 기동

방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: busybox 빌드와 설치
    1. $ wget https://busybox.net/downloads/busybox-1.32.0.tar.bz2
    2. $ tar xvpfj busybox-1.32.0.tar.bz2
    3. $ cd busybox-1.32.0
    4. $ head INSTALL
    5. $ sudo apt-get install libncurses5-dev libncursesw5-dev # 만일 curses.h가 없다는 오류가 발생할 경우 ncurses를 make menuconfig에 앞서 설치해야 한다
    6. $ make menuconfig # menuconfig 화면에서 Settings ---> 선택한 다음에 아래에 있는 Build static binary (no shared libs) (NEW)를 선택해 체크박스, 나머지는 기본값으로 두고 화면 하단의 <Exit> 누르고 설정 파일을 저장
    7. $ sudo apt-get install build-essential # 만일 C 컴파일러가 없을 경우
    8. $ make
    9. $ find . -name busybox
    10. $ ldd busybox
    11. $ busybox
  • 단계 2: root 파일 시스템 생성
    1. $ cd ..
    2. $ mkdir root
    3. $ cd root
    4. $ mkdir bin
    5. $ cd bin
    6. $ cp ../../busybox-1.32.0/busybox .
    7. $ ln -s busybox ls
    8. $ ln -s busybox pwd
    9. $ ln -s busybox sh
    10. $ ln -s busybox cd
  • 단계 3: chroot로 생성된 root 파일 시스템 마운트하면서 셸 기동
    1. $ cd ../..
    2. $ sudo chroot ./root /bin/sh
EOB

월요일, 10월 19, 2020

[개발자 이야기] (10월 17일) 서버리스 혁명이 지체되는 이유는?

2020년 10월 17일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.

2020년 10월 17일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 0:00 금주 새로운 소식 개괄
  • 02:58 개발팀에 독약 같은 사람
  • 05:05 윈도우 10에서 개발 환경 설정 총정리
  • 06:59 130만개에 이르는 자바스크립트 라이브러리 비교 사이트
  • 08:14 덮어놓고 구글 따라하다 망하는 기술
  • 11:10 임시 그림으로 사용 가능한 고양이 이미지
  • 11:52 서버리스 혁명이 지체되는 이유는?
  • 15:45 HTTP Prompt – 상호대화식 명령행 HTTP 클라이언트
  • 17:04 윈도우 10 비밀번호 분실했을 때 해결법
EOB

[유튜브 방송] (리눅스 업스킬 도전 #21-a) 우분투에서 한국어 로케일을 사용하려면 어떻게 해야 하나요?

[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 Q&A인 21편-a 편을 공개해드리겠다. 21-a편은 우분투에서 한국어 로케일을 지정하는 방법을 설명한다.

2020년 10월 19일자 [리눅스 업스킬 도전 #21-a] 셸 스크립트 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 로케일이란?
  • 02:20 로케일 설정 방법

Ubuntu Locale 한글로 바꾸기를 함께 살펴보기 바라며, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1
    1. $ locale -a
    2. $ locale
    3. $ sudo dpkg-reconfigure locales
    4. $ sudo update-locale LANG=C.UTF-8 LANGUAGE
EOB

토요일, 10월 17, 2020

[B급 프로그래머] 10월 2주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: When your computer seems slower without reason via @Ashot_)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
보너스: Always remember: excel is not a database! via @dataartisan1
EOB

목요일, 10월 15, 2020

[유튜브 방송] (리눅스 업스킬 도전 #20) 셸 스크립트

[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 마지막 20편을 공개해드리겠다. 20편은 간단한 셸 스크립트 작성법을 설명한다.

2020년 10월 15일자 [리눅스 업스킬 도전 #20] 셸 스크립트 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 셸 스크립트 기초
  • 01:26 단계 1) attacker 셸 스크립트 작성하기
  • 08:25 단계 2) topattacker 셸 스크립트로 확장하기

원본 학습자료는 Day 20 - Scripting을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1
    1. $ vim attacker
      #!/bin/bash
      #
      #   attacker - prints out the last failed login attempt
      #
      echo "The last failed login attempt came from IP address:"
      grep -i "disconnected from" /var/log/auth.log | tail -1 | cut -d: -f4 | cut -f7 -d" "
      
    2. $ chmod +x attacker
    3. $ ./attacker
  • 단계 2
    1. $ vim topattacker
      #!/bin/bash
      #
      ##  	topattacker - list the most persistent attackers
      #
      if [ -z "$1" ]; then
      echo -e "\nUsage: `basename $0` <num> - Lists the top <num> attackers by IP"
      exit 0
      fi
      echo " "
      echo "Persistant recent attackers"
      echo " "
      echo "Attempts   	IP "
      echo "-----------------------"
      grep "Disconnected from authenticating user root" /var/log/auth.log | cut -d: -f4 | \
      cut -d" " -f7 | sort | uniq -c | sort -nr | head -$1
      
    2. $ chmod +x topattacker
    3. $ ./topattacker
EOB

수요일, 10월 14, 2020

[유튜브 방송] (리눅스 업스킬 도전 #19) 아이노드와 심볼릭 링크

[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 19편을 공개해드리겠다. 19편은 아이노드와 하드 링크, 그리고 심볼릭 링크를 설명한다.

2020년 10월 14일자 [리눅스 업스킬 도전 #19] 아이노드와 심볼릭 링크 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 아이노드란 무엇인가?
  • 00:39 단계 1) ls와 stat 명령으로 아이노드 확인보기
  • 01:55 단계 2) ln 명령어로 하드 링크 걸고 확인하기
  • 06:21 단계 3) ln -s 명령으로 심볼릭 링크 걸고 확인하고, 심볼릭 링크의 사용 용법을 살펴보기

원본 학습자료는 Day 19 - Inodes, symlinks and stat을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1
    1. $ ls -li /etc/hosts
    2. $ stat /etc/hosts
  • 단계 2
    1. $ stat /etc/passwd
    2. $ sudo ln /etc/passwd link1
    3. $ ls -li link1
    4. $ stat link1
    5. $ stat /etc/passwd
  • 단계 3
    1. $ ln -s /etc/passwd link2
    2. $ ls -li link2
    3. $ stat link2
    4. $ which vim
    5. $ ls -li /usr/bin/vim
    6. $ ls -li /usr/bin/view
    7. $ ls -li /etc/alternatives/vim
    8. $ ls -li /etc/alternatives/view
    9. $ ls -ltr /etc/rc2.d/*
    10. 참고: alternatives 패키지는 자바나 파이썬 여러 버전을 관리(심볼릭 링크를 체계적으로 걸어줌)
EOB

화요일, 10월 13, 2020

[유튜브 방송] (리눅스 업스킬 도전 #18) 로그 파일 회전시키기

[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 18편을 공개해드리겠다. 18편은 아파치 웹 서버의 로그 회전 방법을 설명한다.

2020년 10월 13일자 [리눅스 업스킬 도전 #18] 로그 파일 회전시키기 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 로그 회전이란 무엇인가?
  • 00:58 단계 1) cron에서 로그 회전에 대한 관련 파일 찾기와 아파치 로그 회전 파일 설정 확인하기
  • 03:17 단계 2) 아파치 로그 회전 방법 설명

원본 학습자료는 Day 18 - Log rotation을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1
    1. $ less /etc/cron.daily/logrotate
    2. $ less /etc/logrotate.conf
    3. $ ls -al /etc/logrotate.d/
    4. $ less /etc/logrotate.d/apache2
      /var/log/apache2/*.log {
              daily
              missingok
              rotate 14
              compress
              delaycompress
              notifempty
              create 640 root adm
              sharedscripts
              postrotate
                      if invoke-rc.d apache2 status > /dev/null 2>&1; then \
                          invoke-rc.d apache2 reload > /dev/null 2>&1; \
                      fi;
              endscript
              prerotate
                      if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                              run-parts /etc/logrotate.d/httpd-prerotate; \
                      fi; \
              endscript
      }
      
  • 단계 2(옵션 분석)
    • daily: 매일
    • missingok: 로그 파일이 없어도 문제 없음
    • rotate: 전체 회전될 파일 수
    • compress: 회전될 로그 파일을 압축
    • delaycompress: 회전되면서 바로 압축되지 않고 한 템포 늦춤
    • notifempty: 비어있을 경우 회전하지 않음
    • sharedscripts: 여러 로그 파일이 있을 경우에도 한 번만 postrotate와 prerotate 스크립트를 수행
    • postrotate: 회전한 다음에 수행할 스크립트
    • prerotate: 회전하기 전에 수행할 스크립트
EOB

월요일, 10월 12, 2020

[개발자 이야기] (10월 10일) 구글 등 주요 회사의 [코딩 인터뷰] 살펴보기

2020년 10월 10일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.

2020년 10월 10일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 0:00 금주 새로운 소식 개괄
  • 3:44 돈을 제대로 썼을까? - 엔지니어를 위한 짧은 (그러나 교훈적인) 이야기
  • 7:30 구글 등 주요 회사의 [코딩 인터뷰] 모음
  • 11:30 git 연습
  • 12:38 NestedText: JSON과 YAML은 가라!
  • 14:53 egghead – 프론트엔드 개발자를 위한 동영상 모음
  • 15:47 셸 히스토리를 중앙 저장소에 모아보자
  • 16:55 깃허브 – 코드 스캐닝 서비스 시작
  • 18:41 요즘 컴파일러의 최적화 수준
EOB

[유튜브 방송] (리눅스 업스킬 도전 #17) 소스 코드로 프로그램 컴파일하고 설치하기

[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 17편을 공개해드리겠다. 17편은 직접 소스 코드를 내려 받아 프로그램을 컴파일하고 설치하는 방법을 설명한다.

2020년 10월 12일자 [리눅스 업스킬 도전 #17] 소스 코드로 프로그램 컴파일하고 설치하기 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 소스코드로 프로그램을 컴파일하고 설치해야 하는 시나리오
  • 00:40 단계 1) nmap 소스 코드 얻고 컴파일 방법 소개
  • 02:45 단계 2) 필요한 컴파일러와 도구 설치와 설정/컴파일 절차 소개

원본 학습자료는 Day 17 - From the source를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1
    1. 웹 브라우저로 https://nmap.org/ 방문해서 다운로드 링크 따라가기
    2. 'Source Code Distribution' 항목에서 위치 파악: https://nmap.org/dist/nmap-7.80.tar.bz2
    3. $ wget -v https://nmap.org/dist/nmap-7.80.tar.bz2
    4. 컴파일 방법 숙지: https://nmap.org/book/inst-source.html
  • 단계 2
    1. $ ls -ltr
    2. $ tar xvpfj nmap-7.80.tar.bz2 # j 옵션은 bzip2 압축을 해제하는 경우에 사용, 참고) gzip은 z 옵션
    3. $ cd nmap-7.70
    4. $ head INSTALL
    5. $ sudo apt install build-essential # C 컴파일러 설치
    6. $ sudo apt install flex # flex 설치
    7. $ sudo apt install bison # yacc 신형 버전 설치
    8. $ ./configure
    9. $ make
    10. $ make install
    11. $ sudo updatedb
    12. $ which nmap
    13. $ nmap -V
EOB

토요일, 10월 10, 2020

[B급 프로그래머] 10월 1주 소식(빅데이터/인공지능, 읽을거리 부문)

(오늘의 짤방: Ok this is pretty good via @ben_nuttall)
  1. 빅데이터/인공지능
  2. 읽을거리
보너스: Typical Progress of COVID-19
EOB

목요일, 10월 08, 2020

[유튜브 방송] (리눅스 업스킬 도전 #16) tar와 친구들

[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 16편을 공개해드리겠다. 16편은 tar 명령으로 아카이브를 만들고 푸는 방법을 설명한다.

2020년 10월 8일자 [리눅스 업스킬 도전 #16] tar와 친구들 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 tar 명령 역사 소개
  • 02:23 단계 1) 기본적인 사용법
  • 05:40 단계 2) 실제 예제
  • 08:47 단계 3) tar로 디렉토리 옮기기

원본 학습자료는 Day 16 - 'tar' and friends...를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1
    1. $ tar cvpf myinits.tar /etc/init.d/
    2. $ gzip myinits.tar
    3. $ tar cvpfz myinits.tgz /etc/init.d/
  • 단계 2
    1. $ mkdir tarsample
    2. $ cd tarsample
    3. $ gzip -d myinits.tar.gz
    4. $ tar xvpf myinits.tar
    5. $ ls -al ./etc/
    6. $ rm -rf ./etc
    7. $ tar xvpfz myinits.tgz
    8. $ ls -al ./etc/
    9. $ rm -rf ./etc
  • 단계 3(보너스)
    1. $ tar cvpf - /etc/init.d | (cd /home/ubuntu/tarsample; tar xvpf -)
    2. $ ls -al ~/etc/
    3. $ rm -rf ~/etc
    4. $ tar cvpf - /etc/init.d | tar xvpf - -C /home/ubuntu/tarsample
    5. $ ls -al ~/etc/
    6. $ rm -rf ~/etc
    7. $ cp -a /etc/init.d /home/ubuntu/tarsample
EOB

수요일, 10월 07, 2020

[유튜브 방송] (리눅스 업스킬 도전 #15) 우분투 패키지 저장소 추가하기

[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 15편을 공개해드리겠다. 15편은 우분투 패키지 저장소 추가 방법을 설명한다.

2020년 10월 7일자 [리눅스 업스킬 도전 #15] 우분투 패키지 저장소 추가하기 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 우분투 패키지 저장소(Personal Package Archive (PPA)) 소개
  • 01:36 단계 1) 현재 패키지 목록 확인
  • 04:36 단계 2) 우분투 패키지 저장소 추가와 이 저장소로부터 PHP 7.3 버전 설치하기

원본 학습자료는 Day 15 - Deeper into repositories...How to Install PHP on Ubuntu 18.04를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1
    1. $ less /etc/apt/sources.list
    2. $ apt-cache dump | less
    3. $ apt-cache dump | grep "Package:" | wc -l
    4. $ sudo apt udpate
    5. $ sudo apt install netperf
  • 단계 2
    1. $ apt-cache dump | grep "php7.3" | less
    2. $ sudo apt install software-properties-common
    3. $ sudo add-apt-repository ppa:ondrej/php
    4. $ sudo apt update
    5. $ sudo apt install php7.3 php7.3-common php7.3-opcache php7.3-cli php7.3-gd php7.3-curl php7.3-mysql
    6. $ php -v
EOB

화요일, 10월 06, 2020

[유튜브 방송] (리눅스 업스킬 도전 #14) sudo 권한 주기

[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 14편을 공개해드리겠다. 14편은 특정 사용자에게 sudo 권한을 주는 방법을 설명한다.

2020년 10월 6일자 [리눅스 업스킬 도전 #14] sudo 권한 주기 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 sudo 권한 소개
  • 00:48 단계 1) 사용자 추가 후 사용자 관련 파일 확인
  • 04:18 단계 2) sudo 권한 추가 예제

원본 학습자료는 Day 14 - Your little helper...를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1
    1. $ su - ubuntu
    2. $ id
    3. $ su - jaypark
    4. $ id
    5. $ less /etc/paswd
    6. $ less /etc/group
    7. $ less /etc/shadow
    8. $ id
  • 단계 2
    1. $ less /etc/sudoers
    2. $ sudo usermod -a -G sudo jaypark
    3. $ sudo su - jaypark
    4. $ id
    5. $ sudo /bin/bash
    6. $ sudo su -
    7. $ sudo -i
EOB

월요일, 10월 05, 2020

[유튜브 방송] (리눅스 업스킬 도전 #13) 파일 접근 허가 기초와 사용자 추가

[일상다반사] 초보 개발자들을 위한 유튜브 채널 본격 가동에서 설명드린 리눅스 업스킬 도전 프로젝트 13편을 공개해드리겠다. 13편은 파일 접근 허가 기초와 사용자 추가 방법을 설명한다.

2020년 10월 5일자 [리눅스 업스킬 도전 #13] 파일 접근 허가 기초와 사용자 추가 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 리눅스업스킬도전에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 파일 접근 허가 기초
  • 01:56 단계 1) chmod 명령을 사용한 사용자 접근 허가 변경
  • 04:26 단계 2) adduser 명령을 사용한 사용자 추가와 usermod 명령을 사용한 그룹 추가

원본 학습자료는 Day 13 - Who has permission?를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1
    -rw------- 	1 steve  staff  	4478979  6 Feb  2011 private.txt
    -rw-rw-r-- 	1 steve  staff  	4478979  6 Feb  2011 press.txt
    -rwxr-xr-x 	1 steve  staff  	4478979  6 Feb  2011 upload.bin
    
    사용자, 그룹, 나머지에 대한 접근허가를 -rwx__rwx__rwx 세 부분으로 나눠 지정함
    
    1. $ touch permission.txt
    2. $ ls -al permission.txt
    3. $ chmod u-w permission.txt
    4. $ ls -al permission.txt
    5. $ chmod o-r permission.txt
    6. $ ls -al permission.txt
    7. $ vi permission.txt
    8. $ chmod u+w permission.txt
    9. $ vi permission.txt
  • 단계 2: useradd 대신 adduser! (참고: MAN(useradd(8)) useradd is a low level utility for adding users. On Debian, administrators should usually use adduser(8) instead.)
    1. $ sudo adduser jaypark
    2. $ su - jaypark
    3. $ id
    4. $ ls -al /var/log/auth.log
    5. $ less /var/log/auth.log
    6. $ usermod -a -G adm jaypark
    7. $ id
    8. $ less /var/log/auth.log
EOB

토요일, 10월 03, 2020

[B급 프로그래머] 9월 5주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: A professional at work via @ZephrFish)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
EOB