목록알게된 것 (5)
마로의 개발일지
NestJs에서 인증/인가를 구현하기 위해 passport 문서를 보고 참고한 사람들이 많을 것이다. 하지만 문서에는 Extending guards에서 JwtAuthGuard를 확장하는 법만을 가르쳐 주고 바로 아래 Enable authentication globally에서는 Global 설정하는 법과 @Public을 이용해서 인증 없이 API가 호출될 수 있도록 설정하는 법만을 가르쳐줄 뿐 동시에 사용하는 법을 알려주진 않는다. 조금만 생각해보면 당연한 사실일 수도 있지만, 나는 약간의 삽질을 한 뒤에 깨달았기 때문에 혹시나 누군가에게 도움이 되길 바라며 코드를 첨부한다. import { ExecutionContext, Injectable, UnauthorizedException, } from '@ne..

서버에서 스마트 컨트렉트 호출하는 부분을 구현해 보았다. local 환경 구성 정보는 다음과 같다. - ganache(7.9.0) - remix ide(0.8.18+) - node.js(18.17.1) - ethers.js(6.7.1) Ganache 먼저 ganache 클라이언트를 실행시켜 블록체인을 생성 및 실행한다. 상단의 RPC SERVER 주소를 이후에 사용하게 되며 원한다면 설정에서 수정할 수 있다. Remix IDE 이후 remix ide에서 간단한 스마트 컨트렉트 파일을 작성한다. // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.8.0 console.log(res)); await contract.setData(10).then((res) =>..
com.mongodb.MongoException: org.springframework.dao.DuplicateKeyException: E11000 duplicate key error collection 어느 날 모니터링 채널에 해당 에러가 올라왔다. 이전까지 본 적이 없는 에러였는데 찾아보니 key 값이 중복으로 Insert 되어 발생한 에러라고 했다. 다음과 같이 서비스를 구현하고 테스트했을 땐 잘 되던 로직이 간헐적으로 해당 에러를 반환하고 있었다. 대상 데이터를 찾고 상태를 변경한 후 다시 저장할 때 Update가 아닌 Insert가 되어 발생한 것 같았다. 분명 @Transactional로 인해 하나의 트랜젝션 안에서 찾은 데이터기 때문에 당연히 Update로만 실행이 될 줄 알았는데 내가 모르는..

이전 포스팅에서 Java에서 Aws AppConfig 사용하기를 소개했다. 하지만 리프레시 토큰으로 계속 갱신해서 사용하지 않으면 호출에 상당한 시간이 걸려 다른 방법을 찾게 되었고 그 방법으로 배포된 AppConfig 항목을 Redis 캐시에 저장해서 사용하기로 했다. 사실 AppConfig를 이렇게 쓰는 건 비효율적인 것 같지만 당장은 AppConfig에 저장해서 사용하는 항목이 거의 없어 이렇게 사용하기로 했다. 아무튼 그렇게 하기 위해선 AppConfig가 배포될 때 자동으로 Redis 캐시의 항목을 갱신하는 로직이 필요한데, AppConfig에는 Extension을 통해 배포 상태에 따라 호출하는 항목들을 설정할 수 있다. 새로운 Extension을 생성하기 위해 Create extenstion..
편의점 택배사들의 점검이나 에러 시 배송신청을 막기 위해 배송 신청 여부를 Flag 값으로 설정한 뒤, AppConfig를 통해 조절하도록 하는 작업을 진행했었다. api 호출 시 AppConfig를 직접 조회에서 쓰도록 하기 위해 Java Application에 직접 AppConfig를 조회하는 로직을 추가했었다. 이전에 아무도 해본 적이 없어 공식문서를 보면서 진행했고 그 과정을 기록했다. 공식 문서 읽어보기 Step 6: Retrieving the configuration - AWS AppConfig 해당 문서를 살펴보면 Your application retrieves configuration data by first establishing a configuration session using th..