사전 모델
용어함정

모델

gabury1고친 사람 github-actions[bot]

모델은 쓰는 분야마다 가리키는 물건이 크게 다른 말입니다. 웹 프레임워크에서는 데이터를 읽고 쓰는 일을 맡는 코드를 말합니다. 머신러닝에서는 데이터로 훈련해 얻은 판정 기준을 말합니다. 두 뜻은 이름만 같아서 섞어 쓰면 대화가 어긋납니다.

쉽고 빠른 이해

무슨 일을 하는 물건인가 — 실물을 간추려 코드나 숫자로 옮겨 두고 그것으로 일을 처리하게 해 줍니다. 웹 애플리케이션에서는 「글」 표 하나를 클래스 하나로 옮긴 코드가 모델입니다. 스팸 필터에서는 메일을 받아 스팸일 확률을 매기는 판정 기준이 모델입니다.

왜 이렇게 하나 — 웹 애플리케이션은 데이터 다루는 코드를 한곳에 모아야 화면을 고칠 때 데이터 규칙이 흔들리지 않습니다. 머신러닝은 스팸을 가려내는 판정 기준을 사람이 다 적을 수 없습니다. 그래서 예시 데이터에서 그 기준을 얻어 냅니다.

어떻게 도나

  1. 웹 프레임워크의 모델은 개발자가 코드로 적습니다. 요청이 오면 이 모델이 데이터베이스를 읽고 씁니다
  2. 머신러닝의 모델은 훈련이 데이터를 보며 숫자를 맞춰 만듭니다
  3. 다 만든 머신러닝 모델은 새 입력을 받을 때마다 답을 내놓습니다

대가 — 웹 프레임워크에서는 모델에 규칙이 쌓일수록 모델 클래스가 길어집니다. 머신러닝에서는 코드를 안 바꿔도 다시 훈련하면 답이 달라집니다. 그리고 두 뜻이 한 서비스에 같이 살면 「모델을 고쳤다」가 어느 쪽 이야기인지 헷갈립니다. 표·열 이야기가 같이 나오면 웹 프레임워크 쪽, 훈련 이야기가 같이 나오면 머신러닝 쪽입니다.

상세

이 절은 「모델」이 가리키는 물건들을 표 하나로 먼저 가릅니다. 그다음 웹 프레임워크의 모델과 머신러닝의 모델을 차례로 펼칩니다. 백엔드 개발자가 가장 자주 부딪히는 두 뜻입니다.

끝에서는 나머지 뜻들을 짧게 짚습니다. 마지막으로 대화에서 어느 뜻인지 알아채는 단서를 모읍니다.

모델이 가리키는 물건들

뜻마다 간추리는 대상이 다릅니다. 웹 프레임워크의 모델은 데이터베이스의 표 하나를 코드로 옮깁니다. 머신러닝의 모델은 예시 데이터에 숨은 경향을 식 하나로 줄입니다. 복잡한 실물을 코드나 숫자로 다룰 수 있게 옮겨 놓는다는 점은 같습니다.

맥락 모델 하나가 가리키는 것 예
웹 프레임워크 데이터베이스의 표 하나와 그 규칙을 맡는 코드 「글」 표를 옮긴 클래스
머신러닝 데이터로 훈련해 얻은 판정 기준 스팸 필터의 판정 기준
데이터 설계 데이터를 어떤 모양으로 담을지 정한 틀 관계형 모델 — 모든 데이터를 표로 담는 틀
3D 그래픽스 물체의 모양을 꼭짓점과 면으로 적은 데이터 3D 모델 — 게임 속 캐릭터 하나의 모양
설명의 틀 복잡한 동작을 규칙 몇 개로 줄여 적은 것 메모리 모델 — 여러 스레드가 메모리를 읽고 쓸 때의 규칙

웹 프레임워크와 머신러닝의 두 뜻이 서로 가장 멉니다. 그런데 둘은 한 서비스 안에서 함께 나타나기도 합니다.

웹 프레임워크의 모델

웹 애플리케이션의 코드를 셋으로 나누는 오래된 구분이 있습니다. MVC(Model-View-Controller, 모델-뷰-컨트롤러)입니다. 셋으로 나누면 화면을 바꿀 때 데이터 다루는 코드를 건드리지 않아도 됩니다.

