🎯 목표 설정 및 수행 결과 회고
1. 문제 해결 (Algorithm)
- 목표: 알고리즘 카테고리에 따라 매일 1문제 스스로 풀기
- 결과: 매일 실천에 어려움이 있었으며, 블로그 참조와 AI 코드 리뷰에 의존함
- Action Plan: 30분간은 외부 도움 없이 스스로 풀고, 이후 즉시 피드백(블로그, AI)을 받는 방식으로 전환
2. 설계 (Architecture)
- 목표: 확장 가능한 폴더 구조 설계로 협업 시 Git 충돌 방지
- 결과: Redis 구현 시 테스트 폴더 구조를 분리하여 바이브 코딩 중 코드 혼선 방지 성공
3. 구현 (Implementation)
- 목표: 바이브 코딩 시 명세서를 작성하여 AI의 프로젝트 문맥 파악 돕기
- 결과: 명세서 기반 학습은 이루어졌으나, Google Docs 사용으로 가독성 저하
- Action Plan: 향후 Notion 활용 및 명세서 자동화 방안 모색
4. 품질 (Quality)
- 목표: Redis 관련 프로젝트의 모든 테스트 통과
- 결과: Github Actions로 자동화 구축. Main 브랜치 수정 시 테스트 자동 실행 및 결과를 Notion에 공유하는 시스템 마련
5. 유지보수 (Maintenance)
- 목표: 주석 작성을 통한 팀원 간 이해도 증진
- 결과: 기능 구현에 집중하느라 주석 및 유지보수 고려 부족 (미흡)
6. 협업 (Collaboration)
- 목표: 능동적인 태도로 협업 속도 향상
- 결과: 명세서 사전 작성을 통해 팀원들의 프로젝트 이해도 및 작업 속도 증진
7. 태도 (Mindset)
- 목표: Redis의 코어 개념과 원리를 학습 후 구현
- 결과: 캐시 개념은 공부했으나 실무 적용에 한계. '왜 우리에게 Redis가 필요한가'에 대한 논리적 근거 부족
8. 비즈니스 이해 (Business Insight)
- 목표: 사용자 편의성(UX)을 고려한 코드 및 프로젝트 진행
- 결과: 사용자 관점보다는 기술적 구현에만 매몰됨 (미흡)
9. AI 활용 (AI Prompting)
- 목표: Agent.md 최적화를 통한 고품질 코드 생성
- 결과: OpenAI 팁을 참고하여 Agent.md를 영문으로 작성하고 한국어 설명을 병기하여 효과적인 가이드 마련
10. 학습 민첩성 (Learning Agility)
- 목표: Redis 내부 구조 이해 및 구현
- 결과: 깊이 있는 이해 부족으로 Python 기본 딕셔너리를 무분별하게 사용
- Action Plan: 내부 구현 사항을 선행 학습하고, 기술 선택 시 구체적인 이유를 제시할 수 있도록 준비
🔍 4주차 발제: 더 깊게 고민할 사항
1. 파이썬 자료구조의 내부 구현
- List: 연결 리스트(Linked List)가 아닌 동적 배열(Dynamic Array)로 구현됨
- Dictionary: Hash 방식 사용. Python 3.6+부터 메모리 효율을 위해 인덱스 테이블과 엔트리 테이블을 분리
- 데이터 삽입 순서가 유지되도록 개선됨 (Open Addressing 기반)
- Sort(): Timsort (Insertion + Merge Sort 혼합) 사용
- 최선: O(n), 최악: O(n \log n)의 성능 보장
2. WebAssembly (Wasm)와 저수준 언어의 필요성
- 현상: JS는 인터프리터 기반이라 복잡한 연산(영상 편집, 3D, 암호화)에서 병목 발생
- 해결: C/Rust로 로직 설계 후 Wasm으로 컴파일하여 네이티브에 가까운 속도 구현
- 전략: Python으로 빠르게 프로토타입 제작 후, 성능이 필요한 구간은 빠른 언어로 전환
3. Redis Hash 직접 구현 시 고려사항
- 타 언어에서 직접 Hash를 구현해야 한다면 다음 세 가지가 핵심임:
- 해시 함수 선정
- 충돌(Collision) 처리 방식 결정
- 동적 리사이징: 데이터 임계치 초과 시 테이블 크기를 확장(보통 2배)하고 재배치(Rehashing)
4. 바이브 코딩 결과물에 대한 '진짜' 내 것 만들기
- AI가 만든 결과물에 대해 답변하지 못한다면 그것은 본인의 실력이 아님
- 수요코딩회 활용: 내가 완벽히 소화할 수 있는 범위만큼만 AI를 활용하고, 그 내용을 공유하며 검증받기
📒 3주차 블로그 정리
Merge Sort, Quick Sort, 분할 정복
https://forrest7.tistory.com/32
3/13
Merge sort리스트 길이가 1이하이면 이미 정렬된 것으로 본다.1. 분할 : 정렬되지 않은 리스트를 절반으로 잘라 비슷한 크기의 두부분 리스트로 나눈다.2. 정복 : 각 부분 리스트를 재귀적으로 합병
forrest7.tistory.com
스택, set (boj1406 에디터, boj2295 세수의 합)
https://forrest7.tistory.com/33
3/14
에디터(boj 1406)https://www.acmicpc.net/problem/1406 스택을 두개 둔 다음 1) 커서가 왼쪽으로 이동할때 파란 스택에서 빼서 빨간 스택에 넣는다2) 커서가 오른쪽으로 이동할때 빨간 스택에서 빼서 파란 스
forrest7.tistory.com
Queue (boj 3190 뱀)
https://forrest7.tistory.com/34
3/16
boj 3190 뱀1. 출발점의 위치 [0,0] 에 방문 표시를 하지 않고, 큐에 넣지 않아서 디버깅 시간이 오래 걸렸다.2. dr,dc 배열을 따로두고 인덱스가 늘어나면 시계방향으로 회전되게 한다.# 인덱스 증가시
forrest7.tistory.com
투 포인터 (boj 2470 두 용액)
https://forrest7.tistory.com/35