관계형ë�°ì�´í„°ë² ì�´ìФì�˜ 기능 ¶
관계형 ë�°ì�´í„°ë² ì�´ìŠ¤ëŠ” 관계형 모ë�¸ì—� ë”°ë�¼ 논리ì �으로 ì—°ê´€ì�´ 있는 ë�°ì�´í„°ë¥¼ 모아놓ì�€ 것ì�´ë‹¤. 관계란 n-tupleì�´ 한 줄 씩 ë°°ì—´ë�œ 것으로, 줄ì�´ ë°°ì—´ë�œ 순서는 ê´€ê³„ì—†ê³ , ëª¨ë“ ì¤„ì�€ êµ¬ë³„í• ìˆ˜ 있어야 한다.11 ë�°ì�´í„°ë² ì�´ìФ 관리 시스템(DBMS)는 ë�°ì�´í„°ë² ì�´ìŠ¤ë¥¼ 구성, 변경, 조회하는 프로그램ì�„ 모아 놓ì�€ 것ì�´ë‹¤.12 현재까지 관계형 DBMSê°€ ë§Žì�´ ì“°ì�´ê³ 있는ë�°, ì�´ëŠ” 관계를 í…Œì�´ë¸”로 ë‚˜íƒ€ë‚´ê³ í‚¤ë¥¼ ì�´ìš©í•´ ì •ë³´ë¥¼ 연결하는 특징ì�„ 가진다.11 SQLì�€ 관계형 ë�°ì�´í„°ë² ì�´ìФì�˜ ë�°ì�´í„°ë¥¼ ìƒ�성,조회,변경하는 언어로 ANSI/ISO표준ì�´ë‹¤.13 SQLì�„ ì�´ìš©í•˜ë©´ ë�°ì�´í„°ë² ì�´ìФ í…Œì�´ë¸” ìƒ�성ì—�서부터 ë�°ì�´í„° 추가, ì‚ì œ, 변경, 조회는 ë¬¼ë¡ ì�´ê³ 여러 ê±´ì—� 대한 트랜ìžì…˜ì²˜ë¦¬ê¹Œì§€ 가능하다.
웹 ì• í”Œë¦¬ì¼€ì�´ì…˜ 개발ìž�ê°€ 가장 ë§Žì�´ 쓰는 기능ì�€ SQLì�„ ì�´ìš©í•˜ì—¬ ë�°ì�´í„°ë² ì�´ìФ ë‚´ìš©ì�„ 삽입, ì‚ì œ, ìˆ˜ì •, 조회하는 것ì�´ë‹¤. ê·¸ 중ì—�ë�„ ë�°ì�´í„°ë¥¼ 조회하는 SQL문ì�€ 다양한 구조를 가진다. 기본 구조는 select from ì�´ë‹¤. 여기서 fromì ˆì—� í…Œì�´ë¸”ì�´ 여러 번 나오는 경우 ì¡°ì�¸ ì—°ì‚°ì�„ 수행한다. ì¡°ì�¸ ì—°ì‚°ì�€ 다른 í…Œì�´ë¸” ë˜�는 ê°™ì�€ í…Œì�´ë¸”ë�¼ë¦¬ 가능하다. select from where문ì�„ 사용하면 whereì ˆì—� 있는 ì¡°ê±´ì�„ 만족하는 ë�°ì�´í„°ë§Œ 조회한다. aggregate functionì�„ 사용하면 ì›�하는 결과를 좀ë�” 쉽게 ì–»ì�„ 수 있다. ì�´ì—�는 개수(count), 합계(sum), 최소(min), 최대(max), í�‰ê· (avg)ì�´ 있다. aggregate functionì—� group by문ì�„ 사용하면 그룹 단위로 결과를 얻는다. group byì ˆì—�는 havingì�„ ì�´ìš©í•´ ì¡°ê±´ì�„ ì œí•œí• ìˆ˜ 있다. ë˜�한 순서를 ì§€ì •í•˜ëŠ” order by문과 ì§‘í•© ì—°ì‚°ì�¸ union, intersect, except 등ì�´ 있다. whereì ˆ ì�´í•˜ì—� 다시 SQL문ì�´ 나타나는 경우를 중첩질ì�˜ë�¼ê³ 한다. 중첩 질ì�˜ë¥¼ ì‚¬ìš©í• ë•ŒëŠ” 특별히 (not) exist, (not) unique와 ê°™ì�€ 구문ì�„ ì‚¬ìš©í• ìˆ˜ 있다.
ë�°ì�´í„°ë¥¼ 삽입,ì‚ì œ,ë³€ê²½í• ë•ŒëŠ” 조회하는 SQLì—� 비해 하면 단순하다. 삽입ì—�는 insert into value 구문ì�„, ì‚ì œëŠ” delete from where구문ì�„, 변경ì�€ update set where구문ì�„ 사용한다. ì‚ì œì™€ 변경시ì—�는 중첩 질ì�˜ë¥¼ ì‚¬ìš©í• ìˆ˜ 있다.
Django ¶
Django는 오픈 소스 프로ì �트로 code.djangoproject.com/browser/django ì—�서 ì „ì²´ 소스코드를 확ì�¸í• 수 있다. 문서ì—� 따르면 django ë�°ì�´í„°ë² ì�´ìФ API는 "SQL문ì�„ 효율ì �으로 ì‚¬ìš©í•˜ê³ , í•„ìš”í• ë•ŒëŠ” 알아서 joinì—°ì‚°ì�„ 수행하는 ê°•ë ¥í•œ 구문ì�„ 가졌으며, 사용ìž�ê°€ í•„ìš”í• ê²½ìš° ì§�ì ‘ SQL문ì�„ ìž‘ì„±í• ìˆ˜ 있ë�„ë¡� ì§€ì›�"5한다. ì¶”ìƒ�í™”ë�œ 구문ì�„ 사용하ë�”ë�¼ë�„ ë�°ì�´í„°ëŠ” 관계형 ë�°ì�´í„°ë² ì�´ìФì—� ì €ìž¥í•˜ê²Œ ë�˜ëŠ”ë�°, MS SQL, MySQL, Oracle, PostgreSQL, SQLite3와 ê°™ì�€ DBMS를 ì‚¬ìš©í• ìˆ˜ 있다.
Django는 ë�„ë©”ì�¸ 언어ì�¸ pythonì�˜ ì˜�í–¥ì�„ ë§Žì�´ 받는다. Pythonì�€ "ë�™ì �ì�¸ ê°�체지향"10 언어로 ë§Žì�€ 소프트웨어르 만드는 ë�° ì‚¬ìš©í• ìˆ˜ 있으며, django와 ê°™ì�´ 소프트웨어를 만드는 í”„ë ˆìž„ì›Œí�¬ë¡œë�„ ë„�리 ì“°ì�¸ë‹¤. ì�´ë¯¸ NASAì—�서 pythonì�„ ì‚¬ìš©í•˜ê³ ìžˆìœ¼ë©°, Googleì—�서는 pythonì�„ java와 ë�”불어 주류언어로 ì‚¬ìš©í•˜ê³ ìžˆë‹¤. Djangoê°€ ë�°ì�´í„°ë² ì�´ìŠ¤ë¥¼ ì¶”ìƒ�í™”í•˜ê³ , 개발 ë�„중ì—� 변경 사í•ì�„ ìž�ë�™í™”하여 ì²˜ë¦¬í• ìˆ˜ 있는 까ë‹ë�„ pythonì—� 있다.
Djangoì�˜ 설계 ì² í•™ì�€ 한 마디로 DRY(Don't Repeat Yourself)ì�´ë‹¤. 확연히 êµ¬ë¶„í• ìˆ˜ìžˆëŠ” ë�°ì�´í„°ëŠ” ë¶„ë¦¬í•˜ê³ , ê·¸ë ‡ì§€ 않ì�€ 경우 중복ì�„ 줄ì�´ê³ ì�¼ë°˜í™”한다. ë�°ì�´í„° ë¿� 아니ë�¼ 개발ì—� 있어서ë�„ 웹 프로그래ë°� ì „ë°˜ë¶€ì™€ 후반부를 ë‘� 번 작업하지 않는다. 즉 웹 ì• í”Œë¦¬ì¼€ì�´ì…˜ 개발ìž�는 SQLì�„ 사용하는 ë°©ì‹�ì�´ ë�„ë©”ì�¸ 언어ì—� ì œê³µí•˜ëŠ” í”„ë ˆìž„ì›Œí�¬ì—� 숨어 ë³´ì�´ì§€ 않기 때문ì—� 프로그램ì�„ ë�™ì �으로 쉽게 바뀔 수ë¡� ë¹ ë¥´ê²Œ ê°œë°œí• ìˆ˜ 있다. ë˜�한 후반부 ë�°ì�´í„° 모ë�¸ì�´ 바뀌면 í”„ë ˆìž„ì›Œí�¬ì—�서 ì „ë°˜ë¶€ì—� 사용ìž�ì—�게 ë³´ì�´ëŠ” 부분ì�„ ìž�ë�™ìœ¼ë¡œ 바꾸어준다. ì�´ëŸ¬í•œ 설계 ì² í•™ì�„ 바탕으로 기민하게 웹 ì• í”Œë¦¬ì¼€ì�´ì…˜ì�„ ê°œë°œí• ìˆ˜ 있다.
Django로 구현해본 ì•ˆì „ê´€ë¦¬ì‹œìŠ¤í…œ ¶
Djangoì�˜ ë�°ì�´í„°ë² ì�´ìФ ì¶”ìƒ�í™” í�‰ê°€ ¶
기본ì �으로 ì§€ì›� ë�˜ëŠ” ë ˆì½”ë“œ 삽입, ì‚ì œ, 변경ì�€ ìž�ë�™ìœ¼ë¡œ 사용ìž� 화면까지 만들어주는 장ì �ì�„ 가진다. 대부분 웹 ì• í”Œë¦¬ì¼€ì�´ì…˜ì�´ ë ˆì½”ë“œë¥¼ 한 건씩 ìž…ë ¥í•˜ëŠ” ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ 가지기 때문ì—�, 개발 ì „ë°˜ë¶€ì—� 걸친 ë�°ì�´í„° 삽입, ì‚ì œ, 변경ì�„ ìž�ë�™í™”í• ìˆ˜ 있기 때문ì�´ë‹¤. 특히 삽입, 변경ì�€ ì €ìž¥ì�´ëž€ 단ì�¼ ê°œë…�으로 ë³´ê³ save메소드로 ì¶”ìƒ�화하였다. ë˜�한 ì‚ì œëŠ” ê´€ë ¨ë�œ ë ˆì½”ë“œë¥¼ 함께 지워주는 기능까지 ì œê³µí•œë‹¤. ì�´ëŸ¬í•œ 기능ì�€ Modelí�´ëž˜ìФì—� ì •ì�˜ë�œ ë�°ì�´í„° 타입ì—� ë”°ë�¼ ìž�ë�™ìœ¼ë¡œ ì�´ë£¨ì–´ì§„다. ë”°ë�¼ì„œ 삽입, ì‚ì œ, 변경 SQL문ì�„ 실행하는 ì�¸í„°íŽ˜ì�´ìФì—� ë§Žì�€ ë…¸ë ¥ì�„ 기울ì�´ì§€ ì•Šê³ ê¸°ë¯¼í•˜ê²Œ ì „ì²´ 시스템ì�„ 설계함ì—� ì§‘ì¤‘í• ìˆ˜ 있다.
ë ˆì½”ë“œë¥¼ ê²€ìƒ‰í• ë•ŒëŠ” 기본ì �으로 간단한 질ì�˜ë¥¼ ì²˜ë¦¬í• ìˆ˜ 있는 함수들ì�„ ì œê³µí•œë‹¤. 앞서 살펴본 바와 ê°™ì�´ ì§�ì ‘ 관계를 가지는 í…Œì�´ë¸” 사ì�´ì—� ì¡°ì�¸ ì—°ì‚°ì�€ Modelí�´ëž˜ìФì�˜ 메소드를 ì�´ìš©í•´ì„œ ì¶”ìƒ�í™”ë�˜ì–´ 있다. 하지만 ê·¸ ë°–ì�¸ 경우ì—�는 ì§�ì ‘ SQL문ì�„ 작성하여 ë�°ì�´í„°ë¥¼ 얻어와야 하기 때문ì—� django를 사용하ë�”ë�¼ë�„ í�° ì�´ì �ì�´ 없다. ë˜�한 ì¶”ìƒ�í™”ë�œ Modelí�´ëž˜ìФì�˜ 메소드는 기본ì �으로 ëª¨ë“ ë ˆì½”ë“œ ì†�성ì�„ ì�½ì–´ì˜¤ê¸° 때문ì—� 시간, 공간 측면ì—�서 비효율ì �ì�¼ 수 있다. 마지막으로 SQLì�˜ aggregate function등ì�„ 대부분 ì¶”ìƒ�화하지 않았기 때문ì—�, ì�´ ì—시 SQL문ì�„ 작성해야 하는 번거로움ì�´ 있다.
다행히 djangoì—�서는 CLI와 마찬가지로 ì§�ì ‘ SQL문장ì�„ ìˆ˜í–‰í• ìˆ˜ 있는 ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ ì œê³µí•œë‹¤. ë˜�한 ë�„ë©”ì�¸ 언어ì�¸ pythonì�„ ì�´ìš©í•˜ë©´ CLI를 ì�´ìš©í•´ ë�°ì�´í„°ë² ì�´ìŠ¤ì™€ ì—°ë�™í• 수ë�„ 있다. 종합ì �으로 기능ì �으로 ì§€ì›�ì�´ 불가능한 ë©´ì�€ 없지만, 검색 측면ì—�서 좀ë�” ë§Žì�€ ì¶”ìƒ�화가 í•„ìš”í•˜ë‹¤ê³ í�‰ê°€í• 수 있다.










