| 여기는 저의 2004~2007년까지의 기록입니다. 이 블로그는 이제 Tistory로 옮겼습니다. 2008년부터의 기록은 http://blog.studioego.info 로 가시기 바랍니다. StudioEgo's Thoughts, seasonⅡ | ||||
|
이번에 컴퓨터공학과 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 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 서버는 클라이언트에게 보내는 데이터에 관한 정보를 제공하는 하나 또는 그 이상의 HTTP헤더를 보냅니다. 위에 제가 HTTP정보를 얻는 프로그램을 작성해서 돌려본 결과를 보면 그 예를 볼수 있습니다.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 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 ![]() 아 생각보다 방대한 양들이군요. HTTP/1.1로 구현한 웹서버는 기능을 많이 뺀 것이라 간단하게 프로그래밍 했다만, 제대로 구현하려면 몇줄을 작성해야할까 걱정이 되군요 ㅡㅡㅋ 이왕에 MFC로 윈도우즈에도 써볼까? -_-;;(그러다 밤샐래!) 자세한 내용은 위에 있는 RFC문서를 참조하시기 바랍니다. 영어 해석이 어렵다면 네이버 지식즐을 참조하시길 :D 열혈강의TCPIP소켓프로그래밍, 웹서버, 소켓, 클라이언트, 서버, protocol, socket, server, client, HTTP, HTTP1.1, 소켓프로그래밍, WWW, 인터넷, 웹
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
|
Ego君는?
태그
foxkeh
술먹고곱게들어가자.
술
mashup
daum
firefox
중립
기억하고싶지않은
휴학때림
닮았다는생각이...
Flickr
건강하세요
성적따위관심없어
GeekOS
외갓집
매쉬업캠프2008
안경새로했음
계절학기중
다음
hacking
매쉬업
폰카사진
건강이최고
몸건강하세요
외가
플리커
골치아파
안경
닮았다
다음커뮤니케이션
이글루 파인더
카테고리
전체
나의 생각,의견 인터넷 리눅스 IT관련기사 과학기술스크랩 독서 책소개 立花隆(다치바나 다카시) 음악이야기 일일기록 졸업식날사진들 잡담거리 음식 블로그 영화 사진 컴퓨터 인물대전 보안관련기사 MS관련기사 컴퓨터 ubiquitous, 遍在 Embedded DB 미분류 최근 등록된 덧글
●●●●●●●●●●..
by bony at 09/02 나중에 크면 개인 컴퓨터.. by 무흣 at 08/18 일단 균형잡힌 식생화.. by nana at 08/14 꾸벅 꾸벅 안녕하세요 .. by 아모 at 08/09 와아.. 멋지네요. 찾아.. by 루니아 at 07/23 http://1991hondaprelud.. by Flora at 07/04 http://1991hondaprelud.. by Jem at 07/04 http://1991hondaprelud.. by Joy at 07/04 http://1991hondaprelud.. by Joachim at 07/04 http://1991hondaprelud.. by Howard at 07/04 http://1991hondaprelud.. by Matilda at 07/04 http://1991hondaprelud.. by Adrian at 07/04 http://1991hondaprelud.. by Joachim at 07/04 http://1991hondaprelud.. by Pip at 07/04 http://1991hondaprelud.. by Joy at 07/04 2008년 최신 공인중개사 .. by 2008공인중개사 at 07/03 http://honda2004vtx1800op.. by Charles at 07/02 200문장 영어회화 씨디를.. by 200문장영어 at 07/02 200문장 영어회화 씨디를.. by 200문장영어 at 07/02 200문장 영어회화 씨디를.. by 200문장영어 at 07/01 이글루 링크
EBC (Egloos Broad..
이글루스 활용팁 이글루스 도움말 egloos PEOPLE 기념일 이오공감의 흔적 2004 아테네 올림픽 이글루 이글루스 2주년 기념 이글루 새해 복 많이 받으세요 egloos ISM anniversary3 (주) 활력을 마시다. .. ||STARGAZER's Libra.. 인생의 달관자... 런~의 밥하기 싫은 날 '.. 거리로 나가자, 키스를.. 벨제뷔트의 블로그 블로거 동명이 혼자서 .. 작은 스푼 하나의 용기 성우 이명선의 블로그 [미르기닷컴] 外傳 왕도 스베이트 초국가정의구현단체 -W.. 산왕의 건전성추구위원회 Mad Scientist 게임회사 이야기 나의 수수한 이야기 우정이상 에로미만 - 영.. 디지털을 말한다 by oojoo IAMBRUNO 세라복萌 - 리라 하우스.. cre-Inside 여러분 모두 아로하예요♡ ▶◀ 별이랑 세상 스쳐가기 KBS에 어서오세요! 뽐뿌 inside ♬(R)evolution。 헐랭이와 IT보안 the Gray Knights X-Times(지름노트) 다인의 편의점 이것저것 [H.S] 無限城 Toy Diary..*** 魔神皇帝의 제7격납고 Transitory Fantasy Studioxga.net 꺾이지 않는 펜 みらい☆すた Museum Cafe 보송보송.. studio-[HandMade] 오! 매직칼라풋사과 엘트ELT : Extremely Ly.. Ubiquitous Fantastic .. Sike's egloo - pass.. OTLize 이젠 꺾인 이팔청춘 절대! 좌절 금지! -- ま.. 28과 6 Invictus 아사달산맥의 작은 늑대굴 sIMAGINATIONs TAG Soft 의 이글루 클랴와 브로큰마인드 Game is over 절대난감 130% 나무피리의 하얀사과빛 .. 아스플룬드 백작님+슈타.. beejei - the World Ch.. http://encyphered.net 코토네쨩의 멸살일기(天) 민승아's 遊戱天下 파란오이의 Beautiful Life THE WORLD OF SURF.. 안경소녀를 사랑합시다 .. the elegant anivurse 비영의 일상 그리고 게임 #include <iostream> 종이우산의 앙냥냥 월드.. 오리대마왕님 집 LunatixShelter Anything Review Lett.. 萌えろり (모에로리) 달밤에 산들바람 FanFiction 소개소(.. 개발자 서씨 겨울잠 둥지 웃자 언젠간 용이 되고 말거야★ laneism, 파인애플달링 - 지구 정.. Hopelessly Addicted TeaTable... *sweet little things ドキドキ Daily Life★ ThornGARDEN - 茨の庭 닥치고 스트리트 파이. . .. sharin, a Low Flying.. 110% ㅁㅊ8의 최강블로그 Shirou君'S U.S.P. 이곳은 모서리 지향 전연.. 홍차왕자의 이야기 ♪ Xeno군의 소소한 일상! 악마와 마르가리타 Today is The First Da.. ◆FRAME GARDEN◆ 미냐의 그린게이블스 이나시엔. 女王樣. 오늘할일은 내일로 미루자!! dcdc의 잡담창고 미역건조장 너의 웃는 얼굴이 보고 싶어 알프군의 아주 작은 일기. DreamyCat의 지붕아래.. - 無 言 歌 - my cynical stories Bon voyage♬ 엔티 노벨 담당네 이글.. 루리카씨의 일상생활 이.. 공순이 감성로그 月夜ノ下で… 바른생활일기 Hineo, 중력에 혼을 .. =ㅂ= 케이군's Life OPEN THE DOOR-조용.. 역설의 제 12 우주 月が滿ちる夜 을뀨의 제멋대로 블로그 초콜릿은 악마의 속삭임 http://winnings.tistor.. 이공간 [異契褸雅粹透.. 애니메이션 관련 음반 .. 초심자용 에린 입문서 너프의 솔직발랄단백질 쓸데없는 것들의 박물지_ 일년짜리 블로그 기억의 저편 최찡의 이글이글 루~☆ 양을 쫓는 모험 아리`s Cook My Dre.. →'EGOIST' 도련님의 성。 晨晛: 粉紅結界 PerhapsSPY SYSTEM More than Words 애기와 초딩 4번가의 쩨쩨한 악취미 까페 ZAKU의 지랄발광 † 라프테미야 † hydra의 개인공간 La lune éclairant le .. 斐霓廩 흑색선전 [黑色宣戰] 완결된 느낌의 미소 ☆ Hisha Kate ☆ 이름없는(無名) 블로그 꿈을 쫓는 모험 - 월화.. 오늘밤이 고비다. 새벽숲 AM 04:00 (sea.. freekgb's Story 투혼 Can you feel my heart? the Sputnik Sweethe.. Joo's Blog Частичное З.. ⓧon the pale blue dot 샨 Peace through stren.. 골디의 방치중인 이(異.. www.jidigital.net로 이사 M-Yuki의 이것저것 막.. ♬긍정의 힘을 믿으세요♬ NT의 hagano:ハガノ .. 안 밥상뒤집기의 개판뒤 전멸 여기다가 뭘하려나..... 적당히합시다 -_-... Milktea's Paradise‥ I.D. - 인터넷 보이스.. Will Sleep Little More 기억의 단편 Glory Box art.oriented 군대에 있는 네리아리 UNDER THE MOON 오후 다섯시의 世界 - si.. Monaca MISIK TIMES Necro Fantasia 工大生 奇譚 -(改) 폭풍간지(暴風感じ) MOSCO .3rd Incarnation 한 박자 쉬어가는 곳 칭찬은 펭귄도 춤추게 한다. 0239군의 삐딱한 시선 Peace Redrum -=::=-제2회 백합온리.. 메뉴릿
| |||