꾸준히 재밌게
728x90
728x90
article thumbnail
클라우드 비용을 줄여보자 (AWS 비용 절감 시도 - 1)
트러블슈팅 2024. 4. 24. 08:24

프리티어 만료 며칠 전, AWS에서 메일하나가 왔다. 벌써 AWS 프리티어를 사용한지 1년이 다되어가나보다. 아래는, 프리티어에 대한 총 사용량과, 문제의 지지난달 요금이다. 추가로, 로드밸런서의 로깅용으로 S3를 사용했는데 따로 잡히지는 않은 모습이다. 다른 프리티어 사용자분들께 여쭤보고, 포스팅도 찾아보고 해봤지만, 나처럼 요금이 많이 나오는 경우가 잘 없나보다. 만료가 되고서야 한 3~5만원정도 요금이 잡히는 것 같았다. 처음부터 많이 나오지는 않았는데, 과금이 많이 발생한 시점이 사이드 프로젝트를 프론트, 백엔드 모두 배포하여 사용하면서 개발 컨테이너, 프로덕션 컨테이너까지 분리하여 총 네개의 컨테이너를 사용한 시점부터였다. 관련 기술블로그들을 정독해봤지만, 당최 무슨말인지 이해하려면 너무 오래걸..

article thumbnail
[NestJS] Failed to catch error thrown by guard in nestjs in interceptor / guard의 uncaughtException
트러블슈팅 2024. 4. 9. 16:36

Guard에서의 uncaughtException 새 프로젝트를 진행중인데, 에러를 캐치하지 못해서 서버가 뻗어버렸다. 바로 본론으로 들어가서, 프로젝트의 에러 핸들링 설계는 아래처럼 구성했었다. 에러 발생 > 인터셉터에서 에러 로깅 및 필요에 따라 WebHook 전송 > 필터에서 클라이언트에 보낼 에러 포맷 정의 이러한 방식의 설계는, NestJS의 요청 응답 사이클과 각 구성요소의 역할에 대해 완전히 이해하지 못했기 때문에 만들어졌다. NestJs req-res lifecycle Interceptor에서 간과한 부분이 있었다. 클라이언트에서 보낸 API 요청이 프로젝트 전역에 설정한 Global Interceptor에서 가로채기 전에 가드에서 에러가 발생했다. 그렇기에 Exception Intercep..

article thumbnail
[Grafana Loki] Data source connected, but no labels received. Verify that Loki and Promtail is configured properly
트러블슈팅 2024. 3. 8. 14:05

에러 원인 라벨 설정 시 설정했던 라벨이 존재하지 않음. 이는 로키는 제대로 연결되었지만, 로그 파일을 제대로 프롬테일에서 받아오지 못했음을 의미한다. 본인의 경우는 프로젝트의 도커컴포즈 볼륨 설정에서, 경로가 제대로 작성되지 않아 망운트가 제대로 되지 않았음. 걸린 시간 3시간 남짓 에러 해결 프로젝트의 로그생성 docker exec -it containerName /bin/sh 프로젝트 내부에서는, 루트 경로에 logs폴더 내부에서 날짜, 에러레벨에 맞게 분기처리를 하여 로그를 생성했다. 호스트 서버에서, 위 명령어를 통해 컨테이너 내부로 진입하는데, 진입하자마자 logs경로에 로그가 잘 들어오고 있길래 당연히 잘 동작할거라 생각했지만 그라파나에서 로키의 ip:port로 커넥션을 연결하는 과정에서 계..

article thumbnail
[NestJS] 코드 리팩토링하기 - 응집도를 높이고 의존성을 명확하게
트러블슈팅 2024. 1. 21. 21:59

서론 요즘 좋은 코드 라는 키워드에 대해 특히 변경과 재사용이 용이한, 높은 응집도와 낮은 결합 관계 에 대해 많이 생각하고 있다. 특히 기존 레거시를 모두다 걷어내기에는 시간적으로 애로사항이 있어 틈틈이 관련된 프로젝트에 들어갈 때, 해당 로직에 대한 레거시들을 최대한 바꾸려고 노력하고 있다. [네이버클라우드 개발자 스토리] 좋은 코드란 무엇일까?🤔 #클린코드 이야기 📍 “좋은 코드를 짜야 한다”​ medium.com 특히, 상품의 리뷰를 불러오는 함수를 수정해야 하는 일이 최근에 있었는데, 상품군 7~8개의 하위 상품에 대한 리뷰를 모두 다른 함수에서 불러오는 것을 보고 경악을 금치 못했다. (급한 사항이라 판단되어 우선 프로덕션에 수정해서 반영한 뒤 구조를 수정하였다..) 나도 최근에 신규 프로젝트..

