제목에서 표현을 약간 잘못한 것이 있다.
여기서 다시 정리해서 얘기하면
create()로 한번에 저장하냐 ? 아니면 Model Instance를 만들고 save로 저장할꺼냐?
이렇게 말하는게 조금 더 정확할 것 같다.
아무튼 이 두 개의 방향은 같은 듯 다른 듯 하다.
비교하기 앞서서 orm이 무엇인지 살짝 집고 넘어가도록 하자.
orm이란, DB를 관리하기 위한 언어를 직접적으로 사용하지 않고 기존에 사용하는 언어를 이용하여 개발자가 여러가지 프로그램을 쓰지 않고 관리 할 수 있도록 도와주는 아이라고 생각한다.
즉,
#mysql
select * from User;
#django orm
User.objects.all()
간단하게 보면 이렇다.
orm이 구동되는 순서를 말하면 작성한 코드를 쿼리로 변환하고 이를 실행하고 그 결과값을 받아오는 방식이다.
'작성한 코드를 쿼리로 변환' << 이 부분을 잘 기억하면 차이를 바로 알게 된다.
create() 같은 경우, 쿼리를 만들어서 바로 실행까지 넘어간다.
위의 all()처럼, 쿼리를 만들자 마자 실행을 하여 저 코드의 실행값을 받으면 쿼리셋이라는 결과로 반환되게 된다.
그럼 save()는 어떻게 진행되는가?
User(id = 'antonian', password = '1234')
# insert into User values('antonian','1234');
위의 코드는 실질적으로 아직 실행이 된건 아니다!
쿼리문으로만 아직 있다고 생각하면 된다
User(id = 'antonian', password = '1234').save()
위처럼 save가 뒤에 붙어야 DB에 실제로 저장되는 방식이다.
이 차이를 이용할 수 있는게 뭐가 있을까?
생각해본게 view 로직 중간에 데이터가 변경점이 생겨난다면 create를 이용하지 않고 인스턴스를 만들어서 로직이 진행이 다 된 뒤에, save를 사용하여 저장해주는 것이 DB요청을 insert 후에 update를 보내는 것보다 insert문 한 번만 하는 것이 좋다고 생각이 든다. '위의 차이가 얼마나 생기겠어?'지만 로직이 단순할 때부터 위를 정돈하는 습관을 가지는 것이 나중에 도움이 될 것이라 믿는다.