본문 바로가기

앱개발10

DeepCheck 탄생 비화와 MVVM 아키텍처 설계 이 포스팅은 DeepCheck의 시작부터 완성까지의 여정을 기록하는 시리즈의 첫 번째 포스팅이다. 이 프로젝트는 어느 날 갑자기 떠오른 아이디어가 아니다. 오래된 경험에서 비롯된 문제의식과 다가올 미래를 예측하여 오랫동안 준비해온 결과물이다. 모든 것은 아주 단순한, 하지만 개발자로서 떨쳐낼 수 없는 질문 하나에서 시작 되었다. 왜 아이폰에는 쓸만한 하드웨어 점검 앱이 없을까? 오래된 경험, 새로운 기회를 보다개발자 커리어를 블루버드소프트 라는 곳에서 Windows CE 기반의 임베디드 장비들을 다루며 시작했다. 지금은 생소하게 들릴 수 있는 이름이다. 주로 PDA나 산업용 단말기 같은 기기들을 다루었다. 당시 주요 업무 중 하나는, 막 출고된 기기들의 하드웨어가 정상적으로 작동하는지 검증하는 테스.. 2025. 9. 11.
생명을 불어넣는 작업 : 재사용 가능한 UI 컴포넌트(Components) 제작 거대한 View를 잘게 쪼개는 것의 미학 시작하며 : 왜 View를 분리해야 하는가? 이전 포스팅까지의 여정으로 앱의 두뇌(ViewModel)와 심장(Service)을 모두 구현 했다. 로직과 UI의 지휘자 : 뷰모델(ViewModel)과 비동기 처리async/await와 @Published로 우아하게 상태를 관리하는 법시작하며 : 왜 '지휘자'가 필요한가? 이전 포스팅까지의 작업으로, 사진 데이터를 주면 분석 리포트를 뱉어내는 강력한 엔진(PhotoMetadataService)johjo.net 앱의 심장을 만들다 : 메타데이터 분석 서비스(Service) 구현ImageIO 프레임워크를 파헤쳐 사진의 비밀을 캐내다시작하며 : '실제 일'을 하는 녀석의 등장지난 포스팅에서 앱의 뼈대(Model)와 소통 규.. 2025. 9. 3.
로직과 UI의 지휘자 : 뷰모델(ViewModel)과 비동기 처리 async/await와 @Published로 우아하게 상태를 관리하는 법시작하며 : 왜 '지휘자'가 필요한가? 이전 포스팅까지의 작업으로, 사진 데이터를 주면 분석 리포트를 뱉어내는 강력한 엔진(PhotoMetadataService)을 만들었다. 이제 남은 것은 이 엔진을 UI와 연결하는 일이다. 하지만 여기서 많은 개발자들이 함정에 빠진다. View 코드 안에서 직접 서비스 로직을 호출하고, 상태를 관리하려는 시도를 하는 것이다. 이는 마치 레스토랑 홀 직원이 주방에 직접 들어가 요리하는 것과 같다. 결과는 엉망이 될 수밖에 없다. 그래서 ViewModel이라는 '지휘자' 혹은 '셰프'를 둔다. View(홀 직원)는 오직 ViewModel(셰프)에게 "손님이 사진을 골랐습니다"라고 주문만 전달한다. .. 2025. 9. 3.
앱의 심장을 만들다 : 메타데이터 분석 서비스(Service) 구현 ImageIO 프레임워크를 파헤쳐 사진의 비밀을 캐내다시작하며 : '실제 일'을 하는 녀석의 등장지난 포스팅에서 앱의 뼈대(Model)와 소통 규칙(Protocol)을 정의했다. 하지만 아직 앱은 아무일도 하지 못하는 빈 껍데기일 뿐이다. 이제 드디어, 이 뼈대에 살을 붙이고 피를 돌게 할 '심장', 즉 서비스(Service) 레이어를 구현할 차례다. Service는 우리 MVVM 아키텍처에서 '실제 일'을 하는 녀석이다. ViewModel로 부터 "사진 데이터 줄 테니 분석해줘"라는 요청을 받으면, 묵묵히 사진 파일을 파헤쳐 그 안에 숨겨진 비밀(메타데이터)을 캐내고, 우리가 정한 규칙(비즈니스 로직)에 따라 '원본성 점수'를 계산하여 최종 보고서(OriginalityReport)를 만들어내는 역할이다.. 2025. 9. 3.
데이터의 뼈대를 세우다: 모델(Model)과 프로토콜(Protocol) 정의 좋은 코드는 '무엇'을 담을지와 '어떻게' 소통할지를 먼저 정의한다. 시작하며 : '데이터'가 아닌 '모델'을 설계하는 이유이전 포스팅에서 프로젝트의 기반 공사를 마쳤다. 이제 실제 사진을 분석하고, 그 결과를 보여주는 코드를 작성해야 한다. 이때 가장 먼저 해야 할 일은 무엇일까? 바로 '데이터의 청사진'을 그리는 일이다. 이것을 '모델(Model) 설계' 라고 부르는데, 단순히 String, Int 같은 변수 뭉치가 아니라, 앱이 다루는 정보의 의미와 관게를 구조적으로 정의하는 과정이다. 예를 들어, '사진 분석 결과'는 무엇으로 구성되는가? '원본이 라는 증거'는 어떤 정보를 담아야 하는가? 이 청사진이 명확해야, 이후에 만들어질 모든 로직과 UI가 흔들림 없이 견고하게 세워질 수 있다. 이번 .. 2025. 9. 2.
집을 짓기 전 땅 다지기: 프로젝트 설정과 필수 유틸리티 좋은 앱은 잘 만든 AppError 와 Logger 에서 시작된다. 시작하며 : 왜 '기반 공사'가 중요한가?이전 포스팅에서 MetaLens 라는 앱의 청사진(기획과 아키텍처)을 그렸다.2025.09.02 - [app/metalens] - 메타렌즈 프로젝트 소개2025.09.02 - [app/metalens] - 바이브코딩을 위한 MetaLens 코딩 파트너 설정기 이제 본격적으로 코드로 집을 지을 차례다. 이제 몇번 프로젝트를 진행하다 보니 앱의 안정성과 확장성을 책임지기 위해서는 기초적인 설정들이 중요하다는 것을 깨달았다. 이번 포스팅에서는 기능 개발이라는 '인테리어'에 들어가기 전, 반드시 먼저 해야 할 '기반 공사'에 대해 다룬다. 구체적으로는 아래 3가지다. 글로벌 출시를 위한 완벽한 다국어 지.. 2025. 9. 2.
푸시 알림을 구현하며 겪은 설정 지옥 세이브푸드를 개발하면서 이 앱 기능 중 최고의 꽃은 푸시 알림(Push Notifications)이라고 생각했다. 사용자에게 보내지는 소중한 푸시 알림으로 냉장고 보관함에 다른 사용자를 초대하고, 유통기한이 얼마 남지 않았음을 알려야 하는 핵심 기능이라고 생각했기 때문이다. 푸시 알림을 구현하고 테스트해보려면 반드시 애플 개발자 프로그램(Apple Developer Program)에 가입되어야 한다. 개발자 프로그램 가입 후 웹과 엑스코드(Xcode)에서 간단한 설정만 하면 쉽게 구현할 수 있을 줄 알았다. 때문에 요구사항과 설계내역을 검토한 후 더 어려워 보이는 보관함의 사용자 초대부터 구현하며 인고의 시간을 보내고 있었다.인고의 시간이라고 표현한 이유는 무엇일까?바이브코딩으로 ChatGPT와 대화를 .. 2025. 6. 26.
회원가입에 진심인 사람입니다 나에게는 고질병이 하나 있다. 인터넷 아이디와 이메일을 주기적으로 변경 한다. 당시에 나를 조금 더 표현 할 수 있는 단어로, 또는 추구하는 목표로 키워드를 넣은 새로운 아이디를 사용하기 위해 가입 했던 모든 서비스를 탈퇴 했다가 재가입 하는 무서운 질병이다. 해외에서 만든 웹 또는 앱서비스들은 비교적 아이디변경과 이메일변경이 자유롭다. 그런데 유독 우리나라에서 탄생한 서비스들은 한번 만들면 변경을 하지 못하게 하거나, 탈퇴 후 1달, 3개월 등 저마다 정의되지 않은 주기로 회원가입을 다시 하지 못하게 한다. 기술 컨퍼런스에서 대용량 트래픽을 어떻게 처리 한다느니 요즘 유행은 이런 기술이라서 개발자들은 서둘러 사용하지 않으면 뒤쳐진다느니 썰을 푸는 사람의 소속회사가 가입 회원을 이메일 변경도 하지 못하는.. 2025. 6. 26.
세이브푸드 프로젝트를 시작한 이유 지난 3달여 기간 동안, 육아 휴직 후 앱 프로그래밍에 몰입했다. 육아 휴직 했으면 아기나 볼 것이지 왜 손을 놨던 프로그래밍에 미련을 버리지 못하고 다시 키보드 위에 손을 얹었을까? "급변하는 시대"라는 말을 듣기도, 사용하기도 많이 했지만 요즘처럼 "진짜 급변하는 시대"는 처음 경험 하고 있었고, 지금도 하고 있기 때문이다. (트럼프도 한목...!?) 이번 글의 주제인공지능의 도움을 받으면 혼자서도 서비스를 만들어 내는 일을 할 수 있는 시대다. 얼마 전 아이템 피벗을 했다는 이야기를 작성 했었는데, 이번 글에서는 피벗하고 시작한 프로젝트에 대해서 이야기를 해보려고 한다. 아이템 피벗 그리고 요즘 앱개발앱스토어에서 앱을 다운로드하고, 고객으로서 사용을 한다는 것은 참 쉬운 일이다. 그러나 앱을 개발하.. 2025. 6. 26.
아이템 피벗 그리고 요즘 앱개발 앱스토어에서 앱을 다운로드하고, 고객으로서 사용을 한다는 것은 참 쉬운 일이다. 그러나 앱을 개발하며 만들어 제품(기술적 결과물)으로서 서비스하고, 구독이나 인앱결제 같은 상품(거래의 결과물)을 곁들인다는것은 쉽지 않은 일이다. 챗지피티(ChatGPT), 클로드(Claude), 커서(Cursor) 등 인공지능 도구들이 하루가 다르게 빠르게 발전하고 있고 개발자들의 종말이 다양한 채널에서 언급될 만큼 무서운 속도로 프로그래밍하는 방법도 바뀌고 있는 것 같다. 혹자는 이런 인공지능 도구들의 도움을 받으면 쉽게 프로덕트(Product, 제품 또는 상품)를 만들 수 있다고 하는데 작년(2024년)만 해도 인정하지 않았지만 이제 인정할 수밖에 없는 시간이 온 것 같다. 그래도 앱은 서비스로서 사업적인 요소가 강.. 2025. 6. 26.