클래스와 DB 테이블, 그리고 ORM 이해하기
- by chatgpt
프로그래밍을 처음 배우는 분들에게 클래스와 데이터베이스(DB) 테이블은 처음에는 조금 혼란스러울 수 있습니다. 이 글에서는 클래스와 DB 테이블의 유사점과 차이점, 그리고 이 둘을 연결해주는 **ORM(Object-Relational Mapping)**에 대해 간단히 설명하겠습니다.
1. 클래스와 DB 테이블의 유사점
클래스와 DB 테이블은 데이터를 구조화한다는 점에서 매우 비슷합니다. 둘 다 데이터를 저장하거나 관리하기 위한 틀을 제공합니다. 다음은 주요 유사점입니다:
(1) 속성과 열 (Columns)
- 클래스: 클래스의 속성은 객체가 어떤 데이터를 가질지 정의합니다.
- 여기서 name, age, email이 속성입니다.
- class User: def __init__(self, name, age, email): self.name = name self.age = age self.email = email
- DB 테이블: 데이터베이스 테이블의 열은 각 행(row)이 가질 데이터를 정의합니다.
- 여기서 name, age, email이 열입니다.
- CREATE TABLE User ( name VARCHAR(50), age INTEGER, email VARCHAR(100) );
(2) 객체와 행 (Rows)
- 클래스: 클래스의 인스턴스(객체)는 데이터를 담은 구체적인 개체입니다.
- 객체 user1은 User 클래스의 한 행처럼 데이터를 가지고 있습니다.
- user1 = User("Alice", 25, "alice@example.com")
- DB 테이블: 테이블의 행은 각 열에 데이터를 담은 레코드입니다.
- 데이터베이스에 저장된 한 줄(row)은 객체와 유사합니다.
- INSERT INTO User (name, age, email) VALUES ("Alice", 25, "alice@example.com");
(3) 데이터 타입
- 클래스와 DB 테이블 모두 데이터 타입을 설정합니다. 예를 들어, 나이는 숫자(INTEGER), 이름은 문자열(VARCHAR)로 정의합니다.
(4) 관계 (Relationships)
- 클래스: 클래스 간 관계를 속성으로 정의할 수 있습니다.
class Order: def __init__(self, user, product): self.user = user self.product = product
- DB 테이블: 테이블 간 관계를 외래 키(foreign key)로 정의할 수 있습니다.
CREATE TABLE Order ( id INTEGER PRIMARY KEY, user_id INTEGER REFERENCES User(id), product VARCHAR(50) );
2. 클래스와 DB 테이블의 차이점
비슷한 점이 많지만, 클래스와 DB 테이블은 목적과 동작 방식에서 차이가 있습니다:
(1) 데이터 저장 방식
- 클래스: 데이터는 프로그램이 실행되는 동안 메모리에 저장됩니다. 프로그램이 종료되면 데이터는 사라집니다.
- DB 테이블: 데이터는 영구적으로 저장됩니다. 프로그램이 종료되더라도 데이터는 데이터베이스에 남아 있습니다.
(2) 동작(Behavior)
- 클래스: 클래스는 데이터를 저장하는 것뿐 아니라 데이터를 처리하는 **메서드(함수)**를 포함할 수 있습니다.
class User: def greet(self): return f"Hello, {self.name}!"
- DB 테이블: 테이블은 데이터를 저장하고 검색하는 데 초점이 맞춰져 있으며, 자체적으로 동작(함수)을 가지지 않습니다.
(3) 데이터 접근 방법
- 클래스: 데이터를 변수처럼 바로 접근할 수 있습니다.
print(user1.name) # "Alice"
- DB 테이블: 데이터를 SQL 쿼리를 사용하여 접근해야 합니다.
SELECT name FROM User WHERE age = 25;
3. 클래스와 DB 테이블을 연결하는 ORM
**ORM(Object-Relational Mapping)**은 클래스와 DB 테이블을 연결해주는 도구입니다. ORM을 사용하면 SQL 문을 작성하지 않고도, 클래스를 통해 데이터베이스 작업을 할 수 있습니다.
(1) ORM의 역할
- 데이터베이스 테이블과 클래스를 매핑(mapping)합니다.
- 클래스의 객체를 데이터베이스의 행(row)처럼 저장하거나 불러올 수 있습니다.
- SQL 쿼리를 직접 작성할 필요 없이, 파이썬 코드로 데이터베이스 작업을 처리합니다.
(2) ORM 사용 예시 (SQLAlchemy)
- 예를 들어, 다음과 같이 User 클래스를 데이터베이스의 User 테이블과 매핑할 수 있습니다:
from sqlalchemy import Column, Integer, String, create_engine from sqlalchemy.orm import declarative_base, sessionmaker Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) age = Column(Integer) email = Column(String) # 데이터베이스 연결 engine = create_engine('sqlite:///example.db') Base.metadata.create_all(engine) # 데이터 추가 Session = sessionmaker(bind=engine) session = Session() new_user = User(name="Alice", age=25, email="alice@example.com") session.add(new_user) session.commit()
(3) ORM의 장점
- 생산성: SQL 문을 직접 작성하지 않아도 되므로 개발 속도가 빨라집니다.
- 가독성: 코드가 직관적이고 읽기 쉽습니다.
- 유지보수: 데이터베이스 스키마가 변경되더라도 클래스만 수정하면 됩니다.
결론
클래스와 DB 테이블은 데이터를 구조화한다는 점에서 유사하지만, 클래스는 메모리 내에서 작동하고 동작(메서드)을 포함한다는 점에서 차이가 있습니다. ORM은 이 둘을 연결해주는 다리 역할을 하며, 프로그래머가 SQL 대신 친숙한 코드로 데이터베이스 작업을 처리할 수 있게 도와줍니다.
처음에는 조금 어려울 수 있지만, 클래스와 DB 테이블의 개념을 이해하고 ORM을 활용하면 더 쉽게 데이터베이스를 다룰 수 있습니다. 프로그래밍과 데이터베이스 작업을 동시에 배울 수 있는 좋은 연습이 될 것입니다!
https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000008827991
'개발' 카테고리의 다른 글
풀스택 웹 개발 구조를 한눈에 이해하기! (0) | 2025.01.11 |
---|---|
스키마의 의미 (0) | 2025.01.09 |
풀스택 개발을 위한 계층별 최신 기술 스택 (2) | 2024.12.20 |
리액트 기반 ui 구축 (1) | 2024.12.20 |
클라이언트와 서버의 os내 깔려있는 프로그램들 비교 (0) | 2024.11.29 |