Programming(201)
-
[Prisma] 컬럼명을 수정했지만 여전히 수정된 이름의 컬럼을 찾을 수 없을 때 ~ Prisma와 Typescript의 캐시 ~
문제 상황프로젝트에서 새로운 컬럼을 추가하려고 했습니다. youtubeTitle이라는 컬럼을 추가하고 아무 생각없이 코드를 작성하던 중, 문특 yotubeTitle이라는 이름으로 오타가 발생한 것을 확인했습니다. 종종 발생하던 오타라서 별 생각없이 컬럼명을 youtubeTitle으로 수정한 뒤, generate 후 migrate를 실행했습니다. npx prisma generatenpx prisma migrate 하지만 편집기로 돌아오자 여전히 youtubeTitle을 찾을 수 없다는 에러가 발생하고 있었습니다. 어라? 대체 뭘 잘못한거지. 결국은 ChatGPT에게 도움을 요청하고야 맙니다.개체 리터럴은 알려진 속성만 지정할 수 있으며 '(Without & YoutubeAudioDownloadUncheck..
2025.04.28 -
[Flutter] GoRouter의 RouterDelegate와 RouteInformationProvider를 사용한 현재 라우트 추적
Flutter의 GoRouter를 사용해서 라우트를 구현하던 중, 전체 페이지에 공용으로 출력해야하는 UI를 라우터에 따라 변경해야하는 일이 있었습니다. RouterDelegate.addListener()를 호출해서 이벤트 핸들러를 등록해서, 라우트가 변경될 때마다 ValueNotifier의 값을 변경하는 방식으로 UI를 업데이트하여 간단하게 해결... 된다고 생각했지만, RouterDelegate.currentConfiguration.uri를 참조해서 업데이트하도록 작성했더니, push()를 사용해서 페이지를 이동했을 때는 ValueNotifier가 정상적으로 업데이트되지 않았습니다.한참을 고민하던 중 RouterDelegate.currentConfiguration.uri를 참조하는 대신, RouteI..
2025.04.23 -
[Flutter/iOS] 자체서명 인증서(Self-signed certificate)를 우회한 HLS 스트리밍 구현 / GCDWebServer를 사용한 로컬 프록시 서버 구현
문제 배경Flutter를 사용해서 HLS로 영상 스트리밍 기능을 구현해야 하는데, 스트리밍 서버가 동작하는 IoT 장치에서는 외부에서 접속할 수 있는 공개망에 연결되어 있다는 보장이 없었습니다. 보안상의 이유로 내부망에 연결되어서 사용되는 경우가 대부분이고, 공장에서 생성되는 시점에 HTTPS를 지원해야하다보니 Self-signed Certificate를 사용하고 있었습니다. 처음에는 Flutter에서 제공하는 video_player 패키지를 사용하려고 했으나, 애석하게도 Self-signed Certificate를 처리할 수 있는 방법이 없었습니다. 결국 네이티브에서 제공하는 플레이어를 사용하기로 결정했는데, Android는 전체적인 SSL 연결을 커스터마이징할 수 있는 기능을 제공하기 때문에 어렵지 ..
2025.04.21 -
Cursor와 함께 알아본 프로젝트 구조
들어가며프로젝트 구조는 코드의 가독성, 유지보수성, 확장성에 직접적인 영향을 미치는 중요한 요소다. 평소 코드를 작성하던대로 작성하다가 문득 프로젝트 구조를 이대로 가져가는게 옳은지 고민하게됐고, Cursor에게 보편적인 프로젝트 구조를 물어보게됐다. 그런고로 이번 글에서는 리팩토링 과정과 함께 몇몇 프로젝트 구조에 대해 Cursor에게 물어본 내용을 정리해보고자 한다.초기 구조처음에는 생각없이 기능을 구현하다보니, 다음과 같이 모든 관련 코드가 하나의 파일(jobQueue.ts)에 있었다.// 초기 jobQueue.tsexport const JOB_STATUS = { QUEUED: 'queued', DOWNLOADING: 'downloading', // ... 기타 상태들} as const;exp..
2025.04.14 -
[Flutter] Isolate를 활용한 HTTP 클라이언트 리팩토링과 iOS에서 Isolate 초기화 문제
Flutter에서 Isolate를 활용한 HTTP 클라이언트 리팩토링 Flutter 앱에서 네트워크 요청은 매우 빈번하게 사용되지만, Flutter 자체는 싱글 스레드로 동작하다보니 메인 UI 스레드에서 무거운 네트워크 작업을 처리하면 앱이 버벅거리거나 응답성이 떨어집니다. 특히 지금 진행하고 있는 프로젝트는 P2P를 통해 IoT 장비와 직접 통신을 하면서, 동시에 클라우드 서버와도 통신을 하는 구조였기 때문에 리렌더링이 반복되면 네트워크 처리 속도가 떨어지는 문제가 있었죠. 이 문제를 해결하기 위해 HTTP 통신을 Isolate에서 처리하도록 HTTP 클라이언트를 구현해서 네트워크 속도에 대한 문제를 개선했는데, iOS에서 앱을 구동할 시 문제가 발생했습니다. 메인 Isolate와 HTTP 클라이..
2025.04.11 -
TypeScript에서 문자열 리터럴 유니온 타입 가독성 높이기
GitHub - zerodice0/youtube_thumbnail_generatorContribute to zerodice0/youtube_thumbnail_generator development by creating an account on GitHub.github.com 문자열 리터럴 유니온 타입이란? TypeScript에서 문자열 리터럴 유니온 타입(String Literal Union Type)은 변수가 특정 문자열 값들 중 하나만 가질 수 있도록 제한하는 타입 시스템 기능이다. 다른 언어의 enum값이랑 비슷한데, Typescript가 제공하는 enum값에는 알려진 문제점들이 여럿 있다고 들어서 되도록이면 enum값 대신 문자열 리터럴 유니온 타입을 사용하고 있었다. 기존에는 queued,..
2025.04.09