전체 글 351

5️⃣ 2025년 회고, 2026년 목표 5️⃣ 2025년 회고, 2026년 목표 4️⃣ 2024년 회고, 2025년 목표1년 동안 이룬 것들 정리어린 왕자에 나온 것처럼 어른들은 숫자를 참 좋아합니다. 1년 동안의 성과를 숫자로 요약하면 뭔가 그 숫자를 만들면서 했던 노력이나 즐거움, 힘듦이 다 사라지는 듯한jinkpark.tistory.com 작년에 이어 올해도 회고와 목표를 작성해 봅니다. 사실 누가 볼 거 같지도 않고 개인적인 얘기들도 많아서 굳이 올려야 하나 싶었지만 이렇게 올리겠다고 결심하지 않으면 체계적으로 쓰지 않아서 무지성 올려 보기로 했습니다!1년 동안 이룬 것들 정리🐜 업무피드벡 받은 것 3개 완벽히 개선!(좀 추상적이긴 하지만...) 팀에서 핵심적인 역할이 됨 🐜 직무 생산성블로그 글 124개 올림 (과거에 비공개로 올려 둔 글 포함)Raycast Open S.. 2026. 1. 1.
애플 로그인, Server-to-Server Event 대응하기! 애플 로그인, Server-to-Server Event 대응하기! 하려는 것25년 10월쯤에 Apple에서 이메일이 왔습니다. 내용은 아래와 같았는데요! New requirement for apps using Sign in with Apple for account creation - Latest News - Apple DeveloperStarting January 1, 2026, developers based in the Republic of Korea must provide a server‑to‑server notification endpoint when registering a new Services ID, or updating an existing Services ID, to associate their website with an app using Sign i.. 2025. 12. 26.
Anki, 제2의 뇌로 사용하기 Anki, 제2의 뇌로 사용하기 Anki란?Anki는 암기라는 일본어 단어를 소리 나는 대로 영어로 적은 표현이고, 단어장 어플입니다.다소 투박한 UI/UX를 가지고 있고 진입 장벽도 있지만 효과만큼은 확실합니다. 컴퓨터 버전은 홈페이지에서 무료로 다운로드 받을 수 있습니다. Anki - powerful, intelligent flashcardsAnki supports complex workflows, but getting started is easy.apps.ankiweb.net 안드로이드 버전은 Google Play에서 무료로 다운로드할 수 있습니다. AnkiDroid 암기카드 - Google Play 앱Memorize anything efficiently with AnkiDroid! Many free decks available.. 2025. 10. 4.
Transaction Outbox Pattern Transaction Outbox Pattern Transaction Outbox Pattern이란?Transaciton Outbox Pattern은 외부 요청을 DB의 Transaction이 성공하면 성공시키는 걸 보장하기 위해 Outbox Table을 두고 Transaction 내에서 Outbox Table에 외부 요청의 요청 정보를 담고, 다른 요소가 비동기적으로 이 Outbox Table을 주기적으로 Polling 하면서 외부 요청을 하는 형식의 소프트웨어 디자인 패턴입니다.쉽게 말해 다음과 같은 상황을 가정하겠습니다.Business Logic 처리결과 DB TABLE 1에 저장결과 DB TABLE 2에 저장Kafka에 이벤트 발행1, 2, 3의 경우 Transaction으로 묶으면 원자성 (Atomicity)을 DB 단위에서 보장해 줍니다. .. 2025. 10. 3.
Github Commit 할 때 사용하는 GPG Key가 뭘까? Github Commit 할 때 사용하는 GPG Key가 뭘까? GPG Key란?OpenPGP Spec을 따르는 암호화 Key입니다. StandardOpenPGP Standardwww.openpgp.orgOpenPGP Spec에는 Key, Signature, 암호화 방식 등의 형식, 생명주기를 정의하고 있어 일반적인 RSA Key와는 구분됩니다. 암호화 알고리즘도 여러 가지를 지원합니다.RSAELGamalDSAECDHECDSAEdDSA(사실 RSA 말고는 들어 본 적도 없습니다...) GNUPG 사이트에 가면 각 OS 별로 GPG Key를 만들 수 있는 CLI를 다운로드 받을 수 있습니다! GnuPG - DownloadNote that you may also download the GNU Privacy Guard from a mirror site close to y.. 2025. 9. 28.
서울시 영테크 재무상담 후기 서울시 영테크 재무상담 후기 받게 된 경로평소에 구독하던 경제 관련 뉴스레터에 아래와 같이 서울 영테크 광고가 왔습니다. 평소에는 이런 광고를 별생각 없이 넘기지만 무료기도 하고, 내가 재테크나 돈 관리를 잘하고 있는지 전문적으로 상담을 받아보면 도움이 되고 재밌겠다 해서 신청했습니다.신청은 아래 홈페이지에서 할 수 있습니다. 서울영테크서울영테크youth.seoul.go.kr:443후기사실 저는 대학교 때 가장 재밌게 들은 교양 수업이 경제학 101이기도 하고, 평소에 경제나 재테크에 관심이 많아서 엄청 기초적인 내용이고 그렇게 큰 도움이 되지 않을 줄 알았습니다. 하지만 제 예상과는 달리 상당히 도움이 됐습니다.우선 상담을 진행하시는 분이 공무원이나 전문성 없는 분들이 아니라 은행원이면서 관련 자격증을 따신 분들이라 상당히 전문적.. 2025. 9. 27.
AWS CLI에서 1password로 보안 관리하기 AWS CLI에서 1password로 보안 관리하기 이걸 왜 하는 걸까?AWS CLI을 사용하기 위해서는 ~/.aws/config에 아래와 같이 Access Token, Secret Key가 있어야 합니다.[default]region = ap-northeast-2aws_access_key_id = 373ac86c-26c2-44acaws_secret_access_key = 5813087a26134c7fb66c637572c2822f Local에서 접근 가능하다면 IAM으로 권한 제한을 해 놓겠지만, 그래도 이런 중요한 정보가 평문으로 저장된다는 게 뭔가 찝찝한 건 사실입니다. 이런 상황에서 1password에서 지원하는 기능을 사용하면 Secret을 Local에 저장하지 않고 1password에 있는 걸 사용해 더 안전하고, 만약에 컴퓨터를 바꾼다고 해도 1.. 2025. 8. 31.
AWS Lambda를 Spring 기반 Batch로 사용하기 AWS Lambda를 Spring 기반 Batch로 사용하기 기본 구성사이드 프로젝트에서 Batch Job이 필요할 때, 기존에는 EC2에 띄워 놓은 instance에서 @Scheduled를 사용해서 주기적으로 실행하는 방식을 사용했습니다. 당연하지만 이렇게 하면 Instance가 늘어나면 Batch가 중복 실행되고, 조금이라도 트래픽이 많아지면 Batch가 서비스를 방해하게 됩니다.그래서 어떻게 할까 고민하다가 AWS Lambda를 Cloudwatch를 통해서 주기적으로 실행하면 되지 않을까 생각이 들었습니다.이게 그냥 되는 건 아니고 이렇게 하기 위해서는 여러 단계가 필요합니다.실행하자마자 내가 원하는 Batch Job을 실행해 주는 Docker Image 만들기이 Docker Image를 AWS의 Elastic Container Registry에 업로드하기L.. 2025. 8. 23.
Spring Cache에서 RDB를 원천으로 사용하기 Spring Cache에서 RDB를 원천으로 사용하기 꼭 Spring을 쓸 필요는 없다사실 Caching을 하겠다고 꼭 Spring을 쓸 필요는 없습니다. Caching의 핵심은 결국 실제 동작을 실행하면 결과를 어딘가에 저장해 두고, 동작을 실행할 때마다 어딘가에 저장된 값이 있는지 확인하고 값이 있으면 동작을 실행하지 않고, 값이 없으면 실행해서 저장하기만 하면 됩니다.이런 간단한 동작은 그냥 직접 구현해도 됩니다. 하지만 이렇게 하면 2가지 문제점이 있습니다.핵심 비즈니스 로직과 관련 없는 코드가 섞임 (Separation of Concerns)같은 코드를 여러번 반복해서 써야 함 (Boilerplate)그래서 극단적으로는 Spring을 쓰지 않고 간단히 아래와 같이 작성할 수도 있지만...fun example(): Example { val ke.. 2025. 8. 16.
Raycast Extension 개발하기 Raycast Extension 개발하기 뭘 하는 거야?Raycast라는 굉장히 유명한 생산성 도구가 있습니다. 기능이 너무 많고 편리해서 대표적인 기능 한 개만 꼽기도 어렵지만, 쉽게 얘기하면 컴퓨터에서 할 수 있는 모든 것을 쉽게 해 준다고 보면 됩니다. 예를 들자면...이모지를 원하는 검색어 아무거나 써서 검색하면 적절한 이모지 바로 추천원하는 모든 앱에 단축키 지정해서 바로 열기단축키로 인터넷에서 이미지 바로 검색단축키로 검색창 열어서 단위 쉽게 변환등등... 자세한 건 Raycast의 공식 유튜브 계정에 잘 나와 있습니다. RaycastYour shortcut to everything.www.youtube.com Raycast에서 기본으로 제공하는 기능도 상당히 편리하지만 Raycast의 정말 좋은 점은 Raycast가 닦아 놓은 좋은.. 2025. 8. 9.
실수체는 구성 됐다고 가정하고 허수의 다양한 성질 증명하기 실수체는 구성 됐다고 가정하고 허수의 다양한 성질 증명하기 가정1 - 실수체가 구성 돼 있다허수를 정의하기 위해서 실수체가 잘 정의돼 있다고 가정해야 합니다. 그리고 실수"체"가 정의돼 있다는 말은 실수는 구성 됐고, 체 공리를 만족한다고 가정합니다.더하기: 실수체에 대해서 닫혀 있음 (Closed)더하기: 결합법칙 (Associativity)더하기: 교환법칙 (Commutativity)더하기: 항등원 (Identity)더하기: 역원 (Inverse)곱하기 실수체에 대해서 닫혀 있음 (Closed)곱하기: 결합법칙 (Associativity)곱하기: 교환법칙 (Commutativity)곱하기: 항등원 (Identity)곱하기: 0 제외 역원 (Inverse)더하기 + 곱하기: 분배법칙 (Distributive) 2 - 허수의 정의허수의 정의는 실수 2개의 순서쌍.. 2025. 8. 3.
MySQL에서 Index가 사용되지 않는 대표적인 5가지 경우와 이유 알아보기 MySQL에서 Index가 사용되지 않는 대표적인 5가지 경우와 이유 알아보기 Index는 DB에서 가장 혁명적인 발명품 중에 하나입니다.어마 어마하게 데이터가 많아 전체를 훑는다면 몇 십 초, 몇 분이 걸릴 복잡한 Query들을 1초도 안 돼서 어마 어마하게 빠르게 실행할 수 있게 해 주기 때문입니다.하지만! Index의 내부 원리를 잘 모르면 당연히 Index가 사용되기를 기대한 Query가 Index를 사용하지 않는 대참사를 맞이할 수 있습니다. 그중에서도 가장 자주 있는 5가지 경우는 알아보겠습니다!1 - LIKE에서 %를 앞에 사용할 때SELECT * FROM company WHERE name LIKE '책잇아웃%';SELECT * FROM company WHERE name LIKE '%책잇아웃';가장 유명한 경우입니다. Index는 트리 (Tree) 형태로 돼 있는데요... 2025. 7. 20.
MySQL의 실행 계획을 보기 위한 최소한의 지식 MySQL의 실행 계획을 보기 위한 최소한의 지식 실행 계획 (Execution Plan)이란?SQL은 다른 프로그래밍 언어와는 상당히 다릅니다. SQL은 내가 원하는 게 뭔지만 DBMS에 알려주고 이걸 어떻게 할지는 알려주지 않습니다. 보통의 프로그래밍 언어는 추상화 정도의 차이는 있겠지만 내가 원하는 동작을 어떻게 할지 서술합니다. 예를 들어 최대 공약수를 구하는 프로그램을 만들고 싶다면 이 동작을 하나하나 서술해야 합니다. 최대 공약수의 경우 유클리드 알고리즘 같은 효율적인 방법이 있지만 단순 무식한 방법으로는 각 수의 약수를 구한 뒤, 공통된 애들을 찾고, 그중에서 가장 큰 수를 찾으면 됩니다. 이걸 Kotlin으로 작성하면 아래와 같습니다.fun getGcd(number1: Int, number2: Int): Int { val number.. 2025. 7. 6.
방문자 패턴 (Visitor Pattern) 알아보기 방문자 패턴 (Visitor Pattern) 알아보기 최근 Crafting Interpreters라는 인터프리터를 만드는 책을 열심히 읽고 있는데, 여기서 Visitor Pattern이라는 디자인 패턴이 나왔습니다. 처음에는 중요한 게 아니겠지 하며 가볍게 넘어갔는데 계속 나와서 결국 Visitor Pattern을 공부하게 됐습니다.방문자 패턴 (Vistor Pattern) 이란?방문자 패턴 (Visitor Pattern)은 알고리즘과 그 알고리즘의 대상이 되는 객체를 분리하기 위한 행동 디자인 패턴입니다.이렇게 분리를 하면 새로운 알고리즘이 추가될 때 기존 객체는 건들이지 않고 새로운 객체를 만들어서 대응할 수 있습니다. 당연하지만 알고리즘의 대상이 되는 객체가 새로 추가되면 기존 알고리즘을 다시 다 대응해야 합니다. 그래서 알고리즘의 대상이 되는 객체는.. 2025. 5. 18.
📖 나라를 위해서 일한다는 거짓말: 공무원 조직의 문제점 알아보기 📖 나라를 위해서 일한다는 거짓말: 공무원 조직의 문제점 알아보기 평점: 5 / 5 ( ★★★★★)평소 궁금했던 주제기도 하고, 저자 분의 필력이 너무 좋으셔서 흡입력 있게 완독 했습니다.보통 이런 식의 사회 비판 서적은 딱딱한 감이 있는데 저자 분의 개인 이야기를 적절하게 섞어서 생동감 있었고, 단순히 문제점만 지적하는 게 아니라 그에 대한 저자 분의 해결책도 같이 제시해 줘서 좋았습니다. 요약행정고시를 합격해 5급 공무원으로 10년 동안 일한 저자가 공무원 사회의 여러 문제점들과 그 해결책에 대해 담담하지만 통찰력 있게 알려 줍니다.간단히 말하면 공무원 조직의 문제는 가짜 노동이 많다는 겁니다. 사기업에서는 간단히 말로 합의할 수 있는 것들이나 담당자 한 명이 알아서 결정할 문제를 공직 사회 특유의 보고서 형식에 맞게 하나하나 보고해야 하고, 보고를 해도 사소한 보.. 2025. 5. 17.
생산성을 위해 핸드폰 사용 시간 줄이기 (iPhone 기준) 생산성을 위해 핸드폰 사용 시간 줄이기 (iPhone 기준) 문제의식현대의 IT 기술은 일상생활의 각종 불편한 것들을 혁신하고 바꿨습니다. 당장 제 직업인 프로그래머는 현대 IT 기술이 없었다면 존재하지도 않으니 저부터가 이 기술의 가장 큰 수혜자입니다.하지만 동시에 쇼츠를 보다가 새벽 5시까지 잠을 못 자고, 내가 인생에서 하고 싶은 일 / 중요한 일을 하지 않고 SNS를 하며 시간을 보내고, 감정 소모가 심한 각종 사회의 갈등이나 쓸데없는 걸로 싸우는 댓글창을 읽을 때면 말로 형용할 수 없는 현타가 오곤 합니다.특히 저는 성향이 하루라도 생산적으로 보내지 못 하면 현타가 오는 생산성 중독인데, 최근 들어 휴대폰을 너무 많이 사용해서 생산성이 내려가고 있다고 느꼈습니다. 제 TODO 리스트에는 2,000개가 넘는 항목이 대기하고 있는데, 이대로 가면 반의 반도 .. 2025. 5. 3.
🍎 SwiftUI에서 직접 Infinite Scroll 구현하기 🍎 SwiftUI에서 직접 Infinite Scroll 구현하기 하려는 것사이트와 앱에서 콘텐츠를 제공할 때 밑으로 스크롤하면 무한으로 나오게 합니다. SwiftUI에서 이런 동작을 어떻게 직접 구현할 수 있을까요?가능하면 직접 하지 말자사실 SwiftUI의 List는 기본적으로 Lazy하게 처리됩니다. List를 쓰지 않더라도 LazyHStack, LazyVStack을 사용하면 세부적인 내용을 직접 구현할 필요는 전혀 없이 SwiftUI의 기능을 활용해서 구현할 수 있습니다.하지만 직접 구현할 수 밖에 없는 상황들이 있습니다.데이터를 그룹핑해서 보여줘야 할 경우데이터를 크게 가공해야 할 경우API를 호출해서 데이터를 가져와야 할 경우위 상황에서도 가능하면 List의 기능을 최대한으로 활용하는 게 좋습니다.Infinite Scroll 구현하기 (Swift Data를 .. 2025. 4. 19.
Compiler의 구조 알아보기 (Front-end) Compiler의 구조 알아보기 (Front-end) Compiler란 ?컴파일러도 결국은 컴퓨터 프로그램입니다. 그중에서도 인간이 알아듣기 편한 프로그래밍 언어를 컴퓨터가 알아들을 수 있는 기계어 (0/1로 이루어진 명령어들)로 바꿔 주는 프로그램입니다.모든 프로그램이 그렇듯 컴파일러도 재사용성을 높이고 유지보수를 편하게 하기 위해 3개 부분으로 역할이 나눠져 있습니다. 이 각 부분을 차례대로 알아보겠습니다!Front-endMiddle-end (예정)Back-end (예정) 먼저 그 전에, 형식언어라는 개념에 대해 알아두면 이해가 더 편하기 때문에 형식언어에 대해 가볍게 알아보시기를 추천드립니다. 형식 언어 (Formal Language)언어가 애초에 뭘까?의미를 전달하기 위한 시스템 언어는 의미를 전달하기 위한 시스템입니다. 우리가 한국어를 할 때 결국.. 2025. 4. 13.
📖 넥서스: 역사에 대한 신선한 관점으로 본 AI와 인류의 미래 📖 넥서스: 역사에 대한 신선한 관점으로 본 AI와 인류의 미래 평점: 5 / 5 ( ★★★★★) 최근 2년간 읽은 책 중에 가장 좋았습니다. 처음에는 역사학자가 무슨 AI에 관해서 얘기하나 싶었지만, 막상 다 읽고 나니 인류의 복잡한 역사를 일리 있고 재미있는 통찰로 바라보고, 이를 바탕으로 AI와 AI가 바꿀 사회를 풀어내서 재밌었습니다.저는 무엇보다 큰 그림에 대한 통찰을 주는 책을 굉장히 좋아했는데 넥서스가 이런 제 취향을 저격했습니다. (유발 히라리의 책은 여태까지 다 취향 저격이긴 했지만...)요약정보에 대한 순진한 관점에서 벗어나서 복잡한 정보관으로 인류의 역사를 바라보면,AI가 여태까지의 기술과는 근본적으로 다르고 조심하지 않으면 민주주의/권위주의 정부를 가리지 않고 인류의 멸망을 불러 올 수 있다! 저를 포함한 많은 사람들, 특히 기술 분야에 종사하는.. 2025. 4. 7.
📖 은여우 길들이기: 과학적 발견이 이루어지는 과정의 드라마 📖 은여우 길들이기: 과학적 발견이 이루어지는 과정의 드라마 평점: 5 / 5 ( ★★★★★) 사실 5점으로도 부족한 느낌입니다. 비문학을 읽으면서 이렇게 감정적인 동요가 일어나고 몰입하는 경험은 처음이었습니다. 우리가 과학책에서 가볍게 읽고 넘기는 1줄의 사실을 밝혀내기 위해 인생을 바치고 현실의 여러 고난들을 이겨내며 연구를 하는 과학자들의 모습에서 왠지 모를 감동이 느껴집니다.요약먼 옛날 인간의 선조들이 늑대를 가축화 시켜서 개로 진화했듯,여우도 육종을 통해 가축화 시키는 걸 관찰하면가축화 과정의 여러 비밀을 발견할 수 있지 않을까? 늑대와 여우는 공통 조상을 가지고 있고, 그리 먼 관계도 아니기에 여우의 가축화가 가능하지 않을까 생각했던 소련의 과학자 드미트리 벨라예프의 실험에 관한 책입니다. 사실 과학적인 내용은 별로 안 나오고, 실험에 엮인 여러 인물들.. 2025. 3. 30.
IntelliJ 디버거 사용하기 IntelliJ 디버거 사용하기 디버거 (Debugger)란?프로그래밍을 하다 보면 점점 새로운 기능을 만드는 시간보다 버그를 찾는 시간이 많아집니다. 처음에는 print를 하거나 console.log를 찍는 등 원시적인 방법으로 해도 충분하지만 점점 복잡한 프로그램과 복잡한 버그들을 다루면서 이런 단순한 기능으로는 충분하지 않게 됩니다.이럴 때 버그를 찾기 위해 편한 여러 기능을 제공해 주는 걸 디버거 (Debugger)라고 합니다. 보통은 IDE에 내장 돼 있고, 흔히 제공되는 기능들이 정해져 있습니다.Breakpoints: 프로그램 코드의 특정 부분에서 일지정지 하는 기능Step Through: 코드를 1줄 1줄 차례대로 실행하는 기능프로그램의 특정 순간에서 여러 변수들의 값을 볼 수 있는 기능특정 시점에서 여러 코드를 직접 실행.. 2025. 3. 22.
반응형