[데이터베이스&백엔드] ORM(Object Relational Mapping)의 개념과 종류, 활용방안

최근에 너무 바쁜 나머지 오랜만에 글을 쓰게 되었네요..
노션에 정리한것들 한번에 동기화 시켜보겠습니다.

오늘은 데이터베이스와 어플리케이션의 연결을 ‘객체지향’적으로 도와주는 ORM(Object Relational Mapping)의 개념과 종류, 활용방안에 대해 알아보겠습니다.

💡1. ORM(Object Relational Mapping) 개념

‘ORM(Object Relational Mapping)’은 ‘객체로 연결을 해준다’는 의미로, 어플리케이션과 데이터베이스 연결 시 SQL언어가 아닌 어플리케이션 개발언어로 데이터베이스를 접근할 수 있게 해주는 툴입니다.

ORM은 SQL문법 대신 어플리케이션의 개발언어를 그대로 사용할 수 있게 함으로써, 개발 언어의 일관성과 가독성을 높여준다는 장점을 갖고 있습니다.

💡2. ORM의 종류와 활용 예시

아래는 파이썬의 Flask SQLAlchemy 의 예시코드입니다. 생성하고자 하는 SQL DB를 파이썬 클래스를 활용해 생성할 수 있습니다.

# 'application' 파이썬 파일
from flaskimport Flask
from flask_sqlalchemyimport SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

def __repr__(self):
return '<User %r>' % self.username#db 생성.
>>>from applicationimport db
>>> db.create_all()

위처럼 데이터베이스라는 ‘데이터의 집’을 생성했다면, 아래는 실제 데이터베이스에 들어갈 ‘레코드(=record)’라는 데이터 자체/실제 내용물을 생성하는 코드입니다.

# 'admin’, 'peter’, 'guest' 라는 데이터를 user 테이블에 레코드로 생성
>>>from applicationimport User
>>> admin = User(username=’admin’, email=’admin@example.com’)
>>> peter = User(username=’peter’, email=’peter@example.org’)
>>> guest = User(username=’guest’, email=’guest@example.com’)# 데이터베이스에 레코드 추가, commit 완료해야 SQL DB에 저장됨.
>>> db.session.add(admin)
>>> db.session.add(peter)
>>> db.session.add(guest)
>>> db.session.commit()

위 코드를 실행하면, SQL의 User 테이블에 아래와 같은 레코드(데이터)가 생성됩니다.

위 SQL데이터베이스에서 ‘peter’를 필터하고 싶을때에도 SQL언어가 아닌 파이썬 Flask SQLAlchemy의 언어로 접근할 수 있습니다.

# query.filter_by 메소드 활용하여 SQL 데이터 접근.>>> peter = User.query.filter_by(username='peter').first()
>>> peter.id
2
>>> peter.email
u'[email protected]'
# '@example.com'으로 끝나는 User 데이터 필터링.
>>> User.query.filter(User.email.endswith('@example.com')).all()
[<User u'admin'>, <User u'guest'>]

위의 예시처럼 파이썬 Flask SQLAlchemy의 메소드를 활용해 SQL데이터를 생성하고 조회할 수 있기 때문에 가독성이 높아지고 개발언어를 일관되게 활용할 수 있어 편리한 것 같습니다.

※추가로 ORM 종류별 참고문헌을 추가합니다.

💡3. ORM의 장단점과 적절한 활용 방향

ORM은 백엔드 개발에 있어 개발언어의 일관성과 가독성을 높여주는 강력한 장점이 있습니다.

다만, ORM만으로는 SQL의 모든 부분을 다루기가 어렵기 때문에 백엔드 개발 시 SQL 쿼리에 대한 지식과 경험이 바탕이 되어야 더 효과적인 백엔드 개발이 가능하다는 점을 염두에 두면 좋을 것 같습니다.

좋은 웹페이지 즐겨찾기