HTTP, REST API, 상태 코드부터 관계형 데이터베이스와 SQL까지

2025. 6. 3. 13:42Dart & 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 앱을 더 안정적이고 확장 가능하게 만들 수 있어요!