전체 글 242

DB 설계와 쿼리 최적화

주의: 본 내용은 DB 내용에 대한 기초 지식이 어느정도 있음(DB 스캔의 작동 방식)을 가정하고 작성되었습니다.DB는 백엔드에서 가장 중요한 역할을 수행한다.DB 성능은 연동하는 모든 서버 성능에 영향을 주기 때문에, DB에 존재하는 기능을 전문가 수준으로 깊이 이해할 수 있다면 이상적이겠지만 조금만 신경 써도 DB 성능 문제를 충분히 줄이거나 없앨 수 있다.인덱스 설계예상하지 못한 테이블 풀 스캔은 DB 성능에 좋지 않은 영향을 끼친다.이를 피하기 위해서 보통 인덱스를 사용하는데, 이때 인덱스를 제대로 알고 써야 원하는 성능 효율을 얻을 수 있다.인덱스는 조회 패턴을 기준으로 설계해라.단일 인덱스 vs 복합 인덱스의 차이를 고려해라선택도(Selectivity)를 고려해라가능하다면, 커버링 인덱스를 활..

사내 정치는 제로섬이 아니라 윈윈이다.

필자는 사내 정치에 대한 개인적인 기준을 세워두지 못한 상태였다.이 상태에서 다양한 기업에서 면접을 진행하며, 해당 부분에 대한 면접 질문이 들어왔을 때, 깔끔하게 대답할 수 없었다. 그런데 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식(최범균 著) 도서에 대해 내용을 학습하면서, 중요한 인사이트를 얻을 수 있었다. 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 | 최범균 | 한빛미디어 - 예스24실무에서 자주 겪는 다양한 문제를 효과적으로 해결하는 법서비스 환경에서는 커넥션을 닫지 않아 서버가 멈추고 외부 API의 지연이 전체 장애로 번지며 사소한 설정 실수가 사용자 전체에 영향www.yes24.com 새로 추가할 쿼리가 기존에 존재하는 인덱스를 사용하지 않을 때에는 요구사항을 일부 변경..

느려진 서비스, 어디부터 봐야 할까?

본 내용은 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 도서를 참고하여 작성되었습니다. 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 | 최범균 | 한빛미디어 - 예스24실무에서 자주 겪는 다양한 문제를 효과적으로 해결하는 법서비스 환경에서는 커넥션을 닫지 않아 서버가 멈추고 외부 API의 지연이 전체 장애로 번지며 사소한 설정 실수가 사용자 전체에 영향www.yes24.com 성능 문제는 주로 DB나 외부 API를 연동하는 과정에서 발생한다.외부 API 호출에 블로킹/타임아웃이 발생하는가?힙 크기와 GC 방식에 적절한 최적화가 필요한가?OOM이 발생했는가?응답해야 하는 데이터의 양이 많은가?DB 커넥션 풀이 고갈되었는가?문제 예시순간적으로 모든 사용자 요청에 대한 응답 시간이 심각하게 느..

사라지는 발판 - 2022 KAKAO BLIND RECRUITMENT

문제 링크 상태 전이 개념 + 백트래킹 알고리즘의 적용을 학습하기 좋았던 문제였기에 이렇게 포스트로 기록해둔다. 이 문제를 읽어보고 나면, 전형적인 게임 이론 문제로 보인다. 게임 이론 문제에는 크게 두가지 접근 방식이 있다.게임 로직으로 인해 게임 시작 시 바로 결정되는 승자와 패자를 파악하고, 승자와 패자가 각자의 전략에 맞춰 최적으로 행동하는 방법상태 기계를 설계해, 서로간에 최적의 행동을 직접 수행시켜보고, 행동했을 때 자신이 얻을 수 있는 결과 중 최적을 반환하는 방법 이 문제의 경우, 게임 시작 시 바로 결정되는 승자와 패자를 파악하기 어려웠다. 따라서 직접 시뮬레이션해보는 두 번째 접근 방식으로 자연스레 손이 가게 되는데,이러면 -> 내가 이기는 경우, 가장 빨리 끝나는 결과를 알아둔다..

PS 2025.10.24

Exact 알고리즘과 휴리스틱(근사) 알고리즘의 선택 기준

필자는 개발보다 알고리즘을 먼저 접했기 때문에, 휴리스틱한 기법보단 증명을 통한 완벽한 계산에 익숙했다.하지만 최근 직접 서비스를 개발해보고, 다양한 AI-ML 알고리즘을 접하기도 하며 휴리스틱과 근사 방법에 어느정도 익숙해지면서, "엄밀한 증명"만 생각하던 상태에서 벗어나게 되었다.이 과정에서 자연스럽게 "Exact 알고리즘"과 "휴리스틱 알고리즘"의 분류 기준을 생각하게 되었다. Exact 알고리즘정확한 답이 증명으로 보장된 알고리즘 휴리스틱 알고리즘정확한 답이 아니더라도, 정확한 답 수준의 풀이를 반환하는 알고리즘원래의 정의는 이렇지만, 이 정의는 실무에서 알고리즘을 선택하는데에는 약간의 미흡함이 있다고 생각했다.따라서 정의를 다음과 같이 약간 수정했다. Exact 알고리즘정확한 답이 증명으로 보장..