article thumbnail
[NestJS] TypeORM 0.3 버전의 CustomRepository 생성, Repository패턴 적용하기
트러블슈팅 2024. 1. 5. 10:48

0.2 버전 사내 서비스의 TypeORM버전은 0.2버전대를 사용중이다. 0.2버전대에서는 @EntityRepository 데커레이터를 지원하여, Repository를 커스텀화하여 리파지토리 클래스를 생성할 수 있었고, 이에 따라 Service와 Repository레이어를 분리하여 결합도를 낮출 수 있었다. @Injectable() export class RsvcenterService { constructor( @InjectRepository(CustomRsvRepository) private readonly customRsvRepo: CustomRsvRepository, //DB 관련 로직 예외처리 Provider private readonly customEm: CustomEntityManager, )..

article thumbnail
[TypeORM / QueryBuilder] Relation with property path confirms in entity was not found
트러블슈팅 2023. 12. 8. 11:51

최근 레거시 코드 중 DB 관련 로직들을 거의 대부분 쿼리빌더로 변경하는 작업을 완료하고, 검수중에 있다. 그 과정에서 발생한 에러들을 하나하나 정리하여 남기려고 한다. 에러 메세지 원인 관계 매핑이 정확하지 않아서 발생했다. 나의 경우는 아래 이유 때문에 발생했는데, TypeORM의 쿼리빌더를 사용하는 과정에서, 커스텀 리파지토리를 생성하여, 해당 리파지토리에서 두 테이블을 조인해서 사용했는데, 처음 INNER JOIN을 시도한 테이블에서, enterprise라는 엔터티에 대한 정의를 내리지 않았기 때문에 발생했다. 해당 엔터티를 살펴보면, export class EasyBookWhichEntEntity { @PrimaryGeneratedColumn({ type: 'int', name: 'no' }) ..

article thumbnail
[NestJS] JWT secretOrPrivateKey must have a value
트러블슈팅 2023. 11. 2. 11:21

에러 메세지 원인 .env에 작성해 둔 JWT_SECRET이라는 이름의 환경변수를 읽는 과정에서 발생한 에러로 JWT 토큰 발행 시 반드시 secret key가 있어야 하는데 읽지를 못한 것으로 보인다. 공식 문서의 JWT 가이드 대로 따라하며 토큰 발급 시 발생했으며, 모듈에서 설정한 secret을 JwtModule에 등록하지 못했다. 환경변수를 읽어오기 전에 secret가 먼저 register되는 것 같아 보였다. @Module({ imports: [ UserModule, JwtModule.register({ global: true, secret: process.env.JWTSecret, signOptions: { expiresIn: '60s' }, }), TypeOrmModule.forFeature..

article thumbnail
[AWS] 왜 내 S3 버킷정책은 작동하지 않는가? (로드밸런서 로그 생성 및 S3 파일 자동 삭제 정책 생성하기)
트러블슈팅 2023. 10. 20. 17:14

서론 현재 간단하게 개발하고 싶은 것들을 실서버에 배포하고 계속해서 무언가를 적용해보려고 EC2 인스턴스를 통해 도메인을 등록, 배포 후 ALB를 적용시킨 상태이다. 모의투자, 웹소켓을 이용한 실시간 랜덤 데이터를 직접 만들고 투자할 수 있게 방향성을 잡고있는데, 우선 배포와 노드에 대한 적응이 먼저라 생각하여 간편한 계산기 애플리케이션을 만들었고 계속 여기에 무언가 해 나갈 생각이다. 각종 간편 계산기 모음 복리 계산기, 전역일 계산기, 기본 계산기 등 간단하게 사용할 수 있는 계산기를 제공합니다. mananaweb.net NGINX 502 에러 로그를 확인하고 싶은데, 단순 NGINX에는 에러로그가 남지 않아서 ALB 문제일 것이라 생각하여 S3 버킷에 로드밸런서 로그를 남겨놓은 상태이다. 과금때문에..

728x90
728x90