HTTP 통신으로 뉴스 불러오기 — http 패키지와 JSON 파싱 완전정복

2025. 5. 27. 14:40·Flutter/Flutter 뉴스 앱 만들기
728x90
반응형

뉴스 앱을 만들 때, 데이터를 어디선가 불러와야 한다.
그 어디선가는 보통 API 서버이고, 데이터를 JSON 형태로 내려준다.
그리고 Flutter에서는 http 패키지로 이 JSON 데이터를 가져와서 보여줄 수 있다.

이 글에서는 http 패키지를 사용하는 방법부터, JSON 파싱, 모델 클래스 구성까지 실전 예제로 정리해본다.


📦 http 패키지 설치하기

// pubspec.yaml
dependencies:
  http: ^0.13.5

설치 후에는 반드시 flutter pub get을 해줘야 한다.


🌐 예시 API 호출해보기

import 'package:http/http.dart' as http;
import 'dart:convert';

Future<void> fetchNews() async {
  final response = await http.get(Uri.parse('https://example.com/news'));

  if (response.statusCode == 200) {
    final data = jsonDecode(response.body);
    print(data);  // JSON 출력
  } else {
    throw Exception('뉴스 불러오기 실패');
  }
}

http 요청은 async/await 패턴을 활용하며, 결과는 JSON 문자열로 오기 때문에
jsonDecode()로 Map/List 구조로 변환해줘야 한다.


🧩 JSON을 모델로 변환하기

가져온 JSON을 바로 사용하면 에러가 생기기 쉽다.
따라서 데이터 구조에 맞게 모델 클래스를 만들어두는 것이 좋다.

예시 JSON

{
  "title": "오늘의 뉴스",
  "summary": "간단한 요약",
  "publishedAt": "2025-05-27T14:00:00Z"
}

모델 클래스 만들기

class News {
  final String title;
  final String summary;
  final DateTime publishedAt;

  News({required this.title, required this.summary, required this.publishedAt});

  factory News.fromJson(Map<String, dynamic> json) {
    return News(
      title: json['title'],
      summary: json['summary'],
      publishedAt: DateTime.parse(json['publishedAt']),
    );
  }
}

리스트로 받아올 경우

final List<dynamic> list = jsonDecode(response.body);
final newsList = list.map((e) => News.fromJson(e)).toList();

뉴스 API는 보통 JSON 배열로 여러 개의 뉴스 아이템을 한 번에 주기 때문에
위처럼 리스트 변환이 필수다.


🖥️ 화면에 데이터 뿌리기

FutureBuilder를 사용하면 비동기 데이터를 쉽게 UI에 반영할 수 있다.

FutureBuilder<List<News>>(
  future: fetchNewsList(),
  builder: (context, snapshot) {
    if (snapshot.connectionState == ConnectionState.waiting) {
      return CircularProgressIndicator();
    }
    if (snapshot.hasError) {
      return Text('에러 발생');
    }
    final news = snapshot.data!;
    return ListView.builder(
      itemCount: news.length,
      itemBuilder: (context, index) {
        return ListTile(
          title: Text(news[index].title),
          subtitle: Text(news[index].summary),
        );
      },
    );
  },
)

🔐 실무에서 유용한 팁

  • API 통신은 services/news_api_service.dart 파일로 분리하자
  • 모델 클래스는 models/news.dart에 따로 관리하자
  • 에러 메시지나 빈 상태를 보여주는 UI도 꼭 고려하자

🧘 마무리하며

http 패키지를 이용한 JSON 파싱은 뉴스앱 개발의 핵심 중 하나다.
단순한 기능처럼 보이지만, 이 과정을 구조화하면 앱의 완성도는 한층 올라간다.

데이터를 연결한다는 건, 사용자와 콘텐츠를 연결하는 일이다.

✍️ 이 글은 터미널 밖으로 나온 개발자의 Flutter 뉴스 앱 만들기 여정입니다.

728x90
반응형

'Flutter > Flutter 뉴스 앱 만들기' 카테고리의 다른 글

카테고리 탭 만들기 — 정치, 경제, 스포츠를 손쉽게 구분하기  (0) 2025.05.27
뉴스 상세 페이지 — 이미지, 본문, 공유 버튼까지 세련되게  (0) 2025.05.27
날짜별 뉴스 필터링 기능 구현하기  (0) 2025.05.27
무한 스크롤 구현 — 더 보기 없이 계속 내려보는 뉴스 피드 만들기  (0) 2025.05.27
뉴스 앱 UI 설계 — 카드형 vs 리스트형 어떤 게 더 좋을까?  (2) 2025.05.27
'Flutter/Flutter 뉴스 앱 만들기' 카테고리의 다른 글
  • 뉴스 상세 페이지 — 이미지, 본문, 공유 버튼까지 세련되게
  • 날짜별 뉴스 필터링 기능 구현하기
  • 무한 스크롤 구현 — 더 보기 없이 계속 내려보는 뉴스 피드 만들기
  • 뉴스 앱 UI 설계 — 카드형 vs 리스트형 어떤 게 더 좋을까?
코드를 걷는 사람
코드를 걷는 사람
devwanderer 님의 블로그 입니다.
  • 코드를 걷는 사람
    터미널 밖으로 나온 개발자
    코드를 걷는 사람
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Flutter
        • Flutter 게시판 앱 만들기
        • Flutter 뉴스 앱 만들기
        • Flutter 메모 앱 만들기
        • Flutter 캘린더 앱 만들기
        • Flutter 날씨 앱 만들기
      • Next.js
      • Ruby On Rails
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Flutter
    flutter디자인
    감성앱
    openweather
    table_calendar
    UI디자인
    flutter개발
    rails보안
    모바일앱개발
    다크모드
    메모앱
    ActiveRecord
    flutter앱개발
    개발블로그
    fluttertips
    코드를걷는사람
    flutterui
    flutter기초
    Firebase
    RubyOnRails
    UIUX
    백엔드개발
    flutter게시판
    Nextjs
    날씨앱
    정적사이트
    flutter상태관리
    캘린더앱
    뉴스앱
    북마크기능
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
코드를 걷는 사람
HTTP 통신으로 뉴스 불러오기 — http 패키지와 JSON 파싱 완전정복
상단으로

티스토리툴바