목록분류 전체보기 (361)
민프

회사에서 동료가 나에게 "이거 왜 이런 결과를 내주는거에요?" 라고 했을 때 AI에 대한 아키텍쳐를 비유를 들어가며 설명을 해줬었는데문득 아래와 같은 생각이 들었다. 인공지능의 Blackbox를 어떻게 쉽게 설명할 수 있을까...? 알아 보던중 블랙박스 모델을 해석하는 방법론이 있어서 알아보았다. 내가 알아본 방법론은 LIME, SHAP, VSW가 있고,사내 프로젝트에 대한 해석 방법론은 VSW를 택하여 진행하고 있다. 그 중 하나인 LIME을 먼저 소개해보려고 한다.0. Abstract머신러닝 모델은 점점 더 강력해지고 있지만, 그만큼 내부 구조를 이해하기 어려운 블랙박스가 되고 있습니다.특히 딥러닝이나 앙상블 모델 같은 경우는 높은 정확도를 보여주지만, "왜 이런 결과가 나왔는가?"를 설명하기가 어렵..

1. 들어가며백엔드 개발을 하다 보면 ORM(Object Relational Mapping)을 사용하게 됩니다.ORM은 객체지향 언어에서 데이터베이스를 다루기 쉽게 해주는데, 이 과정에서 가장 많이 언급되는 두 가지 패턴이 바로 Active Record 패턴과 Data Mapper 패턴입니다. NestJS에서 TypeORM을 사용할 때도 이 두 패턴을 이해하고 선택하는 것은 중요합니다. 이번 글에서는 두 패턴의 차이와 특징, 그리고 NestJS에서 어떤 식으로 활용할 수 있는지 정리해보겠습니다. 2. ORM과 TypeORM2-1. ORM(Object Relational Mapping) 이란?ORM은 객체지향 언어(클래스)와 관계형 데이터베이스(테이블) 사이의 불일치를 해결하기 위한 기술이고,즉, 테이블 ..
1. 서론 : 왜 Mapper를 고민하게 되었나?실무에서 API를 만들다 보면 이런 고민을 하게 되었습니다. 클라이언트 입장에서 같은 데이터(예: User 정보)를 받을 때마다 항상 동일한 형식으로 받아야 한다.그런데 API가 여러 개 있다 보니, 응답 안에 유저 정보가 들어갈 때마다 응답 포맷을 매번 새로 만들어야 하는 불편함이 생긴다.더 큰 문제는, 유저 정보에 새로운 필드(예: profile_image)가 추가되면,모든 API 응답 로직을 하나하나 다 수정해야 한다는 점이다.이런 문제를 해결하기 위해 저는 Mapper 패턴을 도입했습니다.Mapper는 Entity ↔ DTO 변환을 전담하는 계층으로, 덕분에 모든 API에서 일관된 리턴값을 보장할 수 있었습니다. 또한 NestJS에서는 Reposit..

