![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dxHzPl/btsGKV4xVyq/YI5ScNug6EnhuQaeQG5Hb0/img.png)
npm 캐시 퍼지 npm cache clean --force 1) 윈도우는 2번으로 npm install -g n 최신 버전 설치 n lts n latest 이전 버전 제거 n prune 2) 윈도우의 경우 nvm 설치 https://github.com/tj/n/issues/491 nvm을 통해 최신 버전을 받을 수 있다. nvm install lts node 버전 리스트 업 및 버전 변경 nvm list nvm use 20.12.2 npm 최신 버전 설치 npm install -g npm@latest
maven 사용시 pom.xml 파일에서 profile 태그를 활용하면 프로필 별로 종속성, 플러그인 등을 설정할 수 있지만, com.exam com.exam.test 1.0.0 test development junit junit 4.12 test production org.apache.commons commons-math3 3.6.1 기본적인 프로젝트의 groud id, artifact id, version 등은 profile태그로 나눌 수 없다. 자체적인 라이브러리를 개발하여 구성하는 경우 버저닝을 위해 고민하던 중 pom.xml 을 분리할 수 있는 것을 알았다. 예를 들어 pom-dev.xml, pom-prod.xml 등을 만들고 빌드할 때 -f 옵션을 강제로 지정해주면 pom 파일을 바꿔칠 수 있..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cMDrx6/btsF1KoQLcr/brimQ8AsgkZKW9CKuMwN61/img.png)
라이브러리 master 업로드 시 태그 붙이기. gitlab job stage에 release를 제공해줌 https://docs.gitlab.com/ee/ci/yaml/#releasetag_message 파이프라인 tag를 만들어주는 스크립트는 다음과 같다. tagging: stage: release script: - echo "running release_job" allow_failure: true rules: - if: "$CI_PIPELINE_SOURCE == 'push' && $CI_COMMIT_BRANCH == 'master'" tags: - prods release: tag_name: 'Pipeline.$CI_PIPELINE_ID' description: 'Pipeline.$CI_PIPELIN..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/b7RYhC/btsFAtOgNgW/1wCVA16InZBlYirAkpNMIk/img.png)
gRPC와 REST는 API 설계에 사용되는 2가지 방법이다. API는 정의 및 프로토콜 세트를 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘인데, gRPC에서는 한 구성 요소(해당 클라이언트)가 다른 소프트웨어 구성 요소(해당 서버)의 특정 함수를 직접 또는 간접적으로 호출하는 반면 REST에서는 함수를 직접적으로 호출하는 대신 클라이언트가 서버의 데이터를 요청하거나 업데이트를 요청한다. 해당 정의가 무슨 뜻인지 이해됐다면 해당 포스팅을 넘어가도 좋지만 개념이 조금이라도 흔들린다면 이 글을 읽고 도움이 되길 바란다. RPC(Google Remote Procedure Call)란 네트워크로 연결된 서버 상의 프로시저(함수, 메서드 등)를 원격으로 호출할 수 있는 기능이다. 원격지..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/egXiq3/btsFfvFgyIA/AKwuvNCi1SNAPb5CBFEVnK/img.png)
리소스를 효율적으로 사용하겠다는 섣부른 판단에 객체를 스프링 빈으로 등록해 싱글톤으로 사용할 경우 필자와 같은 참사가 이루어질 수 있으니 이 글을 읽는다면 도움이 되기를 바란다. 물론 잘 알고 쓰면 싱글톤이 안티패턴이라는 불리는 것이 와닿지 않을 것이다. 기술스펙 (Springboot2.7, Freemarker2.3) 문제는 다음과 같았다. DB에 Freemarker로 작성된 A라는 내용이 들어가야하는 상황인데 아주 간혈적으로, 데이터 상 거의 1/50000의 확률로 B라는 내용이 들어갔다. 비즈니스를 바탕으로 소스를 분석하고 문제가 될 만한 코드를 찾기는 쉽지 않았다. 1/50000로 생각하다보니 무엇보다 상황을 재현하는 것이 불가능한 것처럼 느껴졌다. 비슷한 예제코드를 보자. import freema..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bGp6Pj/btsE6CSKDPN/bOtwTyVeviYZc7dpgUbw4K/img.png)
@Async와 ThreadPoolTaskExecutor는 스프링 프레임워크에서 비동기 처리를 위해 사용되는 중요한 요소이다. 성능 개선의 예제로 비동기 작업의 예시를 많이 봤을 것이다. 알아도 손해볼 거 없는 내용이니 간단한 예제 코드를 학습해보자. @Configuration @EnableAsync public class AsyncConfig { @Bean(name = "threadPoolTaskExecutor") public ThreadPoolTaskExecutor threadPoolTaskExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(30); taskE..