[[TableOfContents]] 누구나 쉽게 ë°°í¬í•˜ê³ ìžì‹ ì˜ ê·¸ë£¹ì— ë§žì¶°ì„œ 쓸 수 있는 오픈소스 웹 ì•±ì„ ë§Œë“¤ìž. [ì¡°ì˜ì¤€]ì´ ì¶”ì§„ 중. == ì´ì „ 프로ì 트 == [열파참/프로ì 트]ì—서 ì´ë¯¸ 한 번 시ë„를 했으나, 다ìŒê³¼ ê°™ì€ ì´ìœ 로 갈아엎기로 ê²°ì •. === ë‚ ë›°ëŠ” 구조 === ë”± í”„ë ˆìž„ 워í¬ì˜ 사용법만 ìµížŒ 후 설계나 추가ì ì¸ ê³µë¶€ ì—†ì´ ë°”ë¡œ 코드를 작성 해서 구조가 괴랄해ì§. === ìž˜ëª»ëœ í”„ë ˆìž„ì› ì„ ì • === Django와 함께 AngularJS를 ì´ìš©í–ˆìœ¼ë‚˜, 서버ì—서 ë„ëŠëƒ í´ë¼ì—서 ë„ëŠëƒ ì°¨ì´ë§Œ ìžˆì„ ë¿ ë‘˜ 다 ë™ì¼í•˜ê²Œ 웹ì—ì„œì˜ MVCíŒ¨í„´ì„ ì§€ì›í•˜ëŠ” í”„ë ˆìž„ì›. ì—í• ì´ ê²¹ì¹˜ë‹¤ 보니 둘 다 입지가 ì• ë§¤í•´ì¡Œë‹¤. ê·¸ë¦¬ê³ ê²°ì •ì 으로, GAE(Google App Engine)ì€ ì¼ë°˜ì ì¸ SQLì„ ì‚¬ìš©í• ìˆ˜ 없기 ë•Œë¬¸ì— Djangoì˜ ë§¤ìš° í° ìž¥ì ì¸ Model ë¶€ë¶„ì„ ì¨ë¨¹ì„ 수가 없다! == ì§„í–‰ ë‚´ìš© == 너무 지지부진해서 ì¼ë‹¨ 만들면서 í”¼ë“œë°±ì„ ë°›ê¸°ë¡œ ê²°ì •. ì´ì „처럼 구조가 괴랄해질 ìœ„í—˜ì€ ì—¬ì „í•˜ë‚˜, í”„ë ˆìž„ì›Œí¬ë“¤ì˜ ë„움과 ëª¨ë“ˆí™”ì˜ íž˜ì„ ë¹Œë¦¬ëŠ” 것으로. ìž‘ì—…ì€ í¬ê²Œ ë‘ ë¶€ë¶„ìœ¼ë¡œ 나뉜다. ëª¨ë˜ ì›¹ í´ë¼ì´ì–¸íŠ¸ì™€ RESTful 백엔드 서버. === í´ë¼ì´ì–¸íЏ === [https://skywave-dc.appspot.com] [http://polymerelements.github.io/polymer-starter-kit/ Polymer Starter Kit]ì„ ê¸°ë°˜ìœ¼ë¡œ 하여 작업 ì§„í–‰ 중. === 서버 === 초기ì—는 프로ì 트 ì§„í–‰ìžê°€ êµ¬ê¸€ì— ì·¨í•´ Google Cloud Platformë§Œ ë°”ë¼ë´¤ìœ¼ë‚˜ ì •ì‹ ì„ ì°¨ë¦¬ê³ AWSê³¼ 비êµí•´ 본 ê²°ê³¼ AWSê°€ ë” ë‚«ë‹¤ê³ íŒë‹¨ë˜ì–´ AWS를 ì´ìš©. == 설계 == === í”„ë ˆìž„ ì›Œí¬ ë° API 후보 === * [https://cloud.google.com/appengine/ Google App Engine] - 줄여서 GAE. PaaS. 무료 ì œê³µ ì–‘ì´ ìƒë‹¹í•œ 편ì´ë¼ 사용. * [https://cloud.google.com/datastore/ Google Datastore] - NoSQL DB. ë¬´ë£Œë„ ë¬´ë£Œì§€ë§Œ GAE와 ê¶í•©ì´ 좋ìŒ. * [https://cloud.google.com/endpoints/ Google Endpoints] - RESTful 백엔드 서비스. GAE위ì—서 ëˆë‹¤ë©´ '''ì™„ì „ë¬´ë£Œ'''. * [https://angularjs.org/ AngularJS] - í”„ë¡ íŠ¸ì—”ë“œ 웹 앱 í”„ë ˆìž„ì›Œí¬. Single Page Website를 만드는 ê²ƒì„ ëª©ì . Polymer로 ëŒ€ì²´í• ìˆ˜ë„ ìžˆìŒ. AngularJS ìžì²´ê°€ 좀 장황하다는 ëŠë‚Œì´ 있어서 Polymer 쪽으로 기우는 중. * [http://flask.pocoo.org/ Flask] - ìž‘ì—…ì˜ ëŒ€ë¶€ë¶„ì´ AngularJS로 넘어갈 수 있기 ë•Œë¬¸ì— í›¨ì‹ ê°€ë³ê³ 단순한 webapp2로 ëŒ€ì²´í• ìˆ˜ë„ ìžˆìŒ. * [https://developers.google.com/books/docs/v1/reference/volumes?hl=ko Google Book API]. ë„서 ì •ë³´ 추출. ì˜ì–´. * [https://developers.daum.net/services/apis/search/book Daum Book API]. ë„서 ì •ë³´ 추출. 한글. ì´ ì™¸ì—ë„ GAEì—서 ì œê³µí•˜ëŠ” ì´ëŸ° ì €ëŸ° 서비스 사용 ì˜ˆì •. ë”ê°€ 구글íŒì¸ 것 같지만 넘어가ìž. === 기능 명세 === ==== ë„서 ìžë™ 추가 ==== 관리ìžì—게 ISBNë“¤ì„ ìž…ë ¥ ë°›ê³ , 해당ë˜ëŠ” ISBNì˜ ì±…ë“¤ì„ ë„서 ê´€ë ¨ API를 통해 검색한 후 ìžë™ìœ¼ë¡œ DBì— ì €ìž¥. ì´ ë•Œ, API Keyê°’ë“¤ì„ í™˜ê²½ 변수로 추가하여야 함. 사용ìžê°€ ISBNì„ í†µí•´ íŠ¹ì •í•œ ì±…ì„ ì ‘ê·¼í•˜ë ¤ê³ í• ë•Œ 해당 ì±…ì´ ì—†ìœ¼ë©´ 관리ìžì—게 ë„서 추가를 ìš”ì²í• 수 있ìŒ. ë¬¼ë¡ ê´€ë¦¬ìžëŠ” 승ì¸/ê±°ì ˆ ì„ íƒ ê°€ëŠ¥. ë˜í•œ, ì±… 설명 부분ì—서 명사들만 추출하여 명사 목ë¡ì„ 추출한 다ìŒ, ì›ëž˜ 단어와 해당 단어를 ì§€ì—ì— ë§žê²Œ ìžë™ 번ì—한 단어를 키워드로 ìžë™ 등ë¡. ==== ë¡œì¼€ì¼ ==== '''누구나 쉽게''' 쓸 수 있다는 ê²ƒì€ êµê²½ì„ 가리지 ì•Šê³ ë¥¼ ì˜ë¯¸...하지만 ì¼ë‹¨ êµê²½ì€ 둘째 ì¹˜ê³ String ê°’ë“¤ì„ ë”°ë¡œ 빼는 ê²ƒë§Œìœ¼ë¡œë„ ê´€ë¦¬ê°€ ìš©ì´í•´ 지기 ë•Œë¬¸ì— ì¶©ë¶„ížˆ 필요한 작업. json 형ì‹ì˜ locale 파ì¼ë“¤ì„ ajax로 불러와서 사용ìžê°€ ì„ íƒí•œ 언어를 í™”ë©´ì— ë¿Œë ¤ì£¼ìž. * http://stackoverflow.com/questions/30053947/how-to-build-a-multilingual-website-with-polymer ==== 환경 변수 ==== 단순히 ì„œë¹„ìŠ¤ì˜ ì´ë¦„부터 시작해서 ë„서 ê²€ìƒ‰ì— í•„ìš”í•œ API Key 등 ì¼ë¶€ ê°’ë“¤ì€ ì„œë¹„ìŠ¤ ì œê³µìžê°€ ìž…ë ¥í•˜ì—¬ì•¼ 한다. ì´ì— ë”°ë¼ ìƒê°ë˜ëŠ” ë°©ë²•ì€ ë‹¤ìŒê³¼ ê°™ìŒ: 1. environment variable: ë§ ê·¸ëŒ€ë¡œ 시스템 환경 변수를 ì´ìš©. ê·¼ë° GAEì—서 ì œê³µ 안 하는 것 ê°™ìŒ. ë” ì°¾ì•„ë´ì•¼ 함. 1. datastore를 통한 ê°’ 관리: 환경 변수를 ì´ìš©í• 때 마다 dbì— ì¿¼ë¦¬ë¥¼ ë‚ ë¦¬ê¸° ë•Œë¬¸ì— ì„±ëŠ¥ê³¼ í• ë‹¹ëŸ‰ì— ë¬¸ì œê°€ ìƒê¹€. 하지만 ì´ëŠ” [https://cloud.google.com/appengine/docs/python/memcache/ memcache]로 최소화 시킬 수 ìžˆì„ ê²ƒ. 1. jsonì„ ì´ìš©í•œ 관리. ë¬¸ì œëŠ” gaeì—서는 íŒŒì¼ ì½ê¸°ëŠ” ë˜ë‚˜ 쓰기가 ë˜ì§€ 않기 ë•Œë¬¸ì— ì›¹ 페ì´ì§€ìƒì—서 ìˆ˜ì •ì„ í•˜ëŠ” ê²ƒì€ ë¶ˆê°€ëŠ¥í•˜ê³ ì‚¬ìš©ìžê°€ ì§ì ‘ json 파ì¼ì„ ìˆ˜ì •í•´ì•¼ 함. ==== 검색 ==== ì œëª© / ì €ìž / ì¶œíŒì‚¬ / ì „ì²´ (ì•žì˜ 3ê°œ + 키워드)를 통한 ê²€ìƒ‰ì„ í• ìˆ˜ 있어야 함. í‚¤ì›Œë“œì˜ ê²½ìš° ì±… 설명ì—서 추출하는 방법과, 사용ìžë¡œë¶€í„° 키워드를 추가하는 ë°©ë²•ì„ ìƒê°í• 수 있ìŒ. Datastore는 full text matchingì´ ë˜ì§€ 않기 ë•Œë¬¸ì— [https://cloud.google.com/appengine/docs/python/search/ Search API]를 사용해야 하나, Tag를 Key로 ê°€ì§€ê³ , 해당ë˜ëŠ” ISBNë“¤ì„ Value로 갖는 DataStore를 ë§Œë“ ë‹¤ë©´ Search API를 ì“°ì§€ ì•Šì•„ë„ ë 듯. ==== 실시간 검색 ==== {{{Data Structure}}}ë¼ëŠ” ì±…ì„ ê²€ìƒ‰í•œë‹¤ê³ í• ë•Œ, {{{d}}}ë§Œ ìž…ë ¥ 하ë”ë¼ë„ 해당 알파벳으로 시작하는 ì±… ì´ë¦„ì˜ ëª©ë¡ì´ ì¶œë ¥ë˜ëŠ” 기능. 위ì—서 ì–¸ê¸‰í–ˆë“¯ì´ Full Text Matchingì´ ë˜ì§€ 않기 ë•Œë¬¸ì— ì²« 1~2글ìžë¥¼ 기준으로 í•´ì‹±ì„ í•œ 다ìŒ, 사용ìžê°€ 1~2글ìžë¥¼ ìž…ë ¥ í–ˆì„ ë•Œ JSON으로 해당 글ìžë¡œ 시작하는 ì±… ì œëª©ì˜ ëª©ë¡ì„ 보내준 ë‹¤ìŒ clientì—서 처리를 하는 ë°©ë²•ì„ ì˜ˆìƒ ì¤‘. ==== íšŒì› ==== 비밀번호를 잘 ì €ìž¥í• ìžì‹ ì´ ì—†ê¸° ë•Œë¬¸ì— 'Sign Up with~' ê¸°ëŠ¥ì„ ì´ìš©í•´ì„œë§Œ ê³„ì •ì„ ê´€ë¦¬í• ì˜ˆì •. GAEì—서 google ê³„ì •ì„ í†µí•œ ì¸ì¦ì„ ì§€ì› í•˜ë‚˜, ì´ì „ 프로ì 트ì—서 google ê³„ì •ì„ ì‚¬ìš©í•˜ì§€ 않는 사용ìžì— 대한 ì´ìŠˆê°€ 있었기 ë•Œë¬¸ì— twiiter, facebook, github를 OAuth를 ì´ìš©í•´ ì¸ì¦í•˜ëŠ” ë°©ë²•ì„ ì¶”ê°€ 하는 ê²ƒì´ ì¢‹ì„ ê²ƒ. ê°€ìž…ì„ í•œ 후 ì¸ì¦ì˜ ë°©ë²•ì€ ë‹¤ìŒì„ ì§€ì›í• ì˜ˆì •: * 누구나 사용 가능 * ì§€ì •ëœ ë„ë©”ì¸ì˜ ì´ë©”ì¼ë¡œ ê°€ìž…í• ê²½ìš° ìžë™ ì¸ì¦ * 관리ìžê°€ ì§€ì •ëœ ì½”ë“œë¥¼ ìž…ë ¥í• ê²½ìš° ìžë“±ìœ¼ë¡œ ì¸ì¦ * 수ë™ìœ¼ë¡œ ì¸ì¦ ë“±ê¸‰ì€ ë‹¤ìŒê³¼ ê°™ì´ êµ¬ë¶„í•˜ë©°, í•ìƒ ìœ— ë“±ê¸‰ì€ ì•„ëž˜ ë“±ê¸‰ì˜ ê¸°ëŠ¥ë“¤ì„ í¬í•¨í•œë‹¤. ë“±ê¸‰ì— ë”°ë¥¸ ê¸°ëŠ¥ì€ ë‹¤ìŒê³¼ 같다: * ìµœê³ ê´€ë¦¬ìž: 다른 사용ìžë“¤ì„ 관리ìžë¡œ 변경 가능. 환경 ë³€ìˆ˜ë“¤ì„ ë³´ê³ ìˆ˜ì •í• ìˆ˜ 있ìŒ. * 관리ìž: ì±…ì„ ì¶”ê°€/ìˆ˜ì •/ì‚ì œë¥¼ í• ìˆ˜ 있으며, 다른 사용ìžë“¤ì„ 승ì¸/ë¯¸ìŠ¹ì¸ íšŒì›ìœ¼ë¡œ 변경 가능. * 승ì¸: ì±…ì„ ëŒ€ì—¬í• ìˆ˜ 있ìŒ. ì±… 추가 ìš”ì²ì„ í• ìˆ˜ 있ìŒ. * 미승ì¸: ê²€ìƒ‰ì„ í• ìˆ˜ 있ìŒ. ì±… 목ë¡ê³¼ ìƒì„¸ ì •ë³´ë¥¼ ë³¼ 수 있ìŒ. === DB === ==== ì±… ==== * '''ISBN13''' * ISBN10ì€ 13으로 쉽게 변환 가능. https://en.wikipedia.org/wiki/International_Standard_Book_Number * ì œëª© * ì €ìž * ì—ìž * ì¶œíŒì‚¬ * ì¶œíŒì¼ * 설명 * 언어 * ì„¬ë„¤ì¼ ì£¼ì†Œ (ìž‘ìŒ/보통): 따로 ì´ë¯¸ì§€ ìŠ¤í† ë¦¬ì§€ë¥¼ ì“°ì§€ ì•Šê³ ì™¸ë¶€ ì´ë¯¸ì§€ ë§í¬ë¥¼ 사용. * 페ì´ì§€ 수 * ê¶Œ 수 * ë“±ë¡ ì¼ìž * 메모 ZPì—서는 기ì¦ìž ì •ë³´ê°€ 필요하나, ì´ëŠ” 범용ì ì´ì§€ 않ìŒ. ë”°ë¼ì„œ memoë¼ëŠ” í•ëª©ì„ í†µí•´ì„œ 기타 사í•ë“¤ì„ ê´€ë¦¬ìžê°€ ì¶”ê°€í• ìˆ˜ 있ë„ë¡ í• ì˜ˆì •. ==== 태그 ==== * '''태그''' * ISBN13 ==== ì‚¬ìš©ìž ==== * '''Email''' * User ID Number * ì´ë¦„ * 등급 (ìµœê³ ê´€ë¦¬ìž / ê´€ë¦¬ìž / ì‚¬ìš©ìž / 미승ì¸) ==== 대여 ==== * ISBN13 * User ID Number * ëŒ€ì—¬ì¼ / ë°˜ë‚©ì¼ ë°˜ë‚©ì¼ì´ nullì¼ ê²½ìš° ë°˜ë‚©ì„ í•˜ì§€ ì•Šì€ ê²ƒ. == 댓글 == * ë³´ê³ ì¡°ì–¸ì¢€ í•´ 주세요 êµ½ì‹ ... -[ì¡°ì˜ì¤€]