본문 바로가기

분류 전체보기

(74)
백엔드 설계 참고사항 1 Contents백엔드를 설계하는데 있어서, 무한히 row가 증가하는 table은 "과연 필요한가?"를 고민해봐야 한다.의도가, "이 table에 데이터를 계속해서 적재해서, 목적 A, B를 위해서 가져다가 쓸꺼야" 이런 식으로 구체화 되어야 한다. 아래는 설계 할 때 참고하면 좋은 작업 시나리오를 작성해둔다. 필요한 기간 동안만 저장(삭제 조건)무한히 row가 증가하는 table이지만, 내가 해당 table에 접근해서 연산하는데 사용하는 데이터가 지난 1달치라면, 1달이 지나는 데이터는 delete되도록 삭제 시나리오를 구성한다.ex) 자정마다 1달이 over 되는 데이터 정리 스케줄러 개발 무한히 증가하지 않는 table 설계요구사항이 저장을 요구하지만, 무한히 증가할 필요 없도록 구성할 수 있다면, ..
빠른 개발은 무엇인가? 하면 좋은 건가? Contents요즘의 나는 "빠른 개발"을 하지 않는다가 목표이다.사람들 마다 "빠른 개발"의 기준이 다를 것이다. - 작업 속도가 빠르다는 것인가?- release 속도가 빠르다는 것인가?- 결정이 빠르다는 것인가?- 업무 프로세스가 빠르다는 것인가? 머릿 속으로는 인지하고 있어도, 막상 작업을 위해서 키보드를 잡는 순간, "빠르게 작업해서 끝낸다"가 머릿속을 지배하는 것 같다.성격의 영역일 수도 있고, 일정이 밀리는게 싫어서 이기도 하고, 나의 작업 때문에 다른 사람들한테 의존성이 걸리는 것이 싫어서 일 수도 있다. 내가 생각하는 "빠른 개발"을 하지 않는다는 "현재의 문제를 해결하기 위한, 가장 빠른 코드 수정 방법을 찾지 않는다"라는 뜻이다. 어느 조직이든, 기획은 바뀐다.처음에 "절대" 바뀌지 ..
Token 수량 확인 해주는 앱(Claude Code, Codex, Gemini CLI) Contents돌아다니다가 재미난 앱을 하나 찾았다. LLM CLI 툴들에 대한 Token 수량을 확인 해주는 MacOS 앱이다. 현재 Codex, Claude, Cursor, Gemini, Antigravity, Droid (Factory), Copilot, z.ai, Kiro, Vertex AI, Augment, Amp, JetBrains AI에 대해서 GUI로 token을 표시해주는 앱이다. 아래 사이트에서 다운로드 가능하다.https://github.com/steipete/CodexBar GitHub - steipete/CodexBar: Show usage stats for OpenAI Codex and Claude Code, without having to login.Show usage stat..
주니어 개발자에게 추천하는 책 2 - 가상 면접 사례로 배우는 대규모 시스템 설계 기초 Outlinehttps://product.kyobobook.co.kr/detail/S000001033116 가상 면접 사례로 배우는 대규모 시스템 설계 기초 | 알렉스 쉬 - 교보문고가상 면접 사례로 배우는 대규모 시스템 설계 기초 | 페이스북의 뉴스 피드나 메신저,유튜브, 구글 드라이브 같은 대규모 시스템은 어떻게 설계할까? IT 경력자라도 느닷없이 대규모 시스템을 설product.kyobobook.co.krContents지난 1편에 이어서 주니어 개발자에게 추천하는 책 2를 작성해본다.1편은 아래 글에서 확인 가능하다.https://nebulayoon.tistory.com/35 주니어 개발자에게 추천하는 책 1 - 소프트웨어 장인Outlinehttps://product.kyobobook.co.kr/d..
[python] 리스트 잘못 쓰면, 오늘은 정상인데 내일은 망가진다. Intropython에서 mutable 개념이 있다. 보통 reference 기반 언어에서 많이 사용된다.python의 리스트는 mutable이며, 이는 곳 shallow copy를 한다는 뜻이다. 오늘은 mutable이 무엇인지도 알고, shallow copy도 무엇인지 개념은 알지만, 초보자가 쉽게 실수하는 부분에 대해서 이야기 한다. Contentshallow copy를 잘 알고 있다면, 다음과 같은 상황에서 어떤 값이 출력 될지 잘 알 것이다. class Activity: tags = []if __name__ == "__main__": a1 = Activity() a2 = Activity() a1.tags.append("from a1") print("a1.tags:", ..
[개발] AI로 짠 코드, 내가 리뷰하는 건 개발자인가 AI인가 Contents최근에, 지인 중에서 나는 AI로 코드를 생성하는 것을 지양한다는 이야기를 들었다. 이야기는 다음과 같다. - 팀원이 AI를 이용해서, 코드를 작성했다고 가정하자. 해당 팀원은 PR을 올리고 코드리뷰를 요청했고, 팀장 급은 해당 PR을 읽는다. 그러면 리뷰어는 개발자 코드를 리뷰하는 것인가? AI를 리뷰하는 것인가?- 리뷰어가 1시간, 2시간이 걸려서 PR을 검증하기 위하여 시간을 섰다. 피드백 사항을 적어 두니, 팀원이 AI를 이용해서 다시 PR을 올렸다. 리뷰어 입장에서는 AI와 대화를 하는 것인가? 여러 문제가 복합적으로 섞여 있는 것 같지만, 우선은 위에 있는 그대로 바라보겠다. 왜냐하면, 모든 일에는 "정도"의 문제가 있어서, 가능한 정도와 불가능한 정도가 섞여 있기 때문에, 읽는..
[스타트업] 일 잘하는 사람 특징(작업 분할) Contents일을 잘하는 사람은, 모든 것을 "최대한 작게 생각하기"를 잘하는 것 같다. 일, 작업, 일생 생활 등 모든 부분에서 적용이 가능한 일이다. 무슨 얘기이냐면, 미팅을 하고 나면, 상급자로 부터 "어떤 작업 해주세요", "새로운 OO을 만듭시다" 등의 요청이 있을 것이다. 이 이야기를 듣자마자 숨이 턱 막히고, 어디부터 해야 할지 막막할 것이다. 머릿속에서는 뭉뚱그려 두리뭉실하게 윤곽만 생기고, A를 먼저 해야할지, B를 먼저 해야할지 고르는 것도 머리를 아프게 한다. 특히, 스타트업이나 규모가 작은 회사는 신입과 같은 경험이 적거나, 애초에 직장을 다니지 않고, 바로 창업한 사람들도 많이 보인다. 그렇기 때문에, 이런 규모가 작은 회사는 구성원들이 더더욱 이런 문제에 쉽게 직면한다. 이 ..
루틴 만들기 요즘은 루틴 만들기에 빠져있다. 지난 6개월간 "루틴 만들기"를 테스트 해봤다. 시작은 "하고 싶은 것은 많은데, 시간이 없다" 라는 핑계를 없애기 위해서 시작했다. 시작 시각도 조정해보고, 시간도 조정해보고, 여러가지를 테스트 하면서 루틴을 테스트 해봤다. 루틴을 만드는 것은, 시간을 군더더기 없이 쓸수 있게 해주고, 습관으로 만들어주어 얇지만 오래 갈 수 있는 환경을 만들어준다고들 한다. 나는 이 내용을 위해서 여러 테스트를 해봤다. 평일오전 6시 기상오전 8시 개인 공부오전 10시 ~ 오후 7시 업무오후 8시 30분 집 도착~ 오후 9시 30분 식사, 샤워오후 9시 30분 ~ 오후 10시 영어 말하기오후 10시 ~ 오후 10시 30분 책 읽기오후 10시 30분 ~ 오후 11시 일기 쓰기, 만년필오후..
[스타트업] 작업 분할하는 방법 Contents어떤 작업이 생겼을 때, 작업을 나누는 기준은 어떤 부분에 가치를 두는 지에 따라서 많이 다른 것 같다. 어떤 회사는 시간을 기준으로 나눌 수 있고, 어떤 회사는 난이도를 기준으로 나눌 수 도 있다. 나는 스타트업에서 일해오면서, 내가 생각했을 때 가장 효과적인 방법은 "시간"을 기준으로 나눈 것이라고 생각한다. 시나리오를 만들어보겠다. 이번 2주동안의 스프린트에는 "slack 운영 알림 시스템 개발"을 한다고 가정해보겠다. 요구사항은 서버 application에서 global exception이 발생하면, 운영용 slack 채널로 알림 메시지와 에러 메시지의 내용을 전송해줘야 한다고 해보자. 자 그러면, "slack 운영 알림 시스템 개발"에 도달하기 위해서 내가 해야하는 일을 큼지막하게..
인생 목표가 무엇인가? Contents인생의 목표가 있는가? 최근에 인생의 목표에 대해서 지인들과 이야기를 나누었다. 우리의 대화에서 인생의 목표는 도달해야하는 Goal 만을 말하는 것은 아니였다.우리가 말하는 인생의 목표에는 인생관, 삶의 기준, 좌우명 등이 포함되었다. 위의 단어들을 전부 앞으로는 목표라고 하겠다.다른 사람들의 목표를 듣다보니, 정작 나는 각 부분별로 여러개가 존재하지만, "인생 목표가 뭐예요?" 라는 질문을 들었을 때, 바로 툭 튀어 나올 목표들은 없었다. 적어도, 나의 지인들은 목표를 하나의 문장으로써, 혹은 다중 문장으로써 가슴에 새기고 다니는 것 같았다. 나도 수많은 목표가 있는 사람이라고 생각했는데, 막상 내의 인생 목표를 나타내는 문장이 있는가? 라는 생각이 깊게 들었다.문장이라고 표현했지만, 솔..
[마인드] 결단력에 대해서(성공과 실패) 나의 주변 사람들을 보면, 왜인지 몰라도 정말 본 받을 만한 사람들이 많은 것 같다. 나와 생각이 달라도, 나와 성향이 달라도, 나와 경험이 달라도그들이 말하는 것을 들어보면, 개개인에게 배울 점이 적어도 1개는 있는 것 같다. 오늘은 그 사람들의 관찰한 내 생각을 적어볼까 한다. 내 기준에서 성공적인 삶을 살았다라고 말할 수 있는 사람들의 특징은"결단력"이다. 내가 생각하는 결단력이 좋다라는 뜻은 "사소한 점이라도 결정을 하는데 까지 걸리는 시간이 짧다"인 것 같다.그리고, 결단력이 좋은 사람은 대체로 성공이든, 실패이든 직접 했다는 "경험"을 얻는 것 같았다. 적어도 내 주변에서 내가 생각했을 때, 성공한 인생을 살고 있다라고 느끼는 사람들은 "결단력"이 좋았고, 반대로 실패하는 사람들도 "결단력"..
초기 스타트업의 과부하 초기 스타트업에는 과부하가 쉽게 걸린다. 과부하가 걸리는 원인은 너무 많다.누군가는 인원수, 업무의 질 등이 문제라고 할 것이다. 맞는 말인 것 같다.그런데, 그 수많은 이유들이 메인 원인은 아닌것 같고, 조금씩 지분을 가지고 있는 것 같다. 초기 스타트업의 과부하란 너무 많은 일들로 인해서, 어제의 우선순위와 오늘의 우선순위가 다른 상황인것 같다.즉, 어떤 한가지 일에 집중할 수 있는 상황이 아니라는 것이다. 이 너무 많은 일은 자잘한 업무가 많다는 의미하고는 조금 다른 것 같다. 여기서 말하는 "일"은 적어도 해당 업무 완수 하는데 1주 ~ 1달은 걸리는 작업들, 어쩌면 프로젝트라고 할 수 있는 그런 일들을 말하는 것이다.그리고, 이 일들의 우선순위가 빈번히 교체될 수록 과부하에 걸렸다고 생각한다...
[TimescaleDB] hyper table에 indexing을 걸면? Intro환경설정docker run -d --name timescaledb -p 5432:5432 -e POSTGRES_PASSWORD=password timescale/timescaledb:latest-pg15create table realtime_datas ( id serial, event_time timestamptz not null, data integer not null);DO $$DECLARE _current timestamptz; random_interval INTERVAL; random_value INT; start_date timestamptz := '2024-01-01'; end_date timestamptz := '2024-07-30';BEGIN _cu..
[python] module level __getattr__ (__getattr__ 조금 더 파보기) Intro기존 코드의 하위 호환을 위해서, module level의 __getattr__을 쓰게 되었다.오늘은 module level의 __getattr__에 대해서 정리해보려고 한다. Contents# constant.pyclass Settings: def __init__(self): self.ENV_1 = "test1" self.ENV_2 = "test2"setting = Nonedef get_setting(): global setting if setting is None: setting = Settings() return setting def __getattr__(name: str): return getattr(get_settin..
[백엔드] timestamp를 압축 시켜보자 Contents대부분의 서비스에서 timestamp를 압축할 필요성은 없다.물론 하면 좋겠지만, 굳이 안하는 경우가 많다. 전자제품 카테고리의 물품리스트를 한페이지에 30개 정도씩 뿌려준다고 가정해보자.전체 개수가 30개 인것이니까, "created_at": 2025-12-17T01:00:00+00:00 정도의 문자열이 30개만 반복되는 것이다. 그런데, 실시간 시스템이나 하드웨어 센서 등의 데이터를 차트로 보여줘야하는 대시보드 서비스라면 얘기가 달라진다. 생각해보자, 5분마다 측정된 센서 A, B, C에 대해서, 총 3일치의 데이터를 한개의 차트에 그려야 한다고 가정한다. 하루를 기준으로288(5분마다 측정) * 3(센서 3개) 이므로, 864개의 데이터가 하루에 쌓인다. 3일간의 데이터임으로 ..