슈코딩

[Django] Data Base & Django ORM & DB관계 본문

코딩공부/Django

[Django] Data Base & Django ORM & DB관계

Roshu 2022. 6. 1. 14:32

1. 데이터 베이스 연결

 

파이참으로 프로젝트 세팅을 하게되면 settings.py 안에 DATABASES 가 있다.

 

강의에서는 SQLlite를 사용해서 기본세팅으로 실습을 했다. 

다른 DB를 사용하기위해선 우선 그 DB를 설치를 하고

settings.py에 새로 작성을 해야 한다.

 

예시) mysql

 

그 후 파이참을 실행시켜서 서버를 작동시키고 

 

파이참 우측에 데이터베이스 클릭 후 + 버튼을 눌러서

프로젝트 파일에 자동으로 생성된 db파일을 연동시켜서 

우리가 볼 수 있는 형태까지 연결을 하면 준비는 끝난다. 

이미지에 나와있는 my_user 테이블을 제외한 나머지 테이블은 장고에서

기본적으로 제공하는 테이블구조이다. 

생성한 APP의 models.py에서 모델을 생성하고 추가하게되면

my_user테이블과 함께 생성이 된다. 

 

#Github Push 주의 사항

settings.py 안에는 깃허브에 올리면 안되는 중요한 DB정보가 들어가있는데,

이런 정보들을 올리지 않도록 주의해야한다. 

settings.py 파일분리(manage.py directory에 my_settings.py생성), .gitignore 를 통해 분리한

파일은 올라가지 않게 하는 등 안전한 방법을 사용해서 중요 정보가 노출되지 않도록 주의하자.

 

 

2. ORM ( Object Relational Mapping ) 

ORM (Object Relational Mapping = '객체와 관계형 데이터베이스를 자동으로 연결을 해준다')

어플리케이션과 데이터베이스를 연결할때 

데이터베이스를 하나의 '객체' 덩어리로 보고, SQL언어가 아닌 

파이썬의 Class와 같은 어플리케이션 개발언어로 쉽게 표현 및 사용 할 수 있게 해준다.

즉, 데이터에 들어가게 될 객체(Object)를 하나의 Class로 보겠다는 의미이다.

 

회원가입 UserModel

 

이와 같은 클래스를 이용해서 데이터베이스에 어떤역할을 하는 모델을 생성할지,

어떤 요소들이 담길것인지 고민을하고 코드로 작성을해서 적용 시킨다.

 

ORM 은 백엔드 개발에 있어 개발언의 일관성과 가독성을 높여주는 강력한 장점이 있다.

또한 재사용 및 유지보수의 편리성이 증가한다.

 

하지만 ORM만으로는 SQL의 모든 부분을 다루기 어렵기 때문에 백엔드 개발 시 SQL쿼리에

대한 지식과 경험이 바탕이 되어야 더 효과적인 백엔드 개발이 가능하다고 한다.

 

SQL쿼리에 대한 것도 공부도 해보고, 왜 ORM만으로는 SQL의 모든 부분을 다루기 어려운지,

SQL쿼리를 배우면 왜 더 효과적인 백엔드 개발이 가능한지도 생각을 해봐야 할것같다.

 

 

3. 데이터베이스 관계

데이터베이스안의 테이블들은 서로 관계를 가지고 있다. 이를 Mapping Cardinarlity( 매핑 카디널리티 ) 라고 한다.

매핑 카디널리티에는 3가지가 있다. 

 

One-to-One(1:1)

- '데이터 A' 와 '데이터 B' 가 서로 만나서 중복이 되지않는 값을 만들어 내는 것

- ex) 웹사이트의 프로필과 사용자의 관계를 생각해보면 한명의 유저에겐 하나의 프로필만 존재한다.

 

One-to-Many(1:N)

-'데이터 A' 는 '데이터 B' 를 중복되는 값을 만들 수 있지만, 그 반대는 불가능한 경우

-ex) 게시글과 작성자의 관계 -> 작성자는 여러개의 게시글을 쓸 수 있지만, 게시글은 여러명의 작성자를 가질 수 없다.

 

Many-to-Many(N:M)

-'데이터 A' 와 '데이터 B'가 서로 중복되는 값을 만들 수 있는 경우

-ex) 피자와 토핑 -> 피자안에는 여러개의 토핑이 들어갈 수 있고, 한개의 토핑이 여러개의 피자에 들어갈수도 있다.

 

 

'코딩공부 > Django' 카테고리의 다른 글

[Django] 장고 템플릿(Template) 문법  (0) 2022.06.02
[Django] 5/31 아침퀴즈 복습  (0) 2022.06.01
[Django] Admin 페이지  (0) 2022.05.31
[Django] 파이참 프로젝트 기초 구조  (0) 2022.05.31
[Django] 기초개념  (0) 2022.05.27
Comments