분류 전체보기 (21) 썸네일형 리스트형 블로그 이전 공사를 시작합니다 https://semyung.dev 에서 이전 공사를 시작합니다. 저의 공간에 초대합니다! Steven semyung oh semyung.dev [Granola] 프로젝트 1차 이터레이션 회고 그래놀라 그래놀라는 TodoMVC의 데스크탑 버전입니다. 시간을 덤덤하게 사용하고 싶은 마음에 저만의 투두 프로그램을 만들었습니다. 그래놀라에서 사용하는 데이터는 주제(bowl)와 할 일 템플릿(flake), 그리고 할 일 인스턴스(todo)로 구성되어 있어요. 사용한 기술 스택Wails(Webview on Rails): wails는 GO를 백엔드로, webkit window를 프론트엔드로 구성한 프레임워크입니다. 상호 통신은 IPC로 이루어지고, Bind라는 컨셉을 통해 struct의 메소드를 타입스크립트 인터페이스로 노출시킬 수 있습니다. 일렉트론을 안쓰고 Wails를 사용한 이유는 새로운 언어에 익숙해지고 싶은 마음과, 이왕이면 경량화된 프로그램을 만들어보고싶은 마음 때문입니다. GO와 관련된 .. GO의 자동화 테스트 정리 GO의 테스트 환경은 go test 툴과, 테스트와 관련된 컨벤션으로 구성된다. GO에서 테스팅 할 수 있는 요소는 자동화 테스트, 벤치마킹, 예시(go doc에서 활용)가 있다. 이 글에서는 자동화 테스트에 포커스를 두고 기록해본다. 컨벤션go test 툴은 테스트 드라이버로 컨벤션이 맞춰진 패키지를 테스트한다. 이 드라이버는 패키지 디렉토리에서 _go.test 로 이루어진 파일에 대해 테스트를 수행한다. 이 파일에서 자동화 테스트, 벤치마킹, 예시를 작성하는데 자동화 테스트는 TestName과 같이 Test이 접두인 함수에 해당한다. 테스트 함수의 컨벤션은 다음과 같다.// 파라미터는 테스트에 대한 로깅, 리포트와 관련된 메소드를 제공한다.func TestName(t *testing.T) { /* ... [Granola] 002 만드는 것 자체에 재미를 느끼는 경험은 처음인 것 같다. 일이라고 생각하면 그 무게가 자주 압박처럼 느껴지기 때문에 더더욱 이 기분이 소중하다. use, useActionState 모두 사용하기 편하다. 캐싱해둔 상태는 딱 한 개 뿐이고 직접적인 도메인과 관련된 캐싱은 라우트 레이어에서 하고 있다. useActionState는 이런 방식으로 사용하고 있다. use는 context와 promise 처리(1, 2)를 위해 사용하고 있다.Tanstack Router으로 개발을 하고 있다. React Router와 Next가 가지는 장점들을 모두 가져온 느낌이다. file-based routing을 . 할 때 CLI가 자동으로 타입을 만들어주기 때문에 개발 생산성이 되게 편하다. shadcn/ui으로 UI를 .. Two Events 이벤트 드리븐 프로그래밍은 “프로그램의 흐름을 이벤트 중심으로 제어하는 프로그래밍 방식”이다. 브라우저에서 돌아가는 프로그램의 구성 요소(EventTarget)는 “특정 타입” 에 대한 이벤트에 대해 “이벤트 핸들러”를 브라우저에 등록하고, 그 이벤트가 발생하면 브라우저로 하여금 이벤트 핸들러를 호출하도록 한다. 이러한 맥락에서 이벤트는 발생한 사건(occurance)의 성격을 가진다. 하지만 이벤트 드리븐 프로그래밍에서의 이벤트는 단순히 발생한 사건만을 의미하지는 않는다. 때로 이벤트는 무언가를 하도록 한다는 행위(action)으로서의 성격을 가질 수 있다. 자바스크립트 딥다이브 40장을 공부하면서 이벤트의 두 가지 성격에 대해 구분해서 생각하면 좋을 것 같아 이 글을 작성하게 되었다. 사건으로서의 .. [Granola] 001 그동안 개발을 안하다가 오늘부터 데스크탑 프로그램을 개발하기 시작했다. 이름은 그래놀라. 누군가는 밋밋하다며 기피하지만 누군가는 그 담백한 맛을 좋아해서 찾는 시리얼 이름이다. 나에게 그래놀라는 시간이다. 조금은 밋밋하게 썼던 시간들을 바라보고 싶다. 그래서 만들어본다. 아래는 오늘 작업을 진행하면서 느낀점과 해결해야할 과업이다 1. 언어는 뭘 만드는데 그렇게 중요한 것 같지 않다. 언어 자체만 보면 그렇다. 이 프로그램은 GO와 타입스크립트로 만들고 있는데, GO로도 충분히 데스크탑 앱을 만들 수 있다. 2. 개발을 오랜만에 다시 하니 재밌다. 3. 컴파일 할 때 마이그레이션 코드가 실행된다 -_- 앱이 스타트업 될 때 마이그레이션 코드를 실행시키는 걸로 바꿔야 한다. 4. Go의 테스트 시스.. 새해 복 만으로도 돼 https://www.youtube.com/watch?v=QoLGyujSc2k [Javascript] Promise.all Promise.all 메소드에 전달되는 인자는 Iterable | T> 타입의 값이다. 얼핏 보면 간단한 이 구문은 중요한 함의를 가진다. 자바스크립트 언어의 맥락 속에서 Promise 값 자체는 동시에 처리될 수 없다는 것이다. 이유는 실로 간단하다. 자바스크립트 코드는 싱글 스레드로 처리되기 때문이다. Worker나 Worklet은 엔진이 따로 격리되어 작동하지만 그 안에서 자바스크립트 언어는 여전히 싱글 스레드로 처리된다. Promise.all에 배열을 넣고 await을 걸면 배열 안에 아이템이 동시에 처리되는 것처럼 보인다. 근데 Promise Constructor를 실행하는 것은 동기적으로 처리된다. 동시에 네트워크 처리를 하는 건 자바스크립트가 해주는 것이 아니라 자바스크립트를 둘러싼 런타임의.. I/O와 리소스 스트림에 대한 단상 Input/Output은 컴퓨터와 바깥 세상 간의 상호작용이다. 프로그램의 입장에서 Input은 바깥 세상으로부터 받은 전기신호, 또는 데이터이다. 프로그램의 입장에서 Output은 바깥 세상으로 보낸 전기신호, 또는 데이터이다. Input과 Output은 각각과 관련된 동작을 설명하기도 한다.입력은 데이터가 어디에서부터 램으로 이동하는 것, 또는 이동하는 흐름.출력은 컴퓨터가 입력을 받아 결과를 내는 것, 또는 결과를 내는 흐름 으로 쓰인다.디스크, 다른 서버, 다른 디바이스 = 대상 입력 출력대상 --------> 컴퓨터 -------> 대상내가 어떤 대상으로부터 데이터를 읽는다 = 입력내가 어떤 대상으로 데이터를 보낸다 = 출력리소스란프로그램의 세계로부터 그 너머의 .. 우리가 어른들에게 물려받을 수 있는 가장 큰 재산은 힘든 상황속에서도 웃을 수 있는 여유를 갖는 정신인 듯 하다. 이전 1 2 3 다음