2025. 6. 3. 13:42ㆍDart & Flutter
Flutter로 앱을 만들다 보면, 서버와 데이터를 주고받기 위해 꼭 알아야 하는 개념이 있어요. 바로 HTTP, REST API, 그리고 HTTP 상태 코드입니다. 또한, 데이터를 저장하고 불러오는 데에는 관계형 데이터베이스(RDBMS) 와 SQL에 대한 이해도 필요하죠.
이번 글에서는 이 다섯 가지 핵심 개념을 쉽고 자세하게 정리해보겠습니다.
1. HTTP란?
HTTP(HyperText Transfer Protocol)는 웹에서 클라이언트(주로 사용자)와 서버(데이터 제공자)가 요청(request)과 응답(response)을 주고받기 위한 통신 규약(약속)이에요.
예를 들어, 우리가 Flutter 앱에서 로그인 요청을 보낸다면:
- 앱이 HTTP 요청(Request)을 서버에 보내고,
- 서버는 HTTP 응답(Response)을 보내줘요.
2. HTTP 요청의 구조
HTTP 요청은 아래처럼 구성돼요:
| 구성 요소 | 설명 |
| URL | 요청할 주소 (ex: https://api.example.com/login) |
| Method | 어떤 작업을 할 건지 명령 (GET, POST 등) |
| Headers | 요청에 대한 부가 정보 (토큰, 콘텐츠 타입 등) |
| Body | 서버에 보낼 데이터 (주로 JSON 형태) |
3. HTTP 메서드 종류
| 메서드 | 용도 | 예시 |
| GET | 데이터 가져오기 | 게시글 목록 보기 |
| POST | 데이터 생성 | 회원가입, 로그인 |
| PUT | 데이터 수정 (전체) | 유저 정보 전체 수정 |
| PATCH | 데이터 수정 (일부) | 유저 닉네임만 수정 |
| DELETE | 데이터 삭제 | 게시글 삭제 |
4. REST API란?
REST는 “REpresentational State Transfer”의 줄임말로, 웹에서 **자원을 주소(URL)**로 구분하고, HTTP 메서드로 동작을 정의하는 방식이에요.
예를 들어, 게시글 데이터를 처리할 때 REST API는 이렇게 구성돼요:
| 동작 HTTP | Method | URL |
| 게시글 전체 조회 | GET | /posts |
| 게시글 작성 | POST | /posts |
| 게시글 하나 조회 | GET | /posts/1 |
| 게시글 수정 | PUT/PATCH | /posts/1 |
| 게시글 삭제 | DELETE | /posts/1 |
RESTful API의 특징:
- URL은 자원을 표현하고
- HTTP 메서드는 행위를 표현해요
- 서버와 통신할 때는 보통 JSON 데이터를 사용하고,
- Flutter에서는 http, dio, retrofit 같은 라이브러리로 요청을 보냅니다.
5. HTTP 상태 코드란?
서버는 요청을 처리한 뒤, 응답 결과를 숫자로 알려줘요. 이게 바로 HTTP 상태 코드입니다.
상태 코드는 3자리 숫자로 이루어져 있고, 앞자리에 따라 의미가 달라요.
✅ 상태 코드 분류
| 범위 | 의미 | 설명 |
| 1xx | 정보 | 거의 안 씀 |
| 2xx | 성공 | 요청이 성공적으로 처리됨 |
| 3xx | 리다이렉션 | 다른 주소로 이동 |
| 4xx | 클라이언트 오류 | 요청이 잘못됨 (내 잘못!) |
| 5xx | 서버 오류 | 서버에 문제 발생 (서버 잘못!) |
✅ 자주 쓰는 상태 코드
| 코드 | 의미 | 설명 |
| 200 OK | 요청 성공 | GET 요청에 대한 정상 응답 |
| 201 Created | 생성 성공 | POST 요청으로 리소스가 생성됨 |
| 204 No Content | 응답 없음 | 성공했지만 반환 데이터 없음 (삭제 등) |
| 400 Bad Request | 잘못된 요청 | 필드 누락, 형식 오류 등 |
| 401 Unauthorized | 인증 실패 | 로그인 필요 |
| 403 Forbidden | 접근 거부 | 권한 없음 |
| 404 Not Found | 없음 | URL이 잘못되었거나 리소스 없음 |
| 500 Internal Server Error | 서버 오류 | 예외 처리 실패, 서버 장애 등 |
6. 관계형 데이터베이스(RDBMS)란?
서버와 통신해서 받아온 데이터를 저장하고 가공하려면 데이터베이스가 필요해요.
그중에서도 가장 많이 사용하는 방식이 관계형 데이터베이스(RDBMS) 입니다.
관계형 데이터베이스는 데이터를 행(row)과 열(column) 형태로, 표처럼 저장해요.
📌 대표적인 RDBMS 종류
- MySQL
- PostgreSQL
- SQLite (Flutter에서 자주 사용!)
- Oracle, MSSQL 등
📌 데이터 구조 예시
예를 들어, users라는 테이블이 있다면 다음과 같은 구조예요:
| id | name | age |
| 1 | 조성은 | 22 |
| 2 | 김재범 | 24 |
| 3 | 이민형 | 27 |
- 테이블(table): users
- 열(column): id, name, age
- 행(row): 한 사람의 정보 (ex. 1 | 조성은 | 22)
7. SQL이란?
SQL(Structured Query Language) 은 데이터베이스에 명령을 내리는 언어입니다.
데이터를 조회하거나, 추가하거나, 수정하거나, 삭제할 때 사용해요.
✅ 대표적인 SQL 명령어
| 기능 | 명령어 |
| 데이터 조회 | SELECT |
| 데이터 추가 | INSERT |
| 데이터 수정 | UPDATE |
| 데이터 삭제 | DELETE |
8. SQL 사용 예제
📌 데이터 조회 (SELECT)
SELECT * FROM users;
→ users 테이블의 모든 데이터를 가져와요.
SELECT name, age FROM users;
→ 특정 컬럼만 가져오고 싶을 때 사용해요.
📌 데이터 추가 (INSERT)
INSERT INTO users (id, name, age) VALUES (4, '박민수', 28);
→ users 테이블에 새로운 사용자를 추가합니다.
📌 데이터 수정 (UPDATE)
UPDATE users SET age = 26 WHERE id = 2;
→ id가 2인 사람의 나이를 26으로 수정합니다.
📌 데이터 삭제 (DELETE)
DELETE FROM users WHERE id = 1;
id가 1인 사용자를 삭제합니다.
9. 왜 관계형 데이터베이스를 써야 할까?
- 데이터 무결성을 보장해줘요 (중복 제거, 일관된 형식 등)
- 복잡한 관계도 정규화를 통해 쉽게 다룰 수 있어요
- 검증된 기술이라 안정적입니다 (수십 년간 사용됨)
Flutter 앱에서도 sqflite, drift 등 SQLite 기반 라이브러리를 활용하면 로컬 DB 저장이 가능합니다.
10. 마무리
정리하면:
- HTTP는 클라이언트와 서버가 소통하는 방식이고,
- REST API는 HTTP를 활용해 서버 자원을 설계한 방법이며,
- HTTP 상태 코드는 요청 결과를 숫자로 알려주는 피드백이에요.
- 관계형 데이터베이스(RDBMS) 는 데이터를 표처럼 관리하는 구조이고,
- SQL은 데이터베이스에 명령을 내리는 표준 언어예요.
이런 개념들을 이해하면 서버와의 통신을 더 명확하게 처리할 수 있고, Flutter 앱을 더 안정적이고 확장 가능하게 만들 수 있어요!
'Dart & Flutter' 카테고리의 다른 글
| [Flutter] 병렬 처리와 스레드 이해 (Thread, Isolate, 레이스 컨디션) (0) | 2025.05.28 |
|---|---|
| [Flutter] 비동기 프로그래밍 핵심 개념 정리 (Observer, Pub/Sub, Event Loop) (1) | 2025.05.27 |
| [Dart & Flutter] 개발자를 위한 필수 개념 정리 (Git, 파일 입출력, TDD 등) (0) | 2025.05.20 |
| [Flutter] 함수형 프로그래밍(Functional Programming) (1) | 2025.05.14 |
| [Flutter] 객체지향 프로그래밍(OOP) (0) | 2025.05.14 |