SQL(Structured Query Language)이란?
관계형 데이터베이스
관계형 데이터베이스란 데이터를 표 형식으로 표현하는 데이터베이스를 의미합니다. 표를 구성하는 행과 열(속성)에 데이터를 저장하게 됩니다. 이렇게 생성 된 서로 다른 테이블 간의 관계를 통해 데이터의 구조를 더 쉽게 이해하고 관리할 수 있습니다.
SQL
SQL이란 이러한 관계형 데이터베이스에 데이터를 저장하고, 찾고, 수정하는 등의 작업을 하기 위해 사용하는 프로그래밍 언어입니다.
ORM(Object Relational Mapping)이란?
ORM은 쉽게 설명하자면 객체 지향 프로그래밍 언어를 SQL로 번역해주는 통역사입니다. 개발자들은 ORM을 통해 SQL 대신 자신에게 익숙한 프로그래밍 언어를 통해 데이터를 다룰 수 있습니다.
학생들들의 정보를 저장하는 Student 테이블로 예를 들어보겠습니다. ORM은 데이터 베이스에 저장된 학생 번호, 이름 등의 정보를 다음과 같이 Student 객체로 매핑시켜 사용할 수 있게 도와줍니다.
만약 우리가 Student 테이블에서 age가 20인 학생들을 찾는다고 가정해봅시다. 다음과 같은 쿼리문을 작성할 수 있겠죠?
1
SELECT * FROM STUDENT WHERE age=20;
만약 우리가 파이썬 Django ORM을 사용한다면 쿼리문을 작성하는 대신 다음과 같은 방식으로 데이터를 찾을 수 있게 됩니다.
1
students = Student.objects.filter(age=20)
ORM의 장점
1. 개발 속도의 향상
개발자가 자신있는 코드로 데이터베이스를 다룰 수 있어 생산성이 높아질 뿐더러 직관적인 코드를 통해 가독성을 높일 수 있습니다.
2. 다양한 관계형 데이터베이스 간에 응용 프로그램 전환
직접적으로 SQL 문을 다루는 것이 아니므로 개발 환경에서는 SQLite를 사용하고, Production 환경에서는 MySQL을 사용하는 등 최소한의 코드 수정으로 전환이 가능해집니다. 물론 개발 환경과 배포 환경을 동일하게 맞추는 것이 가장 좋긴 합니다(^^)
3.재사용 및 유지보수 편리성 증가
ORM은 독립적으로 작성되었고, 객체들을 재활용할 수 있습니다. 또한 이를 통해 디자인 패턴을 견고하게 만드는 데에도 도움이 됩니다.
ORM의 단점
1. ORM이 완벽하게 커버해줄 수 없음
ORM이 사용하기에는 편하나 설계도 그만큼 신중해져야하며 ORM 역시 기능을 완벽하게 익히기란 쉽지 않습니다. 부족한 설계로 잘못 구현되었을 경우 속도 저하 및 일관성을 무너뜨릴 수도 있습니다.
2. 성능 저하 가능성
일부 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있음 복잡한 쿼리문의 경우 오히려 SQL문으로 사용이 직관적이면서 효율적이기도 합니다.
ORM이 적합하지 않은 경우 (추가 조사할 것)
- 많은 수의 레코드에 대해 잦은 빈도로 벌크 업데이트를 수행하는 애플리케이션 (OLAP)
- 순수 SQL 기반 접근 방법을 적용하는 것이 적절한 애플리케이션
Go에서 ORM?
xorm, gorm, sqlx (추가 조사할 것)
참고자료
https://aws.amazon.com/ko/what-is/sql/ https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwj2tOfeof77AhWKHnAKHSN0DqcQmhN6BAhfEAI&url=https%3A%2F%2Fko.wikipedia.org%2Fwiki%2F%25EA%25B0%259D%25EC%25B2%25B4%25EA%25B4%2580%25EA%25B3%2584%25EB%25A7%25A4%25ED%2595%2591&usg=AOvVaw0EKYkhyazx5Myxn6YwPCQn https://www.youtube.com/watch?v=6mHpfGjpE_M https://www.fullstackpython.com/object-relational-mappers-orms.html https://hanamon.kr/orm이란-nodejs-lib-sequelize-소개/ https://velog.io/@yejin20/DjangoORM의-장단점