Search

[2025 토스 NEXT] 구현 과제 안내

응시자 간의 형평성을 유지하여 공정한 시험이 운영될 수 있도록 지문에 제공된 정보 외 문제에 대한 안내를 드리지 않습니다. 이 점 양해 부탁드립니다. 의문점이 있다면 스스로 합리적인 가설을 세우고 계속 진행해주세요.

과제 파일 다운로드

2025_Toss_NEXT_iOS_Assignment.zip
240.4 KB

이미지 검색 앱 구현하기

김토스는 사용자가 원하는 아이콘을 빠르게 검색할 수 있는 iOS 앱을 만들고 있어요. 제공된 API와 함께, 검색어에 맞는 아이콘 목록을 안정적으로 보여주는 UI를 만들 차례예요.

문제

검색어를 입력하면 검색 API 를 호출해 결과를 받아오고, 그 결과를 리스트 형태로 화면에 표시하는 앱을 UIKit 또는 SwiftUI 중 편한 방법으로 구현해 주세요.
앱이 설치된 뒤 기본 제공된 ViewController를 그대로 활용하면서, 검색과 이미지 로딩, 상세 화면 이동까지 매끄럽게 동작하도록 만들어 주세요.

유의사항

Minimum Deployment Target 은 iOS 16.0 이에요.
외부 이미지 라이브러리(Kingfisher, SDWebImage 등)는 사용할 수 없어요.
“요구사항” 의 모든 안내를 꼼꼼히 확인하여 구현해 주세요.

요구사항

1. 서버 통신 및 API

API 호출 안내
지원자의 네트워크나 토스 서버와 무관하게 안정적으로 서버를 제공하기 위해서 리모트 서버를 사용하지 않아요.
URLProtocol 을 사용해 로컬 서버로 요청을 대신 처리하기 위해 SearchServer 의존성을 미리 만들어놨어요.
URLProtocol 설정이 제대로 되지 않으면 URLSession 에서 NSURLErrorCannotFindHost 에러가 내려오게 되니 주의해주세요.
URLSession 에 URLProtocol.tossHomeworkType() 을 적용해야 해요
URLSession.shared 를 사용하면 자동으로 적용돼요
URLSession 을 직접 만들어서 사용할 경우
URLSessionConfigurationprotocolClassesURLProtocol.tossHomeworkType() 을 등록해야 해요
자세한 사용법은 URLSessionConfiguration+SearchServer.swift 파일의 URLSessionConfiguration.registerTossHomeworkProtocolClasses() 함수를 참고해주세요.
API 스펙
검색 API 안내
이미지 API 안내

2. 이미지 리스트 UI

검색어를 입력하면 검색어에 맞는 이미지를 리스트 형태로 보여주세요.
검색어가 비어 있으면 전체 아이콘 목록을 보여주세요.
검색어는 대소문자 구분 없이 동작해야해요.
스크롤·빠른 이동·로딩 지연·실패 상황에서도 UI가 정상적으로 동작해야 해요.

3. 네트워크/비동기 처리

짧은 시간 내에 너무 많은 검색 요청이 오지 않도록 해주세요.
1초 내 서버 요청 횟수가 5회를 넘지 않아야 합니다.
요청 실패나 데이터 오류 시 사용자에게 명확히 알릴 수 있는 UI가 필요해요.

4. 이미지 로딩 및 디코딩

이미지 로딩 중과 실패 상태를 UI에 표시해야 해요.
이미지 로딩과 디코딩 중 앱 반응성이 떨어지지 않도록 처리해주세요.
외부 이미지 라이브러리(Kingfisher, SDWebImage 등)는 사용할 수 없어요.

5. 이미지 최적화 및 네트워크 효율성

이미지를 효과적으로 관리하고, 네트워크 리소스를 효율적으로 사용할 수 있도록 구조를 설계해 주세요.
네트워크 리소스를 효율적으로 사용하기 위해 캐시를 적용해주세요.

6. 화면 이동

리스트 셀을 탭하면 상세 화면으로 이동해야 해요.
상세 화면에는 선택된 아이콘의 이미지와 이름이 포함되어야 해요.

7. 코드 구조

유지보수·확장 용이하도록 의존성을 분리하고, 테스트가 가능한 구조로 설계해 주세요.

예시 UI

디자인은 상단에 검색바, 그 아래에 검색 결과를 리스트로 보여주는 구조를 갖춰 주세요.
상세 디자인은 자유지만, 버튼·텍스트·이미지가 겹치거나 잘리는 일이 없어야 해요.
아래 이미지는 예시입니다.

우대 사항

Git 을 활용하여 커밋 단위로 작업을 나눠주시면 좋아요.
접근성, 다양한 화면 크기 대응, 검색 UX 등을 고려하면 좋아요.
데이터 변화에 따른 UI 업데이트가 자연스럽게 이뤄지면 좋아요.

과제 제출 방법

1.
반드시 기한 내 제출해주세요. 기한 이후에 제출된 과제는 채점하지 않아요.
2.
tosshomeworkapp 폴더를 압축하신 후, 아이디_이름_구현과제.zip 형식으로 이름을 바꿔주세요.
a.
(예시: 홍길동, gildong@gmail.com → gildong_홍길동_구현과제.zip)
tosshomeworkapp <-- 이 폴더를 통째로 압축해주세요 ㄴ tosshomeworkapp.xcodeproj ㄴ tosshomeworkapp ㄴ tosshomeworkappTests ㄴ tosshomeworkappUITests => kimtoss_김토스_구현과제.zip
Plain Text
복사
3.
과제 전형 안내 메일 하단의 제출 링크를 클릭하세요.
4.
제출 화면에서 “Attach” 버튼을 눌러 압축 파일을 업로드하세요.
5.
“Submit” 버튼을 한 번만 눌러 제출을 완료하세요.
메모는 비워둬도 괜찮아요.
Dropbox/Drive 링크 제출은 불가해요.
6.
Thanks for your submission 메시지가 보이면 정상 제출된 거예요.
7.
별도로 과제제출 완료 안내 메일은 발송되지 않아요.
해당 문제에 대한 저작권은 주식회사 비바리퍼블리카에게 있습니다. 사유를 불문하고 해당 문제의 전부 또는 일부를 공개, 게재, 배포, 제3자에게 제공 하는 등의 일체의 누설 행위에 대해서는 저작권법에 의한 민·형사상의 책임을 질 수 있습니다. 아울러 이러한 누설 금지 행위에는 문제의 문구를 변형하여 그 취지를 알 수 있도록 하는 경우도 포함됩니다.