728x90
! 주의 ! : 취중진담입니다. 이런 회고성의 글이 불편하신 분들은 해당 포스팅은 무시해주시길 부탁드리겠습니다. 약 3 ~ 4개월만에 포스팅을 하기 위해서 티스토리 글쓰기를 열게되었습니다. 최근들어 기술 공부를 위해 투자한 시간이 많지 않았던 것도 맞고, 업무를 위해 그떄그때 공부하여 업무를 따라가기에 급급한 자신이었다는 사실에 우선 반성의 시간을 가집니다. 약 1년간의 회사생활을 하면서, 평일에 혼자서 어느정도의 술을 마신 적이 처음인 것 같습니다.간간히 맥주 한캔정도는 스트레스 해소를 위해 마셨었지만, 정말 내 자신과 현재 환경을 돌아보면서 깊은 생각을 하게된 적은 처음인 것 같습니다. (주량이 센 편은 아닙니다.) 현재 이러한 포스팅을 작성하는 이유는, 지금 이 순간의 감정을 기록함으로써 앞으로 제..
비즈니스 로직을 작성하면서 정상 로직을 생각하는 것도 중요하지만, 예외 상황과 엣지 케이스에 대한 방어로직을 작성하는 데 신경을 더 쓰는 것은 당연할 것이다.try-catch문으로 예외를 잡아서 처리하는 것 뿐만 아니라, 커넥션, 메모리 등의 자원을 반환하거나 초기화 등을 수행하기 위해 finally 블럭을 사용하게 된다.김영한님의 중급 자바 강의를 들으면서 추가적으로 Java7에 도입된 try-with-resources 기능이 있음을 알게되었고, 추후에 업무에 사용할 수 있도록 차이점과 장점을 기록하는 것이 이번 포스팅의 목적이다. # 예시 시나리오차이점과 장점을 알아보기 위해 간단한 시나리오를 작성한다. Reader- 파일을 쓰기 위한 기본 기능 제공하는 메소드- 파일 열기, 쓰기, 닫기 메소드 존재..
이번 포스팅에서는 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 빠른 이해..