프록시 서버를 활용한 API 화이트리스트 우회
·
이슈 해결 일지
회사에서 외부 API와 통신할 일이 생겼는데, 해당 API 서버가 화이트리스트 방식으로 특정 IP에서만 요청을 받을 수 있도록 제한되어 있었다. 보통 이런 경우 NAT 게이트웨이를 통해 할당받은 Public IP로 통신을 한다. 하지만 문제는 로컬 개발 환경에서는 VPC 상의 NAT 게이트웨이를 통할수 없어 직접 API 호출을 할 수 없다는 점이었다. API 테스트를 할때마다 배포를 할 순 없기 때문에, EC2 기반의 프록시 서버를 활용해 로컬에서도 외부 API에 접근할 수 있도록 구성했다.NAT 게이트웨이와 프록시 서버의 차이 NAT 게이트웨이와 프록시 서버는 모두 내부 네트워크에서 외부로 나갈 때 사용하는 방식이지만, 역할과 방식이 다르다. NAT 게이트웨이프록시 서버(EC2 기반) 주요 목적프라이빗..
Airbyte 배포부터 ClickHouse 연결과 실행 - 문제 해결기
·
이슈 해결 일지
ClickHouse를 새로운 데이터 웨어하우스로 사용하기로 결정하고, 데이터 파이프라인을 새로 고민해야하는 상황이 되었다. 만성적인 중앙 데이터팀의 리소스 부족으로 Airbyte라는 도구를 도입해, 비개발자도 원하는 데이터를 직접 ClickHouse로 옮길 수 있을지 테스트했다. 공식 Helm Chart를 사용해 Airbyte를 배포했는데, 예상보다 여러 오류가 발생해 이를 해결하는 과정을 정리한다. Airbyte란?Airbyte는 다양한 데이터 소스에서 데이터를 추출(Extract)하고, 대상 데이터 웨어하우스(예: ClickHouse)에 적재(Load)하는 ELT(Extract, Load, Transform) 도구다.기존 ETL 방식과 달리 ELT는 데이터를 먼저 적재한 후에 변환을 진행하는 방식이다..
Kafka 파이프라인에 따른 DB 부하줄이기 여정
·
이슈 해결 일지
이전글 읽기 > https://hajinnote.tistory.com/105 ksqlDB를 이용해 실시간 이벤트 스트리밍 최적화하기https://medium.com/mildang/ksqldb를-이용해-실시간-이벤트-스트리밍-최적화하기-53b403dc4529 ksqlDB를 이용해 실시간 이벤트 스트리밍 최적화하기 들어가며 medium.com 이번에 kafka와 ksqlDB를 사용해 데이터 파hajinnote.tistory.com배경작년 B2G 사업 시연에 사용될 학생의 학습기록 대시보드를 실시간 반영이 되는 형태로 작업해달라는 요청이 왔다. 당시 마감일이 너무 급박해 최적화를 완전히 진행하지 못하고 빠르게 설계해서 개발하고 배포를 했다. 시연이 무사히 끝나고 본격적으로 사용하기 위해 운영 환경에도 배포를(..
DB 격리수준과 트랜잭션에 따른 데이터 일관성 문제
·
이슈 해결 일지
kafka 실시간 처리를 하며 발생한 문제이다. 문제에 앞서 먼저 실시간 처리의 흐름을 설명하자면, 학생활동 업데이트 이벤트 발생 > 프로듀서에서 학생활동 ID 발송 > 컨슈머에서 ID로 해당 시점의 값들 전부 조회(MySQL) > 변환 및 저장(PostgreSQL) 이런 흐름을 가지고 있으며, 컨슈머는 EKS pod으로 올려서 사용하고 있다. 또한 dependency injector로 서비스에 사용되는 모든 DB connection을 선언하고 컨테이너에 주입하여 서비스를 호출하는 구조를 띄고 있다. 문제점 학생학습활동이 변경됨으로 감지하고 이벤트 발송했는데 컨슈머에서 ID로 조회를 할 때 변경된 값이 아닌 이전 값이 조회되어 제대로 업데이트가 반영되지 않는 문제가 발생했다. 확인해보니 DB connec..
Redash 인프라 개선
·
이슈 해결 일지
사내 데이터 제공 툴로 Redash를 사용하고 있다. 사용자 증가와 데이터베이스 확장으로 인해 쿼리 속도가 점차 느려지고 있어서 Redash 인스턴스 성능 향상과 워커 수 증가를 동해 더 많은 쿼리를 동시에 처리 할 수 있도록 개선하는 작업을 진행했다.Redash 상황Redash는 AWS EC2에 docker로 설치해 운영하고 있다. 인스턴스에 접근하려면 인스턴스를 생성할 때 설정했던 비공개키가 필요하다. 아래와 같이 키파일이 있는 디렉토리에 가서 명령어를 입력해줘야 한다.ssh -i "privatekey.pem" ubuntu@ec2-주소.ap-northeast-2.compute.amazonaws.com명령어를 통해 인스턴스에 접근 후 루트 디렉토리에서 /opt/redash 라는 경로로 들어가면 dock..
Kafka offset이 뒤로 돌아가는 문제
·
이슈 해결 일지
카프카를 적용해 실시간 대시보드용 데이터를 만들고 있다. 본격적인 운영전에 스테이지 환경에서 이것저것 테스트를 해보는 중에 컨슈머에서 offset이 몇백개씩 돌아가는 문제를 발견했다. 문제 발견 스테이지 배포 후 AWS RDS에서 모니터링으로 들어가보니 특정 주기마다 CPU가 치솟아있는 것을 목격했다. 특정 주기를 설정 해놓은 부분은 커넥션이 끊겼을때를 대비해 재연결 하는 부분 밖에 없어서 커넥션이 재연결된 시점에 어떤 문제가 발생하고 있음이 분명했다. pod 로그를 살펴보니 컨슈머에서 offset이 최신값이 아닌 몇백개씩 돌아가고 있었고, 재연결 후 돌아간 오프셋만큼 한꺼번에 밀린 처리를 하려다보니 CPU가 특정 시점에 갑자기 올라가는 것이었다. 처음에는 오프셋 리셋 옵션을 earlist 로 줘서 그런..
Route 53과 Externel DNS (feat. 회고)
·
이슈 해결 일지
ingress host가 꼬여서 배포가 늦어지게 되어.. 정리를 해본다. DNSDomain Name System으로 IP 주소 (예: 192.0.2.1)를 사람이 읽을 수 있는 도메인 주소(www.XXX.com)로 변환하는 역할이다. Load Balencing 네트워크 트래픽을 여러 서버에 분산시키는 과정. 로드 밸런서는 이런 작업을 수행하는 소프트웨어를 말한다. OSI 7계층에서 7번째 계층인 애플리케이션 계층에서 작동하며 HTTP/HTTPS 트래픽을 처리한다. 로드 밸런서는 들어오는 요청을 수신하고 각 서버의 현재 부하 상황, 우선 순위, 지연시간 등 여러 요소를 고려해 어느 서버로 요청을 전달할지 결정한다. 쿠버네티스로 배포를 하게 되면 애플리케이션에 대해 외부 접근을 허용하기 위해 로드 밸런서를 ..
Redash 쿼리 큐 쌓이는 이슈
·
이슈 해결 일지
제보 받았던 이슈 redash는 데이터 소스를 연결해 쿼리를 날려 결과를 얻고 시각화도 할 수 있는 도구이다. 현재 redash는 aws ec2에 올려서 사용하고 있다. 슬랙 채널에 쿼리결과가 안나온다는 제보를 받고 redash 상태를 확인했다. 왼쪽 하단의 system status에 들어가면 admin 페이지가 나오고 여기서 시스템과 queue의 상태를 볼 수 있다. RQ status 라는 탭으로 들어가면 Queued Jobs 에서 큐에 쌓여있는 쿼리가 몇개 인지 볼 수 있다. 각 사용자들이 쿼리 결과를 보기 위해 쿼리를 실행시키면 큐에 쌓이게 되고 순차적으로 처리가 된다. 제보를 받은 그때 당시에는 몇십개의 큐가 결과를 기다리며 쌓여 있는 상태였다. 어디선가 부하가 걸려서 실행이 막힌 상태인 것 같았..
Wordcloud 한글 깨질 때
·
이슈 해결 일지
코랩에서 wordcloud를 그냥 쓰면 한글이 깨져나와서 폰트를 설치하고 경로를 설정해줘야 한다. !sudo apt-get install -y fonts-nanum !sudo fc-cache -fv !rm ~/.cache/matplotlib -rf 먼저 위 코드로 폰트를 설치해준다. FONT_PATH = '/usr/share/fonts/truetype/nanum/NanumGothic.ttf' wc = WordCloud(font_path=FONT_PATH,background_color="white", max_font_size=60).generate_from_frequencies(dict(tags)) plt.figure(figsize=(10, 8)) plt.imshow(wc) plt.show() 그 다음 F..