목록개발 (312)

오늘은 next.js로 프론트엔드 개발하던 중 사용한 zustand 라이브러리에 대해 포스팅한다. 원래는 zustand를 쓸 생각이 없었다.다만 recoil을 쓰다보니 아래와 같은 에러가 발생했다.이유를 찾아보니, react 15버전 이상에서는 recoil이 호환성 에러가 발생한다는 거.사실 이 원인을 모른 채 gpt를 붙잡고 한 시간 가까이 씨름하다 구글링으로 알게 되었다. 하참.그리고, 나는 라이브러리 하나 때문에전체 프로젝트의 버전을 기존 19버전에서 14버전까지 내릴 생각이 없었기 때문에 zustand를 사용하기로 했다. zustand 를 쓰는 방법은 단순하다.1. 먼저 해당 라이브러리를 설치한다.yarn add zustand 2. 이후, 상태 관리 스토어를 설정한다. 내 경우, 유저 정보를 설정..

오늘 포스팅에서는 graphQL을 스프링 부트에 적용하는 방법에 대해 다룬다. 먼저 아래를 참고하여 의존성을 추가한다.// build.gradle// graphql 스타터 라이브러리implementation 'org.springframework.boot:spring-boot-starter-graphql' // GraphQL Java에서 제공하지 않는 추가 스칼라 타입들을 사용할 수 있도록 해주는 라이브러리implementation 'com.graphql-java:graphql-java-extended-scalars:21.0'// application.yml graphql: schema: printer: // 서버 구동 시 실제 graphQL 스키마 파일 출력 ..

오늘은 npm에 라이브러리를 배포해보았다.nest.js를 쓰면서 class-validator의 한계로 인해 매번 커스텀을 해야한다는 게 불편하기도 했고,개발자로서 나름의 발자취를 남기고 싶은 마음도 있었다. 때문에, class-validator를 계승하는 방식으로, 커스텀 데코레이터를 제작하기로 했다. 이왕 만드는 김에, 타입스크립를 사용하고,cjs(CommonJS)와 ESM(ES Module) 환경에서 모두 사용할 수 있도록 설계하기로 했다. * CJS와 ESM을 모두 지원하는 이유- Node.js나 Nest.js는 여전히(CommonJS) 형식을 주로 사용- Next.js 등은 ESM을 기본으로 사용하기 때문에,패키지를 다양한 프로젝트에서 사용할 수 있도록 하기 위해두 형식을 모두 배포하는 게 중요하..

이번 포스팅은 Docker-compose 를 사용하며, 데이터베이스를 백업하는 방식에 대해 다룬다. 먼저, 해당 포스팅을 작성하기 전, 나는 다음과 같은 문제를 겪었다.- Nest.js 를 Docker-compose 를 활용해 개발 중이었다.- 그리고, Docker 컨테이너 안에서는 docker exec 명령어 자체가 불가능한 상황이었으며- 따라서 DB 백업 명령어를 서버 안에서 직접 실행할 수 없는 문제가 발생했다. 즉, Docker 컨테이너 내부가 아닌 외부에서 백업 명령어를 수행시키면 될 일이다.해결 방식은 다음과 같다.- Nest.js는 백업 요청(.todo 파일)만 생성한다.- 호스트(내 맥북)에서 .sh 파일(backup-watch.sh)이 백그라운드로 실행되게 하고- .todo 파일이 생겼는..

홈서버를 구축해보고자, '일단' 라즈베리파이5를 구매했다.먼저, 해당 설치 방식은 SD카드가 필요하니 참고할 것.아래 해당 홈페이지에서 OS를 설치할 수 있다.https://www.raspberrypi.com/software/ 현재 자신의 PC에 맞는 운영체제를 선택 후, Raspberry Pi imager를 설치해준다. 설치가 완료되면, 아래와 같은 화면이 뜨는데자신의 라즈베리파이 디바이스 모델, 원하는 OS(추천하길래 64Bit OS로 설치)그리고 설치를 원하는 SD 카드를 선택한다. 이후 설치된 파일을 라즈베리파이에 옮겨, 와이파이 및 추가적인 설정을 완료한다.(내 경우, 라즈베리파이와의 인풋 연결을 위해, 방에 있는 마우스와 키보드를 모두 꺼내야 했음 ㅡ.ㅡ) 여자저차 세팅을 완료했는데, 키보..

Spring boot를 사용 중에 있어, 내 서버의 에러가 곧이 곧대로 반환되는 게 마음에 들지 않았다. 따라서, 클라이언트에 보여지는 건, 프론트엔드 개발자와 약속한 코드가 보여지고직접적인 에러는 서버 콘솔에서 로그로 남게끔 설정하는 과정을 다룬 포스팅을 남긴다. 먼저, global exception handler를 적용하는 이유는 다음과 같다.서버를 만들다보면 어떤 이유에서든 예상하지 못한 예외가 발생할 수 있는데, 이에 대해 매번 try-catch 로 직접 처리하는 것은 비효율적이고 지저분하며, 잊어버릴 수도 있다.따라서, 서버 전역에서 예외를 통합 관리하는 구조가 필요한데, 해당 기능을 해주는 것이 해당 핸들러다.// CustomException.javapackage com.chessy.excep..

이번 포스팅은 스프링부트에서 Api docs를 설정하는 방식에 대해 다룬다.(아마 다음 포스팅은 GraphQL 설정 방식에 대해 다룰 듯 싶다.) Api docs를 사용하기 있어, 먼저 해당 기능 사용을 돕는 라이브러리를 추가한다.// build.gradledependencies { implementation 'org.springframework.boot:spring-boot-starter-web' // Swagger implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0' implementation 'org.springdoc:springdoc-openapi-starter-common:2.5.0' ..

오늘은 몇날 며칠 숙고했던 Spring boot 에서의 Docker 환경 설정에 대해 다룬다. 포스팅에 앞서, 겪고 있던 문제에 대해 설명하면, 소스 코드 변경 시 해당 변경 사항이 적용되지 않은 채 docker가 재로딩되는 문제였다.재로딩 자체는 의도했던 것이었지만, 변경된 소스 코드가 적용되지 않은 채 변경되었다는 게 문제. 따라서, 마침내 승리한 기록을 남기고자, 미래에 나에게 전하고자 중점 소스 코드 위주로 해당 포스팅을 남긴다. 1. build.gradle 설정을 아래와 같이 추가한다.// Spring Boot DevTools 의존성 추가implementation 'org.springframework.boot:spring-boot-devtools'// bootRun 태스크 설정bootRun { ..