2016년 2월 12일 금요일 및 2016년 2월 13일 토요일 작업내용 정리




1. cjkv.io 도메인을 구입

2. 클라우드 서비스인 conoha  설정

일본 GMO사에서 운영하는 클라우드 서비스인 conoha를 사용하게되었습니다.

採用目的 by GMOペパボ

(日本GMO는 네트워크 회사이면서, YAPC::Asia Tokyo 2015에 갔을때 위의 광고를 통해 알게 된 회사입니다. 이 회사가 conoha 클라우드를 운영하고 있는 회사입니다)


일본에서 시작한 클라우드 플랫폼 "ConoHa" (日本発のクラウドプラットフォーム「ConoHa」)

트래픽 무제한 (일본 VPN을 사용하려고, 추가로 일본쪽 서비스를 결제, 이용하려니 conoha에서 VPN을 사용해야겠다는 생각을 했음), 한국어 대응에도 마음에 들고, 국내 클라우드 서비스보단 속도가 느리지만 외국의 여러 클라우드서비스보다 속도도 빠른편


3. conoha에서 서버 설정

nginx설치, java, python2, python3 설치

VPN설정 그리고 개인 블로그를 설치형으로 설정하고, conoha로 이전할 예정. (conoha가 트래픽 무제한이기 때문에 개인 블로그 운영을 서비스형의 티스토리[Tistory]에서 conoha에서 설치하여 운영하는 설치형 블로그로 떠나갈까 고민됨.)


4. 일본 GMO에서 운영하는 conoha는 아래의 귀여운 캐릭터 美雲このは와 美雲あんず 2개의 캐릭터를 이용하여 클라우드 서비스 홍보를 하니 참 재미있는 회사 같다는 생각을 함.

ConoHa by GMO CM


Buy me a coffeeBuy me a coffee




웹개발자를위한대규모서비스를지탱하는기술
카테고리 컴퓨터/IT > 프로그래밍/언어 > 웹프로그래밍 > 웹프로그래밍일반
지은이 이토 나오야 (제이펍, 2011년)
상세보기


일본에서 매우 유명한 웹 서비스 업체(쉽게 말해서 다음, 네이버와 같은 대형 포털)인 하테나(Hatena,はてな)의 CTO와 엔지니어가 쓴 "웹 개발자를 위한 대규모 서비스를 지탱하는 기술"이 한국에 번역되어 출간된다군요.

저는 커피닉스에서  [공동구매] 웹 개발자를 위한 대규모 서비스를 지탱하는 기술 링크를 보고 책을 구입하게 되었습니다.


이 책은 하테나(Hatena)사의 인턴들에게 인턴십과정중에서 수행되는 실제 기술 강의를 기반으로 구성되어 있습니다.

대규모 서비스 개발과 운영을 다룬 책인데 한국에서 이런 책을 찾기가 가뭄에 콩나물 보듯 어렵다 보니 관심이 갑니다.

(참고로 2009년 5월 12일자로 커피닉스 공동구매로 구입한 "서버/인프라를 지탱하는 기술"이란 책도 일본의 유명인터넷 업체인 하테나(Hatena,はてな)와 KLab의 서버 운영 노하우를 기술한 책으로 지금 소개할 책과 비슷합니다.)


서버인프라를지탱하는기술24시간365일
카테고리 컴퓨터/IT > 데이터베이스 > SQL서버 > SQL서버일반
지은이 이토 나오야 (제이펍, 2009년)
상세보기


아직 2011년 3월 2일 발매라 아직 책을 얻지 못했지만, 도서 설명 내용을 보니 네이버나 다음, 구글, 페이스북과 같은 대규모 웹서비스를 운영하는 회사의 노하우가 들어갔다는 생각을 합니다.

아래는 책의 목차입니다.


1 대규모 서비스 개발 오리엔테이션 -전체 그림 파악하기

강의 0 책의 근본 - 책에서 설명하는 것과 설명하지 않는

강의 1 대규모 서비스와 소규모 서비스

강의 2 계속 성장하는 서비스와 대규모화의

강의 3 서비스 개발의 현장


2 대규모 데이터 처리 입문 - 메모리와 디스크, 애플리케이션과 부하

강의 4 하테나 북마크의 데이터 규모 - 데이터가 많을수록 처리에 시간이 걸린다

강의 5 대규모 데이터 처리의 어려운 메모리와 디스크

강의 6 규모조정의 요소

강의 7 대규모 데이터를 다루기 위한 기초지식


3 OS 캐시와 분산 - 대규모 데이터를 효율적으로 처리하는 원리

강의 8 OS 캐시 구조

강의 9 I/O 부하를 줄이는 방법

강의 10 국소성을 살리는 분산


4 DB 스케일아웃 전략 - 분산을 고려한 MySQL 운용

강의 11 인덱스를 올바르게 운용하기 분산을 고려한 MySQL 운용의 대전제

강의 12 MySQL 분산 확장을 전제로 시스템 설계

강의 13 MySQL 스케일아웃과 파티셔닝


5 대규모 데이터 처리 실전 입문 - 애플리케이션 개발의 급소

강의 14 용도특화형 인덱싱 대규모 데이터를 능수능란하게 다루기

강의 15 이론과 실전 양쪽과의 싸움


