2025. 5. 22. 11:30ㆍCoding Study/데이터베이스
ORM이란 ?
ORM은 Object Relational Mapping의 약자로, 한글로 풀면 객체-관계 매핑이다. 말 그대로 객체(Object)와 관계형 데이터베이스(Relational Database)의 테이블(Row)을 연결해주는 기술 또는 도구를 의미한다.
우리가 자바스크립트나 자바, 파이썬 같은 언어로 작성한 객체를 데이터베이스의 테이블과 매칭시켜주는 역할을 한다. 개발자는 객체를 다루듯이 코드를 작성하면, ORM이 내부적으로 SQL 쿼리로 변환해 데이터베이스와 소통해준다. 이 덕분에 SQL을 직접 작성하지 않아도 데이터 조작이 가능해진다.
데이터베이스
데이터베이스는 데이터를 구조화하여 저장하고 효율적으로 관리할 수 있게 해주는 도구다. 대부분의 웹 애플리케이션은 사용자 정보, 게시글, 상품 정보 등 수많은 데이터를 다루기 때문에, 이 데이터를 안전하고 효율적으로 저장하고 불러오는 시스템이 필요하다. 그게 바로 데이터베이스다.
관계형 데이터베이스(Relational Database)는 데이터를 테이블 단위로 구성하며, 각 테이블은 행(Row)과 열(Column)로 이뤄져 있다. 데이터를 잘 다루기 위해 SQL이라는 전용 언어를 사용한다. 하지만 이 SQL은 우리가 사용하는 프로그래밍 언어와는 문법 구조가 꽤 다르기 때문에, 이 간극을 매워주는 도구가 필요하다. 그 역할을 ORM이 해주는 것이다.
ORM의 장점
ORM은 단순히 귀찮음을 덜어주는 도구가 아니다. 실제 개발 생산성과 유지보수 측면에서 많은 장점을 가지고 있다. 아래는 대표적인 장점들이다.
1. 생산성과 유지보수성이 높다
ORM을 사용하면 SQL을 일일이 작성하지 않고도 객체처럼 데이터베이스를 다룰 수 있다. 개발자가 자주 사용하는 언어로 코드를 작성할 수 있기 때문에 개발 속도가 빨라지고, 코드가 일관되게 유지된다. 유지보수 시에도 SQL과 자바스크립트 간의 맥락을 따로 고려할 필요가 없어 더 효율적이다.
2. 데이터베이스 독립성이 있다
ORM은 여러 데이터베이스를 지원하는 경우가 많다. 예를 들어 PostgreSQL을 사용하다가 MySQL로 바꾸더라도 ORM이 잘 작동하게 해주는 드라이버를 제공한다. 즉, 데이터베이스에 종속되지 않고 코드 변경 없이도 다양한 DB를 사용할 수 있는 유연성을 제공한다.
3. 보안 측면에서 안전하다
ORM은 SQL Injection 같은 보안 취약점에 대해 기본적인 보호 기능을 내장하고 있다. SQL 구문을 직접 작성하지 않고 ORM에서 제공하는 메서드로 데이터를 다루기 때문에, 외부에서 악의적인 SQL이 삽입되는 경우를 원천 차단할 수 있는 장점이 있다.
4. 마이그레이션 관리가 편리하다
ORM은 데이터베이스의 스키마 변화도 체계적으로 관리할 수 있게 도와준다. 이 과정을 Migration이라고 부르며, 테이블의 구조를 바꾸는 과정이 코드로 기록되고 버전 관리가 가능하다. 이전 상태로의 롤백도 손쉽게 할 수 있기 때문에 협업 환경에서도 유리하다.
Prisma란 ?
Prisma는 Node.js와 TypeScript 환경에서 사용되는 ORM 도구다. SQL을 직접 작성하지 않고도 자바스크립트 객체로 데이터베이스를 다룰 수 있게 해주는 도구이며, 매우 직관적이고 가독성 좋은 문법을 제공한다.
기존의 ORM들과 비교해 Prisma는 개발자가 더 쉽게 데이터베이스를 다룰 수 있도록 설계되었으며, 타입 안정성과 자동 완성 기능까지 갖추고 있어 코드 품질을 높여주는 장점이 있다.
특히 프론트엔드 개발자나 Node.js 기반의 풀스택 개발자에게 친화적인 도구로, 처음 데이터베이스를 배우는 사람에게도 접근성이 좋은 ORM이라 할 수 있다.
Prisma의 장점
1. 타입 안정성과 자동 완성 기능 제공
Prisma는 TypeScript를 기본으로 지원하기 때문에, 모델을 정의하면 해당 모델을 기반으로 타입이 자동 생성된다. 이로 인해 잘못된 필드명을 입력하거나 데이터 타입이 맞지 않는 경우, 개발 도중 에러를 바로 확인할 수 있다.
또한, 코드 작성 시 자동 완성 기능이 작동하여 생산성이 높아진다. 이 점은 다른 ORM에 비해 Prisma만의 강점 중 하나다.
2. 직관적인 쿼리 작성
Prisma의 쿼리는 매우 간단하고 직관적이다. SQL 문법을 몰라도 findMany, create, update 같은 메서드를 통해 원하는 동작을 손쉽게 수행할 수 있다.
이 방식은 자바스크립트의 함수형 스타일과 유사하기 때문에
초보자도 부담 없이 사용할 수 있다.
const users = await prisma.user.findMany({
where: { isActive: true },
})
3. 다양한 데이터베이스 지원과 DB 독립성
Prisma는 PostgreSQL, MySQL, SQLite, SQL Server, MongoDB 등 다양한 데이터베이스를 지원한다.
또한, Prisma는 특정 DB에 종속되지 않고 객체 중심으로 코드를 작성할 수 있기 때문에, 나중에 데이터베이스를 변경하더라도 최소한의 수정으로 마이그레이션이 가능하다.
4. 마이그레이션 기능 제공
Prisma에는 prisma migrate라는 강력한 명령어가 포함되어 있어 데이터베이스 구조의 변경을 쉽게 기록하고 반영할 수 있다.
스키마 변경이 발생할 때마다 SQL을 직접 작성하지 않고도 자동으로 마이그레이션을 적용하거나 롤백할 수 있기 때문에, 협업 환경이나 장기적인 프로젝트에서 매우 유용하다.
3Tier 아키텍처란?
3Tier 아키텍처는 소프트웨어를 클라이언트(프론트엔드), 서버(백엔드), **데이터베이스(DB)**의 세 계층으로 나누어 각자의 역할을 분리한 구조를 말한다.
이 구조는 시스템의 복잡도는 올라가지만, 그만큼 보안성, 확장성, 모듈화 측면에서 강점을 가진다.
1Tier 아키텍처 – 가장 단순한 구조
1Tier 아키텍처는 클라이언트, 서버, 데이터베이스가 모두 하나의 컴퓨터 안에 있는 구조를 말한다.
초기 SQL 실습 환경처럼 Supabase 클라이언트를 통해 백엔드와 DBMS까지 모두 사용하는 구조가 이에 해당된다.
장점
- 구성과 실행이 간단하다.
- 별도 서버나 네트워크 설정 없이 로컬에서 빠르게 개발하고 테스트할 수 있다.
- 데스크탑 애플리케이션이나 임베디드 시스템 등에서는 충분히 적합하다.
단점
- 보안에 매우 취약하다. (한 대만 뚫리면 전체 데이터가 유출될 수 있다)
- 여러 사용자나 클라이언트가 동시에 접속하기 어렵다.
- 서비스가 확장되기 어렵다. (확장성 부족)
2Tier 아키텍처 – 클라이언트와 서버의 분리
2Tier 아키텍처는 클라이언트와 서버를 분리한 구조이다.
이때 서버는 데이터를 가공하거나 저장하는 역할을 하며, 클라이언트는 요청을 보내고 데이터를 받아 화면에 보여주는 역할을 한다.
다만, 이 구조에서 종종 데이터베이스가 따로 존재하지 않고 서버가 데이터를 직접 관리하는 경우가 있다.
예를 들어, 서버 내부의 파일 시스템에 데이터를 저장하는 방식이다.
장점
- 1티어에 비해 네트워크를 통한 요청·응답이 가능해지고, 역할이 분리되어 관리가 용이해진다.
- 간단한 웹 서비스나 API 서버를 만들 때 적합하다.
단점
- 데이터 중복 관리의 문제가 발생한다.
- 파일 기반 저장은 데이터 조회, 정렬, 검색이 비효율적이다.
- 확장성과 보안 측면에서는 한계가 있다.
3Tier 아키텍처 – 역할 분리의 완성형 구조
3Tier 아키텍처는 클라이언트, 서버, 데이터베이스(DBMS) 세 계층이 각각 독립적으로 운영되는 구조이다.
클라이언트는 사용자와 직접 상호작용하며, 서버는 요청을 받아 처리하고, DB는 데이터를 저장하고 효율적으로 관리한다.
장점
- 모듈화(Modularity)
클라이언트, 서버, 데이터베이스가 각각의 역할에 집중할 수 있기 때문에 유지보수와 기능 개선이 수월하다. - 보안성(Security)
각 계층 간에 물리적인 분리가 존재하기 때문에 보안 정책을 세분화할 수 있다.
예를 들어, 클라이언트는 서버에만 접근 가능하고, 서버만 DB에 접근하도록 제한할 수 있다. - 확장성(Scalability)
데이터가 많아져도 DB 서버만 확장하면 되고, 요청이 많아지면 서버를 수평적으로 확장하면 된다.
각각의 역할에 따라 필요한 부분만 독립적으로 확장할 수 있어 효율적이다. - 유지보수의 용이함
문제가 발생했을 때 어느 계층에서 문제가 생긴 것인지 파악하기 쉽고, 각자 수정 후에도 전체 시스템에 영향을 주지 않는다.
단점
- 구조가 복잡하며 설정과 개발 난이도가 상대적으로 높다.
- 처음 접하는 개발자에게는 각 계층 간 통신을 이해하는 데 시간이 필요하다.
'Coding Study > 데이터베이스' 카테고리의 다른 글
| 데이터 모델링 (1) | 2025.09.02 |
|---|---|
| [SQL] 기타 팁 (1) | 2025.05.21 |
| [SQL] 서브 쿼리 (0) | 2025.05.21 |
| [SQL] JOIN (0) | 2025.05.21 |
| [SQL]GROUPING (0) | 2025.05.21 |