셋은 이렇게 일을 나눕니다. 모델은 데이터와 그 데이터에 걸린 규칙을 맡습니다. 뷰는 사용자에게 보여 줄 화면을 맡습니다. 컨트롤러는 요청을 받아 모델과 뷰를 잇습니다.

sequenceDiagram
    participant 사용자
    participant 컨트롤러
    participant 모델
    participant 뷰
    사용자->>컨트롤러: 글 목록을 요청한다
    컨트롤러->>모델: 글 목록을 달라
    Note over 모델: 데이터베이스에서 읽는다
    모델-->>컨트롤러: 글 목록
    컨트롤러->>뷰: 이 목록으로 화면을 그려라
    뷰-->>사용자: 완성된 화면

그림에서 데이터베이스에 닿는 것은 모델뿐입니다. 컨트롤러는 모델에게 부탁만 합니다. 뷰는 넘겨받은 목록을 그리기만 합니다. 그래서 데이터를 어디서 어떻게 읽는지 바뀌어도 모델만 고치면 됩니다.

표 하나를 옮긴 클래스

웹 프레임워크에서 모델은 대개 데이터베이스의 테이블 하나를 파이썬 같은 언어의 클래스 하나로 옮긴 것입니다. 표에 무엇이 들었는지를 코드로 적어 두면 표를 만들고 읽고 쓰는 일은 프레임워크가 맡습니다.

이렇게 표와 클래스를 짝지어 주는 층을 ORM(Object-Relational Mapping, 객체 관계 매핑)이라고 부릅니다. ORM 이 있으면 데이터베이스에 보내는 SQL(Structured Query Language, 구조화 질의 언어) 문장을 직접 쓰지 않아도 됩니다.

짝은 세 겹으로 맞춰집니다.

코드 쪽 데이터베이스 쪽
모델 클래스 하나 표 하나
클래스에 적은 항목 하나 표의 열 하나
클래스로 만든 객체 하나 표의 행 하나

Django 에서 「글」 표를 모델로 적으면 아래와 같습니다. models.Model 을 물려받은 클래스를 Django 가 모델로 알아봅니다.

