c.horokhoroktech

그린님의 홈

[데이터베이스] #1 트랜잭션
0008
그린 프로필

그린

2026. 6. 8. (월)
#데이터베이스

[데이터베이스] #1 트랜잭션

![1.png](https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/e4871163-9f46-4c57-b4a5-38380dc40649-1.png) # 트랜잭션이란? > 인가받지 않은 사용자로부터 `데이터 보장`을 위해 DBMS가 가져야 하는 특성 > DBMS에서 `하나`의 '기능'을 수행하기 위한 `작업의 기본 단위` ## 1. 특성 (`ACID` or `원일고영`) 1) **원**자성 - **A**tomicity - 트랜잭션 연산 전체가 성공 or 실패되어야 하는 성질 - All or Nothing 2) **일**관성 - **C**onsistency - 트랜잭션 수행 전/후 상태가 같아야 하는 성질 3) **고**립성 - **I**solation - 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 하는 성질 4) **영**속성 - **D**urability - 완료된 트랜잭션 결과는 영구적으로 DB에 저장되어야 하는 성질 ## 2. 상태 변화 (`활부완실철`: 할부 완전 싫죠~) <img width="500" height="350" alt="transaction_상태전이도" src="https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/4d9bb664-fa32-424f-b57f-9f4b86f83d73-.png" /> |상태|설명| |:---:|:---| |**활**동|Acive, 초기 상태, 트랜잭션 실행 중| |**부**분 완료|Partially Committed, 마지막 명령문이 실행된 후| |**완**료|Committed, 트랜잭션 완료(성공)| |**실**패|Failed, 트랜잭션 실행 불가(실패)| |**철**회|Aborted, 트랜잭션이 취소되고 트랜잭션 시작 전으로 환원| ## 3. 제어 > 트랜잭션의 `결과`를 `허용 or 취소`할 때 `TCL`(Transaction Control Language)로 제어한다. ### 3-1. TCL 명령어 (`커롤체`) |명령어|설명| |:---:|:---| |**커**밋|COMMIT, 트랜잭션 확장, 트랜잭션을 메모리에 영구 저장| |**롤**백|ROLLBACK, 트랜잭션 취소, 트랜잭션 내역 저장 무효화| |**체**크포인트|CHECKPOINT, 저장 시기 설정, 롤백 위한 시점 지정| ### 3-2. 병행 제어<sup>Concurrency Control</sup> (일관성 주요 기법) > 다수의 사용자 환경에서 여러 트랜잭션 수행 시, DB 일관성 유지 위해 상호 작용을 제어하는 기법 1) 목적 - DB 공유 최대화 - 시스템 활용도 최대화 - DB 일관성 유지 - 사용자의 응답시간 최소화 2) 종류 (`로 낙타다2`) |종류|설명| |:---:|:---| |**로**킹|| |**낙**관적 검증|| |**타**임 스탬프 순서|| |**다**중버전 동시성 제어|| |**2**PC|| ## 4. DB 고립화 수준<sup>Isolation Level</sup> > 다른 트랜잭션이 현재 데이터의 무결성을 해치지 않도록 잠금을 설정하는 정도 ## 5. 회복 기법<sup>Recovery</sup> > 트랜잭션 수행 중 손상된 DB를 이전의 정상 상태로 복구시키는 작업 ### 5-1. 주요 요소 1) REDO - DB가 비정상적 종료가 되었을 때, 디스크의 로그를 분석하여 트랜잭션의 시작과 완료 기록이 있는 트랜잭션 작업을 재작업하는 기법 - DB 손상 시, 가장 최근 복제본을 적재한 후의 변경만을 로그를 이용해 재실행함으로써 DB를 복원하는 기법 2) UNDO - DB가 비정상적 종료가 되었을 때, 디스크의 로그를 분석하여 트랜잭션의 시작은 있지만 완료 기록이 없는 트랜잭션 작업 내용을 모두 취소하는 기법 - DB 손상은 없지만 변경 중 or 변경 내용의 신뢰가 없는 경우, 모든 변경을 취소해 복원하는 기법 ## 5-2. 종류 (`회로체그`: 회로 체크) |종류|설명| |:---:|:---| |**로**그 기반 회복 기법|지연 갱신 회복 기법(트랜잭션 완료 전까지 DB에 기록하지 않음), 즉각 갱신 회복 기법(트랜잭션 중 갱신 결과를 바로 DB에 반영| |**체**크 포인트 회복 기법|장애 시 검사 이후의 트랜잭션에서만 장애 이전으로 복원시키는 기법| |**그**림자 페이징 회복 기법|트랜잭션 중 복제본을 생성해 DB 장애 시 복구하는 기법|

