전체 글

전체 글

    MySQL 1242 서브쿼리 2행 반환, 조인키 1:N이 원인<img src=">

    MySQL 1242 서브쿼리 2행 반환, 조인키 1:N이 원인

    실무에서 겪은 경험SUMMARY · 3줄 요약현상정산완료·반려 조회 시 일부 주문 500원인환불 주문이 주문번호로 2행 조회됨해결결제번호로 조인해 오류 해소🧭 먼저, 이 글의 배경이커머스 서비스에서 판매자(입점사)가 주문목록을 기간 조건으로 조회할 때 생긴 오류이해에 필요한 데이터는 3가지주문: 주문 1건, 이름표는 주문번호(order_no)결제: 소비자가 결제할 때 만들어지는 행, 이름표는 결제번호(payment_sn)정산매출: 결제 1건마다 배치가 만들어 두는 정산용 행, 결제번호가 곧 PK이고 정산월이 붙음정상 주문은 결제 1행, 정산매출 1행으로 이어짐주문목록의 기간 조건은 정산대기·정산확인·정산완료·정산반려 중 하나를 골라 조회🔁 주문 1건이 결제 2건이 되는 이유: 환불환불이 발생하면 결제..

    MyBatis out of range 에러, 주석 속 #{}가 원인

    MyBatis out of range 에러, 주석 속 #{}가 원인

    실무에서 겪은 경험SUMMARY · 3줄 요약현상재빌드 후 로그인 전면 불가원인주석 속 #{}로 placeholder 개수 불일치해결주석에서 #{} 표기 사용 금지🚀 증상매퍼 XML 정리 후 재빌드하자 로그인 전면 불가로그인 쿼리 실행 시 예외 발생Could not set parameters for mapping: ParameterMapping{property='pw', ...}Cause: org.postgresql.util.PSQLException: The column index is out of range: 3, number of columns: 2파라미터 수 불일치처럼 보이나, SQL 본문의 #{} 개수와는 일치영향: 로그인 API 전체 실패, 화면 진입 불가(P0)🧐 원인: 주석을 다르게 취급..

    nginx 502 원인: 임시포트 고갈과 keepalive 설정

    nginx 502 원인: 임시포트 고갈과 keepalive 설정

    실무에서 겪은 경험SUMMARY · 3줄 요약현상부하 시 502, 앱 로그는 정상원인keepalive 미설정으로 임시포트 고갈해결upstream keepalive 적용, 502 0건🚀 증상부하테스트 중 가상 사용자(VU) 20명 초과 시점부터 502 Bad Gateway 발생특정 URL이 아닌 정적 파일 포함 전 URL에 무작위 분포백엔드 애플리케이션 로그 정상 (에러 미기록)일 502 약 6,000건 누적앱이 502를 인증 실패로 오분류 → 사용자 강제 로그아웃 부작용 발생판단: 앱 로그에 에러가 없는 502는 요청이 앱에 도달하기 전 nginx 단계에서 실패한 것🧐 원인 3중 구조원인은 한 가지가 아닌 3중 구조순서원인502의 직접 원인?1요청마다 공개키 원격 조회(캐시 없음) → 단일 프로세스 ..

    AWS TechCamp란?

    AWS TechCamp란?

    최근 AWS Builders Korea Program이 새롭게 변화한 AWS TechCamp에 참여하면서 느낀 점을 공유하고자 한다.기존 프로그램에서는 이론과 간단한 실습을 중심으로 진행되었지만, 이번 테크캠프는 한층 더 강화된 학습 경험을 제공했다.실시간으로 과외를 받는 듯한 몰입감이 느껴졌고, AWS 서비스를 깊이 이해하고 실전에서 바로 적용해보고 싶다는 열정이 생겼다.  어떻게 진행되나요?TechCamp는 분기별로 3일간의 세션으로 구성된다.매년 3월(Modern App), 6월(AI/ML), 9월(Data), 11월(Every App)을 주제로 진행된다.하루 두 번, 오전 9~12시, 오후 2~5시까지 강의가 열린다.강의는 기초 과정 (레벨 100), 기본 과정 (레벨 100 - 200) , 심화..

    빅데이터의 파일 형식은 무엇으로 해야할까? (feat. Parquet 란?)

    빅데이터의 파일 형식은 무엇으로 해야할까? (feat. Parquet 란?)

    데이터 엔지니어 프로젝트를 진행하면서 컬럼이 수십개에 레코드는 수십만개의 데이터를 다루면서 데이터 유형에 대해 고민하게 되었다. 단순히 보기 편하고 다루기 쉬운 행 기반 형식의 CSV 파일만을 생각했는데 읽고 쓰는 I/O 성능이 느려서 새로운 파일 유형을 찾게 되었다. 그것이 parquet 같은 빅데이터 파일 형식이다. 1. 고민해야할 점데이터가 기하급수적으로 증가함에 따라 효율적인 데이터 저장방법은 무엇일까?데이터를 행과 열로 구성하는 것의 차이점과 이것이 저장 및 쿼리 효율성에 어떤 영향을 미칠까?행 기반 형식으로 데이터를 저장하는 것의 장단점과 쓰기 작업이 많은 작업에 대한 적합성은 무엇일까?빠른 쿼리 속도와 효율적인 압축 옵션 등 읽기 작업이 많은 작업을 위한 열(컬럼) 기반 저장소의 이점은?Pa..

    Airflow 란 무엇인가?

    Airflow 란 무엇인가?

    1. Airflow 소개파이썬으로 작성된 데이터 파이프라인(ETL) 프레임워크Airbnb에서 시작한 아파치 오픈소스 프로젝트가장 많이 사용되는 데이터 파이프라인 관리 및 작성 프레임워크데이터 파이프라인 스케줄링 지원정해진 시간에 ETL 실행 or 한 ETL의 실행이 끝나면 다음 ETL 실행웹 UI 제공데이터 파이프라인(ETL)을 쉽게 만들 수 있게 해줌다양한 데이터 소스와 데이터 웨어하우스를 쉽게 통합해주는 모듈 제공https://airflow.apache.org/docs/데이터 파이프라인을 DAG(Directed Acyclic Graph)라고 부름1개의 DAG는 1개 이상의 태스크(task)로 구성 2. Airflow 구성웹 서버(Web Server)웹 UI는 스케줄러와 DAG의 실행 상황을 시각화해줌..

    Airflow 설치 - Docker

    Airflow 설치 - Docker

    Apache Airflow 공식 홈페이지 - Running Airflow in Docker 에서 참고하였습니다. 1. 시작 전 (Before you begin)Docker Community Edition(CE)을 본인 컴퓨터에 설치합니다. OS에 따라 Airflow 컨테이너가 제대로 실행되려면 최소 4.00GB에서 권장 8.00GB 메모리를 사용하도록 Docker를 구성해야 합니다. 자세한 내용은 Windows Docker 또는 Mac Docker 를 참고하세요.컴퓨터에 Docker Compose v2.14.0 이상 설치해야 합니다. 버전을 확인하려면 `docker compose version` 명령어를 실행하세요.% docker compose versionDocker Compose version v2...

    CodeDeploy - CodePipeline 만드는 도중 실패 및 설명

    CodeDeploy - CodePipeline 만드는 도중 실패 및 설명

    1. 실패 이유 스프링부트 프로젝트 최상단에 appspec.yml 파일을 만들지 않아서 Deploy가 실패했다.appspec.yml은 CodeDeploy에서 배포 관리하는데 사용하는 파일이다.이 파일에 정의된 일련의 수명 주기(lifecycle) 이벤트 후크로 각 배포를 관리하는데 사용된다.AWS 공식문서 - CodeDeploy 애플리케이션 사양 (AppSpec) 파일 을 참고하면 좋다. 2. appspec.yml 생성위 규칙대로 정의를 하면 되고, 나는 크게 정의할 필요가 없기에 간단하게 적어본다. 이렇게 생성 후 Github에 추가하면 자동으로 우리가 만들었던 CodePipeline이 작동한다.그럼 Source -> Build -> Deploy 가 자동으로 실행하게 된다. 3. 성공나는 codepip..