프로그래밍 114

[개발] 2024 카카오 겨울 인턴쉽 + 전환 후기

최근 블로그를 방치한 감이 있긴 한데 인턴 때문에 신경을 쓰기 힘들었던 것 같다. 그래서 꽤 오래전부터 후기를 남겨야겠다고 생각했지만 미루고 미루다 지금에서야 쓰게 되었다. 이미지들은 거의 다 사라지고 글만으로라도 후기를 남겨보려고 한다.면접이나 인턴 생활 관련해서 "써도 되나?"싶은 내용은 모두 빼고 작성해서 참고하시면 좋을 것 같습니다. 카카오 인턴쉽 지원카카오에서 2024 테크 인턴쉽을 모집한다고 해서 지원을 하게 되었다. 지원을 하게 된 동기는 크게 3가지이다.카카오에서 일하는 방식을 알고 싶었다.트래픽이든 리소스든 큰 규모를 다뤄보는 개발을 하고 싶었다.주니어인 나의 성장에 더 큰 도움이 될 것이라고 생각했다.이러한 경험은 어디가서 쉽게 하지 못하는 경험이기 때문에 지원을 결심..

[알고리즘] 알고리즘(PS)이 개발에 미치는 영향

나는 지금 백엔드(서버) 개발자로 일을 하고 있는데 PS하던 경험이 개발에 알게 모르게 도움이 될 때가 많다. 어떤 것들이 있고 어떤 도움이 되는지 내 생각을 말해보고자 한다. 구현능력 솔브드 8대 태그에도 있는 구현은 알고리즘문제를 풀기 위한 기본 소양이다. 실제로 브론즈의 대부분 문제는 구현이 들어있고 알고리즘 문제를 풀기 위한 과정도 구현이다. 이러한 경험을 실제 개발에도 적용하면 비즈니스 로직 구현하는데 도움이 된다고 느꼈다. 다만 아키텍처 설계는 별개이다. 그리고 1000문제를 해결했다면 문제당 코드 길이가 평균 50줄이라고 해도 5만 라인을 작성한 것이다. 이 정도라면 코드짜는 자신감과 타이핑속도 등을 얻을 수 있다. (자신감 의외로 중요하다.) 구현능력을 테스트하고 싶다면 유효기간이 있는 마..

[알고리즘] solved.ac Grand Arena Party onsite (Arena #18) 후기

2월 3일 최초로 솔브드에서 열리는 그랜드 아레나가 온사이트로 열리게 되었다. 이런 이벤트를 너무 좋아하는 나에겐 반드시 참여하고 싶은 이벤트였다. 성적이 좋거나 아레나를 많이 참여할수록 참가 확률이 높다고 하는데 Arena #10부터 모두 참가한 나는 어렵지 않게 참가할 수 있었다. (#10은 운영자로 카운팅되었다!) 그동안 SS~SS+퍼포먼스를 받아서 Div 1에 배정받았다. 알고리즘하는 지인들은 아레나에 참여하지 않아서 당첨되지 않아 혼자서 참석하게 되었다.. Grand Arena Onsite 지금까지 이런 온사이트 이벤트는 구데기카페, 보드게임카페와 더불어 3번째였다. 풍성한 기념품들을 받을 수 있었다. 역시 utilforever님이 후원을 해주셨고 현장에 계셨다. 지난 KUPC때 함께 모니터링을..

[알고리즘] 덱 (deque)

덱은 double-ended queue를 줄인것이다. 이름에서 알 수 있듯이 양쪽으로 넣고 뺄 수 있는 큐를 의미한다. 기초 자료구조이지만 여기에 숨어있는 신기한 사실이 있다. 시간복잡도 덱의 장점은 앞, 뒤 어디서든지 삽입삭제가 $O(1)$이라는 것이다. 보통 학부 과정에서 덱을 구현하라는 과제를 받으면 리스트로 구현하여 삽입삭제를 $O(1)$로 끝내고 random access를 $O(N)$에 동작하도록 구현하게 된다. 하지만 실제로 내장된 deque를 사용해보면 어떨까? # python from collections import deque import time N = 1000000 arr = [i for i in range(N)] s = 0 start = time.time() for i in rang..

[개발] 제 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에게 감사를 표합니다. 문제 구상 과정 다른 출제자는 모르겠지만 나는 다음을 베이스로 잡고 문제를 출제하려고 했다. 쉽덕 알고리즘, 사전지식을 사용하지 않아야한다. 직관적이고 지문이 난해하지 않아야 한다. (내가 글을 못쓰기 때문) 난이도가 어려우면 안되지만 그렇다고 올솔브도 나오면 안된다. 위 조건들을 생각하다보니 나..

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

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