[TIL] HTTP 통신 - 1편

김영광·2026년 1월 5일

오늘부터 flutter 숙련 주차에 들어섰다.
flutter에서 HTTP 통신을 배우며, 궁금한 부분들이 생겨 기록하고자 한다.

📖 GET, POST

API 통신에서 GET, POST는 가장 기본이 되는 동작이다.
GET과 POST는 데이터를 어디에 실어 보내는지와 통신의 목적에 따라 달라진다.

❓ 핵심 차이점

GET은 서버로부터 데이터를 가져오는 역할이다.
URL 뒤에 Query를 붙여보내며, 데이터가 전부 표기되어 있다.
주로 서버로부터 정보를 조회할 때 사용하며 브라우저가 결과를 기억해 캐싱이 가능하다.

반면, POST는 서버의 데이터를 수정하거나 새로 생성할 때 사용한다.
Body에 데이터를 숨겨서 전달하기에 보안성은 GET에 비해 상대적으로 높다.
하지만 데이터를 매번 새로 보내기에 캐싱은 불가능하다.

Gemini는 GET을 엽서에, POST를 택배 상자에 비유하고 있다.
엽서는 주소와 내용을 모두 볼 수 있고, 사용 공간이 적다.
택배 상자는 주소는 볼 수 있지만, 실제 물건(데이터)은 상자 안에 넣어서 보낸다.

❓ HTTP 통신의 한계

일반적으로 HTTP 통신은 단방향 통신이다.
클라이언트가 요청을 보내면 서버는 응답하는 방식이다.
서버는 데이터를 전달하는 역할이 전부이다.

실시간 채팅이나 코인 차트처럼 데이터가 즉시 필요한 경우에는 양방 통신이 필요하다.
클라이언트가 HTTP로 먼저 요청하면, 서버가 프로토콜을 HTTP에서 WebSocket으로 변경한다.
연결은 클라이언트, 서버 둘 중 하나가 끊을 때까지 유지된다.

❗ 비유로 한방에 정리

  • GET : 쿠팡에서 "카스타드" 검색
  • POST : 회원가입 완료 버튼 누르기, 결제하기
  • WebSocket : 카카오톡 메세지 수신, 업비트 실시간 코인 차트 및 가격 변동

📖 Uri.parse

❓ Uri.parse의 역할

Uri.parse.. 어디서 많이 본 것 같이 생겼다.
int.parse, double.parse와 비슷하게 생긴듯 하다.
그래서 찾아봤다.

Uri.parse의 파라미터도 문자열을 받는다.
parse 과정을 거치면 문자열은 다음과 같은 조각으로 분해된 객체가 된다.

  • scheme : https
  • host : google.com
  • path : /serach
  • queryParameters : {"q" : "dart"}

이렇게 객체화가 되면 uri.host처럼 코드로 쉽게 접근할 수 있다.

❓ 변환 실패 시

int.parse, double.parse와 똑같이 변환 실패 시 FormatException을 발생시킨다.
null을 반환하고 싶을 때는 마찬가지로 tryParse를 사용하면 된다.

null을 반환 시켜서 예외처리를 할건지, Exception을 반환시켜 예외처리를 할 건지는 선택사항인 듯 하다.
하지만, null을 반환 시킬 경우 다른 Exception을 처리할 수 있을 지는 조금 더 생각해봐야겠다.

📖 네트워크 통신 3대장 라이브러리

1️⃣ HTTP

Dart에서 직접 관리하는 가벼운 라이브러리이다.
군더더기 없이 필요한 기능만 제공한다.

매우 가볍고 배우기 쉽다는 장점이 있다.
또, 공식 패키지라 업데이트가 안정적이다.

2️⃣ Dio

HTTP 패키지가 부족했던 기능들을 전부 탑재한 라이브러리이다.
Interceptors, FromData, Global Config 등을 사용할 수 있다.

  • Interceptors : 요청 전후로 공통 로직을 끼워넣을 수 있다.
  • FromData : 이미지나 파일 업로드가 매우 간편하다.
  • Global Config : 기본 URL, 헤더, 타임아웃 등을 전역으로 한번에 설정할 수 있다.

단점으로는 HTTP보다 무거움, 메인테이너의 관리에 의존적인 것이 꼽힌다.

3️⃣ Retrofit

안드로이드 개발자에게 익숙한 방식을 Dart에 이식한 라이브러리로, Dio 위에서 동작한다.
코드 생성을 통해 API 호출 부분을 인터페이스로 정의한다.

profile
주니어 개발자

0개의 댓글