전체 글 176

2023년을 되돌아보며

벌써 오늘만 지나면 2023이 지나간다. 어렸을땐 몰랐는데 나이를 먹으니 시간가는게 참 빠르다는게 느껴진다. 2023년을 되새겨보며 나에게 어떤 변화가 있었는지 알아보자. 개발 3월부터 직장생활을 시작하여 이제 약 9개월차 개발자가 되었다. 역시 회사 프로젝트는 개인 프로젝트보다 규모가 크기 때문에 더 신중하고 효율적인 설계가 필요하다. 그렇게 고민하다보면 내가 몰랐던 새로운 개념들을 배우게 되고 그것을 적용시키며 성장해나가게 된다. 그렇게 배운 것들 샤딩 Redis MSA 1, MSA 2 RDB에서의 PK 블로그에 기록해 둔 것은 이 정도인 것 같다. 그 외에도 Dynamo DB, Mongo DB, CQRS패턴 등도 알게되었다. 연초엔 무엇이든 할 수 있을것같고 모든 걸 알고 있다는 생각을 가지고 있었..

기타/기타 2023.12.31

[개발] 제 1회 엘리스 코드 챌린지 참가 후기

이런 대회가 열린다는 소식을 듣고 바로 신청했다. 파이썬 백엔드 엔지니어를 대상으로 한 알고리즘 및 api 기능 구현 대회였는데 모든 조건이 나와 충족했다. 대학교를 졸업하여 참가할 수 있는 대회가 많이 없는 나에겐(ㅜㅜ) 정말 좋은 기회였다. 예선 예선은 온라인으로 1주동안 진행됐는데 기간 내내 응시하는게 아니라 원하는 때에 3시간동안 응시하는 형식이었다. 예선은 알고리즘 + api 기능 구현이었다. 알고리즘 난이도는 코딩테스트보단 어렵고 XCPC하위 문제보단 쉬운 수준이었다. 코딩테스트에 안 쓰이는 개념도 쓰이니 모든 문제를 풀려면 대회 알고리즘도 건드려야한다. api 문제는 기능 구현과 간단한 테크닉을 사용하여 호출시간을 최적화 하는 문제였다. 우연찮게도 내가 블로그에 쓰면서 공부한 지식들이 나와서..

[개발] 주니어 개발자의 우당탕탕 MSA 전환기 - Nexus 편

지난 스토리의 마지막에 결국 서로 다른 서비스에서 공통으로 사용되는 함수나 ORM객체들을 공유 모듈을 사용하여 진행하기로 결정했다. 대표적으로 Nexus라는 것이 있다고 하여 이걸 사용해서 사설 공유 레포지토리를 구축하게 되었다. Nexus 구축하기 Nexus를 구축하는 방법은 정말 간단하다. 그냥 포트 하나 열고 docker run으로 실행하기만 하면 끝난다. 설치는 이렇게 간단한데도 고민해야 할 상황이 생겼다. 그럼 Nexus 서버는 어디에 있어야 할까? 후보군으로는 EC2와 쿠버네티스가 있었다. 지금까지 쿠버네티스에서 누려온 수많은 편리한 점을 생각하면 "당연히 후자지"라고 생각했다. 하지만 여기에서 반대 의견도 있었다. Nexus는 dev, prod 같이 사용하기 때문에 쿠버네티스와 별도의 서버에..

[알고리즘] ICPC 2023 + 코드포스 퍼플 후기

