데이터와 저장소
웹 서비스는 화면과 서버 로직만으로 구성되지 않습니다.
사용자가 생성하고 사용하는 모든 정보는 어딘가에 저장되어야 하며,
이 역할을 담당하는 것이 데이터베이스(Database) 입니다.
데이터와 저장소는 웹 서비스가 지속적으로 동작하기 위한 핵심 구성 요소입니다.
데이터베이스(DataBase)란?
데이터를 체계적으로 저장하고 관리하는 공간입니다.
웹 서비스에서는
회원 정보, 게시글, 댓글, 주문 내역, 결제 기록 등 모든 서비스 데이터가 데이터베이스에 저장됩니다.
데이터베이스는 단순한 파일 저장이 아니라 데이터의 검색, 수정, 삭제를 빠르고 안정적으로 수행할 수 있도록
전문적으로 설계된 시스템입니다.
관계형 데이터베이스(RDB)
관계형 데이터베이스는 데이터를 표(Table) 형태로 관리합니다.
각 테이블은 행(Row)과 열(Column)로 구성됩니다.
- 행(Row): 하나의 데이터 묶음
- 열(Column): 데이터의 속성
각 테이블은 서로 관계(Relationship)를 가질 수 있으며,
이를 통해 복잡한 데이터 구조를 표현할 수 있습니다.
대표적인 관계형 데이터베이스 관리 시스템은 다음과 같습니다.
- MySQL
- PostgreSQL
- SQLite
- Oracle

이 구조를 그림으로 표현하면 여러 개의 표가 서로 연결된 형태로 나타납니다.
각 표는 기본 키(Primary Key)로 고유한 행을 구분하고,
외래 키(Foreign Key)를 사용해 다른 테이블과 관계를 형성합니다.
이 구조 덕분에 데이터를 중복 없이 효율적으로 관리할 수 있습니다.
SQL 로 넘어가기 전에..
커서(Cursor)의 역할
SQLite에서 cursor는 데이터베이스에게 명령을 전달하고 결과를 받아오는 통로입니다.
데이터베이스에 연결하는 객체인 conn은 연결만 담당하고,
실제로 SQL 명령을 전달하는 역할은 커서가 수행합니다.
cursor = conn.cursor()
이 코드는 데이터베이스와 대화할 수 있는 창구를 생성하는 과정입니다.
커서가 하는 일
커서를 통해 다음과 같은 작업을 수행할 수 있습니다.
cursor.execute("CREATE TABLE ...")
cursor.execute("INSERT INTO ...")
cursor.execute("SELECT ...")
모든 SQL 명령은 반드시 커서를 통해 데이터베이스로 전달됩니다.
조회(SELECT) 작업의 경우 커서는 데이터베이스로부터 전달받은 결과를
파이썬 코드에서 사용할 수 있는 형태로 반환합니다.
rows = cursor.fetchall()
구조를 표현하면 다음과 같습니다.
파이썬 코드 → 연결 객체(conn) → 커서(cursor) → 데이터베이스
이 흐름에서 conn은 연결 통로이고, cursor는 실제로 명령을 전달하는 작업자 역할을 합니다.
커서는
데이터베이스와 프로그램 사이에서 명령과 결과를 중개하는 핵심 요소입니다.
데이터베이스 작업은 항상 커서를 통해 이루어진다는 점을 이해하는 것이 중요합니다.
SQLite
SQLite는 파일 하나로 동작하는 가벼운 관계형 데이터베이스입니다.
서버 설치가 필요 없으며 프로그램 내부에서 바로 사용할 수 있습니다.
소규모 프로젝트, 학습용, 모바일 앱, 데스크톱 앱에서 많이 사용됩니다.
SQLite 실습
1. 데이터베이스 연결
import sqlite3
# DB 연결 (없으면 생성됨)
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
이 코드는 example.db 파일에 연결하고,
데이터베이스에 명령을 전달할 수 있는 커서를 생성합니다.
2. 테이블 생성
# 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT
)
""")
users라는 테이블을 생성하고 id와 name 컬럼을 정의합니다.
3. 데이터 삽입
# 데이터 추가
cursor.execute("INSERT INTO users (name) VALUES (?)", ("Alice",))
cursor.execute("INSERT INTO users (name) VALUES (?)", ("Bob"))
# 변경 사항 저장
conn.commit()
데이터를 테이블에 저장하고 commit을 통해 실제 파일에 반영합니다.
4. 데이터 조회
# 데이터 조회
cursor.execute("SELECT id, name FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
저장된 데이터를 조회하여 콘솔에 출력합니다.
5. 연결 종료
conn.close()
모든 작업이 끝나면 연결을 종료합니다.
데이터 시각적 관리 도구
SQLite 데이터베이스 파일은 DB Browser for SQLite 같은 도구를 사용해
시각적으로 확인하고 수정할 수 있습니다.
이 도구를 사용하면 터미널 명령어 없이도 테이블 구조와 데이터를 쉽게 관리할 수 있습니다. (GUI, CLI...)
데이터 처리 흐름
웹 서비스 구조를 표현하면 다음과 같습니다.
사용자 → 프론트엔드 → 백엔드 → 데이터베이스 → 백엔드 → 프론트엔드 → 사용자
이 흐름에서 데이터베이스는 모든 서비스 정보의 중심 저장소 역할을 합니다.
마무리해보자면 웹 서비스는 다음 요소들로 구성됩니다.
- 사용자 인터페이스 (프론트엔드)
- 서버 로직 (백엔드)
- 통신 규칙 (HTTP / API)
- 데이터 저장소 (데이터베이스)
이 모든 요소가 유기적으로 연결되어 하나의 웹 서비스가 완성됩니다! ✨
'[오즈코딩스쿨] AI 헬스케어 > 🕸️ 웹서비스 기초 구조 이해' 카테고리의 다른 글
| 웹 서비스 기초와 구조 이해 정리 -1 (0) | 2025.12.23 |
|---|