0. ETL / ELT를 진행하는 이유결론부터 말씀드리자면데이터를 분석 가능한 데이터로 만들기 위함 입니다. 1. ETL 이란?ETL은 Extract(추출), Transform(변환), Load(적재)의 약자입니다.데이터를 수집해서 분석 가능한 형태로 바꾸고 저장하는 전 과정을 말하죠. 예를 들어 이런 상황을 떠올려볼까요? “매장에서 하루 동안 판매된 정보를 모아서, 다음 날 오전 보고서로 만들기.” 이 과정 뒤에는 거의 ETL이 있습니다. 2. ETL의 3단계 구조 자세히 보기1. Extract (데이터 추출)다양한 소스에서 데이터를 “가져오는” 단계입니다.예시:RDS(MySQL 등)에서 매출 정보 가져오기API로 공공데이터 수집하기로그 파일에서 사용자 행동 정보 추출하기보통 정형/비정형 데이터를..
회사 프로젝트에서 AI 학습용 데이터를 수집하고 가공하는 과정에서 "데이터 저장소를 어떻게 구성하는가?"에 대한 생각을 하는데 그때마다 헷갈리는 용어가 있어서 정리해보려고 합니다. DatabaseData WarehouseData LakeData Mart오늘은 이 4가지 개념을 쉽게 정리해보겠습니다. 1. 데이터 베이스(Database)운영 데이터를 저장하는 곳예: 주문 내역, 고객 정보, 발주 기록 등일반적으로 RDS(MySQL, PostgreSQL 등)를 의미OLTP 중심 (Online Transaction Processing)실시간 CRUD(Create, Read, Update, Delete) 처리에 최적화AI 학습보다는 운영 중심사용 목적: 서비스 운영 예시: 주문 1건이 발생할 때 DB에 바로..
문제 상황NestJS + TypeORM으로 주문/옵션/재고 관리 시스템을 구축하면서, 아래와 같은 에러가 발생했다.TypeORMError: Cannot update entity because entity id is not set in the entity. 당황스러웠던 점은 OptionRecipe를 저장하는 로직에서 단순히 material_id만 넘겨줬을 뿐인데도 에러가 터졌다는 점이다. 재현 코드await queryRunner.manager.save(OptionRecipe, { product_option: optionEntity, store: group.store, material: { material_id: recipe.material_id }, // !!에러 발생!! option_recipe_..

ECS에서 서비스를 운영할 때, Task를 어떤 서브넷에 배치해야 할까요?처음에는 “Public Subnet에 배포하면 더 간단하잖아?“라는 생각이 들 수 있지만,운영 환경에서는 보안성과 안정성을 위해 Private Subnet을 사용하는 것이 권장됩니다. 이번 글에서는 왜 ECS Task를 Private Subnet에 배포해야 하는지,그리고 Private Subnet에서도 인터넷을 사용할 수 있게 하는 NAT Gateway 구성 방법을 정리해보겠습니다.왜 Public Subnet이 아닌 Private Subnet에 ECS를 배포해야 할까?1. 보안성 강화Public Subnet에 배포된 ECS Task는 퍼블릭 IP가 부여되며 외부 인터넷에서 접근이 가능합니다.이는 해킹, 취약점 공격 등 보안 위협에 ..

Bastion Host에 대해서 알아보도록 하겠습니다.1. Bastion Host란?Bastion [ˈbæstiən]. "요새", "보루"를 뜻하는 영어 단어이다. 특히 성형 요새를 의미하는 모양이다. 그러나 자주 사용되지는 않고 이러한 의미로는 Fortress가 압도적으로 많이 쓰인다.- 나무위키, 위키백과, 네이버 사전 Bastion Host는 Private Subnet에 위치한 리소스에 접근할 수 있도록 중간에 배치하는 ‘관문 서버’입니다.외부 네트워크와 내부 네트워크 사이에서 SSH 또는 터널링을 통해 보안된 접근 경로를 제공합니다.2. 왜 Bastion Host가 필요한가?항목일반적인 접근Bastion Host 사용 시RDS 보안퍼블릭 IP 노출됨퍼블릭 IP 없이 내부만 노출보안그룹 설정IP 기..

서비스 운영을 하다 보면 JWT_SECRET, DB_PASS, REDIS_HOST 같은 민감한 설정값을 안전하게 관리해야 합니다.예전에는 .env 파일로 로컬에 숨겨두곤 했지만, 클라우드 인프라에서는 AWS Systems Manager Parameter Store(SSM) 또는 AWS Secrets Manager를 활용하는 것이 안전하고 효율적인 방법입니다. 특히 저는 ECS로 배포를 하면서 .env.dev, .env.prod 등등.. 환경변수와 관련 된 것들을 컨테이너와 같이 올릴 수 없기에 SSM을 선택하여 진행하였습니다. Git Actions CICD를 이용해서 배포를 하고 있어서 Git Actions의 Actions secrets and variables를 사용하여 해보려고 했지만 dev, pr..

1. 도메인 구입 (가비아) 2. Route 53 호스팅 영역 생성AWS > Route 53 > 호스팅 영역 생성도메인 이름: 가비아 도메인 넣기 (ex. example.co.kr)타입: 퍼블릭 호스팅 영역생성 후 -> NS 레코드 4개가 나옴 (ns-xxxx.awsdns-xx.com 등) 3.가비아 도메인에서 네임서버 변경가비아 > 내 도메인 > 네임서버 변경기본 네임서버 -> “사용자 지정 네임서버” 선택Route53이 보여준 NS 레코드 4개 복붙 (마지막 '.'을 제거해주셔야 합니다.)이걸로 가비아 -> Route 53 연결 완료! 주의사항현재 가비아에서 구매한 도메인에서 이미 레코드들이 있었는데 네임 서버를 바꾸게 되면 더이상 가비아의 네임서버에서는 동작하지 않고, Route53을 통해서 동..