6 [과제] 압축 프로그래밍 - 데이터 크기, I/O 고속화와의 관계 인식하기

강의 16 [과제] 정수 데이터를 컴팩트하게 가져가기

강의 17 VB Code 속도감각

강의 18 과제에 대한 상세설명과 응답 사례


7 알고리즘 실용화 - 가까운 예로 보는 이론ㆍ연구의 실전 투입

강의 19 알고리즘과 평가

강의 20 하테나 다이어리의 키워드 링크

강의 21 하테나 북마크의 기사 분류


8 [과제] 하테나 키워드링크 구현 - 응용으로 가는 깨닫기

강의 22 [과제] 하테나 키워드 링크 만들기

강의 23 응답 사례와 사고방식


9 전문 검색기술 도전 - 대규모 데이터 처리의 노하우

강의 24 전문 검색기술의 응용범위

강의 25 검색 시스템의 아키텍처

강의 26 검색엔진의 내부구조


10 [과제] 전문 검색엔진 작성 - 기초, 상세부분 작성, 속도와 정확성 추구

강의 27 [과제] 하테나 북마크 전문 검색 만들기

강의 28 응답 사례와 사고방식


11 대규모 데이터 처리를 지탱하는 서버/인프라 입문 - 서비스의 백엔드

강의 29 엔터프라이즈 vs. 서비스

강의 30 클라우드 vs. 자체구축 인프라


12 확장성 확보에 필요한 사고방식 - 규모 증대와 시스템 확장

강의 31 계층과 확장성

강의 32 부하 파악, 튜닝


13 다중성 확보, 시스템 안정화 - 100% 근접한 가동률을 실현하는 원리

강의 33 다중성 확보

강의 34 시스템 안정화

강의 35 시스템 안정화 대책


14 효율향상전략 - 하드웨어의 리소스 사용률 높이기

강의 36 가상화 기술

강의 37 하드웨어와 효율향상 저비용을 실현하는 요소기술


15 서비스와 네트워크 - 서비스의 성장

강의 38 네트워크 분기점

강의 39 한층 높은 단계로


특별편 현대 서비스 구축에 필요한 실전 기술 - 대규모 서비스에 대응하기 위해서

Special 강의 1 작업큐(Job-Queue) 시스템 TheSchwartz, Gearman

Special 강의 2 스토리지 선택 RDBMS key-value 스토어

Special 강의 3 캐시 시스템 Squid, Varnish

Special 강의 4 계산 클러스터 Hadoop



일단은 책을 받아 읽고보고 나서야 소감을 쓸수 있을것 같다.


ps1. 책의 목차를 보니 체계적으로 정리된듯 하다. 인터넷에서 수박 겉핥기로 알고 있는 내용들이 정리된다는 느낌? 

ps2. 한국의 웹서비스 회사에서 이런 노하우를 책으로 공개할 수 있을까?


Buy me a coffeeBuy me a coffee
예전, 2006년 5월경. 2006년 1월초부터 모 조직의 Linux서버를 갑자기 맡고나서 안정적으로 운영을 한답시고 공부를 하다가, 갑자기 서버에 이상이 생길듯한 징후들이 보였습니다.

어떤 징후였나면파일이 갑작스럽게 접근이 안되는 것도 있었고, 시스템이 갑자기 느려지고 등의 문제가 있었습니다.
그 당시에는 혼자만 쓰던 Linux가 아니라 여러 사람들이 쓰는 Linux서버를 처음 맡게 되어서 어떻게 해결할지도 걱정되었지요. 그때에 하드디스크 부족해서 N모사 다니시는 90학번 선배님이신 클랴님 친구분께 하드디스크를 얻어서 공간 확보하느라 정신 없을 시기였습니다.

그러다 2006년 8월달. 모 조직의 Linux서버가 있는 학교 컴퓨터실에 공사를 한다고 정전이 되어버렸습니다.

정전이 난 후에 다시 컴퓨터를 켜보니 뭥미? 컴퓨터 부팅이 안되는 것이였습니다. 
아래와 같은 메시지가 뜨고나서 좌절을 했지요.

*** An error occurred during the file system check.
*** Dropping your to a shell : the system whill reboot
*** when you leave the shell.
Give root passwd for maintenance
(or type Control-D for normal startup) :
이걸 알아보니, 갑작스런 정전 또는 비정상적인 시스템 종료등으로 인해 마운트되어 있던 파일 시스템이 정상적으로 언마운트 되지 않아 파일 시스템에 이상이 생기게 되면 부팅시 자동으로 파일 시스템을 복구하는 유틸리티에 의해서 복구가 되는데 파일시스템 손상정도가 심해서 자동으로 복구가 되지 않아서 이런 메시지가 나오는 것임.
파일 접근이 안되고, 파일이 안읽혀지는 등의 문제였죠.

그래서 부랴부랴 하드디스크 복구 시도를 했다만...
exec of init(/sbin/init) failed!!! : No such file or directory
Kernel panic - not syncing : Attemped to kill init!
이것때문에 하드디스크 새로 구해서 다시 설치하는 삽질을 했습니다.

