전체 글

전체 글

    MVC, MVVM, Clean Architecture 정리

    MVC, MVVM, Clean Architecture 정리

    iOS에서 자주 사용되는 아키텍쳐 패턴들에 대해 어렴풋이 알고 있던 지식들을 정리하고, 부족한 부분들을 학습하기 위해 작성한 글로 개인적인 생각이 많이 포함되어 있습니다.틀린 내용이나 지적할만한 부분은 댓글로 남겨주시면 감사하겠습니다! 아키텍쳐 패턴이 필요한 이유 혼자서 개발할 땐 코드를 어떻게 짜든 크게 문제되지 않는다.하지만 회사를 비롯해 여러 사람들과 함께 대규모 어플리케이션을 개발하다보면 비효율이 발생하고 이는 생산성 저하로 이어질 것이다.팀원마다 코드 작성 방식이 다르다면 일관성 없는 코드 구조가 될 가능성이 높고, UI와 비즈니스 로직이 강하게 결합된 코드가 작성될 우려도 있다. 일관성 없는 코드 구조는 어떤 문제가 발생할까?남이 작성한 코드를 수정하기 위해서 어디를 고쳐야할 지 찾기 위해 많..

    네이버 부스트캠프 웹・모바일 9기를 마치며

    네이버 부스트캠프 웹・모바일 9기를 마치며

    부스트캠프, 소중한 기억을 기록하며2024년 12월 6일, 최종 프로젝트 발표와 수료식을 끝으로 부스트캠프에서의 여정이 마무리되었다.이 소중한 기억들이 휘발되기 전에 기록으로 남겨 오래오래 간직하고자 한다. 부스트캠프에 지원하기 전의 나나는 부스트캠프 이전까지 어떠한 교육 과정도 수강한 적이 없었다.iOS에 대해 아는 것이 거의 없었고, 주변에 iOS 개발자도 없어 물어볼 사람조차 없었다.어떻게 학습해야 할지, 무엇을 학습해야 할지 막막한 상태에서 그저 무작정 프로젝트를 진행하며 iOS 개발을 해왔다. 그리고 혼자서 학습하는 요령이 생겼고, 개발도 꽤나 할 수 있게 되었다.하지만 시간이 지나며 문득 이런 생각이 들었다. • ‘iOS 개발자로 취업하려면 어느 정도 수준이 되어야 할까?’• ‘나는 지금 어느..

    네이버 클라우드 서버 인스턴스 만들기

    네이버 클라우드 서버 인스턴스 만들기

    부스트캠프 최종 프로젝트를 진행하며 서버 개발을 담당하게 되었는데, 한번도 해본 적이 없어 막연한 두려움이 있었습니다.혹시 다음 기수분들이나 본인처럼 서버 경험이 없는 분들에게 도움이 되었으면 싶어 작성해봅니다.아 참고로 서버 비용은 한달에 약 8만원(인스턴스, public IP) 정도 나왔어요😅 서버 인스턴스를 만드려면 서버를 띄울 VPC가 먼저 있어야 한다.VPC란?Virtual Private Cloud의 약자로, 클라우드 컴퓨팅 환경에서 사용자가 정의하고 관리할 수 있는 격리된 네트워크 영역을 뜻한다.자세한 설명은 네이버 클라우드 VPC 링크 참고VPC 생성VPC와 Classic 두가지 모드가 존재하는데, 좀더 다양한 설정을 할 수 있는 VPC로 해보려고 한다.서브넷 생성그 다음은 서브넷을 만들어..

    nohup 명령어를 사용해도 서버가 꺼지는 문제

    nohup 명령어를 사용해도 서버가 꺼지는 문제

    리눅스 환경에서 서버를 백그라운드에서 실행시켜놓기 위해 nohup 명령어를 사용했다.하지만 자꾸 서버가 꺼지는 문제가 발생했고, 그럴 때마다 수동으로 다시 실행시켜주었다.하지만 이대로면 불침번을 서가며 서버를 켜야할 것 같아 문제 해결에 나섰다.Vapor 가 문제?가장 먼저 의심했던건 애석하게도 Vapor 프레임워크였다.분명 Node.js 서버를 nohup node main.js & 명령어를 통해 백그라운드에서 실행해두었을 땐 멀쩡했는데, Vapor 서버로 바꾸고 나서부터 이런 일이 발생했다고 생각해 Vapor를 의심했다.하지만 구글링도 해보고 vapor run 명령어에 관련 옵션이 있는지 문서도 찾아보았지만 별다른게 없었다.터미널 강제종료그 다음 의심한건 나의 터미널이다.다시 서버를 구동시키기 위해 터..

    Tuist 없이 모듈 만들기 with DemoApp

    Tuist 없이 모듈 만들기 with DemoApp

    모듈화는 Tuist가 있어야만 할 수 있을까요? 그렇지 않습니다. Tuist나 XCodeGen 과 같은 모듈화를 도와주는 도구들도 코드나 yml을 아래에서 설명할 형태로 바꿔주는 것이에요ㅎㅎ 그렇기 때문에 도구 없이도 모듈화를 할 수 있어야합니다. Tuist없이 모듈을 하나 만들어보겠습니다. 현재 모듈 구조는 아래와 같습니다. 여기서 TestFeature 라는 모듈을 하나 만들어 볼거에요.File - New - Project 를 눌러줍니다.그리고 Framework(Dynamic Framework)를 골라줍니다.모듈명을 설정하고Add to, Group을 xcworkspace 를 지정해 워크스페이스에 들어가도록 설정하고 create를 눌러 모듈을 생성합니다.짜잔 모듈이 생겼어요.이 헤더 파일을 objc와 브..

    네이버 클라우드 VPC 서버에 연결이 되지 않는 문제

    네이버 클라우드 VPC 서버에 연결이 되지 않는 문제

    WebRTC 시그널링 서버를 배포하기 위해 네이버 클라우드 서비스를 사용해보았다.하지만 서버의 public IP로 핑도 안나가고, 클라이언트에서 연결도 안되는 문제가 발생했는데, 해결한 과정을 간단하게나마 기록해보려고 한다. 우선 아래처럼 서버로 핑을 날려보아도 응답이 오지 않았고, ip를 잘못 입력했나싶어 이것저것 바꾸어보았지만 전부 실패했다. 천천히 생각해보기그리고 처음으로 돌아가보기로 생각했고, 서버에 핑은 나가지만 타임아웃이라는건데 왜 응답을 주지 않지? 방화벽에 막히는게 아닐까? 라는 생각이 들었다.그래서 네이버 클라우드 문서를 찾아보며 구조를 이해해보았다.그리고 아래 그림과 같이서브넷의 접근을 관리하는 NACL과 서브넷 내에 있는 서버에 접근을 관리하는 ACG가 존재한다는 걸 알게 되었다.네이..

    Swift Concurrency - Sendable

    Swift Concurrency - Sendable

    Swift6부터 Sendable 관련 경고나 에러가 너무 많이 뜨더라구요.Concurrency도 모르고 Sendable도 모르는데..!그래서 Sendable 애플 공식문서와 swift docs를 읽고 감을 익혀보려고 합니다.먼저 애플 공식문서부터 읽어볼게요! 애플 공식문서 링크: https://developer.apple.com/documentation/swift/sendableSwift docs 링크: https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/#Sendable-TypesSendable 이란?protocol Sendable 데이터 레이스 위험(a risk of data races) 없..

    Swift Concurrency - Task

    Swift Concurrency - Task

    Swift6가 나오면서 컴파일 단계에서 동시성 문제를 강하게 잡더라구요.그래서 더 이상 Swift Concurrency 공부를 미룰 수 없겠다 싶어 차근차근 학습해보려고 합니다.오늘은 Task에 대해서 공식문서와 함께 알아볼거에요. Task 공식 문서: https://developer.apple.com/documentation/swift/taskTask 란?비동기적인 작업의 단위(A unit of asyncchronous work) 입니다.@frozen struct Task where Success : Sendable, Failure : ErrorOverview 개요작업(Task)는 생성 직후에 바로 실행될 수 있으며, 명시적으로 시작하거나 예약할 필요가 없습니다.Tasks can start runnin..

    Swift Task 내에서 weak self를 붙여야 하는가

    Swift Task 내에서 weak self를 붙여야 하는가

    피어 세션을 진행하며 동료가 겪었던 트러블 슈팅을 공유 받았었습니다.Task 블럭 내에서의 self 캡쳐와 관련된 내용이었는데, 당시 Concurrency에 대해 잘 몰라 이해가 가지 않았고 이해하기 위해 직접 실험해보았습니다!weak self 를 하는 이유Swift에서의 이스케이핑 클로저에서 self에 접근하려고 하면 명시적으로 self를 선언하라는 컴파일 에러가 아래와 같이 발생합니다.이는 self의 프로퍼티로 할당된 클로저가 self를 캡쳐하면 클로저와 self 인스턴스 사이에 순환참조가 일어나 메모리 누수가 발생할 수 있는 경우를 방지하기 위해 Swift에서 띄워주는 컴파일 에러입니다.이러한 문제를 해결하기 위해 이스케이핑 클로저에서는 self를 약하게 캡쳐해 순환 참조를 방지하도록 합니다. Ta..

    네이버 부스트캠프 웹・모바일 9기 멤버십 과정 2차 학습스프린트 회고

    네이버 부스트캠프 웹・모바일 9기 멤버십 과정 2차 학습스프린트 회고

    서론추석 연휴 동안 인터미션 기간을 보내고 5, 6, 7, 8주차를 마친 지금 회고를 해보려고 한다. 인터미션 기간은 휴식 기간이었다.해보고 싶었던 게임도 해보고(시티즈 스카이라인 재밌다..) 맛있는 것도 먹으면서 휴식도 했지만, 2차 학습스프린트를 어떻게 해야 효율적으로 사용할 수 있을지 고민할 수 있는 시간이었다. 1차 학습 스프린트에서 단방향 이벤트 흐름도 구현해보고 Tuist 없이 모듈화도 진행해보고 많은 걸 학습할 수 있었지만, 마음 한편에는 이미 어느정도 아는 것들을 다시 학습하는 기분에 찜찜함이 있었다. 그래서 2차 학습 스프린트에선 한번도 안써본 것, 잘 모르는 것들을 위주로 학습해보려고 계획했다.근데 이것도 5, 6주차에는 미션 특성 상 익숙한 것 위주로 학습했다.. 7, 8주차에서야 깨..

    SwiftUI 프로젝트에서 AppDelegate, SceneDelegate 사용하기

    SwiftUI 프로젝트에서 AppDelegate, SceneDelegate 사용하기

    프로젝트를 생성할 때 SwiftUI를 선택하면 기본적으로 AppDelegate와 SceneDelegate가 생성되지 않습니다. 하지만 아직까지 외부 SDK연결이나 APNs와 같이 AppDelegate가 필요한 상황이 있고,기존 UIKit 에서 SwiftUI 로 마이그레이션하는 과정에 있다면 SceneDelegate에서 SwiftUI 뷰를 UIKit ViewController로 호스팅해 보여주는게 편할 것 같습니다. 그래서 오늘은 SwiftUI로 프로젝트 생성 후, AppDelegate와 SceneDelegate를 만들기, ContentView를 SceneDelegate를 통해 띄우는 것 까지 해보겠습니다. 먼저 SwiftUI 프로젝트를 생성합니다.XCode12 까지는 프로젝트를 생성할 때 AppDeleg..

    SwiftLint SPM으로 설치하기

    SwiftLint SPM으로 설치하기

    신규 프로젝트에서 SwiftLint를 도입하기로 했습니다!예전에 SPM으로 설치해본 경험이 있지만 너무 오래되서 가물가물하더라구요.그래서 이번 기회에 정리해놓으려고 합니다. 방식이 두가지가 있습니다. 첫번째는 SwiftLintBuildToolPlugin 을 사용하는 방법입니다.하지만 이 방식은 build phase에 script를 추가하지 않는 방법이라 커스텀 룰을 적용할 수 없어보여 추천하지 않습니다. 두번째는 brew를 통해 터미널에도 SwiftLint를 설치하고, SPM을 통해 SwiftLint를 설치하는 방법입니다.이 방식은 build phase에 script를 실행하도록 해 커스텀 룰을 적용할 수 있습니다. 먼저 간단한 SwiftLintBuildToolPlugin 방식을 알아보겠습니다.Swift..