함수와 메서드는 다르다.
·
내게 필요한 개발 공부
예전부터 TCA(The Composable Architecture)를 만든 Point-Free 형님들의 영상을 봐야겠다 생각하고 있었습니다. 하지만 영어의 장벽,,,으로 미루고 미루다가(이것도 언제까지 미룰거야!!) 이제는 Swift 딥다이브가 정말로 필요하다는 생각이 들어 무료로 풀린 첫 번째 에피소드부터 시청하기로 했습니다. 첫 에피소드부터 머리를 띵,, 하고 맞은 것 같은 내용이어서 휘발되기 전에 메모를 남겨두려 합니다. ++ 영상 보고, 해석하고 하는건 시간이 너무 오래걸릴 것 같아 스크립트 번역을 통해 시청했습니다! 영상 출처: https://www.pointfree.co/episodes/ep1-functions 스크립트 흐름1. IntroductionPoint-Free에서는 다양한 함수형 프로..
Task는 항상 부모 Context를 상속 받을까?
·
내게 필요한 개발 공부
회사에서 대망의 첫 MR을 작성하게 됐습니다.(Gitlab은 MR이라고 하더군요,,, Github의 PR) 작업 상 크게 어려운 부분은 없었지만, Swift Concurrency를 이용한 코드 작성 중 관련 리뷰를 받게 되어 간단한 실험을 해볼까 합니다. 어떤 상황?간단히 말하면 Task로 비동기 작업을 생성할 때, 내부 동작은 항상 부모 Context의 메타데이터를 상속 받을까? 입니다.final class SomeViewController: UIViewController { // ... func someFunction() { Task { // ⭐️ Task 내부 클로저는 어느 스레드에서 실행? } }} 정확한 상황을 표현하자면..
말랑말랑 iOS 인턴 면접 후기
·
취준
바로 어제 다녀온 iOS 인턴 면접 후기를 남겨보려 합니다. 제목에 말랑말랑이라는 단어를 사용했는데 그만큼 분위기가 부드럽고(말랑말랑?) 좋았어서 그래봤습니다,,, ㅎㅎ 하지만 분위기와 면접 결과는 비례하지 않을 수 있다는 것을 알기에, 기대감은 넣어두고 복기의 시간을 가져보겠습니다. 면접까지의 프로세스사전과제 기간을 포함해 면접까지 약 1주일 정도의 시간이 있었습니다. 열심히 사전과제를 끝내놓고 남은 3일 정도는 그동안 준비했던 CS, Swift 문법, 아키텍처 등을 복습했습니다. 늘 느끼는 거지만 중요하지 않아 보이는 게 하나도 없어서 어려운 것 같습니다. 뭐랄까 이 부분을 넘기면 나중에 후회하지 않을까?! 등과 같은 지점들이죠. 하지만 집중력의 한계! + 사실 암기보단 맥락을 이해하는 것이 더 중요..
유난히 길게 느껴질 여름을 준비하는 회고
·
솔직해보려는 회고
2025. 06. 17나는 지금 그 어느 때 보다도 회고를 하고 싶다. 생각할 시간을 무한히 집어넣는 것만 같은 2025년의 가운데에서 주변 정리가 필요함을 강하게 느낀다. 늘 비슷한 고민에 가로막혀 진짜 해야 할 일을 놓치지 않기 위해서라도 말이다. 그래서 이번 회고의 핵심 키워드는 '솔직함'이다. 마음속 깊숙이 내려앉은 생각의 골을 끌어올려 키보드 위에 올려놓은 후, 무심하게 잘라 다시 들여다볼 것이다. 어떤 표현을 사용할지, 남들에게 어떻게 보일지에 대한 고민보다 스스로에게 솔직한 회고를 위해 노력할 것이다. 나 자신을 해체하는 것에 두려워하지 말자. 1. 나는 어떤 사람이 되고 싶은가'나'라는 사람을 정의할 때 늘 입버릇처럼 말하고 다니는 문장이 있다. "만드는 걸 좋아하는 사람". 그렇다, 나는..
맡겨진 소녀 - 잔잔한 바람같은 따뜻함
·
생각을 담은 독서
마음의 문을 나도 모르게 조금씩 닫아버리게 되는 것만 같은 요즘이다. 따뜻한 말을 바라면서도 선뜻 꺼내기 힘들어서, 무엇인지도 모를 자존심을 지키려고 삼키고만 있는 내게 잔잔하게 그리고 따뜻하게 말을 걸어주었다. 사실 나도 너도 정말로 작은 배려와 말들만으로도 충분했을 텐데. 서로를 진심으로 대할 수 있었을텐데. 이렇게 서먹해지진 않았을텐데 말이다. 책을 읽는 내내 갈대 밭 속 불어오는 바람, 푸근한 빵 냄새, 비가 내린 후 젖어 있는 축축함을 느낄 수 있었다. 이 온기를 가슴 속에 품고 사랑하는 사람들에게도 전달할 수 있기를. 아무 말도 하지 않는 것의 의미를 알 수 있기를.
모든 시작에는 떨림이 있다
·
꾸준히 글쓰기
행복하게 살고 싶다.근데 어떻게 살아야 행복해지는걸까. 한참을 고민하다 메모장에 적어봤다.시간 가는 줄 모르고 신나게 써내려갔다.상상으로만 해도 좋은 것들이라니. 하고 싶은 것도, 사랑하고 싶은 것도 많은 나는메모장을 끝없이 채울 수 있을 것 같았다. 내가 행복해지기 위한 그림을 그리다보니 역시나 명확해진다.지금처럼 꾸준히 해야할 것도, 새로 시작해봐야할 것도. 무섭고 내던지고 싶을 때마다 메모장을 꺼내 읽자.보기만 해도 웃음이 지어지는, 떨림이 가득한 메모장을 말이다.
내가 하고 싶은 거
·
꾸준히 글쓰기
내가 지금 하고 있는 건 내가 하고 싶은 것일까?내가 지금 하고 있는 것의 목표는 무엇인가?그 목표를 이루면 그 다음은 어떤 것일까? 시간이 많으니, 아니 잡히질 않으니 생각의 골이 깊어진다.분명 이 다음은 내가 바라는 삶이 아닐 거 같은데.내가 꿈꾸는 삶은 훨씬 큰데.이렇게 해서는 각이 안나오는 거 같은데. 솔직히 하루에도 생각이 몇 번이나 왔다갔다 하는지 모르겠다.스스로 바보 같으면서도 이런 과정이 필요한 것 같기도 하다. 이 목표를 이루고 나면 다음에 도전하면 되겠지라는 게 안일하다는 건 누구보다 잘 알고 있다.스스로 안주하고 도망칠 것 같아 무섭다. 방향을 확실하게 잡아야 한다.어릴 때부터 이것저것 하는 해보는 걸 좋아했지만 매듭을 짓진 못했다.끈만 널부뜨리지 말고 제발 매듭을 짓자. 내 삶의 주..
멀티태스킹과 멀티프로세싱, 비슷한듯 다른 두 개념
·
내게 필요한 개발 공부
저는 멀티태스킹에 약합니다. 이게 무슨 뜻일까요? 한 번에 여러 가지 일을 잘하지 못한다는 뜻입니다. 전화하면서 딴짓이라도 하면 누군가 항상 알아차리는 것 같습니다 ㅋㅋ 아무튼 오늘 공부해 볼 개념은 멀티태스킹입니다. 생각보다 쉬운 개념이니 짧게 정리해보겠습니다! (둘의 차이를 이해하면 왜 '저는 멀티 프로세싱에 약합니다'라고 이야기할 수 없는지 알게 될지도 모릅니다) 멀티 태스킹 Multitasking하나의 CPU(Core)가 여러 개의 작업을 동시에 실행하는 것어떻게 하나의 시스템에서 여러 개의 작업을 동시에 실행할 수 있을까요? 보통 하나의 작업이 끝나야 다음 작업을 시작할 수 있는 구조 상 의문이 듭니다. 컴퓨터 과학자들은 이를 해결하기 위해 프로그램의 작업을 아주 작은 단위로 분리했습니다. 그리..
왜 나는 너를 사랑하는가 - 그냥 너라서
·
생각을 담은 독서
처음으로 떠나본 혼자만의 여행. 책 한 권은 꼭 읽고 오겠다 다짐했다. 가볍게, 그리고 조금은 낭만을 챙길 수 있는 책을 찾다 문득 이전에 추천받았던 책이 떠올랐다. 남녀가 만나고 행복해하다가 헤어지고,, 뭐 그런 내용이라고 했다. 특별함을 찾기 힘든 플롯이었지만 나는 언젠가 이 책을 꼭 읽고 싶었다. 분석적으로 생각해 본 적은 없지만 저자가 좋아하는 단어인 '노스탤지어'에 젖어있던 적이 많았기 때문이 아니었을까. 지난 1년 여러모로 그런 시간들이 많았다. 최고로 행복한 한 해였지만 공허함을 지울 수 없었다. 그렇게 여행 중 시간이 날 때마다 책을 꺼내 읽었다. 기차에서도, 카페에서도, 바닷가에서도 조금씩 꺼내 읽었다. 플롯은 흔하디 흔했지만 안의 내용은 그렇지 않았다. 일상 속 미묘한 무언가를 마음 속..
데이블럭 회고 - 하루 24개의 블럭을 가치있게 쌓아나가는 방법
·
프로젝트 일지
프로덕트 디자이너에서 iOS 개발자로서의 걸음마를 뗄 수 있었던 첫 번째 개인 프로젝트 회고입니다.참여 인원 : 개인 프로젝트역할 : 기획 / 디자인 / 개발기여도 : 100%프로젝트 기간 : 2023.03.01 - 2024.01.11(약 10개월)기술 스택 : UIKit / CoreDataGithub : DayBlock - GithubAppStore : DayBlock - AppStore앱 소개하루 24개의 블럭을 가치있게 쌓아나가는 방법, DayBlock 데이블럭과 함께해요!"내가 얼마나 생산성 있는 시간들을 보냈을까?"우리 모두는 하루를 다양한 시간으로 채워가고 있어요.그중 기록하고 싶은 시간들을 블럭으로 만들고 쌓아가다 보면노력과 열정의 흔적을 데이블럭에서 확인할 수 있을 거에요.생산성 트래킹30..
Xcode 유닛 테스트 에러 - There is no scheme and/or test plan that contains every test you are trying to run
·
트러블슈팅
🤨 문제 정의PR 머지 후 브랜치를 옮겨서 작업할 때마다 아래 오류가 발생합니다. 아주 원초적인(?) 해결 방법으로는 UnitTest Target을 삭제 후 다시 만들어주면 되긴 하지만,,, 이렇게 하는 작업이 워낙 귀찮은 일이기도 해서 트러블슈팅 해보려 합니다! 🪓 삽질 기록1. 분명 Autocreated 된 Test Plan이 있었는데,,?유닛 테스트가 잘 돌아갈 때만 하더라도 TestPlan을 따로 만들어주지 않아도 자동 생성되었었는데,,, 자동 생성된 UnitTest가 없어져버렸습니다. 오른쪽 패널을 보면 어딘가 분명 테스트가 남아있긴 한데 말이죠! 2. 명시적으로 Test Plan 생성해주기Autocreated 된 TestPlan에 아무것도 안떠 있길래 상단의 `Configurations` ..
어른의 국어력 - 본질적 가치에 집중하기
·
생각을 담은 독서
나의 국어력은 어떤 상태일까. 나는 어른이라 할 수 있는가? 잘 읽고, 잘 말하고, 잘 듣고, 잘 쓰고 있는가? 참된 어른이라고 하기엔 모자람이 큰 것 같다. 그러니 인정하고 국어력을 갈고닦기 위해 노력해야 할 것이다. 그게 어른이 되어가는 길이 아닐까. 잘못을 인정하고 내 삶의 본질적인 가치에 집중하는 것, 그것이 이 책의 전부라 느꼈다. 요즘 책을 빌려보는 것에 대한 아쉬움이 생겼다. 예전에는 이런 생각이 전혀 없었는데 말이다. 저자의 말처럼 책을 나를 갈고 닦기 위한 도구로 사용하고 싶은데, 깨끗하게 반납해야 하다 보니 생각을 표시하거나 옮겨 적기 힘들다고 느꼈다. 어찌 보면 독서에 대한 내 자세가 조금은 변화했다고 느낀 지점이기도 하다. 예전 나는 왠지 모를 강박에 내 책도 깨끗하게 보려 노력했기..
안전한 놀이터 샌드박스 알아보기
·
내게 필요한 개발 공부
어린 시절 롤러코스터 타이쿤이라는 놀이공원을 만드는 게임을 즐겨했었습니다. 특정 미션을 달성해야 하는 캠페인 모드와 함께 자유롭게 상상력을 발휘할 수 있는 샌드박스 모드가 있었던 것이 기억납니다. 오늘은 iOS의 샌드박스 🏜️ 개념에 대해 알아보려 합니다.(제목을 안전한 놀이터라고 지으니까 괜히 도박장 사이트 같기도 하고,, 이상하네요) 샌드박스 SandBox앱이 손상될 경우 피해를 최소화하기 위해 시스템 리소스와 사용자 데이터에 대한 액세스 제한 기술쉽게 말해 아이들이 다칠까봐 모래 상자 안에서만 놀게 하는 것처럼, 특정 앱이 제한된 공간 내에서만 동작하도록 만든 시스템이라고 생각할 수 있습니다. 샌드박스는 어떻게 제한된 공간 내에서만 동작하도록 만들 수 있을까요? 우선 샌드박스 없이 앱이 설치된 상..
iOS에서 OS 뜯어보기
·
내게 필요한 개발 공부
운영체제 Operation System사용자의 하드웨어, 시스템 리소스를 제어하고 프로그램에 대한 일반적 서비스를 지원하는 시스템 소프트웨어운영체제는 한번쯤 들어볼 수 있는 단어입니다. 흔히 OS를 이야기할 때 Windows, Linux 혹은 애플 진영에서는 iOS, macOS, iPadOS 등으로 말이죠.쉽게 말해 운영체제는, 사용자가 알기 어려운 하드웨어와 소프트웨어를 쉽게 상호작용 할 수 있도록 돕는 소프트웨어입니다. 하드웨어를 다루기 위해 우리가 직접 기계어로 명령하거나 자원 분배를 해주지 않아도 되는 것은 모두 OS 덕분이라고 할 수 있습니다. 운영체제의 역할1. 자원 관리CPU 스케줄링: 여러 프로세스가 CPU를 사용할 때 효율적으로 CPU를 배분메모리 관리: 프로세스가 사용할 메모리를 관리하..
고민하고 나아가기
·
꾸준히 글쓰기
본격적으로 취준을 시작한 지 2달이 지났다.이제는 하루 루틴이 꽤나 안정적으로 흘러가는 것 같다. 여전히 모든 준비에 끝이 없다는 사실이 막막할 때가 있지만내가 해야할 행동이 무엇인지는 알고 있기에커피로 잠을 달래며 컴퓨터 앞에 앉아있게 된다. 공부가 재밌기도 하다.내가 무언갈 만들기 위해 기반을 닦는다고 생각이 들 때면개발을 시작하길 참 잘했다는 생각도 함께 온다.내 생각을 세상에 내놓는 것은 내 삶의 이유 중 하나이기 때문이다. 취업에 대한 조바심이 없다고 이야기할 순 없지만본질적으로 무엇을 향해 가는가에 대해 고민하다 보면지금 이 순간을 잘 활용할 수 있을 것이다. 늘 나와 나를 사랑해 주는 사람을 믿고, 앞으로 나아가자.
스마트폰의 CPU, AP 알아보기
·
내게 필요한 개발 공부
우리가 사용하는 스마트폰에도 CPU가 달려있습니다. 하지만 보통 스마트폰에서는 CPU라고 하지 않고, AP라고 부르곤 합니다. 특히 아이폰에서는 A17, A18칩 등의 이름으로 알려져 있죠. CPU와 AP는 비슷하지만 분명 다른 개념입니다. Application Processor스마트폰, 태블릿, 임베디드 시스템 등의 모바일 기기에서 사용되는 프로세서를 의미합니다.AP는 쉽게 말해 CPU 역할만 하는 것이 아닌 모바일 환경에서 필요한 다양한 연산과 처리를 수행하는 핵심 프로세서의 역할을 수행합니다. 컴퓨터는 내부 크기가 스마트폰에 비해 널널하기 때문에 부품 크기에 제약을 상대적으로 덜 받습니다. 하지만 스마트폰의 경우 부피를 줄이는 것이 중요하기 때문에 다양한 역할을 한 칩으로 줄여야만 하는 것이죠!그래..
캐플 리팩토링 네 번째 이야기 - Repository 모듈 만들기
·
프로젝트 일지
애플 디벨로퍼 아카데미에서 진행한 프로젝트, 캐플 Qapple 리팩토링 작업의 네 번째 이야기입니다.캐플은 애플 디벨로퍼 아카데미 @POSTECH 3기, TEAM QAPPLE에서 시작한 프로젝트로아카데미 러너들과 익명으로 소통할 수 있는 커뮤니티 서비스입니다! 🍎 AppStore 다운로드하기어느덧 캐플 리팩토링 작업이 마무리되어가고 있습니다. TCA를 이용한 비즈니스 로직, 화면 구현 모두 99% 이상 완료되었습니다. 이제는 슬슬 전체 리팩토링 회고 시간을 팀끼리 가지려고 했으나,,, 했으나,,, API 통신을 위한 Repository 모듈화까지 끝내놓고 4기 출시 이후 진행하는 걸로 결정이 났습니다. 생각보다(?) 순조로웠던 리팩토링이기도 했고 아직까지 큰 문제를 겪지 못해 이야기할 거리가 덜 쌓인 ..
Intel Mac과 M1 Mac이 달랐던 이유
·
내게 필요한 개발 공부
제게 아키텍처라 함은 MVC, MVVM, 클린 아키텍처와 같은 소프트웨어 설계 원칙에 가까운 것들입니다.(뇌까지 개발로 가득 차버렸어!) 하지만 오늘 다룰 주제는 CPU의 아키텍처입니다. 복잡한 내용은 아니니 가볍게 포스팅해 보겠습니다! CPU와 프로그램이 소통하는 방법컴퓨터 세상은 0과 1로 이루어져 있습니다. 아주 옛날이야 사람이 직접 0과 1을 적어가며 컴퓨터 명령어를 써 내려갔겠지만 현재는 그렇지 않습니다. 어셈블리어부터 상위 레벨 언어까지 사람이 읽고 쓰기 쉬운 형태로 발전되어 왔죠. 그러나 컴퓨터 세상이 0과 1로 이루어져 있다는 사실은 변함이 없습니다. 그 말인즉슨, 우리가 열심히 Swift나 Python 등으로 코드 작성 후 빌드 버튼을 누르면 컴파일러나 인터프리터에 의해 기계어로 변환되는..
환경 변수가 값을 못 불러오는 현상 해결하기
·
트러블슈팅
🤨 문제 정의캐플 프로젝트의 자동 로그인 기능에 이상이 생겨 살펴보던 중 이해할 수 없는 현상이 발생했습니다. Xcode로 빌드할 때는 API 통신이 잘되고, 앱을 껐다 다시 키면 API 통신이 모두 먹통이 되는,,,? 어떻게 디버깅 해야 할지도 막막한 상황이 발생했습니다. 🪓 삽질 기록1. API 오류?API 오류인가 싶어 네트워킹 오류 Alert에 error 문자열을 출력해봤습니다. API 통신을 담당하는 QappleRepository 모듈에서 발생한 에러로 SecretKey 값 설정이 잘못되었다고 하네요! 문제는 왜 처음 Xcode로 빌드할 때는 잘되냐는,,,거였습니다. 캐플의 BaseURL, Port Number 등 민감한 정보는 모두 scheme의 Environment Variables로 관..
작지만 빠른 친구 캐시 알아보기
·
내게 필요한 개발 공부
지난 시간 CPU와 메모리 사이의 데이터 교환 방식을 알아보며 이 과정은 비용이 많이 드는 작업임을 알 수 있었습니다. 그 사이에서 효율적인 데이터 사용을 위한 조력자, 캐시에 대해 알아보려 합니다. 캐시 CacheCPU와 RAM 사이에 위치한 고속 기억 장치로, 데이터 전송 속도를 높이고 시스템 성능을 향상시키는 역할역할: `CPU와 RAM 간의 속도 차이로 발생하는 병목현상을 완화`해 성능을 향상시키는 역할속도: CPU 다음으로 빠른 메모리로, `RAM보다 훨씬 빠른 접근 속도`를 제공합니다.용량: RAM에 비해 `용량이 작지만, 자주 사용되는 데이터를 저장`합니다.위치: CPU와 RAM 사이에 위치하여 `데이터 전송의 중개자 역할`을 합니다.계층 구조: L1, L2, L3 등 여러 단계로 나뉘며, ..
CPU / RAM / Storage의 미묘한 삼각관계
·
내게 필요한 개발 공부
예전 조립 PC 구매를 위해 부품을 검색해 보고 다녔을 때가 떠오릅니다. 일단 정확히 뭔지는 모르겠지만 뭐 CPU 사양이 좋다느니,, RAM은 다다익선이라느니,,, 말들을 주워 담으며 열심히 부품을 모아 PC를 장만했었습니다. 이제는 개발자로서 기본적인 하드웨어 동작 방식은 자신 있게 이야기할 수 있어야 하기에 정리해보려 합니다. CPU(Central Processing Unit) 중앙처리장치컴퓨터 시스템을 통제하고 프로그램의 연산을 실행 · 처리하는 가장 핵심적인 컴퓨터의 제어 장치, 혹은 그 기능을 내장한 칩이다.흔히 컴퓨터의 `두뇌` 역할이라고 합니다!`연산`을 수행합니다.(산술, 논리 연산)다른 하드웨어(RAM, Storage 등)와 `데이터 교환 및 제어`CPU의 필수 구성 요소`Cache 캐시..
재르시님의 면접 질문지로 iOS 인터뷰 뽀개기
·
취준
iOS 개발 공부를 하고 계신 분이라면 한번쯤은 들어봤을 'Jercy's Interview Questions for iOS Developers' 뽀개기를 시작했습니다. 대답할 수 있는 질문이 반의 반의 반도 안되는걸 보아하니,,, 얼른 하나씩 뽀개 나가야 할 것 같습니다. 좋은 학습 자료를 Public 하게 볼 수 있게 만들어주신 재르시님 및 Contributor 모두에게 감사합니다!! ☺️🌱 레벨 01. 컴퓨터 시스템에서 CPU, RAM, 저장 장치의 역할과 이들이 어떻게 상호 작용하는지 설명해주세요. - 25.02.21CPU와 메모리 간의 데이터 교환은 어떻게 이루어지나요?버스(Bus)란 무엇이며, 어떤 종류가 있나요?2. 캐시 메모리의 개념과 역할에 대해 설명해주세요. - 25.02.22캐시의 지..
Xcode 유닛테스트 무한 인덱싱 현상
·
트러블슈팅
🤨 문제 정의TCA를 적용한 프로젝트에서 유닛테스트를 진행하려했는데 무한 인덱싱이 빠져버리는 현상이 발생했습니다. 어떤 오류도 안뜨고(심지어 유닛테스트 빌드도 안됨)무한 로딩,,, TCA를 적용한 이유 중 하나가 유닛테스트였는데 무슨 일일까요,,! ++ 신기한건 동료 프로젝트에서는 잘 돌아갑니다,,, 더 의문,,,, 🪓 삽질 기록대략 한 달 동안 너무 많은 삽질을 해버려서 일일히 기록하진 못했지만,,(심지어 TCA 걷어내야하나 생각까지 함,,) 대충 기억 나는 걸 적어보자면!유닛테스트 새로 생성 → 똑같음여러가지 Destination에서 빌드 → 똑같음새로운 Scheme 생성 → 똑같이 안돌아감Execute in parallel 설정 바꾸기 → 빌드 되고 돌아가긴 했으나 결과적으로 오류 없이 테스트 ..
iOS 개발자의 모두를 위한 컴퓨터 과학 CS50 수료 후기
·
내게 필요한 개발 공부
저는 CS를 주먹구구식(?)으로 공부했었습니다. 어떤 것이 중요한지, 어디서부터 시작해야 할지 모르니 일단 iOS 개발을 하다 처음 보는 단어가 나오면 검색해 보며 그때그때 공부했었죠. 어찌 보면 필요에 의한 것이었기 때문에 호기심 있게 공부할 수 있었습니다. 그러나 반대로 말하면 필요가 충족되면 깊게 파고드는 것보다는 다음 문제를 찾아 나서곤 했죠. 딥다이브를 하지 않고 넘어가다보니 CS는 얕게만 쌓여갔습니다. 본질을 이해하지 못한 채 쌓여간 지식들은 금세 휘발되기도 했습니다. 그러다 기술 면접에서 그 결과가 그대로 드러났습니다. 분명 알고 있는 키워드임에도 설명하려다 보니 말문이 턱 막히게 되었죠. 이대로는 안 되겠구나 싶었습니다. iOS 개발 지식도 중요하지만, 스스로 개발자라고 불리고 싶다면 기본..
선택의 연속
·
꾸준히 글쓰기
인생은 선택의 연속이다.아무리 깊게 고민하고 신중히 선택해도 예상과 다르다. 그렇다면 선택은 어떻게 해야 할까?최선의 선택이라 믿었지만 그렇지 않았을 때의 상실감은 어떻게 채워야 하는가? 최선의 선택이 아닐 수 있음을 인정하자.그저 내가 후회하지 않으리라, 내 결정을 온전히 믿으리라 다짐하자. 결과는 아무도 모른다.내 선택이 어떻게 돌아오든, 있는 그대로 받아들이자.그저 최선의 결과가 나올 수 있게, 후회하지 않게 만들도록 노력하자. 선택은 필연적이다.
Swift로 적어보는 버블 / 선택 / 병합 정렬
·
내게 필요한 개발 공부
최근 CS 공부를 위해 Boostcourse의 모두를 위한 컴퓨터 과학(CS50) 강의를 수강하고 있습니다. CS를 전혀 몰라도 쉽고 재밌게 들을 수 있는 강의로 저 또한 만족스럽게 듣고 있습니다. 오늘은 정렬 알고리즘의 대표적인 3가지를 간단하게 알아보고, Swift로 직접 구현해 온전히 습득하고자 합니다. 1. 버블 정렬 Bubble Sort버블 정렬은 가장 직관적인 알고리즘입니다. 쉽게 말해 '두 요소를 비교 후 순서에 맞게 자리를 바꾼다!'의 문장으로 설명할 수 있습니다.위 단계를 배열의 끝까지 반복하게 됩니다.배열 끝까지 반복 후에도 정렬이 되지 않았다면, 다시 한번 같은 과정을 반복하는 식으로 알고리즘을 이어나가는 것이 버블 정렬의 기본 개념입니다. 버블 정렬의 상한선은 O(N^2)의 시간복잡..
스쿱 트러블 슈팅 - 음악 추정 시간으로 정확도 개선하기
·
프로젝트 일지
본 포스팅은 음악을 쉽게 담을 수 있게 도와주는 'Sqoop 스쿱' 프로젝트의 트러블 슈팅 내용을 기록했습니다.스쿱 서비스는 1차 추출(얕은 추출) 단계에서 Description, Comment List 등의 문자열을 받아와 정규표현식으로 변환하고, 이를 활용해 음악 리스트를 추출합니다. 기존의 음악 리스트를 추출 할 때 사용하는 정보는 오로지 타임스탬프 뒤에 따라오는 제목 및 아티스트 titleOrArtists 정보로, 이는 정확도 관련 이슈를 만들었습니다. 03:56 - Sunflower 라는 문자열을 이용해 MusicKit 으로 검색하는 상황을 예시로 들어보겠습니다. MusicKit 의 검색 필드엔 ‘Sunflower’가 사용되고, 이는 다음과 같은 리스트를 반환합니다.외부 검색어를 받아 로직을 수..
스쿱 트러블 슈팅 - API로부터 도메인을 안전하게 지키기
·
프로젝트 일지
본 포스팅은 음악을 쉽게 담을 수 있게 도와주는 'Sqoop 스쿱' 프로젝트의 트러블 슈팅 내용을 기록했습니다.YTPlaylistExtractor 는 Youtube Data API의 영상 및 댓글 정보를 가공해 비즈니스 로직을 수행합니다. 각 API는 여러 메타데이터를 포함하고 있고 이를 다르게 해석하면, 모듈 및 프로젝트의 목적과 상관없는 데이터 또한 포함하고 있다는 말이기도 합니다. 아래는 비디오 정보를 반환하는 API의 Response이며, 이 중 실제로 사용되는 데이터는 ⭐ 표시 해두었습니다.{ "kind": "youtube#videoListResponse", "etag": "YxiDxVDo0f0RJfjjW6MknQNQm9s", "items": [ { "kind": "youtu..
스쿱 트러블 슈팅 - 유연하고 구조적인 정규표현식 만들기
·
프로젝트 일지
본 포스팅은 음악을 쉽게 담을 수 있게 도와주는 'Sqoop 스쿱' 프로젝트의 트러블 슈팅 내용을 기록했습니다.YTPlaylistExtractor 모듈의 핵심 비즈니스 로직인, 영상 플레이리스트 추출을 위해 가장 중요한 단계는 YouTube의 Description, Comment 문자열을 정규표현식과 매칭해 음악 리스트 [YTMusicInfo] 로 추출(1차 스쿱)하는 것입니다.Sqoop 서비스는 ShazamKit을 이용해 정확도가 높은 2차 스쿱(깊은 추출)을 제공하고 있지만, 최소 1분 이상의 긴 추출 시간, 예상보다 큰 데이터 사용량 등의 문제점을 상호보완하기 위해 본 모듈의 1차 스쿱(얉은 추출) 기능을 우선적으로 제공하고 있습니다. 즉, 영상 내 음악 정보가 존재한다면 2차 스쿱으로 넘어가지 않..
A4 한 장을 쓰는 힘 - 이 책은 내게 무엇을 말하려 하는가
·
생각을 담은 독서
A4 한 장을 쓰는 힘 - 안광복이력서를 작성하고, 포트폴리오를 만들고, 블로그 포스팅을 꾸준히 하기 위해 가장 필요한 능력은 무엇일까? 단연코 글쓰기다. 그런 마음으로 도서관을 돌아보던 중, 신간 도서 구역에서 이 책을 발견했다. 글쓰기를 근력을 키워줄 최소한의 근력이라는 표지 속 문구는 지금 내 상황에 딱 맞는 듯했다. 저자는 좋은 글쓰기를 위해선, 좋은 재료가 필요하다 말한다. 여기서 좋은 재료란 읽기, 즉 독서다. 독서가 부족하면 좋은 글이 나올 수가 없다고 한다. 이를 위해 독서의 기본기를 만들어야 한다. 하루 독서 시간을 의도적으로 만들고, 이동 시간 등에도 자연스러운 독서를 위해 책을 챙겨 다니는 등의 노력이다. 이 문장을 실천하기 위해 최근 지하철을 탈 때마다 책을 들고 다니는데 꽤나 감성..