Django는 파이썬 웹 프레임워크로써 웹 개발을 편리하게 하기 위한 종합적인 환경을 제공한다. 편리한 웹 개발을 위해 제공되는 것들 가운데에는 객체관계매핑, 유연한 웹 템플릿 활용 등 다양한 것들이 있지만, 가장 중요한 특징은 바로 객체관계매핑이다. 본 포스팅은 초보 웹개발자를 위해 Django 에서는 어떻게 데이터베이스를 사용하고, 이를 객체로 연결하여 활용하는 가를 설명한다.

Database --> SQL in source code

일 반적인 테이터베이스 어플리케이션은 보통 위 다이어그램 처럼 직접 데이터베이스 질의언어(SQL)을 어플리케이션 소스코드에서 직접 조작하는 방식으로 구성된다. 데이터베이스의 특정 테이블의 내용을 추출하기 위해서는 SQL "select" 구문을 직접 문자열로 조작하여 데이터베이스 연결 커서에 질의를 수행한다. 잘 알고 있는 내용이지만, 새로운 레코드를 삽입할 경우에는 "insert", 기존 레코드를 수정할 경우에는 "update", 삭제할 경우에는 "delete" 구문을 사용한다. 이들 역시 SQL 구문을 문자열로 조작하여 데이터베이스를 조작하게 된다.

Database --> Django ORM --> Object in source code

Django 는 위 다이어그램 처럼 데이터베이스의 내용을 객체로 변환하는 ORM(Object Relation Mapper)를 중간에 갖고 있어서, 어플리케이션 소스코드에서 직접 객체를 조작할 수 있도록 구성되어 있다. 개발자는 데이터베이스를 조작하는데 SQL을 사용하지 않고 직접 객체를 사용할 수 있다.

Django에서 데이터베이스의 관계(Relation)를 객체(Object)로 바꿀 때의 수준 및 용어는 다음과 같다.

Relation

Object

비고

Database

Project (Application)

하나의 프로젝트는 여러개의 App로 구성된다. 이들은 모두 하나의 database 를 사용한다.

Table

Model

클래스 개념

Record

Object

객체 개념

Column

Attribute

.

이러한 방식으로 각각의 SQL 구문은 다음처럼 객체지향 프로그래밍이 가능한다.

1. SELECT --> Est.objects.all()
--> Est.objects.filter(id__contains='1')
--> exclude, get, count,...
1. INSERT --> Est.objects.create(name='a',...)
1. UPDATE --> est = Est.objects.get(id=1)
est.name = b; est.save()
1. DELETE --> est.delete()

기 존의 어플리케이션 작성시 반복적으로 나타나는 SQL 구문의 패턴을 수정하는 일은 많은 중복과 함께 관리가 귀찮은 면이 있으나, 객체로 활용하면 보다 직관적이고 관리가 용이한 형태의 개발이 가능하다. 이밖에도 다음과 같은 장점이 있다.

  1. RDBMS independant (Oracle, MySQL, PostgreSQL, Sqlite) : Django 에 구현된 각 RDBMS 별 wrapper 를 통해 RDBMS 의 종류가 어떤것인가에 상관없이 만들 수 있다. 개발 용 PC에서는 가벼운 sqlite 를 사용하고, 실제 서비스에서는 Oracle 로 사용하는데 소스코드의 수정이 거의 필요없다. (물론 테스트를 통해 검토해 볼 필요는 있음)
  2. 직관적인 객체지향 프로그래밍 : 다양한 웹 프레임워크 및 웹 관련 라이브러리에서 객체관계매핑이 구현되어 있으나, Django 는 가장 직관적이고 활용이 용이한 방식을 제공한다.
  3. 기존의 DB 기반 구성을 객체 기반 구성으로 확장하여, 컴포넌트를 조합하는 방식의 개발이 가능하다.