[코드트리] 깃허브 연동으로 잔디 심기 + 리마인더로 1일1코테하기
00021
그린 프로필

그린

2026. 6. 8. (월)
#코드트리

[코드트리] 깃허브 연동으로 잔디 심기 + 리마인더로 1일1코테하기

코딩 테스트 공부를 해본 사람이라면 누구나 공감하겠지만, 알고리즘 학습에서 가장 어려운 것은 화려한 테크닉을 익히는 것이 아니라 **꾸준함**을 유지하는 것이다. 초반의 불타오르는 열정은 어려운 문제를 만나거나 바쁜 일상에 치이다 보면 금방 식어버리기 마련이다. 어느덧 코드트리를 활용해 본격적인 코테 공부에 뛰어든 지 3회차에 접어들면서, 나 역시 어떻게 하면 지치지 않고 지속 가능한 학습 루틴을 만들 수 있을지 깊게 고민했다. 그리고 그 답을 코드트리가 제공하는 강력한 동기부여 기능인 `학습 리마인더 알림톡`과 `깃허브 자동 연동`에서 찾았다. ## 1. 바쁜 일상 속 학습 유지를 돕는 '리마인더 알림톡' <div style="display: flex; gap: 10px;"> <img width="250" height="350" alt="codetree_reminder1" src="https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/9d398d31-297a-4a5b-a2e0-2f8902d17601-image.png" /> <img width="250" height="350" alt="codetree_reminder2" src="https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/f078ac40-e333-4d61-949a-a4eecd23ddbe-image.png" /> </div> 개인 프로젝트 개발이나 자기 계발, 대외 활동 등으로 정신없이 하루를 보내다 보면 코테 문제를 푸는 우선순위가 뒤로 밀리기 십상이다. 코드트리의 학습 리마인더는 규칙적으로 카카오톡으로 알림을 보내주어, 무너질 뻔한 학습 흐름을 다잡아주는 든든한 알림 역할을 한다. ## 2. 개발자의 자존심, '깃허브 연동으로 잔디 심기' <img width="800" height="500" alt="codetree_github" src="https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/59d26217-b490-4ba0-913b-4d7f6197d62b-image.png" /> 학습 동기를 유지하는 가장 시각적이고 확실한 방법은 단연 깃허브 잔디 심기이다. 코드트리는 내가 푼 문제와 코드가 내 깃허브 레포지토리에 자동으로 커밋되는 연동 기능을 지원한다. 내가 공부한 흔적이 고스란히 깃허브 잔디로 기록되는 시각적 동기부여의 힘 또한 많은 도움이 되고 있다. 최근 개인 프로젝트를 진행하면서 깃허브 잔디를 채워나가는 재미에 푹 빠져 있었는데, 코드트리를 통한 알고리즘 학습 결과까지 내 깃허브 잔디에 고스란히 반영되니 동기부여가 배가 되는 체감 효과를 누리고 있다. 과거에는 백준이나 프로그래머스에서 문제를 풀고 나면 직접 코드를 복사해서 커밋하거나 크롬 확장 프로그램을 이용해서 수동으로 일일이 관리를 해줘야 했는데 간혹 네트워크 상태가 안 좋거나 하는 등의 문제로 잔디 심기를 빼먹거나 누락하는 일이 생기곤 했는데, 코드트리는 문제를 해결하는 순간 연동된 레포지토리로 코드가 자동 업로드되니 코딩테스트 학습 기록 관리가 훨씬 수월하고 깔끔해졌다. 갭체크를 통해 나에게 딱 맞는 백트래킹 같은 취약 유형 챕터를 정교하게 추천해 주는 시스템에 더해, 알림톡과 깃허브 연동이라는 양방향 동기부여 장치까지 갖추고 있으니 학습 이탈률이 현저히 낮아질 수밖에 없다. 눈에 보이는 깃허브 잔디와 매일 날아오는 리마인더 덕분에 까먹었어도 맞다 1일1코테 해야지.. 하면서 다시금 문제 앞으로 가곤 한다. 그래서 앞으로 남은 학습 기간 동안에도 이 루틴을 적극적으로 활용할 예정이며, 내 알고리즘 구현 실력도 잔디가 심어지는 만큼 탄탄히 쌓아져 가기를 기대해 본다. [코드트리 추천 링크](https://www.codetree.ai/ko/no-free-lunch-2026/?ref=PAN65K) (추천 코드: PAN65K)