2025년 10월 4주차 회고

예비군이 끝났기에, 해야할 일 리마인드를 위해 일찍 작성함. 항상 무언가를 수행하기.체계적인 상태를 유지하기.보상 체계를 깨끗히 유지하기.다음에 무엇을 해야 할 지 상상하기.이번주에 한 것예비군요새 사람들 죄다 숏츠/릴스만 보네이번주에 하지 못한 것핀잇 프론트 (미완)디자인 토큰 완성레이아웃/라우팅 스켈레톤컴포넌트 조립다음주에 할 수 있는 것핀잇 프론트 (미완)디자인 토큰 완성레이아웃/라우팅 스켈레톤컴포넌트 조립프로그래머스 AI추천 문제 풀기면접용 CS 재정리 → 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 정리다음주에 할 수 없는 것쿠팡Double DQN 논문 리뷰코틀린 코루틴 학습 다음주에 해야하는 것카페 알바카카오 2차 코테마이다스 코테ADsP 항상 무언가를 수행하기체계적인 상태를 유지하기

2025년 10월 3주차 회고

항상 무언가를 수행하기.체계적인 상태를 유지하기.보상 체계를 깨끗히 유지하기.다음에 무엇을 해야 할 지 상상하기.이번주에 한 것관심있는 도메인 다루는 기업에 이력서 제출프로그래머스 AI추천 문제 풀기하루 2~3문제푸쉬알림 발송해보기JAVA RestTemplate or WebClient 사용해보기쿠팡이번주에 하지 못한 것핀잇 프론트 (미완)디자인 토큰 완성레이아웃/라우팅 스켈레톤컴포넌트 조립다음주에 할 수 있는 것핀잇 프론트 (미완)디자인 토큰 완성레이아웃/라우팅 스켈레톤컴포넌트 조립다음주에 할 수 없는 것쿠팡Double DQN 논문 리뷰코틀린 코루틴 학습 다음주에 해야하는 것예비군

[2026 카카오그룹 공개채용] 카카오 1차 코테 후기 (카카오 코딩테스트)

개인적으로 모빌리티 도메인에 관심이 있어 이쪽으로 지원했는데, 카카오라는 그룹 이름에 걸맞게 재밌고 수준높은 문제가 출제되었다.1번문자열 검사 문제였다.2번 for문을 돌면서 Set을 통해 중복을 제거하면 해결할 수 있는 문제였다.2번사이클 내 모두 같은 값을 갖게 되는 최소시간을 탐색하는 문제였다lcm으로 제한을 걸면 100만 내 사이클이 끝나기 때문에, 이를 이용해 푸는 문제였다.척 보고 바로 안건 아니고, 편집기 내에서 print 문으로 직접 찍어 확인했다.3번나한테는 이게 제일 골치 아팠다.이 문제에만 2시간 10분을 사용했다.최대 높이가 하나라도 높아지는 순간에 분배도가 올라간다.같은 높이에선 분배 노드가 추가되더라도 분배도는 달라지지 않는다.선택한 건기본 트리 구성: 완전탐색리프 노드 추가: ..

PS 2025.10.11

2025년 10월 2주차 회고

항상 무언가를 수행하기.체계적인 상태를 유지하기.보상 체계를 깨끗히 유지하기.다음에 무엇을 해야 할 지 상상하기.이번주에 한 것핀잇핀잇 디자인 완성핀잇 FE 프로젝트 세팅MUI 템플릿 직접 사용해보기 - 각 컴포넌트 기능 확인카카오 코테202320222021카페 알바이번주에 하지 못한 것Double DQN 논문 리뷰코틀린 코루틴 학습추석 + 카카오 코테에 집중하느라 충분한 시간을 확보하지 못했다.+ 우선순위를 프로젝트에 비해 좀 낮출 필요를 느꼈다.다음주에 할 수 있는 것관심있는 도메인 다루는 기업에 이력서 제출프로그래머스 AI추천 문제 풀기하루 2~3문제푸쉬알림 발송해보기JAVA RestTemplate or WebClient 사용해보기다음주에 할 수 없는 것쿠팡Double DQN 논문 리뷰코틀린 코루틴..

다음 목표는?

지극히 개인적이고 주관적인 회고록임을 밝힙니다.서문최근 아버지의 항암치료가 일단락되고, 어느정도 내 일을 수행할 여유를 가질 수 있게 되었다.그런데 이렇게 갑자기 시간이 생기니 무엇을 해야 할지 모르는 문제를 겪고 있었다."내가 왜 살지?"라는 현학적인 질문만 던져가고 있었다.이는 아무것도 해결해주지 않는 쓸데없는 생각이다.이는 그 간의 피로가 누적되었다고 볼 수 있는데, 그렇다고 마냥 쉬는 것은 딱히 즐겁지도 않고 내 방식도 아니었다.그래서 "무엇을 삶의 목표로 삼을 것인가?" 라는 질문을 스스로에게 던져보았다.이러한 생각이 드는 이유뭘 해야 할지 모른다.원래 하고 싶은것은 많았다.최근 항암치료 보조때문에 어느정도 "내 욕심"에 대한 집중을 줄이게 되었다.관성처럼 움직이고 있다.곧 유지가 불가능해질 징..

