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에 저장하고 재실행 결과가 중복되지 않는지 확인합니다.

공식 근거