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

Jakezo·2021년 12월 9일
0

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

오늘은 데이터베이스와 어플리케이션의 연결을 ‘객체지향’적으로 도와주는 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'peter@example.org'
# '@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 쿼리에 대한 지식과 경험이 바탕이 되어야 더 효과적인 백엔드 개발이 가능하다는 점을 염두에 두면 좋을 것 같습니다.

profile
탐험가

0개의 댓글