[django] mysql 사용하기

logi·2023년 11월 8일
0

django를 배우면서 많이 들리는 db라는 단어, 3학년 2학기 수업을 들으면서 데이터베이스의 기초를 배우다 보니 django가 db와 어떻게 소통하는지 정확한 과정을 알고 싶어졌다. 내가 지금 데이터베이스 과목에서 배우는 sql문과 django가 연관이 있을까? 결론부터 말하자면, 아주 깊은 연관이 있었다.

Django에는 ORM이라는 기능이 있다. Object Relational Mapping의 약자로, 말 그대로 object(객체)를 relational mapping(관계형 데이터베이스와 매핑)해준다는 것이다. 즉, ORM을 사용하면 sql문을 사용하지 않고 python만으로도 db에 접근할 수 있다.

예를 들어

from django.db import models

class User(models.Model):
    name     = models.CharField(max_length=45)
    email    = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=200)

    class Meta:
        db_table = 'users'
mysql> desc users2;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | bigint       | NO   | PRI | NULL    |       |
| name     | varchar(45)  | YES  |     | NULL    |       |
| email    | varchar(100) | YES  | UNI | NULL    |       |
| password | varchar(200) | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

이렇게 테이블을 추가해 줄 수 있다. 원래 이 작업은 다음과 같이 sql 쿼리문을 사용하는 것이다.

CREATE TABLE users2 (
	id BIGINT NOT NULL PRIMARY KEY,
    name VARCHAR(45),
    email VARCHAR(100) UNIQUE,
    password VARCHAR(200)
    );

django의 ORM기능은 sql쿼리문을 몰라도 아주 쉽게 db에 접근할 수 있도록 해 주는 아주 유용한 기능이다. 하지만 정말 쿼리문을 몰라도 개발에 아무 지장이 없을까? 그렇지 않다.

링크텍스트
이 블로그 글에서는 쿼리문에 대한 이해 없이 ORM만으로만 개발하다 어려움을 겪은 신입 개발자의 이야기가 담겨 있다. 아무래도 ORM만을 사용하면 실제로 쿼리가 어떻게 동작하는지 이해할 기회가 없기도 하고, 실제 쿼리문을 사용하여 해결해야 할 문제가 생겼을 때 제대로 대처하지 못하게 될 수 있다. db에서 복잡한 로직을 수행할 때 ORM만으로는 절대 원하는 성능을 구현해 낼 수 없을 때가 있기 때문이다. 위 글에서도 나와있듯 ORM을 사용하면 당연히 쿼리문을 직접 사용하는 것보다는 성능이 떨어질 수밖에 없고, 실무에서는 이 문제가 치명적으로 작용할 수도 있다.

ORM이 편하고 좋은 기능이고, 막 django를 배우기 시작한 입장에서는 ORM에 의존할 수밖에 없지만, 절대 실제 쿼리문에 대한 이해를 게을리해서는 안 되는 것 같다.

profile
관성을 붙이자

0개의 댓글