대 신 단점도 있다. 복잡한 SQL 질의인 경우, ORM에서는 성능이 낮을 수 있다. : ORM 에서는 SQL 구문의 생성을 추상화하여 구현하였으므로, 복잡한 쿼리의 경우 비 효율적으로 SQL 구문이 생성될 수 있다. 또한 불필요한 질의를 자주 수행함으로써 성능이 낮아질 수 있다. 하지만 Django에서는 이러한 경우를 위해 사용자가 직접 SQL문을 만들 수 있는 기능을 제공하고 있으며, 오픈소스 커뮤니티를 통해 지속적으로 성능이 개선되고 있으므로 그다지 문제가 되지 않는다.

여 러개의 RDBMS를 지원함으로써, RDBMS 간의 마이그레이션이 용이하다는 장점도 있다. Django 에서 현재 데이터베이스의 내용을 덤프받고, 새로운 설정에서 로드하기만 하면된다. 아래 소스코드는 이전 대상 모델들의 데이터를 JSON 형식으로 덤프받고 새 환경에서 로드하는 내용을 보여준다.

from django.core.serializers import serialize
result = []
models = (User, ...) # 이전대상 모델들
for model in models:
result.extend(model.objects.all())
print serialize('json', result)

뒤 코드를 backup.py 로 저장한뒤,

./backup.py > ../fixtures/initial_data.json

로 덤프받고, 새로운 환경에서

./manage.py syncdb

만 수행하면 마이그레이션이 완료된다.

Django 데이터 객체를 이용하여 데이터베이스를 검색하는 방법은 다음과 같다. 만일 Est 라는 모델이 있고, 속성이 name, identifier, sequence, data 가 있다면,

Est.objects.all() # 모든 EST 객체
Est.objects.filter(sequence__startswith='ATG') # sequence 속성이 ATG 로 시작하는 객체
Est.objects.filter( # 필터를 체인으로 연결
name__endswith='Etc.',
).exclude(
date__gte=datatime(2005,1,1),
).filter(
sequence__icontains('AGAGAG'),
)

q = Est.objects.filter(sequence__startswith='ATG')[:10] # queryset are lazy
print q
Est.objects.filter(amodel__bmodel__cmodel__name__startswith='abc') # field lookups related models

마지막 예제에서 처럼 1:다 혹은 다:1, 다:다 로 연결된 모델의 속성에 ''로 연결하여 연결(join) 검색을 수행할 수 있다는 점은 복잡한 관계에서의 편리한 데이터 검색을 가능하게 한다.

이 와 같은 연결된 모델 검색의 경우 다음의 경우가 다르다는 점을 주의해야 한다. 예를 들어 네이버같은 곳에서 여러개의 블로그를 운영하고 각 블로그에 여러 엔트리(글)이 있다고 가정한 뒤(블로그:엔트리 1:다), 특정 글을 갖고 있는 블로그를 두가지 조건으로 검색하는 방법은 다음의 두가지가 있다.

1. Blog.objects.filter(entry__headline__contains='Lennon',
entry__pub_data__year=2009)
2. Blog.objects.filter(entry__headline__contains='Lennon').filter(
entry__pub_data__year=2009)

1번의 방법은 두 조건을 동시에 만족하는 엔트리를 갖는 블로그를 찾지만, 2번의 방법은 첫번째 조건을 만족하는 엔트리를 갖는 블로그 목록에서 다시 두번째 조건을 찾는다.

위 기능들 이외에도, 버전 1.1 이후부터, 효과적인 검색을 위한 다음의 기능을 지원한다.

  1. F() object
  2. annotate()
  3. aggregate()

다음시간에 이 이상의 기능들에 대해 알아본다.

Posted by 人Co

2010/01/15 11:19 2010/01/15 11:19
, ,
Response
No Trackback , 1 Comment
RSS :
https://www.insilicogen.com/blog/rss/response/33

사용자 삽입 이미지
[모집분야]
1. Designer 경력 0명
2. Web publisher 신입 또는 경력 0명
3. Developer 신입 또는 경력 0명

[제출 서류]

