전체 글 26

[서울스팟] 네이버 지도 SDK를 활용한 위치 기반 마커 시스템 구현기

[서울스팟]에는 서울의 문화행사를 지도 기반으로 필터링하여 확인할 수 있는 기능이 있는데요, 국내 유저 대상의 서비스인 만큼, 보다 친숙한 UI와 지역 맞춤 기능을 고려해 Apple MapKit 대신 네이버 지도 SDK 를 활용했습니다. 이번 글에서는 해당 지도 기능을 개발하면서 적용했던 주요 기술적 포인트와 고민들을 정리해보려 합니다.1. '서울' 영역으로 지도를 제한하기 해당 서비스는 서울시 공공데이터 API 를 사용하고 있기 때문에 '서울'이라는 제한된 지역 내의 데이터를 다루고 있습니다. 서울 지역을 벗어난 영역에서는 데이터가 존재하지 않기 때문에, 지도 상의 카메라 이동 범위를 서울로 제한하도록 했습니다. 서울의 남서쪽과 북동쪽 꼭지점을 나타내는 두 개의 좌표를 통해 최소 경계 사각형(MBR)를..

[한장시리즈] 스유에서 데이터 주고 받기

SwiftUI에서는 선언형 방식으로 UI를 구성합니다. 상태 변화에 따라 뷰가 자동으로 다시 렌더링되는 구조를 갖고 있기 때문에, 상태를 어떻게 관리하고 전달하느냐가 매우 중요합니다. 이번 글에서는 SwiftUI의 대표적인 상태 관리 방식인 @StateObject, @ObservedObject, 그리고 @Published를 중심으로, 뷰 모델과 뷰 간의 연결 구조를 한번 정리해보겠습니다. SwiftUI에서의 상태 바인딩 구조: @StateObject, @ObservedObject, 그리고 @Published 의 역할 정리한장의 그림으로 그려보았는데요, 아래에 차례로 설명을 적어보도록 하겠습니다.구조 정리: MainView – SubView – ViewModel 관계 다음은 위 그림에서 그려둔 뷰와 뷰모델..

[서울스팟] 을 소개합니다👀

서울스팟 SeoulSpot서울스팟 SeoulSpot은 서울시 공공데이터를 활용하여 지역별·카테고리별 문화행사 정보를 제공하고, 지도 기반 주변 탐색 및 즐겨찾기 기능을 통해 사용자 맞춤형 문화생활 큐레이션을 지원하는 iOS 애플리케이션입니다.Features서울시 공공 문화행사 데이터 기반의 큐레이션 제공 (곧 다가오는 이벤트, 무료 이벤트, 미술 관련 이벤트 등)사용자의 현재 위치 주변 행사 탐색 (Naver Map 기반)카테고리, 지역, 요금, 대상 등 조건별 필터링 기능관심있는 문화행사를 즐겨찾기하여 개인 목록 관리Data Source서울 열린데이터 광장 서울시문화행사 API 를 활용하고 있습니다.매일 오후 9시에 업데이트되는 데이터를 기준으로 앱 실행 시 최신 데이터 여부 판단하여 업데이트 합니다...

바바디썸뷰: SwiftUI 가 화면을 그리는 방법

SwiftUI 템플릿으로 뷰파일을 생성하면 항상 var body: some View 가 등장합니다. 항상 이 안에 뷰를 그리곤 했는데... 이 body 변수는 결국 어떤 역할을 하는 걸까요? View 를 그리기 위한 도화지 같은 역할을 하는 요소이지 않을까? 막연한 생각만 가지고 있었는데요. 이 body는 왜 등장하고, 왜 some View라는 건지, 실제로 내부에서 어떻게 동작하는 건지, 이 body의 역할에 대해 정리해보려고 합니다.body 는 사실 View 의 프로토콜 규약바바디썸뷰의 정체를 알려면 해당 뷰 구조체의 프로토콜, 즉 View 를 확인해야 합니다.SwiftUI에서 화면을 구성하는 가장 기본 단위는 View라는 프로토콜을 따르는 구조체입니다. 이 View 프로토콜이 해당 변수 (body)..

[서울스팟] 개인정보처리방침

[서울스팟]은 사용자의 개인정보 보호를 매우 중요하게 생각하며, 관련 법령을 준수합니다. 본 앱은 다음과 같은 목적과 범위 내에서 최소한의 개인정보만을 수집 및 처리합니다. 1. 수집하는 개인정보 항목 [서울스팟]은 앱 이용 과정에서 아래와 같은 정보를 수집할 수 있습니다: • 기기 정보: 앱 사용 통계 및 오류 로그 수집을 위한 비식별 기기 정보 • 위치 정보(선택): 현재 위치 기반 행사 추천 기능 사용 시 • 이메일 주소(선택): 피드백 및 문의 대응 시 ※ 사용자의 명시적 동의 없이 개인정보를 수집하거나 제3자에게 제공하지 않습니다. 2. 개인정보의 이용 목적 • 위치 기반 행사 추천 • 앱 개선을 위한 통계 분석 • 고객 문의 대응 및 공지사항 전달 3. 개인정보 보유 및 이용 기간 • 수집 목..

