https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do
영화진흥위원회 오픈API
OPEN API 서비스 영화진흥위원회 영화관입장권통합전산망에서 제공하는 오픈API 서비스로 더욱 풍요롭고 편안한 영화 서비스를 즐겨보세요.
www.kobis.or.kr
키를 만들고

이렇게 뜸

위에 순위와 같다
https://codebeautify.org/jsonviewer
Best JSON Viewer and JSON Beautifier Online
Online JSON Viewer, JSON Beautifier and Formatter to beautify and tree view of JSON data - It works as JSON Pretty Print to pretty print JSON data.
codebeautify.org
json 데이터를 간편하게 확인할 수 있게 해주는 사이트

{
"boxOfficeResult": {
"boxofficeType": "일별 박스오피스",
"showRange": "20260427~20260427",
"dailyBoxOfficeList": [
{
"rnum": "1",
"rank": "1",
"rankInten": "0",
"rankOldAndNew": "OLD",
"movieCd": "20254121",
"movieNm": "살목지",
"openDt": "2026-04-08",
"salesAmt": "432784450",
"salesShare": "38.6",
"salesInten": "-700312300",
"salesChange": "-61.8",
"salesAcc": "20954778170",
"audiCnt": "41902",
"audiInten": "-67177",
"audiChange": "-61.6",
"audiAcc": "2025660",
"scrnCnt": "1114",
"showCnt": "4129"
},
{
...
}
]
}
}
위와 같은 json 데이터의 데이터 모델을 swift 로 만들면 아래와 같다.
import Foundation
// 최상위 응답
struct BoxOfficeResponse: Codable {
let boxOfficeResult: BoxOfficeResult
}
// boxOfficeResult
struct BoxOfficeResult: Codable {
let boxofficeType: String
let showRange: String
let dailyBoxOfficeList: [DailyBoxOffice]
enum CodingKeys: String, CodingKey {
case boxofficeType
case showRange
case dailyBoxOfficeList
}
}
// dailyBoxOfficeList 내부 객체
struct DailyBoxOffice: Codable {
let rnum: String
let rank: String
let rankInten: String
let rankOldAndNew: String
let movieCd: String
let movieNm: String
let openDt: String
let salesAmt: String
let salesShare: String
let salesInten: String
let salesChange: String
let salesAcc: String
let audiCnt: String
let audiInten: String
let audiChange: String
let audiAcc: String
let scrnCnt: String
let showCnt: String
enum CodingKeys: String, CodingKey {
case rnum
case rank
case rankInten
case rankOldAndNew
case movieCd
case movieNm
case openDt
case salesAmt
case salesShare
case salesInten
case salesChange
case salesAcc
case audiCnt
case audiInten
case audiChange
case audiAcc
case scrnCnt
case showCnt
}
}

uri 와 url 차이

RESTful하다는 것은 URL은 자원(데이터)을 나타내고, HTTP 메서드(GET, POST, PUT, DELETE 등)로 그 자원에 대한 행동을 표현하는 방식이다.

JSON의 데이터 구조 두가지 : 객체, 배열

원하는 데이터만 데이터모델로 만들기

| API | 설명 | 인증 | HTTPS | CORS |
| Cloudmersive | 이미지 캡션, 얼굴 인식, NSFW 분류 | apiKey | ○ | ○ |
| Discord | Discord용 봇를 만들고 Discord를 외부 플랫폼에 통합합니다. | OAuth | O | ? |
공공 데이터 활용 사례 모음
https://www.data.go.kr/tcs/puc/selectPublicUseCaseListView.do
공공데이터 포털
국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase
www.data.go.kr
제미나이 api 키
https://ai.google.dev/gemini-api/docs/api-key?hl=ko
Gemini API 키 사용 | Google AI for Developers
Gemini API 키를 가져와 5분 이내에 빌드를 시작하세요.
ai.google.dev
constraints 를 추가해서 table view가 화면에 꽉 차도록 설정한다.
아래 사진을 보면 네 개의 constraints 가 추가된 것을 확인할 수 있다.

func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
UITableViewDataSource 채택했을 때,
필수 메서드는 아니지만 section 을 지정하려면 사용해야 한다.
기본적으로 1 이 되어 있다.

필수 메서드 X
프로토콜에 있는 메서드의 앞에 optional 이 있으면 필수 메서드가 아니다.

필수 메서드 O
위처럼 optional 이 없고 밑에 Required 가 있으면 프로토콜을 채택하면 반드시 구현해야 하는 필수 메서드이다.

identifier
처음 TableViewCell을 만들면 identifier가 비어 있는 것을 알 수 있다.
입력하면 자동으로 myCell 이라고 변경된 것을 알 수 있다.


다운캐스팅 하기 전

다운캐스팅 한 후
위 처럼 다운캐스팅을 해야 myTableViewCell 형으로 바뀐다.
완성본

| iOS 프로그래밍실무_10주차_Open API 기반iOS앱 개발(3) (0) | 2026.05.11 |
|---|---|
| iOS 프로그래밍실무_10주차_Open API 기반iOS앱 개발(3) (0) | 2026.05.11 |
| 중간고사 (semi-openbook) 안내 (0) | 2026.04.20 |
| iOS프로그래밍_7주차_열거형(enum), 구조체(struct)클래스vs.구조체vs. 열거형 (2) | 2026.04.20 |
| iOS 프로그래밍실무_6주차_옵셔널 체이닝(Optional Chaining) (0) | 2026.04.13 |