분류 전체보기102 코드를 넘어, '위대한 개발자'의 길을 묻다 더 개발자, 커리어 가이드 Review코드를 넘어, '위대한 개발자'의 길을 묻다8년 차 백엔드 엔지니어로 일하며 늘 마음 한편에 풀리지 않는 질문이 있었습니다. 마틴 파울러의 글에서 느껴지는 깊은 통찰력, 리누스 토르발즈가 보여준 기술적 리더십, 실리콘밸리의 엔지니어들이 당연하게 갖추고 있다는 프로페셔널리즘. 그들을 '위대한 개발자'로 만드는 코드 너머의 역량은 과연 무엇일까?AI가 개발을 대신해주는 지금, 이 질문은 더욱 선명해졌습니다. 이제 우리의 역량은 단순히 기능을 구현하는 것을 넘어, 더 높은 차원의 가치를 창출하는 데서 증명되어야 합니다. 저는 그 해답의 실마리를 이 강의에서 찾을 수 있었습니다. 이 강의는 저의 막연한 궁금증에 명확한 이정표를 제시해 주었습니다.'기술력'의 재정의: 견고한 .. 2025. 8. 18. AI 시대, 더욱 중요해진 클린 코드 - 백기선의 리팩토링 강의 후기 8년차 백엔드 엔지니어로서 AI 시대를 맞이하며 느끼는 것이 있다. 많은 개발자들이 "이제 AI가 코드를 다 짜주니까 코드 품질은 중요하지 않다"고 생각하는데, 오히려 반대다. AI도 결국 사람과 같이 사고하고, 좋은 이름과 명확한 구조가 있어야 맥락 파악이 쉽기 때문이다.그런 차에 백기선님의 리팩토링 강의를 듣게 되었는데, 정말 시의적절한 강의였다.왜 지금 리팩토링이 더 중요한가?네이버, 아마존, 마이크로소프트를 거친 백기선님의 실무 경험이 고스란히 녹아있는 이 강의에서 가장 인상 깊었던 부분은, 리팩토링이 단순히 코드를 예쁘게 만드는 게 아니라는 점이었다.예를 들어, 강의에서 나온 이런 메시지 체인을 보자:this.member.getCredit().getLevel().getDescription()이런.. 2025. 8. 18. All of Dead Lock 1. 데드락이란?정의 : 두 개 이상의 트랜잭션(또는 스레드)이 서로가 보유한 자원을 기다리며 영원히 진행하지 못하는 상태.필수 4조건(Coffman)상호 배제(Mutual Exclusion)점유-대기(Hold and Wait)비선점(No Pre-emption)순환 대기(Circular Wait)상호 배제 (Mutual Exclusion)정의: 자원은 동시에 하나의 트랜잭션(또는 스레드)만이 사용할 수 있어야 한다는 조건입니다.예시: 어떤 트랜잭션이 특정 행(row)을 SELECT … FOR UPDATE로 잠갔다면, 그 잠금이 해제되기 전까지 다른 트랜잭션은 해당 행을 수정할 수 없습니다.필요성: 대부분의 자원(DB row, 파일 핸들 등)은 동시에 여러 주체가 수정하면 데이터 정합성이 깨지기 때문에 상.. 2025. 6. 15. 소프트웨어 아키텍처 패턴 문서화 템플릿 및 예시 ✅ 패턴 설명 템플릿항목 설명Name (이름)패턴의 명칭. 간결하고 핵심 개념을 잘 드러내야 함.Context (맥락)이 패턴이 적용되는 일반적인 시스템 환경 또는 상황.Problem (문제)패턴이 해결하고자 하는 근본적인 문제나 어려움. 시스템 관점에서 어떤 제약이나 한계가 존재하는지 설명.Forces (제약 요인)문제 해결을 어렵게 만드는 상충되는 요구사항이나 시스템 제약. 예: 지연 시간 vs 일관성Solution (해결책)문제를 해결하기 위한 일반적인 설계 방식 또는 전략. 구성 요소와 흐름 등을 포함.Structure (구조)구성 요소 간의 관계를 나타내는 다이어그램 (예: Mermaid, UML 등).Resulting Context (결과 맥락)패턴 적용 이후의 시스템 특성. 해결된 점과 새롭.. 2025. 5. 24. 스타트업이 RDBMS 대신 선택한 조합: 디프로모션의 AWS 아키텍처 도입기 스타트업에게 있어 기술 스택 선택은 곧 서비스의 속도, 확장성, 그리고 생존력에 직결되는 중요한 문제입니다. 특히 데이터베이스 아키텍처는 초기 개발 속도와 향후 확장 가능성을 동시에 고려해야 하는 까다로운 결정이죠.오늘은 프로모션 기반 사용자 참여 플랫폼인 디프로모션이 어떻게 DynamoDB, OpenSearch, ElastiCache Serverless의 조합을 통해 기존 RDBMS 기반 구조의 한계를 극복했는지 소개해드리겠습니다.왜 RDBMS만으로는 부족했는가?디프로모션의 초기 구조는 전통적인 RDBMS에 기반하고 있었지만, 몇 가지 한계에 직면했습니다:복잡하고 유동적인 데이터 구조: 프로모션별로 다양한 형태의 데이터를 처리해야 하는데, 고정된 스키마 구조를 가진 RDBMS는 자주 변경되는 요구사항에.. 2025. 5. 22. 기존 GUID(UUID) 데이터베이스 Primary Key 사용: 특징과 고려사항 기존 GUID(UUID) 데이터베이스 Primary Key 사용: 특징과 고려사항안녕하세요. 오늘은 이전에 흔히 사용되던 GUID(Globally Unique Identifier) 또는 UUID(Universally Unique Identifier)의 특징과 이를 데이터베이스의 Primary Key(PK)로 사용할 때 고려해야 할 점들에 대해 이야기해 보겠습니다.1. GUID(UUID)란 무엇인가?GUID는 128비트로 구성된 고유 식별자입니다. 기본적으로 랜덤하게 생성됩니다. 이는 여러 시스템에 걸쳐 충돌할 확률이 매우 낮은 고유한 값을 만들기 위해 고안되었습니다.2. GUID의 사용 목적: 왜 랜덤한 ID가 필요했나?GUID가 등장한 가장 큰 이유는 대규모 트래픽 환경 때문입니다. 일반적인 환경에서는.. 2025. 5. 18. GC 알고리즘별 Minor GC와 Survivor 영역의 동작 비교 정리 이 문서는 G1GC의 Minor GC 동작 원리, Survivor 영역의 역할, 그리고 다른 GC 알고리즘에서의 Survivor 처리 방식을 비교하며 정리한 내용입니다. 각 GC 방식의 힙 구조, GC 트리거 조건, STW 여부 등을 상세히 설명하고, 어떤 상황에서 Survivor가 사용되는지를 중심으로 핵심 내용을 요약합니다.1. G1GC의 Minor GC힙 구조G1GC는 힙을 Region 단위로 나눔Young Generation은 여러 개의 Eden + Survivor Region으로 구성됨Minor GC 트리거Eden 영역이 가득 차면 Minor GC 발생Survivor가 가득 차는 건 트리거 요인은 아님 (대신 promotion failure 발생 가능)Minor GC 시 동작Eden에 있는 살아.. 2025. 5. 17. 객체 Churn(Object Churn)이란? 객체 Churn(Object Churn)이란?객체 churn은 JVM 메모리 영역에서 객체가 빠르게 생성되고 빠르게 소멸하는 활동을 의미합니다. 쉽게 말해, 단명 객체(short-lived objects)가 빈번히 생성되고 가비지 컬렉션 대상이 되는 상황을 말합니다. 예시for (int i = 0; i 이런 패턴에서는 엄청난 수의 객체가 Young Generation에서 짧은 시간에 생성되고 사라지며, 이로 인해 GC가 자주 발생합니다.객체 Churn이 높은 애플리케이션 예REST API 서버에서 요청마다 새로운 DTO, Map, JSON 객체 생성고속 로그 수집 시스템Kafka 메시지 처리, 실시간 스트림 처리Web framework에서 request/response 객체 반복 생성왜 중요할까?객체 c.. 2025. 5. 17. Java GC의 역사와 진화: STW에서 동시 수집으로 1. 자바 GC의 발전 흐름Java의 GC(Garbage Collection)는 프로그램 내에서 사용되지 않는 객체를 자동으로 정리해주는 메모리 관리 메커니즘이다. 초기 GC는 단순하지만 응답 지연이 길었고, 이후 다양한 GC 알고리즘들이 등장하면서 처리량(Throughput), 지연시간(Latency), 오버헤드(Overhead)의 균형을 지향하게 되었다.발전 흐름 요약Java의 GC는 초창기부터 Young / Old 세대를 구분하는 Generational GC 구조를 갖고 있었으며, Serial GC와 Parallel GC에서도 이 구조는 동일하게 적용되었다. 이후 응답 지연(latency)을 줄이기 위한 병행 수집(concurrent collection) 전략이 CMS부터 도입되었고, G1에서는 r.. 2025. 5. 17. 이전 1 2 3 4 ··· 12 다음