학생 → 개발자: DB, 보안, AI를 관통하는 성장 회고
카카오 신입 개발자 온보딩 교육을 통해, 학생 시절의 ‘기능 구현’ 중심 사고에서 벗어나 대규모 트래픽(Large-scale Traffic)과 운영 환경(Production Environment)을 고려하는 개발 방식으로 전환
DB 파트에서는 무결성(Integrity) 확보 방식에 대한 새로운 시각을 갖게 되었으며, FK(Foreign Key) 사용에 대한 유연한 사고를 습득
보안 교육을 통해 API 보안(API Security)의 중요성을 인지하고, AI 에이전트(AI Agent) 설계를 통해 AI 시스템(AI System) 구축에 대한 이해도를 높임
DB 설계: 정답 대신, 변화에 유연하게 대처하기
본문에서는 DB 설계 시 무결성(Integrity)을 확보하는 방식에 대한 사고의 전환을 강조한다. 과거에는 ERD(ERD)를 기반으로 FK(Foreign Key)를 꼼꼼하게 설정하는 것이 중요했지만, 실무에서는 락(Lock) 문제, 성능 저하, 유연성 부족 등의 문제로 인해 FK를 무조건적으로 사용하는 것이 최선이 아님을 깨달았다고 설명한다.
Application 단에서 무결성을 관리하는 경우, 테스트(Test)와 보정 로직(Correction Logic)을 강화하여 데이터 일관성을 유지
Soft Delete(Soft Delete)를 통해 데이터 보존 및 복구 가능성을 확보하는 것이 중요하며, 삭제(Delete) 전략의 변화를 강조
결론적으로, 이론적인 완벽함보다는 운영 환경(Production Environment)에 적합한 설계를 우선시하는 사고방식의 변화를 보여준다.
SQL과 인덱스: 실행 계획을 '유도'하는 기술
글에서는 인덱스(Index)와 SQL(SQL)에 대한 이해를 높여, 단순히 기능을 넘어 데이터 구조(Data Structure) 설계의 관점에서 접근하는 중요성을 강조한다. 인덱스를 속도 향상 도구로만 이해하던 과거와 달리, 데이터 특성에 따라 GIN, GiST, SP-GiST, Vector 인덱스 등 다양한 선택지를 활용하여 DB 쿼리(DB Query) 성능 최적화를 추구한다.
SQL 작성 시, 결과의 정확성뿐 아니라 실행 계획(Execution Plan)을 분석하여 디스크 I/O(Disk I/O)와 응답 시간(Response Time)을 예측
반정규화(Denormalization)를 통해 읽기 성능을 향상시키고, 비즈니스 요구사항에 맞는 데이터 구조를 설계
MongoDB(MongoDB)의 ref 사용 시 발생할 수 있는 문제점을 언급하며, 스냅샷(Snapshot) 저장을 통해 성능 개선
결과적으로, SQL을 작성하는 것은 실행 경로를 '유도'하는 과정이며, 데이터베이스(Database)의 효율적인 활용을 위한 핵심 기술임을 강조한다.
보안: '내 코드'에서 시작되는 책임감
본문에서는 보안(Security)을 단순히 규정이나 인프라팀의 업무로 치부하는 것이 아니라, 개발자 스스로의 책임으로 인식하는 변화를 강조한다. 개인정보 유출(Personal Information Leakage)과 같은 보안 사고를 예방하기 위해, 개발 단계부터 보안을 기본값(Default Value)으로 설정하는 것이 중요하다고 역설한다.
DDoS 공격(DDoS Attack)과 같이 예측하기 어려운 공격에 대응하기 위해, Rate Limit(Rate Limit)과 같은 기본적인 방어 체계를 구축
API 보안(API Security) 취약점을 직접 실습하며, 자신의 코드(Own Code)에 대한 경각심을 높임
AI 기술을 활용하여 보안 취약점을 분석하고, 지속적인 보안 점검(Security Check)을 통해 안전성을 확보
결론적으로, 보안은 '막는 것'이 아닌, 개발 과정의 필수적인 부분임을 강조한다.
AI 에이전트: 똑똑한 동작을 '설계'하는 기술
글에서는 AI 에이전트(AI Agent)를 단순히 모델(Model)이 아닌, 설계(Design)의 관점에서 접근하는 방식을 제시한다. 기존 서비스 개발 경험을 바탕으로, AI 모델을 활용하는 시스템을 설계하는 것이 중요하다고 강조하며, AI 시스템(AI System) 구축에 대한 이해도를 높인다.
Prompt Chaining(Prompt Chaining), Few-shot, Routing 등, LLM(LLM)의 출력을 제어하기 위한 다양한 설계 기법을 활용
멀티 에이전트(Multi-Agent) 구조를 통해, MSA(Microservices Architecture)와 유사하게 AI 시스템을 구축하여 안정성과 효율성을 확보
RAG(Retrieval-Augmented Generation)와 MCP(Model Context Protocol)를 활용하여, AI 환각(Hallucination)을 줄이고 시스템의 자원 활용
결론적으로, AI는 똑똑한 답을 얻는 기술이 아니라, 똑똑한 동작을 '만들어내는' 설계임을 강조한다.
개발자의 본질: 합리적인 선택과 소통
본문은 기술 습득을 넘어, 개발자로서의 본질적인 자세에 대한 깨달음을 공유한다. 개발 과정에서 유일한 정답은 없으며, 당면한 리소스와 상황을 고려하여 합리적인 선택(Reasonable Choice)을 도출하는 것이 중요하다고 강조한다.
팀원과의 소통(Communication)을 통해, 기술적 결정을 논리적으로 공유하고 설득하는 능력을 배움
품질(Quality)을 위해, 코드의 가독성을 높이고 유지보수성을 고려하는 것이 중요
비즈니스 상황에 맞는 최적의 해결책을 선택하는 능력이, 개발자의 핵심 역량임을 강조
결과적으로, 개발은 기술적 지식뿐 아니라, 상황 판단 능력(Situational Awareness)과 의사소통 능력(Communication Skill)을 필요로 하는 종합적인 활동임을 강조한다.