
앱 실행 과정과 RAM 부족 시 시스템 동작, 그리고 앱의 체감 속도에 영향을 미치는 요소에 대해 알아보자. 📝 목차1. CPU, RAM, 저장장치 역할2. 앱 실행시 구성 요소 동작 순서3. iOS에서 RAM 부족시 발생하는 시스템 동작4. 앱의 '체감 속도'에 가장 큰 영향을 미치는 요소 1. CPU, RAM, 저장장치 역할 1️⃣ CPU CPU는 컴퓨터의 핵심적인 부분으로 모든 계산과 명령어 처리를 담당한다. 프로그램 명령을 해석하고 실행하며, 연산(산술/논리 연산)과 제어(명령 실행 순서, 분기, 인터럽트 등)를 수행한다. 명령어 실행: 주어진 명령어를 해석하고 실행연산: CPU 내부의 연산 장치(ALU)를 사용하여 산술 및 논리 연산을 수행제어: 제어 장치(Control Unit)를 통해..
앱을 개발하다 보면 여러 플로우에서 동일한 화면을 사용하는 상황이 자주 발생한다. NavigationStack을 활용해, 공통된 화면은 재사용하면서도 각자의 플로우에 맞게 루트로 돌아갈 수 있도록 구현해보자.1. 상황 다음 두 플로우가 존재한다:비행기 직접 작성 후 날리기 플로우비행기 이어서 날리기(릴레이) 플로우 [1. 비행기 날리기 플로우와 2. 비행기 이어서 날리기 플로우]에서 같은 화면인 비행기 작성하는 화면을 플로우에서 공유하고 있다.최종적으로 "홈 화면으로" 버튼을 누르면 각 플로우에 해당하는 루트 뷰로 돌아가게 하고 싶다. 이걸 어떻게 Navigaion Stack으로 구현할 수 있을까? 위의 상황을 뷰 이름으로 정리해 보자. FlyAnimationView에서 "홈 화면으로" 버튼을 누르면,..

async & await을 알아보면서 콜백지옥을 어떻게 해결하는지 이해해 보자.콜백 지옥을 알아보기 전 클로저를 잘 모른다면 참고해도 좋다. [Swift] - 클로저(Closure)iOS 면접 준비를 위한 3탄이다. Swift에서 중요한 개념인 클로저에 대해 알아보자. - 아래 링크 참고 더보기https://github.com/JeaSungLEE/iOSInterviewquestions질문 리스트1. Swift에서 클로저(Closure)란 무엇이며steelbeartaeng2.tistory.com 1. 콜백 지옥 completion handler를 사용한 예시를 하나 생각해 보자. 이렇게 completion handler를 사용한 함수가 두 개일 때 doubleNumber를 실행하고 값이 있는 경우에만 ..

개인 앱 프로젝트를 진행하는데 서버와 통신이 필요한 기능이 있고, 구현해야하는 기간이 짧았다.여기서 직접 서버를 구축하고 운영하는 것은 시간과 비용, 그리고 유지보수 부담이 된다고 판단하여 Google Firebase를 백엔드로 채택하게 되었다.1. Firebase 프로젝트 만들기 Firebase | Google's Mobile and Web App Development Platform개발자가 사용자가 좋아할 만한 앱과 게임을 빌드하도록 지원하는 Google의 모바일 및 웹 앱 개발 플랫폼인 Firebase에 대해 알아보세요.firebase.google.com Firebase 홈페이지에서 프로젝트 만들기를 해준다. Firebase에서 AI 지원해 주는 건데 나는 사용하도록 했다. Firebase를 쓰..

NavigationStack에서 화면 전환을 구현할 때 일반적으로 NavigationLink를 많이 사용하는데, 이 컴포넌트는 전환 대상인 뷰를 미리 생성하는 방식이다. 아직 화면 전환을 하지 않았더라도 다음 뷰가 이미 메모리에 로드된 상태가 된다. 내가 구현한 화면에서는 전환 대상 뷰 내부에 무거운 연산과 네트워크 요청이 포함되어 있었고, 이로 인해 초기 진입 시 뷰 빌드에 시간이 오래 걸리며 성능 저하가 발생하는 문제가 있었다. 실제로 화면 전환을 하지 않아도 해당 뷰가 생성되기 때문에 불필요한 자원 낭비가 발생했던 것이다. 이러한 문제를 해결하기 위해, 해당 뷰가 실제로 필요할 때에만 생성되도록 LazyView를 적용하게 되었다.NavigationLink의 동작 방식에 대해 이해하고 LazyView..

프로젝트를 진행하면서 깃헙에서 충돌이 자주 발생했었다. 만약 팀원 A가 파일 추가하고, 팀원 B가 설정을 변경했을 때 둘 다 .xcodeproj 파일에 영향을 주어 충돌이 발생했다.또한 팀원이 프로젝트 설정을 변경했을 때 .pbxproj 파일은 XML 형식으로 나타나서 PR 리뷰를 하기 어려운 문제가 있었다. 추가적으로, 프로젝트에서 CocoaPods로 의존성 관리를 했지만, 팀원이 CocoaPods 사용 중인 것을 깜빡하고 SPM을 사용하면 두 의존성 관리 도구가 충돌해서 오류가 발생하는 상황도 있었다. 정리하자면 다음과 같은 문제가 있었다. xcodeproj 충돌 발생.pbxproj 파일의 코드 확인 어려움spm과 cocoapods 충돌 발생이 문제들을 해결하기 위한 방법으로 Tuist라는 툴을 알게..

ChatGPT와 대화할 수 있는 앱을 만들어보고 싶어서 서버를 구축해보려고 한다. AI를 직접 만들어서 적용하기에는 너무 공부할 내용이 많아져서 일단 ChatGPT를 사용해서 AI 모델을 앱에서 사용하는 방법을 알아보자.1. 서버 구축 배경 API 키를 PC에서 요청할 때마다 사용해야 하는데, 이 키가 유출되면 매우 위험하다. 왜 유출되면 위험할까?→ API 키가 유출되면 누구나 이를 이용해 API를 무단으로 사용할 수 있으며, 과금이 발생하거나 서비스가 악용될 위험이 있기 때문이다. 그래서 iOS에서 직접 GPT 서버에 요청하지 않고, iOS와 GPT 서버 사이에 중간 서버를 두는 방법을 택하려고 했다.이렇게 하면 iOS에서 API 키를 관리하지 않고, 중간 서버에서 API 키를 관리해 더 안전해진다...

이 블로그는 팀원 중 한명인 찢다님 의 도움을 받아서 구현하였습니다. 해당 블로그에서는 개발 중인 프로젝트에서 API 서버와 소켓 서버를 모두 구현하면서 발생한 두 서버 간 인증 로직 상충 문제를 해결하는 과정을 다룬다.1. 문제 파악 1️⃣ 채팅을 보내던 중 사용자 인증 오류가 발생한 경우 채팅을 3개 보냈을 때, 첫 번째와 두 번째 메시지는 정상적으로 전송되었지만, 세 번째 메시지는 401 오류로 인해 전송이 실패하는 경우가 있다.이때, 이는 네트워크 오류가 아니라 사용자 인증 실패로 인해 발생한 문제다. 하지만 사용자는 인증 오류를 인지하지 못한 채, 보낸 메시지가 순서대로 정상적으로 도착할 것이라고 예상한다. 그러나 실제로 소켓 서버에는 첫 번째와 두 번째 메시지만 전달되었고, 세 번째 메시지를..