본문 바로가기

strapi 호스팅 중 발생한 에러 처리 strapi 호스팅 중 발생한 에러 처리 과정을 공유합니다. 저는 digitalocean을 통해 배포했습니다. 오피셜 가이드를 따라하신 분이면 아마 같은 에러가 발생할 것이라 예상됩니다. digitalocean 배포 로그를 보니 heroku를 사용하는 것 같습니다. heroku로 배포하시는 분들에게도 도움이 되었으면 합니다. Pointing local server at Heroku Postgre produces unexpected error: Could not load js config file config/database.js: Cannot read property ' charAt' of undefined https://github.com/strapi/strapi/issues/8810#issuecomm..
FP 중요 개념 정리4 :: 에러 처리(1) FP 중요 기능 정리 5 :: 함수형 프로그래밍의 에러 처리1 (functor, monad) 명령형 코드는 주로 try-catch 구문으로 예외를 처리합니다. try 문으로 안전하지 않은 코드를 둘러싸는 아이디어 입니다. 함수형 프로그래밍에서도, '위험한 코드를 안전망으로 감싼다' 라는 개념은 동일하게 적용됩니다. 다만, try-catch문은 에러가 발생했을 때 제어를 넘겨주는 방식인 반면 함수형 프로그래밍에서는 특수한 객체를 사용하여, 제어를 역전시키지 않고 데이터 흐름을 유지하며 에러를 처리합니다. 이 특수한 객체를 '모나드'라고 부릅니다. 모나드에 대해 살펴보기 전에 더 넓은 개념인 functor에 대해 살펴보도록 하겠습니다. Functor 값을 특정한 컨테이너로 감싸 불변성을 유지하는 것은 프로그..
FP 중요 개념 정리3 :: 조합기를 사용한 제어 흐름 관리 함수형 프로그래밍에서는 if, for같은 제어 흐름도 함수 조합기를 이용해 구현합니다. 이전에 살펴본 compose, pipe도 함수 조합기의 일부입니다. 이번 포스트에서는 제어 흐름을 관리하는데 자주 사용되는 함수 조합기를 다루어 보겠습니다. 이번 포스트에서 다루게 될 함수들을 간단히 정리하면 다음과 같습니다. identity : 주어진 인수와 동일한 값을 반환. tap : 객체 하나와 함수 하나를 받아, 객체에 함수를 실행하고, 다시 객체를 반환. alternation : 함수 2개를 받아 값이 있으면 첫 번째 함수를, 없으면(ex. null)두 번째 함수를 실행. sequence : 2개 이상의 함수를 인수로 받아, 동일한 값에 대해 각 함수를 차례로 실행하는 함수를 반환. fork(join) : ..
FP중요 개념 정리2 :: 합성 함수형 프로그래밍의 핵심은 문제를 작은 작업들로 쪼갠 후, 이들을 다시 조합하는 것입니다. side effect가 없는 순수한 함수는 합성이 가능합니다. 이렇게 합성된 함수는 그 자체로도 순수한 함수이기 때문에 시스템의 다른 부분을 손대지 않아도 더 복잡한 프로그램의 일부로 다시 합성될 수 있습니다. 함수 합성을 R.compose로 구현하는 예시는 다음과 같습니다. // 서술부 const explode = str => str.split(/\s+/); const count = arr => arr.length; const coundWords = R.compose(count, explode); // 평가부 countWords("hello, world"); //-> 19 함수 합성을 이용하면 위와 같이 서술부와..
FP 중요 개념 정리1 :: 다항함수의 항수 줄이기 함수형 프로그래밍에서는 인수의 개수(항수)가 적을수록 좋습니다. 항수의 개수가 복잡도와 비례하는 경우가 많기 때문입니다. 이번 포스트에서는 다항함수의 항수를 줄여, 더 유연한 함수를 만드는 기능들을 소개합니다. curry 항수가 1개인 순수함수는 한 가지 용도, 즉 단일 책임을 담당하는 가장 단순한 함수이며, 가장 좋은 형태의 함수라고 할 수 있습니다. curry를 사용하면 다항 함수를 단항 함수로 쉽게 변형할 수 있습니다. 다항함수를 curry한 후, 일부 인수만 넣고 호출하면 함수가 실행되는 게 아니라 모자란 나머지 인수가 채워지기를 기다리는 새로운 함수가 반환됩니다 즉, 커링은 함수가 인수를 모두 받을 때 까지 실행을 보류/지연시켜 단항 함수의 순차열로 전환하는 기법이라고 할 수 있습니다. curr..
mirage.js with react.js mirage.js mirage.js는 API 서버를 mocking 하는 기능을 제공합니다. 작동 방식은 클라이언트가 보내는 리퀘스트를 인터셉트해서 mock response를 보내주는 방식입니다. 일종의 가짜 서버를 만드는 방식이라 테스팅 뿐만 아니라 개발에도 활용할 수 있습니다. Mirage is a JavaScript library that lets frontend developers mock out backend APIs. Unlike other mocking libraries, Mirage makes it easy to recreate dynamic scenarios, the kind that are typically only possible when using a real production se..
AWS 인프라를 이용한 페이지 CI/CD 구축 github action -> s3 https://velog.io/@1nthek/GitHub-Action%EC%9C%BC%EB%A1%9C-AWS-S3%EC%97%90-%EB%B0%B0%ED%8F%AC-%EC%9E%90%EB%8F%99%ED%99%94 GitHub Action으로 AWS S3에 배포 자동화 일반적으로는 EC2에 nginx나 apache를 띄우고, static 파일을 업로드하는 식으로 배포를 하는데, 단순히 Vue.js나 React같이 SPA로 된 프로젝트의 경우는 자바스크립트만 동작하면 되기에 서버가 필요없다 velog.io https://weekwith.tistory.com/entry/Nextjs-AWS-S3%EB%A5%BC-%ED%86%B5%ED%95%9C-%EC%A0%95%EC%A0%..
redux를 이용해 react modal을 효율적으로 관리하는 방법 이전에 봤던 코드 중에 전체 프로젝트의 모달을 하나의 컴포넌트에서 제어하는 것을 보았습니다. 이번에 모달을 만들 일이 생겨 관련 내용을 검색해보니 실제로 저와 같은 생각을 하시는 분도 종종 계셨습니다. [Okky 질문글 링크] 링크를 따라가 보시면 댓글에서 Practical Redux, Part 10: Managing Modals and Context Menus 라는 글을 소개하고 있는데, 조금 오래된 글이지만 이 글을 읽고 대략적인 구조를 잡을 수 있었습니다. 본론에 앞서, 이 작업의 목표를 정의하자면 '모달의 상태, 렌더링을 다른 컴포넌트에서 분리하자' 입니다. 자세히 말하자면 다른 컴포넌트에 isOpen 같은 state를 두지 말고 redux 스토어로 관리하는 것이 첫 번째 목표입니다. 그리고 렌더..