WEB-BE-02 · 데이터베이스와 SQL
데이터베이스는 서비스가 다시 실행된 뒤에도 필요한 상태를 보존하고 여러 데이터를 정해진 구조와 규칙으로 관리합니다. 작은 데이터는 파일로도 저장할 수 있지만, 조회·관계·동시 변경·무결성을 다뤄야 하면 데이터베이스가 적합합니다.
대시보드의 원본 분개는 파일에 넣어 읽기만 해도 됩니다. 그러나 누가 언제 어떤 전표에 검토 메모를 남겼는지 계속 보관하고 다른 PC에서 다시 조회하려면 저장소가 필요합니다. 데이터베이스의 한 행은 메모 한 건, 열은 작성자·전표번호·내용·시각 같은 항목입니다.
테이블과 키
메모 앱에서 사용자와 메모를 분리하면 다음처럼 표현할 수 있습니다.
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
CREATE TABLE memos (
id INTEGER PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES users(id),
content TEXT NOT NULL,
created_at TEXT NOT NULL
);| 용어 | 의미 | 위 예시 |
|---|---|---|
| 테이블 | 같은 구조의 데이터를 모은 단위 | users, memos |
| 행 | 한 건의 데이터 | 메모 한 건 |
| 열 | 각 데이터가 가진 항목 | content, created_at |
| 기본키 | 한 행을 고유하게 식별 | id |
| 외래키 | 다른 테이블의 행을 참조 | memos.user_id |
사용자 한 명이 여러 메모를 가질 수 있으므로 users와 memos는 1:N 관계입니다. 관계형 데이터베이스는 1:N만을 뜻하지 않으며, 테이블과 키·제약조건을 이용해 데이터의 관계와 무결성을 표현합니다.
SQL로 읽고 쓰기
SELECT id, content, created_at
FROM memos
WHERE user_id = ?
ORDER BY created_at DESC;
INSERT INTO memos (user_id, content, created_at)
VALUES (?, ?, ?);SELECT는 조회, INSERT는 생성, UPDATE는 변경, DELETE는 삭제에 사용합니다. ?는 실행할 때 별도로 전달할 값의 자리이며 문자열을 SQL에 직접 이어 붙이지 않습니다.
분리된 테이블의 값을 함께 읽을 때는 JOIN을 사용합니다.
SELECT memos.id, users.name, memos.content
FROM memos
JOIN users ON users.id = memos.user_id;SQLite에서 확인할 내용
이 과정은 별도 데이터베이스 서버 없이 파일 하나로 사용할 수 있는 SQLite를 사용합니다. 파일을 직접 편집하지 않고 애플리케이션과 SQL을 통해 읽고 씁니다. 외래키 제약 사용 여부, 데이터 파일 경로와 실행마다 새 DB를 만드는지 기존 DB를 사용하는지를 확인합니다.
- 화면의 ID가 데이터베이스의 어떤 기본키와 연결되는가
- 이름이나 행 순서 대신 안정적인 ID로 테이블을 연결하는가
- 필수값·고유값·참조 관계를 애플리케이션뿐 아니라 DB 제약으로도 보호하는가
- 조회 결과의 순서가 필요하면
ORDER BY를 명시하는가 - 삭제·수정 전에 대상 행과 영향 범위를 확인하는가
1-03 · 검토 결과 저장하기에서는 검토 결과를 SQLite에 저장하고 재실행 결과가 중복되지 않는지 확인합니다.
공식 근거
- SQLite · SQL 문법 — SQLite가 지원하는 SQL 문장
- SQLite · 외래키 지원 — 테이블 사이의 참조 무결성
- SQLite · 쿼리 계획 — 조회 조건과 인덱스를 이용한 데이터 탐색