Python
class Post(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()

클래스 안의 두 줄이 표의 두 열이 됩니다. title 은 길이 상한이 있는 짧은 글자 열입니다. body 는 상한 없는 긴 글 열입니다.

이 모델로 글을 저장하고 세는 코드는 이렇습니다. 오른쪽 주석이 그 줄이 하는 일이나 내는 값입니다.

Python
p = Post(title="첫 글", body="안녕")
p.save()               # 표에 행 하나를 넣는다
Post.objects.count()   # 1

save 한 줄이 SQL 문장 하나로 바뀌어 데이터베이스에 갑니다. count 도 행 수를 세는 SQL 로 바뀝니다. 데이터베이스가 돌려준 숫자를 그대로 내놓습니다.

모델에 담기는 규칙과 표 변경

모델은 표의 모양만 옮기지 않습니다. 그 데이터에 걸린 규칙도 모델에 둡니다. 「제목은 비어 있으면 안 된다」나 「공개된 글만 목록에 나온다」 같은 것입니다.

이런 규칙을 비즈니스 로직이라고 부릅니다. 규칙을 모델에 모아 두면 여러 화면이 같은 규칙을 한 번씩 다시 적지 않아도 됩니다.

모델 클래스를 고치면 데이터베이스의 표도 그 모양에 맞게 바뀌어야 합니다. 이 변경을 적어 두고 차례로 적용하는 일이 마이그레이션입니다.

Django 가 부르는 이름

Django 는 MVC 의 세 이름 가운데 둘을 다른 일에 붙여 씁니다. Django 는 요청을 받아 무엇을 보여 줄지 고르는 함수를 뷰라고 부릅니다. MVC 로 치면 컨트롤러가 맡던 일입니다.

화면의 틀은 템플릿이라고 부릅니다. MVC 로 치면 뷰가 맡던 일입니다. 그래서 Django 는 자기 구조를 MTV(Model-Template-View, 모델-템플릿-뷰)라고 부릅니다.

아래 표가 같은 일을 두 쪽에서 무엇이라 부르는지 나란히 놓습니다.

하는 일 MVC 의 이름 Django 의 이름
데이터와 규칙을 맡고 데이터베이스와 닿는다 모델 모델
요청을 받아 무엇을 보여 줄지 고른다 컨트롤러 뷰
사용자에게 보일 화면을 그린다 뷰 템플릿

표에서 두 쪽의 이름이 같은 줄은 모델 하나뿐입니다. 데이터와 그 규칙을 맡고 데이터베이스와 닿는 쪽입니다. Rails 에서도 모델은 표 하나에 짝지어진 클래스입니다.

머신러닝의 모델

머신러닝은 판정 기준을 사람이 코드로 적는 대신 예시 데이터에서 뽑아내는 방식입니다. 손글씨 숫자를 알아보는 기준처럼 사람이 말로 다 적을 수 없는 기준을 다룰 때 씁니다.

그렇게 뽑아낸 판정 기준이 모델입니다. 입력을 넣으면 답을 내놓습니다. 메일 본문을 넣으면 스팸일 확률을 내놓는 스팸 필터가 한 예입니다. 이 모델은 사람이 스팸을 가려내던 판단을 예시 데이터에서 읽어 내어 식 하나로 줄인 것입니다.

식의 모양과 숫자

이 판정 기준은 식의 모양과 숫자로 적힙니다. 하나는 식의 모양입니다. 입력에 무엇을 곱하고 무엇을 더할지 정한 틀입니다.

다른 하나는 그 식에 들어가는 숫자들입니다. 이 숫자들을 파라미터라고 부릅니다. 식의 모양이 같아도 파라미터가 다르면 다른 모델입니다.

아래는 가장 작은 모델입니다. 식의 모양은 「입력에 w 를 곱하고 b 를 더한다」입니다. 파라미터는 w 와 b 둘입니다.

Python
w, b = 2.0, 1.0      # 훈련이 찾아낸 숫자
def model(x):
    return w * x + b
model(3)             # 7.0

실무에서 쓰는 모델은 식이 훨씬 깁니다. 파라미터도 수백만 개를 넘기도 합니다. 그래도 「식의 모양 + 숫자들」이라는 짜임은 같습니다.

훈련과 추론

훈련은 파라미터를 찾는 과정입니다. 처음에는 아무 숫자로 시작합니다. 답이 붙은 예시를 모델에 넣어 봅니다. 그리고 모델의 답이 정답과 얼마나 다른지 잽니다. 그 차이가 줄어드는 쪽으로 숫자를 조금씩 고치기를 되풀이합니다.

차이를 재는 식을 손실 함수라고 부릅니다. 차이가 줄어드는 방향으로 숫자를 고쳐 나가는 대표 방법은 경사 하강법입니다.

훈련이 끝나면 파라미터를 고정합니다. 그 뒤로 처음 보는 입력을 넣어 답을 받는 일을 추론이라고 부릅니다. 이때 받은 답이 예측입니다.

flowchart TD
    subgraph 훈련
        A["답이 붙은 예시"] --> B["파라미터를 조금씩 고친다"]
    end
    subgraph 추론
        C["처음 보는 입력"] --> D["모델"]
        D --> E["예측"]
    end
    B -->|숫자를 고정한다| D

그림처럼 두 단계는 떨어져 돕니다. 훈련은 예시를 수없이 되풀이해 넣으며 숫자를 고치는 일이라 오래 걸립니다. 추론은 고정된 숫자로 식을 한 번 계산하는 일입니다.

서버에서 만나는 머신러닝 모델

백엔드 개발자가 머신러닝 모델을 만나는 곳은 대개 추론 쪽입니다. 훈련이 끝난 모델은 식의 모양과 파라미터 값을 담은 파일로 저장됩니다. 서버는 시작할 때 이 파일을 메모리에 올립니다. 그 뒤로 요청이 올 때마다 추론을 돌려 답합니다.

이렇게 모델을 띄워 두고 요청에 답하게 하는 일을 모델 서빙이라고 부릅니다. 모델 파일은 파라미터 수만큼 커져서 올리는 데 시간과 메모리가 듭니다.

모델에는 코드와 다른 성질이 하나 있습니다. 새 데이터로 다시 훈련하면 코드는 한 줄도 안 바뀌어도 답이 달라집니다. 그래서 모델 파일에도 판 번호를 붙여 어느 모델이 지금 서비스에 올라 있는지 따로 기록합니다.

요즘 대화형 인공지능을 그냥 「모델」이라고 부르는 것도 이 뜻입니다. 대화형 인공지능은 글을 읽고 이어 쓸 말을 내놓도록 훈련한 모델입니다. 파라미터가 아주 많아서 대규모 언어 모델이라고 부릅니다.

그 밖의 모델

「모델」이 이름 끝에 붙는 말은 이 둘 말고도 많습니다. 대개 무언가를 간추려 옮겨 놓은 것이라는 뜻을 이어받습니다.

이름 무엇을 간추렸나
데이터 모델 데이터를 어떤 모양으로 담고 어떻게 잇는지 정한 틀
관계형 모델 데이터를 전부 표에 담아 다루는 데이터 모델
3D 모델 물체의 모양을 꼭짓점과 면으로 적은 데이터
메모리 모델 여러 스레드가 메모리를 읽고 쓸 때 무엇이 보장되는지 정한 규칙
액터 모델 메시지만 주고받는 실행 단위로 동시 계산을 설명하는 틀

웹 프레임워크의 모델은 관계형 모델 위에 서 있습니다. 모델 클래스를 적는 일이 곧 표 하나를 설계하는 일이기 때문입니다.

3D 그래픽스에서는 물체 자신을 기준으로 잰 좌표를 모델 좌표계라고 부릅니다. 물체의 모양은 이 좌표로 적어 둡니다. 장면에 놓을 때는 물체를 옮기고 돌리는 계산을 한 번 더 합니다. 그 계산을 숫자 표 하나에 담은 것이 모델 행렬입니다.

어느 뜻인지 가르는 단서

두 뜻은 한 서비스 안에서 만나기도 합니다. Django 애플리케이션에 추천 기능을 붙이면 모델 클래스를 모아 두는 models.py 의 모델과 추천을 내는 모델이 한 코드에 삽니다. 이때는 함께 나오는 말을 보면 대개 갈립니다.

함께 나오는 말 뜻
표 · 열 · 마이그레이션 · ORM · 뷰 · 컨트롤러 웹 프레임워크
훈련 · 추론 · 정확도 · 파라미터 · 데이터셋 머신러닝
개체 · 관계 · 표로 담는다 · 설계 단계 데이터 설계
꼭짓점 · 텍스처 · 좌표계 · 행렬 3D 그래픽스

단서가 모자라면 두 모델이 어떻게 만들어지는지를 떠올리면 됩니다. 아래 표가 두 뜻을 나란히 놓습니다.

웹 프레임워크의 모델 머신러닝의 모델
담는 것 표의 구조와 데이터 규칙 식의 모양과 파라미터
만드는 쪽 개발자가 코드로 적는다 훈련이 데이터로 만든다
답을 정하는 것 적힌 코드 훈련에 쓴 데이터
저장되는 곳 소스 코드 파일 따로 떨어진 모델 파일

관련 항목

웹 프레임워크 모델과 함께 요청을 나눠 맡는 부품

MVC · MTV · 뷰 · 컨트롤러 · 템플릿 · URL 설정

웹 프레임워크 모델을 데이터베이스와 잇는 장치

ORM · Django ORM · Eloquent · 액티브 레코드 · 쿼리셋 · 마이그레이션 · SQL · 테이블 · 열 · 행 · 외래 키

웹 프레임워크 모델에 담기는 설계 개념

비즈니스 로직 · 도메인 모델 · 엔티티 · 스키마 · 데이터 모델링 · 유효성 검사

모델을 표와 짝짓는 웹 프레임워크

Django · Rails · Laravel

머신러닝 모델이 거치는 처리 단계

머신러닝 · 훈련 · 훈련 데이터 · 손실 함수 · 경사 하강법 · 추론 · 예측 · 일반화 · 과적합

머신러닝 모델을 이루는 구성 요소

파라미터 · 가중치 · 편향 · 하이퍼파라미터 · 특성

머신러닝 모델의 하위 종류

신경망 · 대규모 언어 모델 · 선형 회귀 · 결정 트리 · 분류기

머신러닝 모델을 배포하고 운영하는 수단

모델 서빙 · 모델 레지스트리 · MLOps · 직렬화 · ONNX

이름이 겹치는 다른 모델

데이터 모델 · 관계형 모델 · 3D 모델 · 메시 · 모델 좌표계 · 모델 행렬 · 메모리 모델 · 액터 모델 · OSI 모델

다른 이름: model