전체 글
-
시대의 격랑기를 정면으로 마주하며 : 26년 회고일기 2026. 11. 8. 18:42
나는 여기에 있어요! 인류는 산업혁명 이라고 일컫는 시기마다 굉장한 격동을 겪었습니다.증기기관전기, 중화학, 대량생산정보화새로운 기술이 탄생하고, 우리의 삶에 새로운 것들이 생겨났어요.빠르게 적응하는 사람에겐 새로운 기회를, 혹은 사회적 거부가 태어나기도 했습니다. 이제는 AI 에 의한 혁명이 일어나고 있는 것 같아요.22년말에 우리에게 날아든 GPT로부터 4년간, 마치 태풍이 다가오는 것 같습니다. AI를 활용하고 적응해오며 나는 시대에 어떻게 적응해야할까? 를 많이 생각했어요.당연히 거부하는건 아니구요, 나름 내가 여기에 있다 고 외치면서 시대의 흐름에 적응해보려 몸부림 치는거죠! 거창하네?아주 시작을 거국적으로 거창하게 시작했는데요?시대에 대한 칼럼도 아니고 그냥 어떻게 살아야 할까?어떤 삶을 살지..
-
메모리 덤프에 남는 String 없애기iOS/Swift 2025. 8. 5. 18:18
회사에서 ISMS-P인증을 한다... 모의 해킹에서 메모리 덤프에 사용자의 ID, PW가 평문으로 노출됨! 하지만,,, 로그인 하면 textfield.text = nil 처리를 하고 있었고, 해당 정보는 local scope에만 존재하고 있었다. 원인이 무엇일까!예상 원인은 두가지로 추렸다... TextField.text가설사용자의 ID, PW는 Textfield.text를 통하여 String으로 값을 가져온다.이 때 지역변수에 이 값을 선언하면 Heap메모리에 이 값이 적재될 것이고, Stack에 있는 String의 주소를 해제하더라도ARC가 바로 Heap의 String의 value를 해제해주지 않을 것이므로, 메모리 덤프에서 ID, PW가 노출될 것! 해결Textfield Delegate를 사용하여,..
-
error: Cycle inside {$Project}; building could produce unreliable results.iOS/Swift 2025. 7. 21. 10:43
Cocoapods -> SPM으로 전환하다가 발생한 에러.Firebase를 사용하는 관계로, run script에 input파일이 여러개 추가되고 실행해야 했다 (링크) Firebase Crashlytics 시작하기새로운 Firebase Studio 기능부터 AI 통합 방법까지 I/O에서 발표된 모든 내용을 확인해 보세요. 블로그 읽기 의견 보내기 Firebase Crashlytics 시작하기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로firebase.google.com 이 때 제목의 에러가 발생했는데, 여러 LLM은 할루시네이션을 하더라,,,결국 문제는 buildPhase의 순서가 문제였다.생각하면 곧 알수있는 문제였음.... LLM 의존 문제가 심각하다. build 산출물이 생성된 후 run sc..
-
25년 이직 회고일기 2025. 7. 15. 15:14
이직을 했다제곧내! 24년 9월에 퇴사했다.이직은 언제 성공했냐면,,, 25년 4월에 성공했다.24년 8월부터 준비했으니까 정말 오래걸렸다. 지금 까지 무슨 일이?만 2년 하고 조금 넘은 기간, 저는 이직을 위해 퇴사를 결심했어요.대다수의 선배님들이 말리는, 선퇴사 후이직 테크입니다.근거는 다음과 같았어요매너리즘 -> 새로운 개발환경, 도메인, 비즈니스 에 대한 갈망퇴근하고 와서 개발을 지속하기가 너무 힘들었어요 -> 높은 업무강도 회사에 대한 책임감은?저는 프로젝트에 대한 책임감은 강하게 갖고있어요하지만 당시 iOS개발자 동료분들도 4분이나 계셨고, 주로 쓰는 기술스택인 TCA에 대한 공유도 많이 되었어요.그리고 아키텍쳐 전환이 완료되었다고 간주했기에, 충분히 걱정할 필요가 없다고 생각했어용 하지만....
-
matrix_Leetcode_54. Spiral Matrix알고리즘/알고리즘 문제풀이 2025. 4. 14. 17:42
https://leetcode.com/problems/spiral-matrix/description/?envType=study-plan-v2&envId=top-100-liked 문제접근1. DFS를 사용하여 matrix 탐색2. Flag를 사용하여 matrix 탐색위 두 방법을 썼을 때에, 최소 O(mn) ( 어찌 되었든 모든 cell을 방문해야 함 ) 줄단위 처리를 고민하며 아래 코드를 작성특정 경우에 줄단위 처리를 하여 조금 더 빠를 수도 있음! spiral을 제어하는 move같은경우 enum으로 작성하면 더 좋을 수 있지만,귀찮았기 때문에,,,,정답코드0msBeats100.00%19.73MBBeats41.55% -> 0.6MB 차이더보기class Solution { func spiralOrde..
-
matrix_Leetcode_240. Search a 2D Matrix II알고리즘/알고리즘 문제풀이 2025. 4. 10. 16:32
https://leetcode.com/problems/search-a-2d-matrix-ii/description/?envType=study-plan-v2&envId=top-100-liked 문제접근아이디어1주어진 매트릭스는 x,y가 증가하는 방향으로 이동하면 해당 index의 value가 증가한다.다만, (3,1)의 값이 (2,3) 보다 항상 크지 않다. 대소 비교는 각 행, 열 마다 개별적이다.bfs를 이용하여 조건에 맞는 index가 존재하는지 찾는다.아이디어2행 렬을 꼭 이동하지 않고, 그리디에 가깝게 풀어보기? 정답코드아이디어 1을 사용하여 정답을 맞춘 코드그런데, 129msBeats5.56% 로 성능이 좋지는 않다.더보기class Solution { struct Point: Hashab..
-
BinaryTree_Leetcode_236. Lowest Common Ancestor of a Binary Tree알고리즘/알고리즘 문제풀이 2025. 4. 3. 15:47
https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/description/?envType=study-plan-v2&envId=top-100-liked 문제접근DFS를 사용하여 p, q를 탐색탐색하며 지나온 TreeNode를 배열로 기록p,q를 찾았다면, 각자 지나온 기록 Treenode 배열에서 겹치는 마지막 element탐색탐색 결과 반환정답코드성능이 처참하다..831msBeats5.74%더보기/** * Definition for a binary tree node. * public class TreeNode { * public var val: Int * public var left: TreeNode? * pu..