= Ask-Why Web = 컴퓨터 í†µì‹ ì—ì„œ 부터 웹까지 ì´ê²ƒ ì—†ì´ëŠ” 살아갈수 없는 현대ì¸ì˜ 필수품, ì›¹ì„ ì²˜ìŒë¶€í„° 알차게 배워나가 봅시다. [[TableOfContents]] == 개요 == * 시간/기간 * 2014ë…„ 여름 ë°©í•™ + α * 2014ë…„ 7ì›” 15ì¼ë¶€í„° 시작 * 매주 화요ì¼/ê¸ˆìš”ì¼ ì˜¤í›„ 1 ~ 5ì‹œ(ë나는 ì‹œê°„ì€ ê°•ì‚¬ 재량) * 범위 * Webì˜ ì‹œìž‘ë¶€í„° ë까지 (ì¼ ê¹€ì— ì™•ê¹Œì§€) * 컴퓨터 í†µì‹ (TCP/IP) 부터 Web Application까지 * ëŒ€ìƒ * 컴퓨터 공학부 í•™ìƒ ëˆ„êµ¬ë‚˜ (ì‚¬ì „ ì§€ì‹ ì—†ì–´ë„ ë¨) == References == * Mozilla Developer Network(MDN) - https://developer.mozilla.org/ko/ * W3Schools - http://www.w3schools.com/ * HTML5 draft - http://www.w3.org/TR/html5/ * HTML4.01 Spec - http://www.w3.org/TR/html401/ * HTTP 1.1 Spec - http://tools.ietf.org/html/rfc2616 * HTTP 2.0 draft - http://http2.github.io/ * TCP Spec - http://www.ietf.org/rfc/rfc793.txt * CSS 2.1 Spec - http://www.w3.org/TR/CSS2/ == ì°¸ì—¬ìž == '''ì°¸ì—¬í• ì‚¬ëžŒì˜ ì´ë¦„ì„ ì 어주세요''' * [bluemir] * [ì´ì›ì¤€] * [최다ì¸] * [ì´ì§€ìˆ˜] * [ê¹€ì •ë¯¼] * [김한성] * [ìœ ìž¬ë²”] * [ë°•í¬ì •] * [김성ì›] * [ì›ì¤€ì—°]--쿨타임 ëŒê³ 있ìŒ-- * [장í˜ìž¬] (ë“œëžì¸ & 아웃 í• ê²ƒ 같습니다) == ê¸°ë¡ == === Start Up Meeting === * ì´ë¦„ ì •í•˜ê¸° * askyweb * ì¼ ê¹€ì— ì›¹ê¹Œì§€ * 스파ì´ë”맨 * ~~스웹~~ * ~~안ìƒê²¨ìš” 웹~~ * 시간 ì •í•˜ê¸° * 목표 ì •í•˜ê¸° === OSI계층 && HTML실습 - 7/15 === * 추ìƒí™” // ì°¸ê³ ë§í¬ : http://ko.wikipedia.org/wiki/%EC%B6%94%EC%83%81%ED%99%94 * 대학 ë©´ì ‘ 단골 질문ì´ì£ .(ì´ ë°©ì—ì„œ ì´ì§„법으로 í‘œí˜„í• ìˆ˜ 있는 것ì€?? - 답 : 모ë‘) * 추ìƒí™”란 ì „ì‚°í•™ì—ì„œ 추ìƒí™”(抽象化)는 복잡한 ìžë£Œ, 모듈, 시스템 등으로부터 핵심ì ì¸ ë¶€ë¶„ì„ ê°„ì¶”ë ¤ 내는 ê²ƒì„ ë§í•œë‹¤. * 즉, ê²Œìž„ì„ ë§Œë“¤ ë•Œ ì´ê±´ ì–´ì°Œ 코딩해야하노.... ì´ëŸ° ìƒí™©ì´ 추ìƒí™”ê°€ 안ëœë‹¤ë¼ëŠ” ê±°ì£ * #ì„ 7개를 ì°ì–´ë¼!! => for(int i=0;i<7;i++) printf("#"); // #ì„ 7ê°œ ì°ì–´ë¼ëŠ” 걸 추ìƒí™”하여 코딩한 ê±°ì£ . * OSI(Open Systems Interconnection Reference Model) 7계층 // ì°¸ê³ ë§í¬ : http://ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95 * 모형 .7. ì‘ìš© 계층(Application layer) - ~~ì‘용합시다~~ 간단히 í”„ë¡œê·¸ëž¨ì´ ëŒì•„가는 계층?? .6. 표현 계층(Presentation layer) - ~~표현합시다~~ ì½”ë“œê°„ì˜ ë²ˆì—(ì¸ì½”딩, 암호화같ì€ê±°) .5. 세션 계층(Session layer) - ~~í†µì‹ ìƒíƒœê°€ 불량합니다~~ í†µì‹ í•˜ëŠ” ìœ ì €ë“¤ì„ ë™ê¸°í™”í•˜ê³ ìƒíƒœë¥¼ ì ê²€ .4. ì „ì†¡ 계층(Transport layer) - TCPê°€ ì œì¼ ìœ ëª… ~~여기가 거기여~~ 가장 ëì— ìžˆëŠ” 사용ìžë¼ë¦¬ ì‹ ë¢°ì„±ìžˆëŠ” ë°ì´í„°ë¥¼ ì†¡ìˆ˜ì‹ í• ìˆ˜ 있게함 * TCP(Transmission Control Protocol, ì „ì†¡ ì œì–´ í”„ë¡œí† ì½œ) // ì°¸ê³ ë§í¬ : http://ko.wikipedia.org/wiki/%EC%A0%84%EC%86%A1_%EC%A0%9C%EC%96%B4_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C IPì˜ í•µì‹¬ í”„ë¡œí† ì½œ ì¤‘ì˜ í•˜ë‚˜. 근거리 í†µì‹ ë§ì´ë‚˜ ì¸íŠ¸ë¼ë„·, ì¸í„°ë„·ì— ì—°ê²°ëœ ì»´í“¨í„°ì—ì„œ 실행ë˜ëŠ” 프로그램 ê°„ì— ì •ë³´ êµí™˜ì„ ì—ëŸ¬ì—†ì´ í• ìˆ˜ 있게 한다. .3. ë„¤íŠ¸ì›Œí¬ ê³„ì¸µ(Network layer) - IPê°€ ì‚´ì§ ë¬¼ë ¤ìžˆëŠ” ê³³(IP를 3.5계층ì´ë¼ê³ í•˜ì£ ) 경로를 찾아주는 계층(그림ìƒê°ë‚˜ì£ ??) * IP(Internet Protocol, ì¸í„°ë„· í”„ë¡œí† ì½œ) // ì°¸ê³ ë§í¬ : http://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%EB%84%B7_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C 사용ìžê°„ì˜ ë„¤íŠ¸ì›Œí¬ì—ì„œ íŒ¨í‚·ì„ ì£¼ê³ ë°›ëŠ” ë° ì‚¬ìš©í•˜ëŠ” ì •ë³´ ìœ„ì£¼ì˜ ê·œì•½ì´ë‹¤. 사용ìžì˜ ì£¼ì†Œì§€ì •ê³¼ 패킷 ë¶„í• ë° ì¡°ë¦½ 기능 담당함. * 패킷 // ì°¸ê³ ë§í¬ : http://ko.wikipedia.org/wiki/%ED%8C%A8%ED%82%B7 ë°ì´í„°ì˜ 형ì‹í™”ëœ ë¸”ë¡. ê° íŒ¨í‚·ì€ í”„ë¡œí† ì½œ ê³„ì¸µë“¤ì˜ êµ¬í˜„ ë‚´ìš©ì„ ë‹´ê³ ìžˆìŒ. .2. ë°ì´í„° ë§í¬ 계층(Data link layer) - ì´ë”ë„·(Ethernet)ì´ ì—¬ê¸°. 물리계층ì—ì„œ ë°œìƒí• 수 있는 오류와 í름 ì œì–´ * ì´ë”ë„· // ì°¸ê³ ë§í¬ : http://ko.wikipedia.org/wiki/%EC%9D%B4%EB%8D%94%EB%84%B7 LANì„ ìœ„í•´ ê°œë°œëœ ì»´í“¨í„° ë„¤íŠ¸ì›Œí¬ ê¸°ìˆ . 물리 계층ì—ì„œ ì‹ í˜¸ì™€ ë°°ì„ , ë°ì´í„° ë§í¬ 계층ì—ì„œ MAC 패킷과 í”„ë¡œí† ì½œì˜ í˜•ì‹ì„ ì •ì˜ .1. 물리 계층(Physical layer) - ëˆˆì— ë³´ì´ëŠ”ê±°(ì „ê¸°) ~~ë¬´ì„ ì¸í„°ë„·ë„ í¬í•¨ë˜ëŠ”ë° ì•ˆë³´ì¸ë‹¤ 그러면....í• ë§ì´...~~ ë§ê·¸ëŒ€ë¡œ 물리ì ì¸ ì‹¤ì œ 장치 * HTML실습 * 누가 실습한 것 좀...... * í• ë§ * 해킹 - ê³µê²©ì˜ ì˜ˆìˆ ì—ì„œ OSI계층 ì„¤ëª…ì´ ìžˆëŠ”ë° ê·¸ê±° 찾아서 ì½ì–´ë³´ì„¸ìš” 짱 쉬움(ë‚´ ì±… ê°€ì ¸ë‹¤ê°€ 놓ìŒ) - [김한성] === ìžë°”스í¬ë¦½íŠ¸ - 7/18 === * 스터디 í파 ì§ì „ í탄 í•´ì œ 성공 - 1600마ì´í¬ë¡œë¶€ë¡œ í•´ì œ * ë˜ í•˜ì§€?? ì‹¤ìŠµí•˜ìž * vi ì •ë§ ì¢‹ì•„ìš” * [Vi Improved]를 ì°¸ê³ í•˜ì—¬ 사용해봅시다. * ì–´ë–¤ ì‹¤ìŠµì´ ì¢‹ì„까?? HTML했으니 ìžë°”스í¬ë¦½íŠ¸ë¥¼ 한다!(í›—! 그래야 ZP답지) * ìžë°”스í¬ë¦½íŠ¸ * ìžë£Œí˜•ì€ varë¿ * í¬ë¡¬ì—ì„œ 실습 / HTMLì—ì„œ <script> </script> 사ì´ì— ìžë°”스í¬ë¦½íŠ¸ 삽입! * 서버사ì´ë“œ, í´ë¼ì´ì–¸íŠ¸ì‚¬ì´ë“œ * test.html파ì¼ì„ 만들어서 ì§ì ‘ ì—´ì–´ì„œ ìˆ˜ì • - 서버사ì´ë“œì—ì„œ 작업하는것 * í¬ë¡¬ì—ì„œ 개발ìžëª¨ë“œ - í´ë¼ì´ì–¸íŠ¸ì‚¬ì´ë“œì—ì„œ 작업하는것(ì„œë²„ì— ì €ìž¥ì´ ì•ˆë¨!!) * 헷깔리지맙시다! * ctrl+CV 소개 // http://ctrlcv.kr/#! * ìžë°”스í¬ë¦½íŠ¸ì—ì„œ í´ë¦½ë³´ë“œë¥¼ ì§ì ‘ ì»¨íŠ¸ë¡¤í• ìˆ˜ 있다는 취지ì—ì„œ 소개 * 좋네 ê·¼ë° ì•„ì§ ë²„ê·¸ê°€ 좀.... * 최대 7ì¼ê°„ ìœ ì§€ * 여담..... * 함수형언어??, ë³‘ë ¬í™”?? ì•„ ì´ê±° ë야 무서워 === ë¼ìš°í„°ì™€ DNS - 7/22 === * ~~수강ìƒë“¤ì˜ ìƒíƒœê°€ 매우 메롱함~~ * íŒ¨í‚·ì˜ êµ¬ì¡° || 출발지MAC || 목ì 지MAC || ||<-2> 출발지 IP || ||<-2> ë„착지 IP || * ë¼ìš°í„° 찾기(ì „ì§€ì 작가시ì ì´ ì•„ë‹Œ 1ì¸ì¹ 주ì¸ê³µ ì‹œì 으로 봅시다) (1/A)ì—ì„œ (4/D) 찾아가기(패킷으로 나타내보ìž) ê³¼ì • : (1/A) -> (2/B) -> (3/F) -> (4/D) || A || B || || B || F || || F || D || ||<-2> 1 || -> ||<-2> 1 || -> ||<-2> 1 || ||<-2> 4 || ||<-2> 4 || ||<-2> 4 || ||<-8> ë¼ìš°í„°ë¥¼ 찾아갈때 패킷ì—ì„œ IP는 바뀌지 ì•Šê³ MAC주소만 바뀜 ë¼ìš°í„°ëŠ” í”„ë¡œí† ì½œì— ì˜í•´ 주변 ë¼ìš°í„°ì—게 물어봄 ë¼ìš°í„°ë¥¼ ê±°ì¹ ë•Œë§ˆë‹¤ TTL--(Time to Live) (ì´ˆê¸°ê°’ì€ ëžœë¤ì´ì§€ë§Œ ìš´ì˜ì²´ì œë§ˆë‹¤ íŠ¹ì •ê°’ì´ ìžˆìŒ) || * DNS(Domain Name System) * ì¼ë°˜ì 으로 네트워í¬ëŠ” IPë¡œ 구성 * naver.com / google.comì€ ë”가요?? => Domain Name!!! * ì¼ë°˜ì¸ì´ 알아보거나 기억하기 쉽게 숫ìžê°€ ì•„ë‹Œ í…스트로 IP를 대체함(즉, IP를 ìž…ë ¥í•´ë„ ì ‘ì†ê°€ëŠ¥) * 사용ìžê°€ ë„ë©”ì¸ì„ 검색 => DNSì„œë²„ì— ë¬¼ì–´ë´„ => DNS서버가 찾아서 IPì— ì—°ê²° => ì ‘ì† * ë‚´ê°€ 아는 DNSì„œë²„ì— ì—†ë„¤?? => while(1) 다른 DNSì„œë²„ì— ë¬¼ì–´ë´„ => 없으면 404 Not Founded 있으면 ëœ¨ê² ì§€ * 실습 * 지난 주 í´ë¼ì´ì–¸íŠ¸ 사ì´ë“œì—ì„œ 작업함 * 서버 사ì´ë“œì—ì„œ 작업하여 ë‚´ìš©ì„ ë³€ê²½í•˜ì—¬ë„ ì €ìž¥ì´ ë¨ * 간단한 구구단 작성 === TCP와 HTTP - 7/25 === * TCP // ì°¸ê³ ë§í¬ : http://ko.wikipedia.org/wiki/%EC%A0%84%EC%86%A1_%EC%A0%9C%EC%96%B4_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C * ì •ì˜ : IPì˜ í•µì‹¬ í”„ë¡œí† ì½œ ì¤‘ì˜ í•˜ë‚˜. 근거리 í†µì‹ ë§ì´ë‚˜ ì¸íŠ¸ë¼ë„·, ì¸í„°ë„·ì— ì—°ê²°ëœ ì»´í“¨í„°ì—ì„œ 실행ë˜ëŠ” 프로그램 ê°„ì— ì •ë³´ êµí™˜ì„ ì—ëŸ¬ì—†ì´ í• ìˆ˜ 있게 한다. * TCPí¬íŠ¸(0~1023) // ì°¸ê³ ë§í¬ : https://en.wikipedia.org/wiki/TCP_and_UDP_port * TCPí¬íŠ¸ëŠ” ì¸í„°ë„· í”„ë¡œí† ì½œ ìŠ¤ìœ„íŠ¸ì˜ ì „ì†¡ 계층 í”„ë¡œí† ì½œ 중 TCP나 UDP ë“±ì˜ í”„ë¡œí† ì½œì´ ì‚¬ìš©í•˜ëŠ” ê°€ìƒì˜ 논리ì í†µì‹ ì—°ê²°ë‹¨ì´ë‹¤. ê° í¬íŠ¸ëŠ” 번호로 구별ë˜ë©° ì´ ë²ˆí˜¸ë¥¼ í¬íŠ¸ 번호ë¼ê³ 한다. í¬íŠ¸ 번호는 IP 주소와 함께 ì“°ì—¬ 해당하는 í”„ë¡œí† ì½œì— ì˜í•´ 사용ëœë‹¤. * 주로 사용하는 í¬íŠ¸ 20 & 21: File Transfer Protocol (FTP) 22: Secure Shell (SSH) 23: Telnet remote login service 25: Simple Mail Transfer Protocol (SMTP) 53: Domain Name System (DNS) service 80: Hypertext Transfer Protocol (HTTP) used in the World Wide Web 110: Post Office Protocol (POP3) 119: Network News Transfer Protocol (NNTP) 143: Internet Message Access Protocol (IMAP) 161: Simple Network Management Protocol (SNMP) 194: Internet Relay Chat (IRC) 443: HTTP Secure (HTTPS) 465: SMTP Secure (SMTPS) * 패킷구조(조금 ë” í™•ìž¥) || 출발지MAC || 목ì 지MAC || ||<-2> 출발지IP || ||<-2> 목ì 지IP || || í¬íŠ¸ë²ˆí˜¸ || 43000 || ||<-2> GET / index.html HTTP / 1.0 || -> 43000ì˜ ì˜ë¯¸ëŠ” ì–´ë–¤ í”„ë¡œê·¸ëž¨ì´ ë³´ë‚¸ íŒ¨í‚·ì„ êµ¬ë³„í•˜ê¸° 위한 ì¼ë ¨ë²ˆí˜¸ê°™ì€ 것 * HTTP(hyperText Transfer Protocol) * wwwìƒì—ì„œ ì •ë³´ë¥¼ ì£¼ê³ ë°›ì„ ìˆ˜ 있는 í”„ë¡œí† ì½œì´ë‹¤. TCP를 사용하며, 80번í¬íŠ¸ë¥¼ 사용 * history : HTTP -> SGML -> XML * 특징 * 아스키 기반 í”„ë¡œí† ì½œ * 엔터 -> \r\n * ê° ì˜µì…˜ 구분 -> 엔터 * í—¤ë”, 바디 구분 ìš”ì² ë -> 엔터ë‘번(즉, 빈줄) * ìš”ì²ì„ 하면 다시 받는다 * ìƒíƒœë¥¼ ì €ìž¥ì•ˆí•œë‹¤.(status less) * 메소드 : CRUD(Create, Read, Update, Delete) * ìš”ì² : GET(read), POST(Create), PUT(Update), Delete(Delete) * ì‘답(HTTP status code) : 200(OK), 301,304(리다ì´ë ‰ì…˜), 401,403,404(í´ë¼ì´ì–¸íŠ¸ ì—러), 500(서버 ì—러) // ì°¸ê³ ë§í¬ : http://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C === HTTP Option - 8/1 === * HTTP Option * Key : Value / ex) host : ctrl.cv * Option 종류 * Host(ê°€ìƒhostingì„ ìƒê°í•´ë´…시다) * ë¨¸ì‹ ì„ ë‚˜ëˆ ì„œ 쓰는 ì†Œê·œëª¨ì˜ ì„œë²„??(í° ì„œë²„ë¥¼ 쪼개서 ë‚˜ëˆ ì“´ë‹¤ê³ ìƒê°í•©ë‹ˆë‹¤.) * IPê°€ ê°™ì•„ë„ ë‚´ë¶€ hostê°€ 다르면 다른 웹페ì´ì§€ë¡œ ì ‘ì†í•¨ * xxx.xxx.xxx.160 -> intra.zeropage.org / ctrl.cv => ë”°ë¼ì„œ 없으면 안ë˜ëŠ” 옵션임!! * Server : 서버 ì •ë³´ * last-modifie : 마지막 ìˆ˜ì •ë‚ ì§œ - 확ì¸í•˜ì—¬ 매번 ì ‘ì†í•˜ì§€ ì•Šê³ ìˆ˜ì •ë‚ ì§œê°€ ìµœê·¼ì¼ ê²½ìš° í—¤ë”만 ë³´ë‚´ì–´ ì†ë„를 ì¦ëŒ€ì‹œí‚´ * ||<|4> client || -----> ||<|4> server || || if-modified(ë‚´ê°€ ì•Œê³ ìžˆëŠ” ë‚ ì§œ)|| || <----- || || last-modified(서버ì—ì„œ 최근 ìˆ˜ì • ë‚ ì§œ) & - clientì—ì„œ ì•Œê³ ìžˆëŠ” ë‚ ì§œë¥¼ ì´ ë‚ ì§œë¡œ ìˆ˜ì • & ì´í›„ ì ‘ì†ë¶€í„°ëŠ” ë‚ ì§œê°€ ê°™ì€ ê²½ìš° í—¤ë”만 ë°›ìŒ|| * accept : ~~í•œ 형ì‹ì— 맞춰서 보내달ë¼(image, text....) * content-type : acceptì— ëŒ€ì‘하는것(image/jpg, text/html) * ì „ì²´ì ì¸ HTTPì˜ êµ¬ì¡° || web browser || <-> || web server || HTTP를 í•´ì„하는 프로그램 || || ||HTTP || || 어떻게 보내지?? TCP를 쓴다 || || || <-> || || || || || TCP || || ë¼ìš°í„° 어떻게 찾지?? IP를 쓴다 || || || <-> || || || || || IP || || ì´ê±´ ì•„ëŠ”ë° ë¬¼ë¦¬ì 으로 어떻게?? || || || <-> || || || || || Ethernet || || 여기랑 ë°‘ì—ê°€ 알아서 í•˜ê² ì§€|| || || <-> || || || || || to 커ë„ë§ || || |||| * DHCP(Dynamic Host Configuration Protocol) // http://ko.wikipedia.org/wiki/%EB%8F%99%EC%A0%81_%ED%98%B8%EC%8A%A4%ED%8A%B8_%EC%84%A4%EC%A0%95_%ED%86%B5%EC%8B%A0_%EA%B7%9C%EC%95%BD TCP/IP í†µì‹ ì„ ì‹¤í–‰í•˜ê¸° 위해 필요한 ì„¤ì • ì •ë³´ë¥¼ ìžë™ì 으로 í• ë‹¹, 관리하기 위한 í†µì‹ ê·œì•½. || IP Address || || gateway address || || DNS Address || || NetMask || || => DHCPê°€ ìžë™ì 으로 해줌(즉, DHCP서버가 IP주소를 í• ë‹¹) || * ìžì‹ ì˜ IP를 어떻게 í• ë‹¹ë°›ëŠ”ê°€?? 1. 나 새로 ì™”ë‹¤ê³ ë¸Œë¡œë“œìºìŠ¤íŠ¸ 2. 브로드ìºìŠ¤íŠ¸í•œ ê²ƒì„ DHCP서버가 ë³´ê³ ìƒˆë¡œìš´ IP, gateway, DNS, NetMask를 í• ë‹¹ => ê³µìœ ê¸°ì— DHCPê°€ í¬í•¨ë¨ ※DHCP서버가 다른 gatewayì— ìžˆëŠ” 경우?? || gateway ||---|| gateway || || l || || l || || ìƒˆë¡œì ‘ì†|| || DHCP || ||<-3>gatewayì—ì„œ MAC Address를 ì „ì†¡ì„ ëª»í•¨ => ë”°ë¼ì„œ ì›ëž˜ëŠ” ì•ˆë¨ || ||<-3>그러나 우회해서 í”„ë¡œí† ì½œì„ ê°ì‹¸ì„œ IPíŒ¨í‚·ì— ë³´ë‚¼ 수 ìžˆìŒ || * IPê°€ ë¶€ì¡±í˜„ìƒ ë°œìƒ!! -> ì „ì„¸ê³„ê¸°ê¸°ê°€ 40ì–µê°œì¯¤ë¨ IPv4(4byte)ì˜ ë²”ìœ„ë¥¼ 넘ìŒ(2^32) * í•´ê²°ì±… * IPv6 -> 128byte(그러나 ëª¨ë“ ë¼ìš°í„°ê°€ IPv6를 ì•Œ 수 ì—†ìŒ - 구형) * 사설, ê³µì¸IP -> ê³µì¸IP - ìœ ì¼í•œIP(외부, 내부ì—ì„œ ì¸ì‹) / 사설IP 공통ì ì¸IP(192.168.xxx.xxx-내부ì—서만 ì¸ì‹) * ê³µìœ ê¸° ì—í• * || 내부 -> || 외부 -> || 내부 || || ë„착지/출발지 || ë„착지/출발지 || ë„착지/출발지 || || 외부ë§/ë‚´ë¶€ë§ || 외부ë§/ì™¸ë¶€ë§ || 외부ë§/ì™¸ë¶€ë§ || * URL구성 * http://naver.com/location(í”„ë¡œí† ì½œ/ë„ë©”ì¸ë„¤ìž„/로케ì´ì…˜) * 지금까지 í•œ ì‹¤ìŠµì˜ ë¬¸ì œì * í° íŒŒì¼ì„ 받는 ë™ì•ˆ ë‹¤ë¥¸ì‚¬ëžŒì´ ì ‘ì†ì´ 안ë¨(ë³‘ë ¬í™”ê°€ 안ë¨!!) * í•´ê²°ì±… 1. Process - request/process 다른 프로세스로 넘김(php, Apatch) * 장ì : ì•ˆì •ì (Process는 ìƒí˜¸ ë…립ì ) / 단ì : ì†ë„ê°€ ëŠë¦¼(OS를 ê±°ì³ì„œ 하므로), 메모리사용량 ë†’ìŒ 2. thread - thread/process 메모리 ê³µìœ ë‹¤ë¥¸ ìŠ¤ë ˆë“œë¡œ 넘김(JSP) * 장ì : ì†ë„ê°€ ë¹ ë¦„, 메모리사용량 ë‚®ìŒ / 단ì : ë¶ˆì•ˆì „(프로세스가 죽으면 ëª¨ë“ ìŠ¤ë ˆë“œ 죽ìŒ) 3. Event Driven - (node J.S, nginx) * non-blockë°©ì‹. ì•ˆì •ì ì´ê³ ë¹ ë¦„. === nginx 8/4 === * ì°¸ê°€ìž ìˆ˜ê°€ ì ìŒ * 2ì‹œ ê±°ì˜ ë‹¤ ë¼ì„œ 시작 * nginx 설치 * intra.zeropage.orgë¡œ ì„¤ì¹˜í•˜ê³ , ì•ˆì— íŒŒì¼ ë„£ì–´ì„œ 브ë¼ìš°ì €ì—ì„œ 불러와 ë´¤ìŒ. * WAS * ì •ì ì¸(static) 파ì¼ì€ nginxë¡œ 실습해 본 것처럼 서버ì—ì„œ 보내줄 수 있다. * ë™ì (dynamic)ì¸ ê²ƒë“¤ (ex) ë¡œê·¸ì¸ ìƒíƒœì— ë”°ë¼ ë‹¤ë¥¸ ê²ƒì„ ë³´ë‚´ì¤Œ) WASì—ì„œ 해준다. * WASì—ì„œ 해주는 ê²ƒë„ íŠ¹ì • 파ì¼ì„ ë‚´ë ¤ì£¼ëŠ” 것 ë¿ì´ì§€ë§Œ, ê·¸ ê³¼ì •ì„ ë™ì 으로 하는것 (?) * locationì„ ì›¹ 서버ì—서는 단순히 '파ì¼'ë¡œ ìƒê°í–ˆì§€ë§Œ, WASì—서는 í•˜ë‚˜ì˜ ì¶”ìƒì ì¸ 'ê°€ìƒì˜ 위치'ë¡œ ì¸ì‹í•˜ëŠ” 것. * í•˜ë‚˜ì˜ ì™„ë²½í•œ HTMLì´ ì•„ë‹ˆë¼ ì¡°ê°ë“¤ì„ ë™ì 으로 구성해서 만들 수 ìžˆìŒ (ì¡°ê°ì¡°ì°¨ ì—†ì„ìˆ˜ë„ ìžˆìŒ!) * WASê°€ 조립, í•´ì„ì„ í†µí•´ HTML 파ì¼ì„ 만들어서 보내는 것. * WAS ë˜í•œ 여러 언어로 만들 수 ìžˆìŒ * ì²˜ìŒ WAS는 íŠ¹ì • ì£¼ì†Œì— ëŒ€í•´ ëŒì•„가는(웹 서버와 í†µì‹ í•˜ëŠ”) '단순한 프로그램'ì´ì˜€ë‹¤. * 웹서버와 WASê°€ í†µì‹ í•˜ê¸° 위한 í”„ë¡œí† ì½œë¡œ CGI(common gateway interface)를 ë§Œë“¤ì—ˆìŒ * CGIí”„ë¡œê·¸ëž¨ì„ ë§Œë“œëŠ”ê±´ 파싱 ê³¼ì •ë•Œë¬¸ì— ì§œê¸° ì–´ë ¤ì›€. 주로 ì»´íŒŒì¼ ì–¸ì–´ë¡œ 했기 때문ì—(ìˆ˜ì •ì´ ì–´ë µë‹¤!), 스í¬ë¦½íŠ¸ë¥¼ í•´ì„하는 ì¸í„°í”„리터 언어로 CGIí”„ë¡œê·¸ëž¨ì€ ë§Œë“¬. ì´ê²Œ 바로 PHP. * CGI를 사용하면 ê°™ì€ í”„ë¡œì„¸ìŠ¤ê°€ 반복ì 으로 ìƒì„±,ì œê±° ë¨. ê·¸ 프로세스를 한번만 ë©”ëª¨ë¦¬ì— ì˜¬ë¦¬ê²Œ 함. (UNIX socketì„ ì´ìš©í•¨) ì´ê±¸ Fast CGIë¼ê³ 부른다. * Proxy ë°©ì‹ì€ 중간ì—ì„œ 아파치 ë“±ì„ ì´ìš©í•˜ê³ (여기서 sslë“±ì„ í• ìˆ˜ 있ìŒ) íŠ¹ì • í¬íŠ¸ (여기서 다른 기능 구현)ë¡œ 넘겨주는 ë°©ì‹ (?) * 내부 네트워í¬ë¥¼ 통해 중간ìžëž‘ íŠ¹ì • í¬íŠ¸ëž‘ 다른 컴퓨터로 ì—°ê²°ì„ ì‹œì¼œì„œ 사용 í• ìˆ˜ë„ ìžˆë‹¤. === DB - 8/8 === * DB란 ë”ê°€? * ì—í• : ì €ìž¥, 관리, ìœ ì§€ë³´ìˆ˜, 찾기 * 파ì¼ê³¼ 다른 ì : 파ì¼ì€ 파ì¼ë§ˆë‹¤ ëª¨ë“ ê±¸ 매번 구현해야함 * 즉, DB(DataBase)란 DBMS(ë°ì´íƒ€ ë² ì´ìŠ¤ 관리 시스템) * DB종류 * 관계형(mySQL) * raw = entity(투플) / column = atribute(ë„ë©”ì¸) * 중복ë˜ëŠ” ìžë£Œë¥¼ 최ì 화하기 위해서 ìžë£Œê°„ì˜ ê´€ê³„ë¥¼ ë‘ì–´ ì¤‘ë³µì„ ìµœì†Œí™”í•˜ì—¬ ë°ì´í„°ëŸ‰ì„ 줄임 * ex) ì´ë¦„/회사/주소 ê¹€/삼성/서울 ì´/삼성/서울 => 회사와 ì£¼ì†Œì— ê´€ê³„ë¥¼ ë‘ì–´(회사가 삼성ì´ë©´ 주소는 서울) ê¹€/삼성 ì´/삼성 으로 축약함 * Document기반(NoSQL-mongoDB) * entity를 중요시함 * 중복ë˜ëŠ”ê±´ ê°ì²´ë¡œ 표현 * ex) ê¹€/회사{삼성, 서울} ì´/회사{삼성, 서울} * Key value를 ì„ íƒì 으로 사용가능 * Key value(hadoop) * 잘 사용안함 => í…Œì´ë¸”ì´ë‚˜ Documentë¡œ 표현함 * Key valueê°€ 필수ì´ë‹¤. * í•˜ë‚˜ì˜ Key valueì— ë°ì´í„°ë¥¼ ë‹´ìŒ * ex) Key value {ì´ë¦„/회사/주소} 1{ê¹€/삼성/서울} 2{ì´/삼성/서울} * CAP theorem * DBê°€ ê°€ì ¸ì•¼í• ìš”ì†Œ 1. Consistency(ëª¨ë“ ì‚¬ëžŒì´ ê°™ì€ ì •ë³´ë¥¼ ë³´ê³ ìžˆìŒ - ì¼ê´€ì„±) 2. Availability(성공ì´ë“ ì‹¤íŒ¨ë“ ì–´ë–¤ ìƒí™©ì´ë“ ë°˜ì‘해야함) 3. Partition tolerance(분산형 DBì—ì„œ 다른게 ì£½ì–´ë„ ì¼ë¶€ë¡œ ë™ìž‘가능해야함) -보통 í¬ê¸° => 하나를 í¬ê¸°í•´ì•¼í•¨ * 종류별 í•„ìš” 요소 1. 관계형 - P를 í¬ê¸°(mySQL) 2. Document - C를 í¬ê¸°(oracle) // 여러개로 나누는 것(ìŠ¤ì¼€ì¼ out) * ì–´ë–¤ atribute들ì´ëƒê°€ 스키마(schema) * primary Key(ê³ ìœ ê°’-IDê°™ì€ê±° 대표ì 으로 학번같ì€ê±¸ primary keyë¡œ ì„¤ì •) * sqlite3ë¡œ 실습 * ì •ë§ ì˜ì–´ì¹œí™”ì ì¸ ì–¸ì–´(select * from test where name.....) === Playframework - 8/12 === * 복습 1시간 // 처ìŒë¶€í„° 공부해봅시다. ê°œë… í™•ë¦½ì´ í•„ìˆ˜ * Ajax(ê±°ì˜ ìžë°” 스í¬ë¦½íŠ¸) * 스트립트 -> 브ë¼ìš°ì €(í´ë¼ì´ì–¸íŠ¸)ì—ì„œ 구현 => 웹브ë¼ìš°ì €ë§ˆë‹¤ 다름!!(IE를 ì œì™¸í•˜ê³ í¬ë¡¬, 파í ë“±ì€ ì„œë¡œ 맞춤) * form method = "post" ~~~ ~~~ => 한줄ë„ë©´... ë”지 ì•Œê² ì§€?? data = "asdf" => WASë¡œ í•´ì„ * ì‹¤ìŠµì€ phpë¡œ 하지 ì•Šê² ë‹¤. -> http://likelink.co.kr/5866 (phpì˜ ì•ˆì¢‹ì€ì ) * 실습 : https://playframework.com/ * activator - 설치 ë° í™˜ê²½ë³€ìˆ˜ ì„¤ì • => 설치 ì—„ì² ì˜¤ëž˜ê±¸ë¦¼