이후로도 하드디스크문제때문에 2006년 내내 골치를 썩혔죠.
모 조직 Linux서버의 문제점은 하드디스크의 내구연한을 충분히 넘겼는데도 그대로 사용하여, 후임인 저에게 골탕먹이는 짓을 했다죠. 하드디스크가 3개 있었는데 다들 4년을 넘게 쓰던 것이라서 자료의 안전성이 걱정이 되었죠.

2007년도에 제 돈 쓰고 자료들을 옮겨서 자료 손실은 없는 것이 다행.

2006~2007년도에 Linux에서 하드디스크 문제로 나오는 Error들을 너무나 많이 보아서 눈 감고도 문제를 풀 정도가 되었습니다.

2007년 10월달이였나? 이때에는 Linux서버가 해킹되는 문제가 생겼습니다.
KT에서 전화가 와서 
그래서 여기서는 문제를 발견 못했다 irc데몬이 돌아간다는 것에 경악하여 서버 다시 설치 -_-;; 여기서는 서버 에러를 못알아먹을 수 있구나와 해킹이 쉽게 되는 것을 알게 되었죠.

2008년 7월 방학때.
연구실에 들어가서 2008년 2월부터 Linux서버 두대를 운영하게 되었습니다. 하나는 연구실 연구용 서버, 또 다른 하나는 교수님이 연구및강의용으로 사용하는 서버였죠. 둘다 Fedora Core 7 (x86_64)를 쓰게 되었습니다.
어느날 Linux(Fedora Core 8 x86_64)에 Sakai Project를 돌리면서 yum으로 update를 하였습니다. 
(※ 참고로 Fedora Core 7에서 8로는 5월달에 업그레이드 하였습니다.

제가 쓰고 있는 연구용 컴퓨터의 램이 1Gb라서  Sakai Project와 동시에 yum으로 update를 하다가 메모리를 다 쓰고 스왑까지 다써서 접속 자체도 안되고등의 메모리 부족 에러가 생겼다.
Sakai Project는 메인 메모리를 1G가까이 사용되는 대규모 Project이라서 tomcat를 쓰는데에 메모리 할당을 엄청 많이 해버렸지.
yum으로 업그레이드 하는데에도 실행을 해야하니 메모리를 많이 사용해야하니 컴퓨터에 메모리 부족에러 뜨면서 제대로 작동이 되지 않는 문제가 생겼 ㅠㅠ
Cannot allocate memory
Out of Memory: Kill process 
위 문제때문에 Fedora Core를 버리고 CentOS로 전향하게 되었고, 교수님과 쇼부를 쳐서 램 1G더 마련해서 위의 문제가 없게 만들었습니다.

그리고 그래픽카드 문제도 생겨서 용산서 수리까지 하였음. -_-;; 그래픽 카드는 Kernel Error는 안나왔지만 모니터 출력이 안되어서 -_-;;

(위의 문제때문에 한달내내 연구를 진행하지 못하고 서버문제만 매달리다 짤릴듯 하였다 ㄷㄷㄷ)

Linux에서 하드디스크 에러만 줄창 보다 프로세스 너무 많이 굴리면 메모리 부족하여 실행못하는 에러까지 다 봤으니 서버를 빡세게 굴리는 것은 확실한 것이다 ㅎㅎ

그리고 2008년 10월 10일
지도교수님 서버에 접속이 갑자기 안되자, 뭔가 원인이 뭔지 모르다가 아래의 메시지가 나와 당황 ;ㅁ;
Give root passwd for maintenance
(or type Control-D for normal startup) :
다른 문제는 없었고 갑자기 잘 돌아가다 멈춰버리는 것이였다.

하드디스크쪽에는 전혀 문제가 없었고(산지 얼마되지 않는 컴퓨터에 fsck로 검사해보아도 아무런 문제 없었음) 잘 돌아가다 갑자기 멈추는 에러가 생겨서 재부팅을 시도를 해보았더니......
계속 이런 메시지가 뜬다.
Kernel panic not syncing: Aiee, killing interrupt handler!
아님
RIP blah~ blah~
REP blah~ blah~
Kernel panic - not syncing: Attempted to kill init!
그러다 갑자기 부팅이 안된다. 부팅이 안되고 삐익 소리만 계속 난다. 이건 메인보드쪽 문제임을 알게 되었음.
부팅이 되었다 그러나 아래의 메세지가 나온다. ㅠㅠ
Call Trace
_atomic_dec_and_lock+0x39/0x58
dput +0x37/0xfb
path_release+0xc/0x27
vfs_stat_fd+0x3c/0x4a
autoremove_wafe_function+0x0/0x2e
kmsg_read+0x3a/0x44
sys_newstat+0x19/0x31
tracesys+0xd5/0xda
메인보드같은 하드웨어쪽의 문제를 알고 나서 용산가야겠다는 생각이 들면서..... 이건 내 책임이 아니라 컴퓨터가 부끄럼을 타서를 주장해야겠다.
(메인보드같은 하드웨어 문제이니 만큼 수리비는 교수님이 주시겠지?)

2006년도부터 조직 서버를 관리 했었고 2008년도에 연구실에 들어가면서 Linux서버에서 나오는 에러는 다 보는 것 같은 생각을 해보았다.
(위의 내용 말고도 더 많은 에러 메세지를 보았지요. 그러나 Kernel에서 에러나는 것은 아니니 기록은 제외)

ps. 이 글은 지도교수님 서버가 메인보드 에러가 나와 부팅 안되는 것을 한탄을 하며 쓴 글입니다.
Buy me a coffeeBuy me a coffee
이번에 컴퓨터공학과 3학년 2학기에 새로 생긴 전공과목인 네트워크 프로그래밍이란 과목을 수강하다가 Process를 이용한 웹서버 구현하는 과제를 하였습니다. 생각보단 어렵지는 안더군요. 예전에 Thread를 이용한 간단한 웹서버 구현한 것이있어서 Process로 바꾸는 데에는 금방 했습니다. (참고로 열혈강의 TCP/IP 소켓 프로그래밍이란 책을 참고했습니다.)

열혈강의 TCP/IP 소켓 프로그래밍
윤성우 지음 / 이한디지털리(프리렉)
나의 점수 : ★★★★★

처음 본 TCP/IP 소켓프로그래밍 책입니다.
소켓프로그래밍 공부하는데 서점에서 무슨 책으로 공부할지 고민을 하다가 이 책이 초보자들에게 괜찮은 듯하고 거기에 무료강의까지 제공해서 선택했습니다.
이 책을 쓰신 윤성우님은 열혈강의 C, 열혈강의 C++란 책으로 아주 유명하신 분이죠. (전 열혈강의 C, 열혈강의 C++를 보질 않았습니다. 그렇게 유명한 책이고 동기들이 다 본 책인데 ㅡㅡ;)
이 책은 다른 책보다 Windows와 Linux 두군데에서 어떻게 소켓프로그래밍 할지 설명이 잘 되어있습니다. 다른 책들을 보면 Linux에서만 돌아가거나 등등.
OS를 가리지 않고 C언어에서 소켓프로그래밍을 설명한 책이라서 학과 커리큘럼상에서 Linux밖에 배우지 않는 것을 커버하는 것이 좋다고 생각한다.
그러나 단점은 JAVA에서의 소켓프로그래밍은 알아서 공부해야겠죠?
이 책을 일주일만에 소스 다 치면서 400페이지 이상 읽었습니다. 정말 책이 술술 읽힌 것 같네요. 윤성우님의 명서라 할수 있습니다. 그러니까 열혈강의 C와 열혈강의 C++도 잘 쓰여졌을것이라 보네요.



그래서 과제를 하다가 World Wide Web을 오랬동안 쓴 저 조차도, HTTP Protocol에 대해선 전혀 모르고 써왔구나를 느꼈습니다.
(저는 하이텔부터 쓴 사람이라서^^, 국민학교 3학년때 아부지 회사였던 테헤란로 K**란 회사에 가서 인터넷이라는 것을 알게 되었다지요. 그때 인터넷 접속할때에는 DOS에서 win를 쳐서 Windows 3.1를 실행시키고, Winsock이란 프로그램을 띄우고 나서 전화선 모뎀으로 접속해야했던 과거 ^^ - 오덕의 기운이 초등학교때부터 시작 ㅡㅡ;)

현재 우리나라에서는 HTTP Protocol가 어떻게 정의되었는지에 대한 책들을 찾기 힘들더군요, 그래서 학교 도서관에서 HTTP The Definitive Guide란 책을 빌려서 보고 있습니다 :D

책 내용이 2002년 9월달에 나왔지만, 변하는 내용은 아니니까. 책을 보면서 당연하게 느낀 것들도 어떻게 정의되었는지를 알게 되었을때 재미가 있네요. 공부가 재미있다는 것이 이런건가? -_-;;

Process를 이용한 웹서버 과제를 하고 나서 HTTP를 사용해서 서버 정보를 가져와 파일로 저장하는 프로그램도 짜봤습니다만, 자주 쓰는 웹서비스도 이해를 안하고 썼다는 것에 충격.


1. HTTP Protocol이란?
HTTP는 Hyper-Text Transfer Protocol의 약자로 WWW(World Wide Web)에서 사용되는 Protocol이다. HTTP/1.0은 RFC1945, HTTP/1.1은 RFC2068, RFC2616에 명시되어 있습니다.
일반적으로 포트번호는 80을 사용합니다.
실제로 쓰는 웹서버들은 포트번호를 명시해주어야 합니다. 예를 들어 네이버 주소는 원칙적으로 쓰면 http://www.naver.com:80/ 이렇게 포트번호 80를 명시해주면서 접속을 해야한다만 http://www.naver.com/ 이런식으로 표현하는 것도 포트번호가 80을 쓴다는 것을 암묵적으로 알기때문입니다.

자세한 내용은 RFC 문서를 읽으시는 것이 좋을 듯 합니다. 블로그에 포스팅하긴 엄청나게 방대한 양이라서요^^
HTTP/1.0 RFC1945 : rfc1945.txt.pdf
HTTP/1.1 RFC2068 : rfc2068.txt.pdf
HTTP/1.1 RFC2616 : rfc2616.txt.pdf

2. 웹서버를 이해하기
웹서버란? HTTP Protocol을 기반으로 해서 웹 페이지가 들어있는 파일을 클라이언트에게 전송해주는 프로그램이라고 보면 됩니다.
지금, 이 글을 보는 여러분들은 인터넷 브라우저인 FireFox나 Internet Explorer를 사용하고 계실 것입니다. 이 인터넷 브라우저는 클라이언트 소켓프로그램에 해당됩니다. 임의의 사이트에 접속을 하려고 할때, 브라우저도 내부적으로 TCP/IP소켓을 생성하기 때문입니다. 다만 인터넷 브라우저가 지니는 특징은, 서버가 전송해주는 HTML문으로 이루어진 문서를 그대로 보여주지 않고 HTML문법에 맞게 변환해 준다는 것이죠.

3. 간단한 HTTP 실행과정
HTTP는 클라이언트와 서버가 일정하고 예측 가능한 방식으로 정보를 교환하고 상호작용을 할수 있도록 허용하는 Method와 header의 집합을 정의하고 있습니다.
웹에서 볼수 있는 각 XHTML파일은 웹과 관련된 URL(Universal Resource Locator)을 가지고 있습니다. URL은 사용자가 접속하고자 하는 리소스(대부분 웹 페이지)에 브라이저가 접속할 수 있도록 하는 정보를 포함하고 있습니다.
예를 들면, http://www.dal.kr/data/index.html

http://는 웹 브라우저가 HTTP를 이용해 리소스를 요청해야한다는 것을 나타냅니다. 중간부분의 www.dal.kr은 서버 호스트 이름입니다. 호스트 이름은 리소스가 위치에 있는 컴퓨터의 이름인데, 이 컴퓨터가 보통 리소스를 간직하고 유지하기 때문에 호스트(Host)라고 합니다.
요청된 리소스 이름 /data/index.html (HTML문서)는 URL의 나머지 부분입니다. URL에서 이 부분은 리소스 이름(index.html)과 경로 (/data)를 확실해 구분해줍니다. 이 경로(path)는 웹 서버 파일 시스템에 있는 실제 Directory를 나타냅니다. 그렇지만 보안상의 이유로 경로는 대부분 가상 디렉토리(Virtual Directory)를 나타냅니다. 이 경우에, 서버는 해당 경로를 서버의 실제 위치로 해석하기 때문에 자원의 정확한 위치를 숨길수 있습니다. (Apache에서 VirtualHost인가 설정하면 해당 경로를 해석해서 표현합니다^^)

주어진 URL에 대해서 브라우저가 웹 페이지를 표현하기 위한 HTTP 트랜젝현을 어떻게 수행될까요?
아래 올려진 그림에서 잘 보여줍니다.
http://www.dal.kr/data/index.html를 접속한다고 생각합니다.
브라우저는 서버로 HTTP요청을 보냅니다. 그 요청은 이렇게 나타냅니다.
GET/data/index.html HTTP/1.1
host : www.dal.kr

GET이라는 단어는 리소스를 검색하고자 하는 클라이언트를 나타내는 HTTP Method입니다. 나머지 요청에서는 리소스의 이름 및 경로 그리고 프로토콜 이름과 버전 번호(HTTP/1.1)를 제공합니다.
(실험한 사이트들이 HTTP/1.0 을 써서 난감 ㅡㅡ;)

클라이언트가 서버에게 메시지를 주면 서버는 클라이언트에 요청 결과를 보내줍니다.
서버는 우선 한 줄로된 HTTP 버전과 그 뒤에 트랜잭션의 상태를 나타내는 숫자 코드와 구(phase)로 응답합니다.
HTTP/1.1 200 OK는 성공, HTTP/1.1 501 Method Not Implemented 는 요청을 처리하는데 필요한 기능이 구현되지 않았음, HTTP/1.1 404 Not found 는 특정한 위치에서 서버 자원을 찾을 수 없다는 응답을 알려줍니다.

아래는 제가 HTTP정보를 얻는 프로그램을 작성해서 돌려본 결과입니다. 제가 가는 사이트 마다 HTTP/1.1 지원하는 사이트가 없군요 ㅡㅡ; 다만 제가 일하고 싶은 오픈마루스튜디오는 HTTP/1.1를 지원하고 있었습니다 ㅠㅠ
host : www.dal.kr, path : /data/index.html
Get /data/index.html HTTP/1.0

HTTP/1.1 501 Method Not Implemented
Date: Sun, 23 Sep 2007 15:01:44 GMT
Server: Apache
Allow: GET, HEAD, OPTIONS, TRACE
Connection: close
Content-Type: text/html; charset=iso-8859-1

host : www.http-guide.com, path : /index.html
Get /index.html HTTP/1.0

HTTP/1.1 501 Method Not Implemented
Date: Sun, 23 Sep 2007 15:10:04 GMT
Server: Apache/1.3.37 Ben-SSL/1.57 (Unix) PHP/4.4.2 FrontPage/5.0.2.2624 DAV/1.0.3
Allow: GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, TRACE
Connection: close
Content-Type: text/html; charset=iso-8859-1

host : www.openmaru.com, path : /index.php
Get /index.php HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 23 Sep 2007 15:24:31 GMT
Server: Apache/2.2.3 (Unix) PHP/5.1.6 mod_python/3.2.10 Python/2.4.3 DAV/2
X-Powered-By: PHP/5.1.6
Set-Cookie: TSSESSION=2039b9c23de52f6d7b8713126cf3b9b4; path=/; domain=openid.or.kr
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=utf-8
서버는 클라이언트에게 보내는 데이터에 관한 정보를 제공하는 하나 또는 그 이상의 HTTP헤더를 보냅니다. 위에 제가 HTTP정보를 얻는 프로그램을 작성해서 돌려본 결과를 보면 그 예를 볼수 있습니다.
Content-Type: text/html; charset=iso-8859-1
Content-Type: text/html; charset=utf-8
Content-Type헤더의 정보는 MIME(Multipurpose Internet Mail Extension) 타입의 컨텐츠를 확인합니다. 서버에서 보내진 각 데이터 타입은 MIME타입을 가지며 이 MINE타입을 통해 브라우저는 받은 데이터를 어떻게 처리할 것인지를 결정합니다.

헤더 다음의 빈줄은 서버가 HTTP 헤더 전공을 끝냈다는 것을 클라이언트에게 알려주는 것입니다. 그리고 나서 서버는 요청된 리소스의 내용들을 보냅니다. 리소스 전송이 완료되면 연결이 종료됩니다. 클라이언트 측 브라우저는 받은 문서를 해석하고 결과를 화면에 출력또는 전달해줍니다.
아래 그림은 웹 서버랑 브라우저랑 어떻게 연결하는지 보여주는 그림입니다 :D
책내용은 HOW TO C++ PROGRAMMING Forth Edition - Deitel 형제가 쓴 책 내용의 일부분 참조했습니다.

아 생각보다 방대한 양들이군요. HTTP/1.1로 구현한 웹서버는 기능을 많이 뺀 것이라 간단하게 프로그래밍 했다만, 제대로 구현하려면 몇줄을 작성해야할까 걱정이 되군요 ㅡㅡㅋ
이왕에 MFC로 윈도우즈에도 써볼까? -_-;;(그러다 밤샐래!)

자세한 내용은 위에 있는 RFC문서를 참조하시기 바랍니다. 영어 해석이 어렵다면 네이버 지식즐을 참조하시길 :D

'컴퓨터 > Web' 카테고리의 다른 글

나만의 도메인으로 gmail를 쓰게 되었음.  (0) 2008.02.01
IE7로 업그레이드하다.  (0) 2008.01.26
sungdh86님의 노트  (1) 2007.09.01
여태까지 이런 기능이 없었다니  (6) 2007.08.01
PHP 이메일 체크 함수  (2) 2007.01.22
Buy me a coffeeBuy me a coffee

이번에 학과 홈페이지를 관리하면서 왜이리 정신이 없는지 모르겠다.

이번에 학과 홈페이지 서버를 서버관리자님께서 바꾸면서 PHP버전도 올리면서 보안을 이유로 PHP소스를 좀 많이 수정을 가하였다.
그래서 학과 홈페이지에 어떤 부분이 작동 안될듯한 버그들이 요즘 자주 보고되고 있다. 방학때라 학과 홈페이지에 찾아오는 사람들이 없어서 조금 고치고 거의 해결했다고 봤던 소스들이 이제 개강이 가까워짐에 따라 버그들이 많이 발견되고 있다.
요즘따라 버그때문에 잔뜩긴장하고 있다. -_-;; 하던일도 요즘 손에 안잡히고 여러모로 스트레스다.

그리고 예전에 썼던 기능이 이번에 학과장님의 지시로 인해 서버를 새로 바꾸면서 서버관리자님께서 모르고 기능추가를 안하거나 보안상의 이유로 기능을 추가 안한 것들이 많아서 골치가 아프다.
당연한듯한 기능이 일반 사용자들이 사용 못한다고 나에게 물어보면, 나는 PHP 소스를 찬찬히 살펴보면서 내가 관여할 부분이 아닌 부분 (즉, root에서 고쳐야 하는 기능들)이 있다. 그럴때에는 난 책임 없음 ㅡㅡ;

이번주 내에 서버관리자님에게 메일을 몇통씩이나 보내고 있었더라?  여러모로 웹관리자도 힘들고 서버관리자도 힘들다 ㅠㅠ

이번에 학과사무실에서 기능 작동안된다고 난리나서 확인한 결과, 이건 서버 환경설정 변경안한 것이라는 결론과 함께 기다려주세요라는 말밖에 못하였다.

예전 서버에는 500MB라는 여유공간밖에 없어서 걱정했는데, 이번에는 서버 환경설정이 보안을 이유로 많이 바뀌고, 서버관리자님이 서버환경설정을 안해서 내가 더 힘들다.

9월달 지나면 할일이 싹 줄겠지?^^, 개강이 다가옴에 왜이리 몸이 모자라는 듯한 기분이 든다.

ps. 학과 홈페이지는 다 뜯어 고칠 기운은 없다만 최소한 index라도 고치고 싶다.
드림위버였나? 거기에 있는 스크립트 보고 OTL했던 기억이 생생 -_-;;


아주 새로 뜯어고치겠끔 욕구가 생기는 index.php -_-;;

Buy me a coffeeBuy me a coffee
가는 날이 장날이라는 말이 있다.
네이버 지식인에 보면 이렇게 쓰여져 있더군요
우연히 갔다가 "생각지도 못한 일을 겪게 되었을 때" 쓰는 말입니다. 이 말은 보통 좋지 않은 일을 당했을 때 쓰지만, 좋은 일을 겪었을 때에도 쓸 수 있는 말입니다.


이번에 학과 홈페이지 버그들을 알아내서 (PHP 버전을 4.X에서 최신인 5.X로 바꾸면서 보안을 이유로 PHP소스 코드 변경이 좀 많았다 -_-;;) 오늘 버그들을 수정하고 테스트하려고 했다. 일요일이라는 최적의 시간에 널널하게 테스트를 하고픈 마음에서 일부로 일요일 오후로 미뤄가면서 오전에 오후에 볼일들을 억지로 다보았다.

일요일 오후경, 학과 홈페이지 PHP소스코드를 수정 및 테스트를 하려고 했다. 그런데 ......

접속이 안된다 ㅠㅠ
이거 저번처럼 SSH port와 sftp port가 막힌 줄 알고 ping 테스트와 traceroute 테스트를 했더니 먹통 OTL
인터넷은 잘 되는데 학교 홈페이지가 안들어가지나 궁금해서 홈페이지에 들어갔더니..... 먹통이다.

학교에 정전이 일어났구나!


그러면 학과 서버 전체가 정전으로 껴져있을테고, 서버관리자님은 월요일 오전 11시경 출근하실듯 하고, 내가 운영하는 서버도 정전일테고 ...... 월요일날 할일이 잔뜩 쌓였다.


어하튼, 예상했던 것보다 돌발변수가 이번 주에 많이 생길듯한 기분은 뭐지? 월요일에 학교에 가야하는 불쌍사가 일어나서 짜증이 난다. (집에서 홍대까지는 왕복 2600원 OTL)

'일상다반사' 카테고리의 다른 글

OpenID워크샵에 무료로 가게 되었어요!  (2) 2007.08.23
일때문에 스트레스  (3) 2007.08.21
용산에서 램추가를 함.  (4) 2007.08.11
노트북에 1GB짜리 램 추가  (2) 2007.08.11
python78님을 찾습니다.  (8) 2007.08.10
Buy me a coffeeBuy me a coffee
제가 맡고 있는 웹서버의 DB가 꼬여서 한글을 제대로 보여주지 못한 것을 해결하였습니다.
이 짓 한다고 거의 이틀을 잡아먹은 듯 하군요. 이제야 해결방법을 찾았으니, 다음 서버운영자에게 운영을 매끄럽게 하기 위해서 문서화 작업을 해야할듯 하군요.

Linux 서버를 다시 셋팅할때에는 MySQL자료를 백업을 받고 셋팅을 하여야 합니다.
서버에 있는 MySQL자료를 전부 백업 받는 방법은 이렇게 합니다.
# mysqldump -u root -p --all-databases > backup.sql
(backup.sql은 백업할 파일의 예를 듦)

백업 받은 자료에 내용을 확인합니다. 그런데 한글이 깨진다면 대책이 없을 것이죠?

mysql의 인코딩 설정이 서버마다 다르기 때문에 dump 할때 한글이 깨지는 문제가 생긴다고 하더군요. 그리고 dump가 안된다고 에러가 난다면 --force를 때려 넣으시야 함.
dump 했을때 한글이 깨지는 경우
# mysqldump -u root -p --all-databases --force --default-character-set=latin1 > backup.sql

이렇게 해서야 겨우 dump 백업을 가까스로 마쳤습니다. 이거때문에 하루는 버렸습니다.ㅠㅠ

참고자료 : dump할때 한글 깨짐 방지
(원문을 트래백할려고 해도 트래백이 안되군요, 그래서 링크 걸었습니다.

백업받은 파일을 vi로 엽니다. 여기서는 다 latin1로 설정되어 있어서 다른 DB에 올릴경우 당근 한글 깨지고 홈페이지 복구를 못시킵니다.
이거 문자 인코딩이 latin1이라 되어있어서 vi로 latin1을 euckr로 치환을 하고 나서 저장합니다.
그러면 복구 할때 문자코드가 euckr로 되어서 백업을 쉽게 할수 있죠.

dump로 백업받은 파일들은 이렇게 복구를 합니다.
mysql -u root -p --force --default-character-set=euckr < backup.sql

이렇게 하면 DB복구 완료 :D 이렇게 간단한것 알아내려고 밤을 샜습니다. 이건 애니를 볼수 있는, 게임을 할수 있는 시간을 빼았겨서 까악 ㅠㅠ

(※ 다음에는 서버 운영할시 일주일에 한번은 복구 스크립트넣고 재부팅 시켜서 하드디스크 상태를 봐야할듯 합니다. 서버가 하드디스크 고장에 맛가도 DB자료는 다행이도 항상 잘 남겨져 있어서 다행 ㅠㅠ)

다시 MySQL를 5로 깔았다. dump한 DB자료를 다시 넣으니까 한글이 제대로 들어간다. 휴
이번에 설정을 다시 제대로 해서 다행. 이번에 학과 서버관리자님께서 학과 홈페이지 서버를 업그레이드 하면서 LAMP를 Wow Linux & Apache 1.3 & Mysql3 & PHP 4에서 Fedora Core 7 & Apache 2.2 & MySQL5 & PHP 5로 버전 업을 시키는 것을 보면서 나도 따라갈려고 하다가 MySQL때문에 머리 아파 미치는 줄 알았다. (DB가 꼬여서 복구시키는데 3일 걸렸다.)
(나는 명색이 컴퓨터공학과 홈페이지 관리자-_-;; 컴퓨터공학과 서버관리자는 아님)


현재는 UTF-8와 EUC-KR이라는 문자코드때문에 골머리를 앓고 있는 과도기 상태입니다.
P.C.R.C.서버도 대세를 따라 UTF-8로 변경을 할까 골머리를 앓고 있군요.
Buy me a coffeeBuy me a coffee
2007년 7월 16일 월요일
아침에 인터넷에 주문한 WD 80G 하드디스크를 학교에 갔다 놓고 11시경 홍대에서 클랴님이 일하시는 선릉역의 N모사로 달려갔습니다.
클랴님 회사로 간 이유는 하드디스크를 받기 위해서였습니다. 졸업하시고도 학회 후배를 챙기시는 마음은 :D

도착하니 12시, 일요일에는 11시에 온다고 문자를 주었는데 약속 1시간어겼습니다. 클랴님께 죄송.
오랜만에 선릉역에 놀러가니 초등학교때 아부지 회사갔던 생각이 나네요. 이 근처가 아부지 회사 있던 것이라서요.
역삼동의 삼부빌딩과 르네상스호텔, 등등 초등학교때 아부지 회사에서 인터넷의 세계를 맛보게 되었던 기억도 나고. 여러 기억들이 나버렸습니다.

선릉역에 나와서 클랴님을 만나게 되었습니다.
클랴님에게 밥 먹어 먹고(거창하게는 아니지만 :D) 거기서 깜짝 놀랐던 것은 ... 음료수 캔이 공짜 -_-v 이런 좋은 회사가 있다니.
아부지가 예전에 일하시던 목동 모회사 건물에서는 카페테리아에서도 제값받고 팔던데 ㄷㄷㄷ

그리고 클랴님이 일하시던 N모사 아부지가 다니고 있는 K모사랑 너무 분위기가 달라서 저도 적응이 안되더군요.

아부지가 다니시던 K모사에서는 무슨 비젼하면서 목표가 카페테리아에서 조차 있고 칙칙한 분위기가 감돌고 있던것에 ㄷㄷㄷ이었는데 클랴님이 일하시는 N모사 카페테리아에서는 일반 회사에서 볼 수 없는 즐거운 분위기가 감돌고 있었습니다.
일반 회사에 갔던 사람으로서는 N모사는 적응이 안되네요.

클랴님에게 하드디스크를 받고 나서 IT업계에 대한 이야기를 하였습니다.
IT업계, 특히 SI업계는 지옥이다!!!

라는 주제로 이야기가 왔다갔다 했는데, 예전에 클랴님이 아부지가 다니시는 회사 하청업체로 일하셨다고 하시네요.
클랴님 : 예전에 K모사 밑에 일해봐서 SI업체는 무섭다고 느끼지.
Ego君 : 어머 K모사 밑에서 일하셨군요!, 아부지가 일하시는 곳인데요.
클랴님 : 그 K모사는 을주제에 갑행세하는 아주 무서운 업체이지. 때리는 시어머니보다 말리는 시누이가 더 밉다고 하던데 그 시누이 같은 업체이지. 아버님, 매일 야근하셨겠네.
Ego君 : 예, 지금도 야근야근열매를 드시고 계시죠.
클랴님 & Ego君 : ㄷㄷㄷㄷㄷㄷ
Ego君 : SI업계는 다 지옥 같아요 ㄷㄷㄷ
이야기 하면서 N모사 카페테리아 보면서 이거 회사인지 커피샵인지 구분이 안될 정도로 너무 복지 후생을 잘해놓았더군요.ㅠㅠ
이렇게 복지후생 좋은 회사로 가고 싶은 생각이 드네요.
K모사같은 SI업체가 이렇게 하면 파격이랄까? 게임회사라서 그런거야. (중얼중얼)

즐겁게 이야기를 하다가 갈일이 있어서 저는 홍대로 가고 클랴님은 일하러 들어가셨습니다.
아, 이 바닥은 지옥이라는 것을 심히 느끼게 했던 이야기들 ㄷㄷㄷ

학교로 와서 NHN다니시는 선배님이 펜티엄4 주신다고 해서 서버는 바로 복구 시키지는 않았습니다. 복구는 펜티엄4가 오면 하게 :D

ps. 삼성 30G 하드디스크 불안해서 서버에 쓰긴 힘들듯, 백업용으로 쓸것입니다.
삼성 하드의 악명을 예전에 느껴봐서 ㄷㄷㄷ (외산 보단 내구력 약해서 백업용으로 쓰면 고장나도 속편하기 때문이죠.)

'일상다반사' 카테고리의 다른 글

왜이리 재미있지?  (1) 2007.07.21
살 것 목록  (3) 2007.07.21
대단하신 교수님  (5) 2007.07.19
생각보다 시간 빨리 흘러갔네 -ㅅ-  (1) 2007.07.18
제 동생도 방학을 가졌군요  (6) 2007.07.17
Buy me a coffeeBuy me a coffee

+ Recent posts