1. 이력서 및 자기소개서 : 당사양식 작성 후 제출 (파일명 : 이름_이력서.doc),
   자기소개서 내용
   1) 인실리코젠에서 하고 싶은 일
   2) 이 분야를 선택한 이유와 미래의 꿈
   3) 포트폴리오 파일 또는 URL(프로젝트의 참여율 및 역할 기재) : 필수
   4) 수행프로젝트 기재 : 필수

[제출 방법]
아래의 입사지원서를 다운로드 받아, 내용을 작성하고, recruit@insilicogen.com 으로 파일 첨부하여 메일을 보내주시기 바랍니다. 자신만의 포트폴리오를 별도의 파일로 작성 후 첨부할 수 있습니다.

1. 이력서 및 자기소개서 작성 후 제목 : 이름_이력서.doc

2. 메일 제목 : 제출할 서류를 "[모집분야] 홍길동 지원" 제목으로 메일을 보내주세요.
3. 이력서 상단에 희망연봉기재요망.

[채용 절차]
1. 1차 서류마감 - 2009년 12월 11일 금요일
2. 1차 서류전형 합격자에 한해 면접요청통보
3. 2차 실무담당자 및 임원 면접 (12/16 수요일 예정)

[근무환경]
1. 주5일 근무(08~17시)
2. 4대 보험
3. 퇴직금 별도
4. 성과급
5. 경조사휴가및지원

[우대사항]
1. 장기근속경력자 (2년이상) : 함깨 성실하게 가실분
2. 영어회화가능자
3. 정보처리기사자격증 소지자

[기타]
1. 제출한 서류는 일체 반환하지 않음.
2. 합격시 수일내에 출근가능하신 분.
3. 기본적인 예절 있으신분.
4. 상기내용 숙지 후 이력서 제출요망.

Posted by 人Co

2009/12/02 09:16 2009/12/02 09:16
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/32

인실리코젠 창립기념일

지난 10월 1일은 저희 (주)인실리코젠의 창립기념일이었습니다. 2004년에 설립된 인실리코젠은 올해로 5번째 생일을 맞이하였습니다. 회사 식구들이 모두 모인 자리에서 창립기념일을 기념하는 행사가 진행되었습니다. 10월 1일 목요일의 5주년 행사에서는 어떤 일이 있었는지 지금부터 그 생생한 현장속으로 ~ 고고고!!!

우선 행사는 10월의 독서경영으로 시작되었습니다. 10월은 책을 읽는 독서경영 대신 11곡의 클래식을 감상하고 자신의 에세이를 함께 이야기하는 시간을 가졌습니다. 분위기 좋은 클래식이 흘러나오고 처음 기대와는 다르게 다들 즐겁게 이야기 나누는 모습입니다

사용자 삽입 이미지
클래식 감상을 마치고 창립 5주년을 축하하기 위해 회사의 모든 직원들이 생일축하 노래를 부르고 생일케잌에 촛불을 껐습니다.
"생일축하합니다. 생일축하합니다. 사랑하는~ 인실리코젠 생일축하합니다♬"
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

Posted by 人Co

2009/10/09 16:53 2009/10/09 16:53
Response
No Trackback , 1 Comment
RSS :
https://www.insilicogen.com/blog/rss/response/31

지난 2일 국립수의과학검역원 동물위생연구동의 세미나실에서 올해 시범사업인 ‘바이러스 유전자 변이감시 프로그램’의 설명회가 있었습니다.

바이러스 유전자 변이감시 프로그램은 이미 e축산뉴스, 디지털타임즈, 축산경제신문 등의 언론보도가 있었고, 돼지인플루엔자 바이러스(SI)의 유전자 변이 및 신종 바이러스 유입 등의 정보를 체계적으로 감시하여 사전에 예측할 수 있는 유전자 분석 체계로서 지난 7월부터 경기 등 4개 시,도 방역기관에 시범적으로 시작되었습니다.

