✏️ 정리 계기
저번에
CRUD
,TODO
클론코딩하고 쓴 게시물에 보면 계속import sqlalchemy
하던데 저게 정확히 무슨 기능을 하는지 궁금했다.
그런데 당장에 정리하기에는 좀 버거움이 있고, 내용이 상당히 많은지라 따로 정리하면 좋을 것 같아서 이렇게 따로 정리하길 다짐했고 더 늦기 전에 지금 해둬야겠다고 생각했다!
이번 내용이 방대하게 느껴졌던 이유는 먼저 ORM
이 무엇인지에 관해 알아야 했기 때문이다.
ORM(Object Relational Mapping)
이라 함은, 객체-관계 매핑이다.
객체 관계 mapping?
데이터베이스 내의 리소스(테이블)들을 객체화하여, 각
DBMS
(MySQL, MSSQL 등)들에 대해서CRUD
등을 공통된 접근기법으로 사용할 수 있다.
ORM
을 통해 객체 간의 관계를 바탕으로 SQL
을 자동으로 생성하여 불일치를 해결한다.데이터베이스 데이터
<—매핑—> Object 필드
Persistant API
라고도 할 수 있다.JPA
, Hibernate
등즉, 이 친구를 잘 다룰 줄 안다면 Database를 생성, 수정, 삭제를 할 수 있게 된다.
DBSM
데이터베이스 관리 시스템(DBMS: Database Management System)
- 데이터베이스에 적재된 데이터 작업을 수행한다.
- 데이터베이스를 보호하고 보안을 제공한다.
- 데이터베이스 관리 시스템의 기능은 크게 구성(정의), 조작, 제어 기능으로 나눌 수 있다.
DBMS에 대한 종속성이 사라진다.
ORM
에 대한 이해만으로 웬만한 CRUD
를 다룰 수 있다.
(Object
에 집중함으로 극단적으로 DBMS
를 교체하는 거대한 작업에도 비교적 적은 리스크와 시간이 소요된다.)
객체를 통하여 대부분의 데이터를 접근 및 수정을 진행하므로, 코드 가독성이 좋다.
각종 객체에 대한 코드를 별도로 작성하기 때문에 코드의 가독성을 올려준다.
SQL
의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 인해 생산성이 증가한다.
데이터 구조 변경시, 객체에 대한 변경만 이루어지면 되므로, 유지보수성이 좋다.
ORM은 독립적으로 작성되어있고, 해당 객체들을 재활용 할 수 있다.
SP
를 쓰는등 별도의 튜닝이 필요한 경우가 있다.DBMS
의 고유 기능을 이용하기 어렵다. (하지만 이건 단점으로만 볼 수 없다 : 특정 DBMS
의 고유기능을 이용하면 이식성이 저하된다.)프로시저?
데이터베이스에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리 시스템에 저장한 것으로
영구저장모듈(Persistent Storage Module)
이라고도 불린다.
보통 저장 프로시저를프로시저
라고 부르며, 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한쿼리의 집합
이다.
ORM
을 사용하면 개발자가 SQL
대신 python
코드로 생성, 읽기, 수정 및 삭제 할 수 있다.
개발자는 SQL문
쓰거나 프로시저를 작성하는 대신에 데이터베이스를 사용하여 편한 프로그래밍 언어를 사용할 수 있다.
ORM
을 사용하여 이론적으로 다양한 관계형 데이터베이스 간에 응용 프로그램을 바꿀 수 있다.
그렇지만 연습으로는, 실제로 사용되는 것과 동일한 데이터베이스를 로컬에서 개발하는 것이 가장 좋다.
파이썬 ORM 라이브러리 -> 파이썬 코드에서 데이터베이스와 연결하기 위해 사용할 수 있는 라이브러리
SQLAlchemy
은 잘 알려진 데이터베이스 툴킷이며 ORM 구현은 파이썬으로 작성되었다.
SQLAlchemy
는 SQL문
을 작성할 필요없이 데이터베이스에 독립적인 코드를 작성하고 실행하기 위한 일반화 된 인터페이스를 제공한다.
✏️ 아쉬운 점과 앞으로 해나가야할 것
SQL query
를 써보진 못해서 이것도 나중에 써보고SQLchemy
랑 비교해서 어떤지 느껴보고 싶다.
개념 획득에 집중해서 그런지 직접 비교해보고 싶은 마음도 들었다.- 공식 문서를 많이 참고해서 공부하자!!
다른 사람들의 글도 좋지만 앞으로는 공식 문서의 글을 보고 직접 해석하면서 예쁘게 정리하는 방법도 익힐 필요가 있다고 느꼈다. 화이팅!!😊
참고 페이지