전체 글 13

IntelliJ + Flutter + env 으로 Uri 관리하기

안녕하세요. 앱 개발자가 되어 돌아왔습니다.입사하자마자 버그 수정을 하며 코드를 보니 실수하기 좋은 부분이 있었습니다.(그리고 한달 뒤에 실수했습니다..)  문자열로 관리되고 있는 Uri테스트, 운영 서버의 Uri을 문자열로 사용하고 있었습니다. // 티스토리는.. dart 코드블럭이 없네요..// final API_SERVER_URI = 'https://test.tistory.com'final API_SERVER_URI = 'https://product.tistory.com'  저는 절차가 1개씩 늘어날 때마다 실수를 해서 최대한 줄이려고 하는 편입니다.그런 저에게 이 코드는 실수할 것이 분명했습니다.그래서 Build Mode에 따라 Uri을 바꿔주기로 했습니다. env 파일 생성먼저, 프로젝트 루트 ..

App/Flutter 2024.07.03

데이터 파이프라인 회고 (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

중복된 값 개수 출력하기

밑에는 잡설이고 가로선 이후 본론입니다. 오랜만에 글쓰게 됐습니다. 요새 학원에서 안드로이드를 배우고 있는데 엄청난 속도로 진도를 나가고 팀플까지 해서 따라가느라 여유가 없다..는.... 유튜브의 알고리즘이 알고리즘에 대한 영상으로 안내해줘서 살짝 맛봤습니다. 그동안은 적은 용량을 차지하고, 빠르게 실행되는 코드가 좋은 줄 알았지만, 짧은 코드보단 가독성이 좋은 코드가 좋은 방향이였습니다. 책으로 변수 이름 짓는 방법까지 나온 거 보면요. 막상 해보니 어려워 저도 읽어봐야겠습니다. 팀 프로젝트를 하면서 많은 걸 배웠습니다. 정해져있는 시간, 변수 이름, 깃허브도 써봤습니다. 변수 이름에 1, 2, 3 붙으니 많이 답답하더군요. 코드를 날리면서까지 깃허브를 써본 건 좋았습니다. 역시 직접 써봐야 잘 익혀집..

알고리즘/Python 2021.06.20

더하기 사이클, list와 숫자로 풀이

문제 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다. 위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다. N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오. 예제 입력 ..

알고리즘/Python 2021.05.18

입력받은 문자열의 최소, 최댓값 구하기

이번에는 간단하게 제가 짠 코드를 올리겠습니다. 문자열 곱하기 때 봤던 다른 분 코드를 응용했습니다. 백준 문제에서는 단계별로 풀어보기 while안에 있었습니다. 문제) 첫 번째에 정수 N이 입력되면 두 번째는 N개의 정수를 공백으로 구분해서 입력된다. 최솟값과 최댓값을 공백으로 구분해 출력하시오. 예제 입력 출력 5 7 35 20 10 35 30 7 input()# 없어도 됨 n = list(map(int, input().split(' ')))# 두 번째 입력 print(min(n), max(n))# 최솟값, 최댓값 궇하기 input >>> while을 사용하지 않으면 첫 번째 N값은 필요하지 않아서 정의하지 않았습니다. input().split(' ') >>> 문제 특성상 문자열로 입력되어서 공백을 ..

알고리즘/Python 2021.05.11