ICPC 2023이 열렸다! 작년보다 좀 늦게 열린 것 같다. 이제 졸업했기때문에 정식으로 ICPC에 나갈 수 없어서 예선은 개인적으로 치고 본선은 Mirror Contest를 참여했다. 작년에 함께 나갔던 팀에서 내가 빠지고 다른 팀원을 구한 것 같다. 작년이랑 마찬가지로 Ilgam Rangers로 나왔다. ㅋㅋ ICPC 2023 예선 예선은 Mirror Contest도 열리지 않기 때문에 문제지만 보고 대충 코드 짜는 식으로 진행했다. 정답 여부를 확인할 수 없으니 믿음으로 가야했다. 예선에선 C, D, G, I, K를 건드렸던 것 같다. 실제로 백준에 올라온 문제로 제출해보니 D, I만 맞았다. ㅋㅋ C는 가장 쉬운 문제였는데 아마 출력 형식이 달라서 틀린 것 같다. (소숫점 출력인데 스페셜저지가 ..

[개발] RDB에서 Incremental PK와 UUID PK

나는 요즘 관계형 데이터베이스로 개발을 진행하고 있다. 근데 최근 들은 내용이 꽤 흥미로워서 기록으로 남겨보려고 한다. 관계형 데이터베이스에서의 PK 관계형 데이터베이스에는 여러가지 키라는 개념이 존재한다. 기본키, 수퍼키, 후보키 등이 존재하는데 여기서는 기본키(Primary Key)에 집중하려고 한다. 데이터베이스 교과서를 보면 PK를 다음과 같이 정의한다. 릴레이션 안에서 튜플을 구별하기 위한 수단으로 주 키(primary key)라는 용어를 사용한다. 릴레이션은 테이블을 튜플은 row를 의미하므로 PK는 곧 테이블 안에서 unique한 컬럼을 의미하게 된다. 그 중에서 가장 흔하게 사용되는 PK는 아마 auto_increment옵션이 붙어있는 integer일 것이다. 이는 데이터베이스 내부에서 자..

[알고리즘] KUPC 2023 출제 후기

작년 KUPC에 이어 올해도 KUPC가 열렸다. 대회는 11월 4일에 있었지만 포스팅을 미루고 미루다 지금 쓰게 되었다. ㅋㅋ 올해는 졸업도 했고 회사도 다니고 해서 운영은 크게 관여를 못했고 출제와 검수 위주로 했다. 작년 운영진 중 일부가 참가한다고 해서 올해 만들어진 동아리에서 원하는 사람이 추가로 출제자가 되었다. 사진이 없었으면 심심한 글이 될 뻔했는데 제공해주신 kth990303에게 감사를 표합니다. 문제 구상 과정 다른 출제자는 모르겠지만 나는 다음을 베이스로 잡고 문제를 출제하려고 했다. 쉽덕 알고리즘, 사전지식을 사용하지 않아야한다. 직관적이고 지문이 난해하지 않아야 한다. (내가 글을 못쓰기 때문) 난이도가 어려우면 안되지만 그렇다고 올솔브도 나오면 안된다. 위 조건들을 생각하다보니 나..

[현대대수학] Resultant 활용 - 음함수 찾기

지난 시간 가볍게 알아본 Resultant를 활용해보자. 가환대수학에 포함되는 Elimination Theory에 있는 매개변수 함수를 음함수로 나타내는 법을 알아볼 것이다. 아직 Resultant의 성질은 알아보지 않았지만 그래도 충분하다. 음함수와 매개변수 함수 수학적인 함수를 표현하는 다양한 방법이 있다. $y = f(x)$같이 나타내는 양함수(Explicit function), $F(x,y) = 0$같이 나타내는 음함수(Implicit function), $x = f(t), y = g(t)$로 나타내는 매개변수 함수(Parameterized function)가 그 예시이다. 각 표현에 있어서 장단점이 있고 여기에서는 음함수와 매개변수 함수에 주목한다. 우리의 질문은 "매개변수로 표현된 함수를 음함..

[현대대수학] Sylvester 행렬과 Resultant

다항식의 공통 근 두 다항식 $f, g$가 주어질 때 공통 근이 존재하는지 판단하려면 어떻게 해야 할까? 가장 쉬운 방법은 각각의 근을 모두 구하고 겹치는게 있는지 확인하는 것이다. 하지만 이는 2차 다항식까지는 근의 공식으로 편리하게 확인할 수 있지만 3차 이상으로 올라가게 되면 자명한 근 아니면 찾기 힘들어진다. 한 번 알 방법이 있는지 알아보자. 다항식이 공통 근을 가지려면.. $r$차 다항식 $f(x) = a_r x^r + a_{r-1} x^{r-1} + ... + a_1 x + a_0$과 $s$차 다항식 $g(x) = b_s x^s + b_{s-1} x^{s-1} + ... + b_1x^1 + b_0$이 있다. 다항식이 어떤 근 $\alpha$를 가진다는 것은 $x-\alpha$를 인수로 가진다..

[개발] 주니어 개발자의 우당탕탕 MSA 전환기 - DB 편

현재 내가 진행중인 프로젝트는 장고 하나의 서버에서 모놀리식으로 작동하고 있었다. 최근에 쿠버네티스를 도입하게 되어 이 기회에 MSA로 넘어가려는 시도를 하였다. 기획자에게 더 많은 사용자를 수용하고 성능도 더 나아지며 관리포인트가 줄어든다는 점을 들어 설득하여 기간을 할당받는데 OK를 받았다. 그렇게 MSA로 전환하기 시작한 여정이 시작된다. 장고에서 FastAPI로.. MSA로 넘어가며 장고를 포기하고 FastAPI를 사용하게 되었는데 그 이유는 2가지가 있다. 서드파티 등 장고의 풍부한 기능을 사용하지 않는다. MSA 서비스마다 장고로 띄우기엔 너무 무겁다. 처음부터 "뭐야 장고 정말 안좋네? FastAPI ㄱㄱ"한건 아니고 나름대로 문제를 해결하려고 시도는 했었다. 인스타그램같은 경우도 장고를 사..