Flutter

[Flutter] 네이버 오픈 API를 사용한 책검색 앱

mjjayce 2025. 4. 15. 18:49

MVVM 방식, 네이버 오픈 API를 사용한 아주 간단한 앱을 구현했다.

복잡한 기능은 모두 빼고, 위 두 가지 기능의 실제 사용에 집중했다.

 

사용한 패키지: flutter_riverpod, http

 

 

결과화면

 

페이지 하나로 구성된 앱으로, 검색어를 입력하면 네이버 오픈 api 검색 기능을 이용해 책을 검색한다.

검색결과는 그리드뷰 리스트로 출력되며, 이미지만 표시된다.

 

파일 구조

 

 

book.dart

class Book {
  final String image;

  Book({required this.image});

  Book.fromJson(Map<String, dynamic> json) : this(image: json["image"]);

  Map<String, dynamic> toJson() => {"image": image};
}

네이버 API가 제공하는 정보 중 이미지만 사용할 예정이기에, class Book 내에 image 속성만 담았다.

 

 

book_repository.dart

import 'dart:convert';

import '/data/model/book.dart';
import 'package:http/http.dart';

class BookRepository {
  Future<List<Book>?> search(String query) async {
    try {
      Client client = Client();
      Response result = await client.get(
        Uri.parse(
          'https://openapi.naver.com/v1/search/book.json?query=$query&display=30',
        ),
        headers: {
          'X-Naver-Client-Id': '미리 발급받은 Id 입력',
          'X-Naver-Client-Secret': '미리 발급받은 Secret 입력',
        },
      );
      final json = jsonDecode(result.body);

      if (result.statusCode == 200) {
        return List.from(json['items']).map((e) => Book.fromJson(e)).toList();
      }
      return null;
    } catch (e) {
      print(e);
      return null;
    }
  }
}

api에 검색어를 포함한 url의 결과를 요청하면서, 필요한 인증 정보를 함께 보낸다.

Get요청 성공 시 응답코드 200이 반환되는데, 이 코드(statusCode)를 사용해 성공여부를 판단한다.

 

참고:

https://developer.mozilla.org/ko/docs/Web/HTTP/Status/200

 

200 OK - HTTP | MDN

HTTP 200 OK 는 요청이 성공했음을 나타내는 성공 응답 상태 코드입니다. 200 응답은 기본적으로 캐시 가능합니다.

developer.mozilla.org

 

Get 요청 성공 시 결과값(json String 타입) jsonDecode로 변환한 값을 사용해 List<Book> 의 형태로 반환한다.

home_page.dart, 

home_view_modle.dart 가 해당 리스트를 사용하여 화면에 결과를 출력할 수 있다.