개인적 공간 2025.10.07

[USACO Gold] DAG - 위상 정렬

위상 정렬이란, Directed Acyclic Graph(DAG)의 정점들을 각 정점이 자신의 자식 정점들보다 먼저 방문되도록 나열하는 것을 의미한다.방향 그래프(directed graph)는 간선을 한쪽 방향으로만 이동할 수 있는 그래프를 의미한다.또한 비순환 그래프(acyclic graph)는 순환(cycle)을 포함하지 않는 그래프를 의미한다.이는 하나 이상의 간선을 따라가서 출발한 정점으로 다시 돌아올 수 없는 구조를 말한다.이 두 정의를 합치면, 방향 비순환 그래프(directed acyclic graph, 줄여서 DAG)는 간선을 한쪽 방향으로만 이동할 수 있고 순환을 포함하지 않는 그래프이다.위상 정렬 (Topological Sort) - Course Schedule다음 문제를 풀어보자. C..

PS/USACO Gold 2025.10.07

[USACO Gold] Disjoint Set, 분리 집합, Union-find

그래프에 간선을 추가하고 그래프의 두 정점이 연결되어 있는지 검사할 수 있게 해 주는 자료구조가 분리 집합(DSU, Union-Find) 이다.USACO.guide는 알고리즘의 원리와 정의보단 어떻게 이 정의를 떠올릴 수 있는지에 집중한다.알고리즘의 원리와 정의가 중요하지 않다는 뜻이 아니다.실제 Union-find의 원리와 관련된 내용은 다음 링크를 참고 바란다. CS Academy csacademy.com 구현(Implementation)import java.util.*;public class DisjointSets { int[] parents; int[] sizes; public DisjointSets(int size) { parents = new int[size]; ..

PS/USACO Gold 2025.10.07

2023 KAKAO BLIND RECRUITMENT 1차 코딩테스트 후기

공식 풀이는 다음 링크를 통해 확인하실 수 있습니다.https://tech.kakao.com/posts/567 2023 카카오 신입 공채 1차 온라인 코딩 테스트 for Tech developers 문제해설 - tech.kakao.com2023 KAKAO BLIND RECRUITMENT 1차 코딩 테스트가 지난 9월...tech.kakao.com 카카오 공채도 썼겠다, 지난 카카오 공채의 코딩테스트 문제도 풀어보고, 프로그래머스 환경도 체험해보고자 프로그래머스에 존재하는 카카오 2023 블라인드 공채에 출제되었던 문제를 5시간동안 풀어보았다. 5시간동안 5문제를 풀었는데, 문제가 복잡해졌을 때 생각을 키보드로만 정리하는 과정이 좀 고되긴 하다.그림같은 걸 그릴 수 있을 수 있으면 좋을텐데, 이건 코테 환..

PS 2025.10.06

53. Maximum Subarray - 카데인 알고리즘

문제를 해설할 때 특수한 DP로 카데인을 자주 언급하게 되는데,카데인 알고리즘이 정확히 어떤 이점이 있는지, 다른 DP와는 무엇이 다른지 명확히 설명한 글이 없어 이렇게 글을 작성한다. 핵심 아이디어는 다음과 같다.dp[i]: 반드시 i에서 끝나는 최대 부분 배열 합즉, 한쪽 끝을 고정함으로써 중간의 연산을 최적 부분구조 + 중복 부분 문제의 형태로 만드는 아이디어가 핵심이다. 그러면 이 문제에서 전체 정답은 max_i dp[i] 가 된다.마지막 원소 a[i]를 포함해야 하므로 두 선택지뿐이다.a[i] 혼자로 새로 시작한다.i−1에서 끝나는 최적해 dp[i−1]에 a[i]를 이어붙인다.따라서 점화식은 다음과 같다.초기값이 점화식은 “끝이 i인 최적해”의 정의에서 바로 나온다.아이디어임의의 최적 부분 배..

PS/이론 2025.10.05

랜덤 보상 지급기

요새 너무 삭막하게 사는 것 같아 나 자신에게 보상을 줄 필요성을 느꼈다.import numpy as npimport jsonfrom datetime import dateREWARDS_JSON = "rewards.json"RESULT_TXT = "result.txt"PROB_TXT = "prob.txt"def get_reward(rewards, prob): print("하루의 집중 작업(3시간 이상 걸리는 작업)을 완료했나요?") answer = input("Yes/No: ") if answer != "Yes": print("다음에 다시 오세요!") return print("어떠한 문제를 해결했나요?") answer = input("해결한 문제: ") ..

개인적 공간 2025.10.05