728x90
이번 포스팅에서는 MongoDB 다중 업데이트 로직을 구현하면서 마주한 성능 개선의 필요성과 이를 풀어나간 방법들을 공유하고자 한다. 사용 환경은 다음과 같다.Spring 2.3.2MongoDB 5.0JDK 1.8.0Kotlin# 최초 기능 개발 - saveAll()해당 업무에서는 상태를 기반으로 Entity를 관리하며 비즈니스 로직을 태우는 프로세스를 구축하는 것이 필요했다.신규로 생성된 데이터들을 PENDING으로, 처리를 진행할 때는 PROGRESS, 처리 다 되면 SUCCESS & FAILED 등으로 관리한다. 그중 처리를 진행할 때 대상들을 일괄적으로 PENDING -> PROGRESS로 변경하는 작업이 필요했는데, 해당 과정에서 여러개의 데이터에 대한 업데이트를 진행했다. 최초 로직은 가장 ..
매번 회고적인 내용의 포스팅을 작성할 때 ~~~ 회고 이런식으로 타이틀을 잡는 것보단, 특정 주제를 통해 작성하는게 더 진정성 있고 작성하기도 원할하다 생각하여 작성 방식의 변주를 준 첫번째 포스팅이다. 이번 포스팅에선 현재 팀에 조인한 지 약 6개월이 넘은 시점의 나에게 성장했을까? 에 대한 질문을 던져 잘한 점과 못한 점을 짚어보려한다. 시간의 흐름에 따라 기억에 남는 것들을 위주로 경험해갔던 일들을 작성해보고자 한다.# 적응의 과정당연하게도 본인의 역할과 해야할 일, 팀의 목적과 제공하는 서비스에 대한 전반적인 사항들, 어떤 방식으로 업무를 진행해야하는지 등에 대한 온보딩으로 적응의 과정이 시작됐다. 이 시기에는 팀원분들께서 지금 업무가 몰린 시기라 신경을 많이 써주지 못한 것 같다고 말씀해주시는 ..
# 서론최근 개발한 데이터 파이프라인을 운영 환경에 적용하기 전 요구사항을 반영하는 과정에서, Airflow 스케줄링을 걸 때 catchup 값을 잘못 설정해서, 과거부터 현재 시점 사이에서 실행되지 않았던 DAG가 모두 실행되는 상황이 발생했다.catchup 설정 자체는 알고 있었지만, 버전업이 되면서 바뀐 설정 방법을 사용하지 않아 DAG Backfill이 발생해 특정 파티션 데이터를 Hive 테이블에 중복으로 인입시켰다.해당 Hive 테이블을 복원하면서 사용한 방법과 Airflow의 Backfiil 발생 원인을 정리하여 앞으로 이런 일을 반복하지 않도록 반성의 시간을 갖고 혹시 비슷한 이슈를 겪으신 분들에게 도움이 되고자 이를 공유한다.# 상황최근 구축했던 Data Pipeline를 최종 운영하기 ..
근황요즘 통 블로그를 쓸 시간(여유)이 없었는데, 간만에 프리한 주말이여서 포스팅을 작성하며 못했던 이야기를 적어보려 한다. 연 초 다짐은 일주일에 두 개씩 포스팅을 올리는 것이였을 텐데, 막상 일을 시작하고 나니 그럴만한 여유가 없었던 것 같다.정확하게는 여유가 없었다기 보단, 동기가 부족했던 것으로.. 근황을 먼저 간단히 작성해보면, 나름 바빳지만 엄청나게 쫓기고 힘들었던 시기는 아니였다. 올 초에 현재 회사에 입사하게 되면서 인생 처음으로 제대로된 경제 활동을 시작하게 되었고, 열심히 따라가기 위해서 노력했었다. 디테일한 부분은 블로그에 공유하기 어렵지만, 현재 팀에서 일을 하면서 백엔드 개발자 커리어를 확실하게 바라볼 수 있는 계기가 되었고, 관련하여 직 & 간접적인 경험을 쌓을 수 있는 상황이 ..
# 목적Python을 사용한 업무를 진행할 때, 대부분의 메소드에 @staticmethod와 @classmethod를 사용하고 있는데, 두 어노테이션이 갖는 의미와 차이점, 사용 방법 등을 정확하게 정리하는 것이 이번 포스팅의 목적이다. 추가로, 업무하면서 두 어노테이션을 쓰다 인스턴스 변수와 클래스 변수를 생각 안하고 짯던 경험이 있어서, 이슈 상황과 차이점 또한 간단히 정리하고자 한다.@staticmethodhttps://docs.python.org/3/library/functions.html#staticmethod Built-in FunctionsThe Python interpreter has a number of functions and types built into it that are alwa..
# 목적업무를 하면서 Dataclass를 컨벤션 중 하나로 사용하고 있었는데, 기존 개발자 분들께서 Dataclass를 왜 사용하셨는지를 이해하는 과정이 필요했다. 이번 포스팅에서 Dataclass의 개념과 장점에 대해서 공부한 내용을 정리하고 공유하고자 한다. 현재 Python 3.7 환경을 사용하고 있어, 3.7 버전을 기준으로 정리했다.# Dataclasses 패키지 Dataclass는 Dataclasses 모듈에서 제공하는 기능이다. Dataclasses 모듈은 3.7 버전에서 공식적으로 추가되고 3.12 버전에서도 관리되는 패키지이다. Dataclasses 모듈은 Dataclass 데코레이터 및 함수를 제공하여, 클래스 선언 시 __init__, __repr__, __eq__ 등의 메소드를 클..
# 목적파이썬의 Packing & Unpacking 의 의미와 사용법 대해 정리를 하려고 한다. 산술 연산자로써의 *가 아닌 Packing & Unpacking을 위한 사용법을 살펴본다.우선 * 을 하나 사용하는 Packing과 Unpacking을 살펴보고, 두개 사용하는 경우를 살펴볼 예정이다.# Packing - *Packing은 함수에 전달할 인자의 개수를 유연하게 하기 위한 방법이다.sum_all(1, 2, 3, 4, 5)sum_all(1, 2, 3, 4, 5, 6, 7)Packing을 사용하지 않고 위 코드를 정상적으로 동작하기 위한 함수는 아래와 같다.def sum_all(a1=None, a2=None, a3=None, a4=None, a5=None, a6=None, a7=None): r..
# 목적RDB 테이블에 담긴 데이터 중 특정 칼럼의 중복 제거 후 전체 칼럼을 조회하는 방법을 공유하고자 한다. 엑셀로는 간단하게 "중복된 항목 제거"라는 기능을 사용할 수 있는데, 데이터가 너무 많아 엑셀에서 편집이 불가능한 경우에는 SQL에서 중복 제거를 수행해야한다.SQL 이를 수행하려고 하니 DISTINCT로는 할 수 없었고, 조금 복잡한 로직을 타야했다. DISTINCT로 해결하는 방법은 이번 포스팅에 작성되어있지 않다. 해당 방식에 대해서 아래의 포스팅을 참고했다. [ SQL ] 중복 제거하고 조회하기중복을 제거하고 조회(SELETE)하는 방법은 다양하다. 그 중에서 알고 있는 3가지 방법에 대해서 적어볼려고 한다. 사용한 DBMS : ORACLE SQL 클라이언트 : DBeaver 빠른 이해..
# 목적 티스토리를 시작하면서 커스터마이징이 자유로운 미넴 스킨 선택하여 사용하고 있었다. 티스토리 무료 최강 미넴 스킨 소개 및 설치 방법 기본 제공 스킨을 나름대로 고쳐 쓰다가 만족하지 못하고 그냥 새로 만들었습니다. 여태까지 블로그를 하면서 적용한 많은 기능들을 대부분 포함하였으니 누군가에게는 상당히 유용한 스킨이 sangminem.tistory.com 위는 미넴 스킨 제작자인 아미넴 님의 해당 포스팅이다. 사실 블로그의 렌더링 속도(성능)가 언제부턴가 느려진 것을 알고 있었고, 개인적으로 더 깔끔한 스킨으로 바꿔보고싶다는 생각을 했었다. 그 와중 우연히 블로그 성능(SEO 점수)에 따라서 검색에 노출되는 순위가 변경될 수 있다는 정보를 접했다. PageSpeed Insights 올바른 URL을 입..
# 목적 CSS Selector와 XPath의 개념과 사용법을 확인하고, 예시 HTML 문서를 통해 몇가지 요소들을 CSS Selector와 XPath 방식으로 셀렉하는 방법을 정리하고자 한다. # CSS Selector & XPath 개념 # CSS Selector CSS는 HTML과 함께 웹 개발을 시작할 때 접하게 되는데, 웹 페이지를 구성하는 뼈대인 HTML 문서에 스타일을 입히는 언어이다. CSS Selector는 CSS 스타일을 적용하기 위해 특정 HTML 요소를 선택하는 패턴이다. This is an example. This is another example. 위 HTML 문서에서 style 태그 안의 ".example" 부분이 CSS Selector이다. # XPath XPath는 XML ..