1. Raw Query
Raw Query는 데이터베이스에 SQL(Structured Query Language)을 이용하여 직접 쿼리(Query)를 요청하는 것을 뜻합니다.
장점
1)SQL만 알고 있더라도 데이터베이스와 상호작용 가능
2)엄청나게 긴 쿼리를 수행하거나 트랜잭션을 직접적으로 관리할 수 있다.
※ Node.js에서 Raw Query를 사용하려면 AWS RDS에서 대여받은 MySQL에 연결을 도와주는 데이터베이스 드라이버가 필요 -> mysql2라는 라이브러리로 가능
mysql2 연결속성
1)host : mysql2 데이터베이스 드라이버가 접속할 데이터베이스의 주소를 나타냅니다.
2)user : AWS RDS 데이터베이스의 계정명
3)password: AWS RDS 데이터베이스의 비밀번호
4)database: AWS RDS 데이터베이스의 DB명
이외에도 timezone으로 시간대를 성정하거나 ssl로 SSL인증서를 성정하는 것도 가능
mysql2 라이브러리에서 Raw Query는 connect.promise().query() 형식으로 사용합니다. 여기서, 데이터 정의어(DDL), 데이터 조작어(DML) 등을 사용할 수 있다.
Raw Query를 사용할 때, CREATE TABLE 명령어와 같이 데이터를 생성하는 명령어의 경우 반환하는 값이 존재하지 않았지만, SHOW TABLES 또는 SELECT 문법의 조회 명령어는 반환값이 존재하게 된다.
mysql2의 경우 Raw Query를 이용하여 조회된 결과값은 배열의 첫번째에 할당되게 되는데요. 그렇기 때문에, 배열 구조분해 할당 문법을 이용해 배열의 첫번째의 값만 tableList 변수에 할당하게 된다.
2. ORM과 Prisma
1)prisma
Prisma는 ORM(Object Relational Mapping)의 한 종류로, JS 객체(Object)와 DB의 관게(Relation)을 연결(Mapping)해주는 도구다.
물론 Node.js 환경에서는 TypeORM, Prisma, Sequelize 등 다양한 ORM이 존재, 하지만 JS 뿐 아니라 TS에서도 하용할 수 있는 Prisma로 먼저 학습해봤다.
2) mongoose vs Prisma
i) mongoose의 경우 ODM(Object Document Mapping)으로 JS의 객체를 Document와 연결하지만, Prisma는 JS 객체와 DB의 관계를 연결해주는 차이점이 있다.
ii) mongoose는 지원하는 데이터베이스가 mongoDB 밖에 존재하지 않았지만, Prisma의 경우 RDBMS에 해당하는 다양한 데이터베이스를 사용할 수 있다는 장점이 있다.
iii) mongoose는 Schema의 형태로 컬렉션(Collection)에 대한 속성을 설정하였다면, Prisma의 경우 Model의 형태로 테이블(Table)의 속성을 설정할 수 있다.
3. ORM의 장단점
보통 프로젝트를 구현하면 Raw Query를 사용하기 보단 ORM을 사용하는데, 그 이유는 프로덕션에서 사용하는 데이터베이스가 언제 바뀔지 모르다는 점과 데이터베이스에서 사용하는 DB 또는 Table의 속성이 변경되었을 때 빠르게 수정이 가능하다는 점이다.
ORM의 단점은 JOIN과 UNION 연산자를 동시에 사용하는 복잡한 쿼리를 작성하는 경우 ORM으로 구현하기 위해 ORM의 이해도가 높아야하고, 서브쿼리를 포함하는 복잡한 쿼리를 작성하거나 극한의 성능을 요구하는 쿼리가 필요한 상황에서를 Raw Query가 더 좋을 수도 있다.
하지만, Raw Query를 공부하면서 코드 스니펫에 있는 것을 복사해서 쓰기보다는 직접 코드를 따라 쳐보면서 느낀 점인데, Row Query가 압도적으로 불편하다는 것을 알았다. 백틱(``)으로 쓰다보니 자동완성 지원이 미약해서 작업 속도가 느렸고 오타가 나도 알아차리기 힘들었다. 그로 인해서 발생하는 에러를 찾는 것도 쉽지 않았다. 언젠가 raw query가 필요한 회사에 가게 될 지는 모르겠지만, 그 전까지는 prisma를 애용할 것 같다.
'Sparta > TIL' 카테고리의 다른 글
24.01.30 TIL - tables (1) | 2024.01.31 |
---|---|
24.01.29 TIL - 세션, JWT (0) | 2024.01.30 |
24.01.25 TIL - SQL(2) (0) | 2024.01.25 |
24.01.24 TIL - MySQL(1) (1) | 2024.01.24 |
24.01.23 TIL- ubuntu (0) | 2024.01.23 |