[코드트리] Backtracking 학습하기
00015
그린 프로필

그린

2026. 6. 1. (월)
#코드트리

[코드트리] Backtracking 학습하기

코드트리로 코테 공부 중 평소에 늘 헷갈리던 지식인 '백트래킹(Backtracking)' 유형을 본격적으로 학습해봤다. 백트래킹은 모든 경우의 수를 탐색하는 과정에서 조건에 맞지 않으면 과감히 되돌아가는 효율적인 완전 탐색 기법이다. 개념 자체는 직관적이지만, 막상 막막하게 코드를 구현하려고 하면 재귀 함수의 호출 흐름과 종료 조건을 설정하는 부분에서 늘 헤매곤 했다. ![스크린샷 2026-06-01 23.57.53.png](https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/9afc5785-6eca-4abb-a267-fd7c5e60e71b-2026-06-01-23.57.53.png) 지난 [게시글](https://www.horok.co.kr/horok-tech/feeds/posts/31)에 작성했다시피 갭체크로 나온 진단 결과에 따라 맞춤형 추천 챕터를 살펴볼 수 있었다. 수많은 알고리즘 중에서도 지금 당장 나에게 가장 취약한 백트래킹 문제들만 모아놓은 챕터를 골라 집중 공략할 수 있었다. 이렇게 개인이 부족한 유형을 바로바로 확인하고 정밀 타격하듯 보완할 수 있는 학습 로드맵을 제공한다는 점이 참 매력적이다. ![스크린샷 2026-06-02 00.00.41.png](https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/b12975a5-4e4d-490d-be67-857f9ebe73d8-2026-06-02-00.00.41.png) 학습을 시작하면 단순히 문제만 툭 던져주는 것이 아니라, 해당 유형에 대한 상세한 개념 설명과 함께 풀이의 첫 단추를 어떻게 꿰어야 하는지 방향성을 친절하게 가이드해 준다. 트리 구조를 시각적으로 어떻게 이해해야 하는지 단계별 사고 과정을 짚어주니 재귀의 흐름이 한결 명확하게 눈에 들어왔다. ![스크린샷 2026-06-02 00.12.06.png](https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/63b8b782-59e3-4f6e-b7f8-b18b83ad5911-2026-06-02-00.12.06.png) 이번에 풀어본 'K개 중에 1개를 N번 뽑기' 문제의 정석 풀이는 선택한 숫자를 배열에 차곡차곡 쌓았다가, 재귀 호출이 끝나고 돌아오면 마지막 원소를 다시 제거(Pop)하며 가지치기를 해나가는 DFS 방식이다. 하지만 백트래킹의 첫 번째 관문인 중복 순열 문제인 만큼, 이번에는 파이썬의 내장 라이브러리인 itertools를 사용해서 빠르게 접근하고 풀어봤다. product 함수에 repeat=N 옵션을 주면, 지정한 원소 리스트 안에서 중복을 허용하여 N번 뽑는 모든 순서쌍을 사전순 튜플 형태로 깔끔하게 반환해 준다. 백트래킹의 원리를 100% 코드로 구현하는 것도 중요하지만, 실제 코딩 테스트 실전 상황에서는 상황에 따라 이러한 내장 라이브러리를 적재적소에 활용해 구현 시간을 단축하는 전략도 큰 도움이 된다. ![스크린샷 2026-06-02 00.09.48.png](https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/6e2cd0d8-03e3-4b3a-911e-f373d7071729-2026-06-02-00.09.48.png) 코드트리에서는 알고리즘 유형에 맞는 탄탄한 개념 해석과 시뮬레이션 설명을 읽고 난 후, 방금 배운 개념을 바로 대입해 볼 수 있는 응용 문제가 이어지고 직관적인 웹 IDE 환경에서 코드를 즉시 입력하고 채점할 수 있다. 기존의 다른 코딩테스트 플랫폼들은 대개 문제와 제한 조건만 띡 제시할 뿐, 문제를 어떤 시각으로 해석해야 하는지, 어떤 접근법이 가장 정석적인 효율성을 가지는지 알려주지 않아 초보자나 독학하는 사람들에게는 다소 불친절하고 장벽이 높았다. 반면 코드트리는 코딩테스트라는 막막한 미로 속에서 개발자가 어떤 사고의 흐름을 거쳐야 하는지, 어떤 최적의 방식을 선택해야 하는지 든든한 나침반 역할을 해준다. 나처럼 특정 유형에서 유독 정체기를 겪고 있거나, 무작정 문제만 풀다가 벽에 부딪힌 코테 준비생들에게 꼭 추천하고 싶은 정교한 플랫폼이다. [코드트리 추천 링크](https://www.codetree.ai/ko/no-free-lunch-2026/?ref=PAN65K) (추천 코드: PAN65K)

[코드트리] 코드트리 코딩테스트 갭체크 후기
00065
그린 프로필

그린

2026. 5. 25. (월)
#코드트리

[코드트리] 코드트리 코딩테스트 갭체크 후기

![스크린샷 2026-05-25 22.47.45.png](https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/05781d3a-b0b2-4051-96a5-95f643ff6ce1-2026-05-25-22.47.45.png) 최근 코드트리 갭체크를 진행하면서, 내가 어떤 유형에서 강하고 어떤 부분이 부족한지를 꽤 명확하게 확인할 수 있었다. 처음에는 단순 구현 문제들은 비교적 빠르게 해결했지만, BFS, DP, 이분탐색, 누적합 같은 유형에서는 생각보다 자주 막혔다. 특히 완전탐색으로 먼저 접근했다가 시간초과가 발생하고, 이후 누적합이나 이분탐색으로 최적화하는 과정에서 내 약점이 분명하게 드러났다. ![스크린샷 2026-05-25 22.53.03.png](https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/c5dad399-ee76-4877-9938-b5b71a2547e6-2026-05-25-22.53.03.png) 이번 갭체크에서 가장 크게 느낀 부족한 점은 “문제를 보자마자 적절한 알고리즘을 떠올리는 힘”이었다. 처음에는 단순 반복문이나 완전탐색으로 접근했던 문제들이 있었는데, 테스트케이스는 통과해도 제출 단계에서 시간초과가 발생하는 경우가 많았다. 이후 풀이를 다시 분석하면서 누적합, 이분탐색, BFS, DP 같은 방식으로 접근해야 한다는 걸 뒤늦게 깨닫게 되었다. 코드트리에서 추천 학습 경로를 따라가고 비슷한 유형을 단계적으로 반복하다 보니 “왜 이 문제에서 BFS를 써야 하는지”, “왜 이 문제는 DP인지”를 조금씩 체감할 수 있었다. 특히 직접 시간초과를 경험한 뒤 최적화 풀이를 다시 보는 과정이 가장 도움이 됐다. ![스크린샷 2026-05-25 22.58.16.png](https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/bf346de5-fa80-4cc2-9f6d-1e3d512e6951-2026-05-25-22.58.16.png) ![스크린샷 2026-05-25 22.58.18.png](https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/434b2ac7-8f2d-4d68-ac0f-fd4e5c1f5f69-2026-05-25-22.58.18.png) 진단이 끝나고 나면 분석 결과를 한 눈에 볼 수 있게 시각화하여 보여주는데 부족한 점을 보완하면서 코드트리의 추천 학습 경로를 진행한다면 좋은 코딩테스트 대비가 될 것 같다! 부족한 유형을 반복적으로 학습하게 만들어주는 흐름이 있어서 약점 보완에 집중하기 좋은 것 같고, 몇 달 전에 코드트리를 사용해봤을 때는 특히 비슷한 유형의 문제를 난이도별로 연속해서 풀다 보니, 처음에는 전혀 감이 안 오던 BFS나 DP 문제들도 조금씩 패턴이 보이기 시작했다. 코딩테스트를 준비하면서 가장 크게 느낀 건, 코딩테스트 실력은 단기간에 갑자기 늘어나는 것이 아니라 “틀린 이유를 계속 분석하는 과정” 속에서 성장한다는 점인 것 같다. 앞으로는 문제 수를 늘리는 것보다, 문제를 풀고 난 뒤 왜 시간초과가 났는지, 왜 다른 알고리즘이 필요한지를 정리하면서 학습하려고 한다. 또한 코드트리는 깃허브와 연동도 제공하는데 잔디를 심으면서 초기 풀이, 개선 풀이, 최적화 풀이를 단계별로 기록하면서 내 약점을 가장 빠르게 확인하는 데에 도움이 된다고 생각한다. 최종 목표는 제한 시간과 메모리 조건까지 고려하며 적절한 알고리즘을 빠르게 선택할 수 있는 수준까지 성장하는 것이다. 앞으로도 갭체크 결과를 기준으로 부족한 유형을 반복 학습하면서 꾸준히 실력을 끌어올리고 싶다. 아래 링크는 글쓴이 추천 링크로, 클릭하면 현재 진행 중인 '코드트리 청약 챌린지' 페이지로 이동하니 관심 있는 분들은 함께 참여할 수 있다! [코드트리 추천 링크](https://www.codetree.ai/ko/no-free-lunch-2026/?ref=PAN65K) [추천 링크] PAN65K

[튜토리얼] Claude Code 무료로 사용하기
103206
그린 프로필

그린

2026. 5. 7. (목)
#claude

[튜토리얼] Claude Code 무료로 사용하기

> 이 방법은 Anthropic의 Claude Code를 NVIDIA에서 제공하는 무료 API 키를 사용하여 우회 접속하는 방법입니다. 누군가 Claude Code를 무료로 사용할 수 있는 프로젝트를 공개했는데요, 해당 레포는 [여기](https://github.com/Alishahryar1/free-claude-code)서 확인할 수 있습니다. 그래서 많은 분들이 쉽게 로컬에 설치하고 실행하실 수 있도록 그 방법을 포스팅하려고 합니다. 그럼 시작할게요! --- ## 0. 준비물 - [NVIDIA Build](https://build.nvidia.com/explore/discover)에 접속하여 개인 계정으로 가입 - API 키 발급 후, 복사하기 (🚨주의: 키는 발급한 뒤 한번만 노출되므로 메모장에 남겨놓기) - 'Node.js'와 'Python3' 미리 설치해 놓기 ## 1. Claude Code 설치 - 터미널에서 아래 명령어 입력하여 클로드 코드 설치하기 ```bash npm install -g @anthropic-ai/claude-code ``` ## 2. 프록시 프로젝트 설정 - GitHub에서 우회 서버 프로젝트를 클론하고 파이썬 환경 구축하기 ```bash # 프로젝트 클론 git clone https://github.com/Alishahryar1/free-claude-code.git cd free-claude-code # 가상환경(venv) 생성 및 활성화 (macOS/Linux 기준) python3 -m venv venv source venv/bin/activate # 필수 라이브러리 설치 pip install fastapi uvicorn requests python-dotenv loguru ``` ## 4. 실행하기 > 이때, 서버와 클로드 코드 실행을 위한 각각의 터미널(2개)가 필요합니다. ### Terminal 1: 프록시 서버 실행 - NVIDIA API를 Claude API 형식으로 변환해주는 서버를 먼저 띄워야 합니다. ```bash # 1. 프로젝트 폴더 이동 및 가상환경 활성화 cd ~/free-claude-code source venv/bin/activate # 2. NVIDIA API 키를 환경변수에 넣고 서버 실행 NVIDIA_NIM_API_KEY="본인의_nvapi_키_입력" python3 server.py ``` ### Terminal 2: Claude Code 접속 - 이제 Claude Code가 공식 서버가 아닌, 방금 만든 우리 로컬 서버를 바라보게 설정합니다. ```bash # 1. API 주소를 로컬 서버(8082 포트)로 리다이렉트 export ANTHROPIC_BASE_URL="http://localhost:8082" # 2. NVIDIA 모델명을 명시하여 실행 claude --model meta/llama-3.1-405b-instruct ``` --- 위 단계가 모두 끝났다면 이제 터미널로 실행하는 방법만 알면 되겠죠? 그래서 저는 아래 명령어를 메모장에 옮겨놓고 실행하고 있답니다. (저처럼 매번 입력하기 귀찮다면 .zshre 등에 alias를 등록하면 훨씬 편리합니다.) ```bash # terminal 1 cd free-claude-code source venv/bin/activate NVIDIA_NIM_API_KEY="본인의_nvapi_키_입력" python3 server.py # terminal 2 export ANTHROPIC_BASE_URL="http://localhost:8082" claude --model meta/llama-3.1-405b-instruct ```

맥북 사용자 이름 변경법
00070
그린 프로필

그린

2026. 3. 21. (토)
#ios

맥북 사용자 이름 변경법

1. 왼쪽 상단 애플 로고 클릭 2. 시스템 설정 클릭 3. 왼쪽 사이드 바 中 '사용자 및 그룹' 4. 바꾸고 싶은 사용자 칸에서 오른쪽 클릭 후, 고급 옵션 클릭 ![스크린샷 2026-03-21 20.13.56.png](https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/acb9bcab-dbda-41c5-99b4-7490e723f9ad-2026-03-21-20.13.56.png) 5. 목록 중 '전체 이름'을 원하는 이름으로 수정 후, 확인 버튼 클릭 (완료) 6. 맥북 재시동 후, 잘 적용됐는지 확인해보기!

code 명령으로 VSCode 열기
00036
그린 프로필

그린

2026. 3. 21. (토)
#vscode

code 명령으로 VSCode 열기

vscode를 실행 후 cmd + shfit + p를 누르고 'shell' 을 입력하면 아래와 같이 ![스크린샷 2026-03-21 17.57.41.png](https://ywsjmibcbhnwjxrpogfm.supabase.co/storage/v1/object/public/post-thumbnails/public/content/0bdc66d0-ec7b-4214-bd42-bc4cff1512c6-2026-03-21-17.57.41.png) Shell Command: Install 'code' command in PATH 가 뜰 것이다. 이걸 클릭 또는 엔터하면 끝! 다음부턴 터미널에서 아래 명령어를 입력하여 vscode를 실행해 보자. ```bash code . ```

맥북 위젯 편집시 멈춤 현상
00023
그린 프로필

그린

2026. 3. 18. (수)
#error

맥북 위젯 편집시 멈춤 현상

Daylog라는 앱에 D-day를 설정해놓고 맥북에 위젯으로 일정을 보는편이라 사진과 같이 위젯을 추가하는데 마우스 로딩만 무한반복되고 맥북 화면이 멈춰버리는 현상이 발생했다. 현재는 맥북 프로 M5이고, M3 맥북 에어일때도 이런 현상이 있어서 아무리 기다려도 아무런 변화가 없길래 눈물을 머금고 하던 작업을 버리면서 몇번 재시동을 했었는데 이번에는 정말 노트북이 꺼지면 안되는 상황이라 발만 동동 구르다가 gemini한테 끈질기게 계속 질문해서 해결책을 찾았다ㅠ [상황] - command + space 단축키 안 먹음 -> spotlight 활용 불가 - 당연히 활성 상태 보기 앱 실행 불가 - command + tab 단축키 먹음 -> 켜둔 ide 툴 활용 가능 (하지만 내 눈엔 안보임) - 앱 전환을 ide로 돌리고 ctrl + ` 단축키를 눌러 터미널을 열었다고 가정(?)함 [해결] - 아래 명령어 입력 후 실행 ``` killall NotificationCenter ``` [result] - 시스템 전체가 죽은 게 아닌 위젯 창이 화면 최상단을 덮어버린 'UI 프리징' 상태 - 블라인드(?) 처리 된 화면에서, 여전히 돌아가고 있는 프로그램으로 커서를 맞춤 - 화면에서는 변화가 없어도 맨 앞으로 선택된 개발 툴의 터미널 단축키 몰래(?) 열음 - 위젯 강제 종료 명령어 실행 - 성공 그런데, 과연 Apple의 버그일지 Daylog 앱과 시스템 간 충돌일지 감이 안 잡힌다. 그래도 이제 작업물 날라갈 걱정은 덜었다!!

[성능 최적화] 내 사이트가 유독 느렸던 이유
00036
그린 프로필

그린

2026. 3. 18. (수)
#vercel

[성능 최적화] 내 사이트가 유독 느렸던 이유

[문제 상황] - 프로젝트 배포 성공 후, 페이지 전환 시 느껴지는 답답함 - 로그인 버튼 하나 누르는데 1~2초가 소요 - 내 코드가 무거운가? DB 쿼리가 잘못됐나? vercel 또는 supabase 문제인가? [원인 파악] 1. 가설 설정: 프론트/백엔드/DB 중 어느 곳에서 문제인가? 2. 실험: '/api/test-db' 라는 심플 코드 api를 만들어 로컬 및 배포 환경에서 속도 측정 3. 로컬 결과: 66.10 ms (빠름) 4. 배포 결과: 27.07 ms (매우 빠름) 5. 결론: 코드나 supabase와 같은 플랫폼 문제는 아니고 latency 문제임을 직감 [해결] - Vecel의 기본 서버 위치가 미국(iad1)로 설정되어 있었음 - 사용자(한국)의 요청 -> 미국 Vercel 서버 -> 아시아 supabase db로 이동 -> 미국 -> 한국 - Vercel Settings - Functions - Region: Seoul (icn1)로 변경 - Redeploy 진행 [result] - 배포 환경의 물리적 위치가 ux에 큰 영향을 주는지 체감 - 클라우드 환경이어도 서버 위치는 중요

깃허브 커밋 기록에 있는 특정 파일 제거
00041
그린 프로필

그린

2026. 3. 17. (화)
#github

깃허브 커밋 기록에 있는 특정 파일 제거

Java의 BFG를 활용해서 보호 규칙을 풀고 커밋 기록에 남아있는 민감한 정보 등을 담은 과거 기록을 지울 수 있다. ```bash # 1. 로컬에 세탁 전용 미러 폴더 클론 git clone --mirror [깃허브 주소] # 2. 미러 폴더로 이동 cd [미러 폴더명] # 3. BFG 실행 (단, 가장 최신 커밋 기록은 지워지지 않으므로 멀쩡한 커밋 기록이 가장 최신에 있도록 한다) bfg --delete-files [파일명] # 4. git 내부의 물리적인 찌꺼끼가지 제거 git reflog expire --expire=now --all && git gc --prune=now --aggressive # 5. 강제 푸시 (단, 브랜치 규칙이 없어야 한다.) git push origin --force --all ```

brew 설치
00069
그린 프로필

그린

2026. 3. 15. (일)
#brew

brew 설치

이번에 새 노트북을 장만하면서 개발 환경 구축과 앱 설치 등을 다시 새로 해야 한다. Homebrew부터 설치하고 앱 설치를 진행해보자! ```bash /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` 위 명령어를 실행하면 PC 패스워드 입력과 Xcode 명령줄 도구가 필요하다는 메시지가 뜰 것이다. 둘 다 완료 후, 환경 변수를 설정해 주면 된다. ```bash echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile eval "$(/opt/homebrew/bin/brew shellenv)" ``` 설치가 완료되면 다음 명령어가 정상적으로 실행될 것이다. ```bash brew --version ```