이번 설명회는 당사에서 구축한 시스템을 시연하는 자리로서 국립수의과학검역원 바이러스과, 4개 시,도 축산위생연구소, (주)마크로젠에서 모두 참석해주셨고, 강병철 박사님께서 시스템의 전반적인 설명과 실제 예제를 이용한 데이터 입력 방법, 분석 진행과정, 분석 결과 내용 등에 대한 발표를 진행하셨습니다.

또한 질의 및 답변 시간은 추가적으로 필요한 사항과 앞으로 개선되어야 할 점 등에 대한 토론으로 시스템이 한층 더 발전할 수 있는 계기가 될 수 있는 중요한 시간이었습니다.

그 리고 인플루엔자 서열 분석에 사용되어질 CLC Main Workbench 프로그램에 대한 기본적인 기능 및 간단한 시연을 할 수 있는 시간도 마련되었으며, 다른 기관에서도 기본적인 생물정보 분석을 진행해볼 수 있도록 프로그램 설치방법과 라이센스를 제공하였습니다.

아직 시작에 불과하지만 본격적인 분석 파이프라인이 구축되어지고, 더욱 더 전문적인 생물정보 분석을 통하여 현재 유행되고 있는 신종 인플루엔자 바이러스 또한 체계적으로 감시하고 정확하게 예측할 수 있길 기대합니다.

Posted by 人Co

2009/09/16 15:37 2009/09/16 15:37
, , ,
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/30

Insilicogen's first PechaKucha night!!

지난 2009년 8월 21과 22일에 걸쳐 대한환경위해성보견과학회 workshop과 관련한 당사 워크샵이 있었고, 여기서 당사에서는 처음으로 PechaKucha를 실시하였습니다. PechaKucha에 관한 자세한 사항은 여기에서 볼수 있습니다. PechaKucha의 원칙적인 Rule은 20장의 슬라이드를 20초씩 발표하는 것이지만, 당사에서는 처음시도되는 것이고, 참석자 전원이 발표를 해야해서 6장 슬라이드에 20초씩 발표 하기로 했습니다.

물 론 첨엔 다들 반신반의 했습니다. 워크샵의 일환으로 기획되었지만, 가서 발표하려면 준비도 해야하고, 일반적인 자료발표와는 달리 20초 안에 한장의 슬라이드에 대한 내용을 압축적으로 설명하고, 그림도 한번보면 척~ 알수 있는 핵심적인 내용으로 잘 꾸며야 했기에 적지 않이 부담이 되었습니다. 주제는 자유주제로 각자 골라서 발표하기로 하고, 발표후 인기투표를 통해서 상위 두사람에게는 상품권도 주기로 했습니다.

페차쿠차 각 팀별 우수작품으로 간추려 보았습니다.

페차쿠차 각 팀별 우수작품으로 간추려 보았습니다.