[한장시리즈] DTO, Domain, Entity

안녕하세요, 노랑입니다! 오늘은 서버 통신 시에 자주 마주하게 되는 데이터 가공에 대해서 키워드를 중심으로 정리해보려고 합니다.DTO, Domain, Entity 가 바로 그것인데요. 각각의 개념은 비슷하면서도 역할이 명확하게 정해져있다고 하여, 간단한 예시를 통해 알아보려고 합니다. iOS 앱개발에 국한된 개념은 아니고, 여러 레이어를 가지는 소프트웨어 아키텍처에서 데이터 관리를 위해 사용하는 개념인것 같습니다. 1. DTO는 데이터 전송 객체로, 서버에서 받아온 데이터나 클라이언트로 전송할 데이터를 담는 역할을 합니다.주로 API 응답값을 처리할 때 Codable한 모델을 생성하여, 프로젝트에서 사용할 데이터만 추출하는 용도로 사용하는데요, 서버에서 받아온 JSON 데이터를 Swift 객체로 변환하거..

생각들 2025.03.17

Git Stash 사용법 알아보기

작업 중에 잠시 다른 브랜치를 들러서 확인할 일이 있다거나, 잠깐 하던 작업이 없던 시점의 상태를 다시 보고 싶다거나, 여태 하던게 방향이 잘못된거 같아서 다 날리지만 코드 자체는 일단 어디 두고 싶은... 때가 있지요, 그럴때 자주 사용하는게 Git Stash 일텐데요, 오늘은 Git Stash 의 사용법에 대해서 한번 정리해보려고 합니다! (왜냐하면 제가 그동안 pop 만 쓰다가 최근에 apply 를 배웠기 때문..!) 조금 뻔한 전개 같긴 하지만... 새삼 영어 단어 의미가 궁금해서 한번 찾아봤는데요.아래와 같은 뜻이라고 합니다. 임시로 하던 일을 잠시 치워놓는 느낌의 명령어로 알맞은 것 같네요. 터미널을 이용해 테스트 파일을 만들면서 기본 사용법을 한번 알아봅시다!  1. 변경 사항 저장:git ..

도구들/Git 2025.03.15

[한장시리즈] UICollectionViewCompositionalLayout 으로 중첩그룹 만들기

UIKit 의 UICollectionViewCompositionalLayout 으로 다양한 레이아웃을 구성하는 방법에 대해 정리해봅니다. 여러 앱을 이용하다보면 아래와 같은 화면 구성을 종종 마주칠 수 있을텐데요, 수직으로 스크롤되는 화면에 한 단락씩 다른 레이아웃을 가지고 있는 모습을 볼 수 있죠. [미식가를 위한 앱] 부분은 3개의 Cell 이 수직으로 쌓여있고, [라이브로 보는 스포츠 경기] 는 더욱 큰 크기로 하나의 Cell 만 화면에 나타나도록 구성되어 있는 것을 볼 수 있습니다.위와 같은 화면을 어떻게 구성할까? 라고 했을 때 두가지 방법 정도를 생각해볼 수 있었을것 같은데요,1. 배경을 ScrollView 로 하고 데이터에 맞게 CollectionView(or TableView) 들을 배치하..

[한장시리즈] RxSwift 주요 등장인물

요즘은 RxSwift 를 공부하고 있습니다. RxSwift 가 뭘까. 비동기적인 이벤트 (유저가 언제 어느 버튼을 누를지 몰라...!) 으로 인해 어떤 데이터에 변화가 생겼을 때, 그것을 감지하고 반영하도록 설계하는, Reactive한 프로그래밍을 위한 라이브러리라고 합니다. 특정 동작을 감지하여 그 이후 이어지는 행동들을 정의한다는 점에서는 기존 Swift 기능(Closure, GCD 등) 이 생각나는데요, 물론 이 기능들로도 대응할 수 있겠지만 기존 방법의 한계점을 보완하기 위해 만들어졌다고 하네요. 해당 데이터를 관찰(Observe)을 하고 있으면서, 데이터 흐름의 변화가 일어났을 때 관찰자(Observer)는 이 변화에 대해 전파를 받을 수 있고, 따라서 변화에 대한 어떤 동작을 진행할 수 있다..

UIView 의 frame, bounds

UIKit 을 이용하여 View 를 그리고, 각종 속성을 설정하다보면 frame, bounds 를 상당히 자주, 또 혼합해서 접하게 되는 것 같습니다. 배경색을 칠하거나, 사이즈나 위치를 지정할 때 필요한 요소들인데 매번 익숙한 방식으로만 코드를 적어왔던 것 같아서 오늘은 두 개념의 차이점에 대해 정리해보려고 합니다.일단 가장 쉬운 방법으로 확인해보겠습니다. 언제나 그렇듯 사실 Xcode 가 대략적으로 알려주고 있긴 합니다.CGRect 를 상속받고 있는 것을 보니 frame 과 bounds 는 뷰의 위치, 크기에 관련된 개념인 것 같네요.frame 은 superview 좌표계 내에서, bounds 는 스스로의 좌표계 내에서 해당 view 의 로케이션과 사이즈를 나타낸다고 합니다. 간단한 코드를 통해 확인..