Web 6

데이터 파이프라인 회고 (SQL + Python)

안녕하세요. 이번에는 퇴사 기념(?)으로 마지막 프로젝트에서 작업한 내용을 피드백해보려고 합니다. 잘못된 원천 데이터를 제공받아 몇 번 재작업한 일이 있었습니다. (지난 글에서 몇 억 건 데이터 포함입니다 ㅎㅎ..) 그럴 때마다 재작업을 하는데 아무리 기록하고 조심해도 데이터에 실수가 있었습니다. "데이터에는 테스트 코드가 없나?" 생각하다가 찾아보니 데이터 파이프라인을 위한 Python 라이브러리 Luigi가 있었습니다. 또한 데이터 엔지니어링에서 자주 보이는 ETL이라는 단어도 알게 되었습니다.기존 데이터 파이프라인 구축 방식기존 방식의 문제점Luigi의 소개와 장점향후 데이터 파이프라인 개선 방안위 단계를 따라 피드백을 해보려 합니다. 인수인계를 준비하면서 제가 작업했던 흐름을 보니 실수를 체크하기..

Web/Database 2024.06.08

PostgreSQL에서 3억개의 원천 데이터를 효율적으로 통계 데이터로 변환하기

데이터 중심 애플리케이션 개발에서, 원천 데이터를 유용한 통계 정보로 변환하는 과정은 핵심적인 작업 중 하나입니다. 특히, 대량의 데이터를 다루는 경우, 이 과정은 성능 최적화와 직결되며, 개발자는 이를 위해 다양한 전략을 고민해야 합니다. 본 글에서는 PostgreSQL을 사용하여 3억 개의 데이터를 효과적으로 통계 데이터로 변환하는 과정을 소개합니다. 오픈월드 MMORPG를 예시로 들겠습니다. 유저들이 어느 장소에서 가장 오래 대기하는지 알아보는 통계를 내려고 합니다. 1. 인덱싱 전략 첫 번째 접근 방법은 데이터에 인덱싱을 적용하는 것입니다. 인덱스는 데이터베이스에서 데이터 검색 속도를 향상시키는 데이터 구조입니다. 특정 컬럼에 대해 생성되어, 빠른 데이터 검색을 가능하게 합니다. 실제로, 인덱싱을..

Web/Database 2024.03.17

Spring Security CORS 비활성화: SecurityFilterChain

2년 전 만들어놓은 프로젝트를 다시 찾아보면서 여러 문제를 맞이하고 있습니다. 제 생각에는 AWS, Docker로 서버 세팅까지 해놨으니 다시 올리면 그대로 성공할 줄 알았는데요. 급하게 만드느라고 고려하지 않은 것들이 문제로 드러났습니다. 이 문제도 동일합니다. 프로젝트는 React, Spring boot로 프론트와 백엔드를 구분해서 만들었습니다. AWS 프리티어를 모두 사용해서, Cloudtype을 사용했습니다. Spring Security 의존성은 비밀번호 암호화를 위해 사용하고 있었습니다. 문제: CORS 오류 로컬에서 프론트엔드 서버와 백엔드 서버끼리 소통할 때는 문제가 없었는데, 서버에 올라가고 나서 CORS 정책으로 인해 요청이 차단되는 문제가 발생했습니다. 이 문제는 이전에 해결한 뒤 fr..

Web/Advise_clothes 2024.03.04

대용량 테이블의 행 수 추정: PostgreSQL

저는 요즘 회사에서 개발.. 을 하지 않고 분석, 설계 일을 서포트하고 있습니다. 분석을 위한 데이터가 워낙 커서 여러 고민을 했습니다. 그중에서 테이블에 행 수를 어떻게 빨리 볼 수 있을까 하는 고민을 했고, 과정을 공유하고자 합니다. 2.8억 개가 맞는지 하나씩 세어보도록 제가 다루고 있는 데이터 중 가장 큰 테이블은 2.8억 개의 행을 가지고 있습니다. -- 20분 넘게.. 걸려서 중지.. select count(*) from very_big_table; -- 풀스캔으로 학대 중 평소에는 아무 생각 없이 테이블의 행 수를 보기 위해 사용한 이 쿼리가 20분이나 넘게 돌아가고 있었습니다. 이 테이블은 21~23년도 데이터인데, 월별로 파티셔닝 했습니다. 약 7,500만의 데이터를 가진 테이블이 36개..

Web/Database 2024.02.19

front - back 서버를 분리하면서 만난 CORS 정책

No 'Access-Control-Allow-Origin' header is present on the requested resource Access to XMLHttpRequest at 'http 요청한 내용' from origin '현재 origin' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. CORS란 Cross-Origin Resource Sharing. 대강 읽자면 교차하는 origin의 자원 공유..? origin은 그저 github을 쓰면서 git remote add origin ...에서 본 기억밖에 없었다. 웹에서 origin은 sch..

Web/Advise_clothes 2022.05.16

지금까지 만든 서비스, 앞으로 만들 서비스

어딘가에 적지 않으면 잊을 거 같아 다시 블로그를 찾게 되었습니다. 그동안 취업도 하고, 퇴사도 하면서 우물 안의 개구리가 된 심정이었습니다. 작은 SI회사에 들어가서도 이렇게 많이 배우는데 서비스를 하고 있는 회사라면 어떨까 싶습니다. 만들고 싶은 서비스가 있어서 회사에서 배운 내용을 토대로 만들려고 합니다. 우선 서버에 올리겠다는 1차 목표를 잡고 달려와서 급하게 코딩을 했습니다. 무엇이 부족한지 흐릿하지만 이대로는 안 되겠다 생각이 듭니다. RestAPI 규약으로 개발했습니다. 이 서비스는 웹 말고도 어플이나 챗봇까지 다양한 플랫폼에서 이용할 수 있도록 하기 위함입니다. 프론트는 팀원이 담당하고, 저는 백을 담당하고 있습니다. 지금까지 구현된 기능은 메인 페이지, 로그인, 회원가입, 회원 정보 수정..

Web/Advise_clothes 2022.05.04