밤이 되어서, 준비해간 빔프로젝터 대신 커다란 평면TV에 화면이 준비되고, 강대리님의 첫발표를 시작으로 PechaKucha를 시작했습니다. 한분한분 숨겨둔 슬라이드를 들고서 20초씩 설명해가는 와중에 관심어린 눈빛과 탄성을 통해서 인실리코젠의 PechaKucha night은 재미를 더해갔습니다. 발표된 내용들도 다양했습니다. 임천안 실장님은 골프 에티켓과 기본적인 지식등에 대해 알려주셨고, 회사에서 커피를 내리는 태선임은 다양한 커피에 대한 정보를 알려 주셨으며, 조팀장님은 실제 야구공을 들고 투수가 던지는 공의 구질에 대해 발표하셨습니다. 이때 지켜보던 많은 사람들이 조팀장님이 들고 계신공을 돈주고 사고싶어지는 구매욕을 느끼기도 했습니다(조팀장님의 마케팅실력??). 지난 일들에 대한 회고를 정리해서 발표하신분들도 있었습니다. 김경윤씨는 지난 인생의 기록들을 모아서 6장의 슬라이드에 담아주셨고, 강연경대리님은 당사에서일어난 일년간의 일들에 관해서 회고해 주셨고, 디자이너이신 김성진씨는 지난 프로젝트결과물들을 멋진 그림으로 채워서 보여주셨습니다. 박병준대리는 지난일을 회고 하고, 근래에 하고있는 여가활동에 관해 얘기해 주시기도 했습니다. 다소 전문적인 내용을 소재로 발표해주신 분들도 있었는데요, "입자 가속기 LHC와 컴퓨터 과학"이라는 주제로 도저히 2분안에 설명이 불가능한 주제를 간략하고 잼있게 소개해주신 김용일씨가 있었고, 일상적으로 사용하는 컴퓨터키보드중에서 흔히볼 수 없는 독특한 기종들을 모아서 정호진수석 컨설턴트님이 발표해주셨습니다. 박준형팀장님과 김형용팀장님은 각각 "결혼까지의 골인"과 "한국의 프로그래머 성공 스토리" 라는 주제를 가지고, 실질적이며 교훈이 될만한 내용을 알려주셨습니다. 박준형팀장님의 발표내용은 특히나 나이많은 싱글들에게 많은 영향을 주었고, 김형용팀장님은 당사의 개발자들에게 프로그래머로서 성공할 수 있는 대표적인 케이스를 선보이시면서 개발자들이 가야할 길에 대해 제시하셨습니다. 그리고, 파견근무후에 늦게 합류한 분들도 발표를 해주셨는데, 김경의씨는 본인의 사진활동에 대해서 감성어린 자료로 많은 사람들에게 감동을 주었고, 이규열선임은 구글에서 검색되어지고, 보여지는 당사의 내용에 대한 분석자료를 내놓아서 생물정보 컨설턴트로서의 기질을 십분발휘한 멋진 발표를 해주셨고, 신윤희선임은 "따스한 세상 만들기"라는 주제로 전세계 불우한 어린친구들을 구하고, 후원하는 내용을 발표하시고, 참석한 당사 성원들에게 전세계에 평화와 안녕에 힘써달라는 메세지를 전해주셨습니다. 그리고 마지막으로 바쁜일정을 소화하시고, 도착하신 강병철실장님은 우리가 익히 알고 있는 거장들의 잘 알려지지않은 내용을 소재로, 간과할수 있는 그러나 눈여겨 볼 만한 사실을 캐내는 경험을 선사 하셨습니다.

늦게 도착하신 강병철실장님을 제외하고, 인기투표가 있었는데요, 두구두구두구두구....

짜 잔.. 최우수상은 아름다운사진들로 참석자들에게 사진의 미학에 대해 알려주신 김경의씨가 수상했고, 우수상은 전우리군의 어머니이자 틈틈히 어려운 이웃들의 후원에 힘쓰시는 신윤희선임이 수상하셨습니다. 다시한번 축하드립니다. 사실 인기투표에서는 공동일등을 하셨구요. 그리고 마지막으로 바쁜일정을 소화하시고, 도착하신 강병철실장님은 우리가 익히 알고 있는 거장들의 잘 알려지지않은 내용을 소재로, 간과할수 있는 그러나 눈여겨 볼 만한 사실을 캐내는 경험을 선사 하셨습니다.

아울러 투표결과와 상관없이 준비하시고 발표해 주신 모든 분들께 감사드립니다. 특히나 PechaKucha를 제안하시고, 추진하신 김형용팀장님 수고 하셨습니다. 일정이 끝나고 다들 꼼꼼한 준비와 유창한 발표실력에 서로들 몰랐던 새로운 사실을 알아가는 유익한 자리였습니다. 이번 워크샵과 PechaKucha를 통해서 인실리코젠에서는 다시한번 성원들간의 경험을 공유하고, 같이 성장하는 기회가 되었습니다.

모두들 수고하셨습니다.

Posted by 人Co

2009/09/11 17:16 2009/09/11 17:16
, ,
Response
No Trackback , 1 Comment
RSS :
https://www.insilicogen.com/blog/rss/response/29



« Previous : 1 : ... 60 : 61 : 62 : 63 : 64 : 65 : 66 : 67 : 68 : ... 69 : Next »