Study Log

완료일 (Completed)
분야 (Category)
학습 항목 (Name)
유형 (Type)
링크 (Link)

2023.01

🌐 Network

그림으로 배우는 HTTP & Network Basic

📚 Book

2023.01

☕ Java, 🌱 Spring

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

🎓 Lecture

2023.02

💻 OS

한 권으로 읽는 컴퓨터 구조와 프로그래밍

📚 Book

2023.03

☕ Java, 🌱 Spring

스프링 핵심 원리 - 기본편

🎓 Lecture

2023.04

🌐 Network

모든 개발자를 위한 HTTP 웹 기본 지식

🎓 Lecture

2023.04

☕ Java, 🌱 Spring

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

🎓 Lecture

2023.05

☕ Java

Java의 정석

📚 Book

2023.06

☕ Java, 🌱 Spring

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

🎓 Lecture

2023.07

☕ Java, 🌱 Spring

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

🎓 Lecture

2023.08

🗄️ Database

Real MySQL 8.0 (1권)

📚 Book

2023.08

☕ Java, 🌱 Spring, 🗄️ Database

스프링 DB 1편 - 데이터 접근 핵심 원리

🎓 Lecture

2023.09

🌐 Network

외워서 끝내는 네트워크 핵심이론 - 기초

🎓 Lecture

2023.10

☕ Java, 🌱 Spring, 🗄️ Database

스프링 DB 2편 - 데이터 접근 활용 기술

🎓 Lecture

2023.11

☕ Java, 🌱 Spring

스프링 핵심 원리 - 고급편

🎓 Lecture

2023.11

☕ Java, 🌱 Spring

스프링 부트 핵심 원리와 활용

🎓 Lecture

2023.12

☕ Java, 🌱 Spring

자바 ORM 표준 JPA 프로그래밍 - 기본편

🎓 Lecture

2024.01

🎨 Design Pattern

객체지향의 사실과 오해

📚 Book

2024.02

☕ Java, 🌱 Spring, 🔗JPA

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

🎓 Lecture

2024.02

☕ Java, 🌱 Spring

실전! 스프링 데이터 JPA

🎓 Lecture

2024.03

🌱 Spring, 🔗JPA

실전! Querydsl

🎓 Lecture

2024.04

🗄️ Database

Real MySQL 8.0 (2권)

📚 Book

2024.05

💻 OS

혼자 공부하는 컴퓨터 구조+운영체제

📚 Book

2024.05

🌐 Network

현실 세상의 컴퓨터 공학 지식 - 네트워크

🎓 Lecture

2024.06

🌱 Spring, 🐳 Infra, 🗄️ Database

재고시스템으로 알아보는 동시성이슈 해결방법

🎓 Lecture

2024.07

🌐 Network

HTTP 완벽 가이드

📚 Book

2024.08

🎨 Design Pattern

오브젝트

📚 Book

2024.08

🐳 Infra

가상 면접 사례로 배우는 대규모 시스템 설계 기초

📚 Book

2024.09

🗄️ Database

대용량 처리를 위한 MySQL 이해

🎓 Lecture

2024.10

🐳 Infra

가상 면접 사례로 배우는 대규모 시스템 설계 기초 2

📚 Book

2024.11

🌱 Spring, 🐳 Infra, 🗄️ Database

실습으로 배우는 선착순 이벤트 시스템

🎓 Lecture

2024.11

🐳 Infra, 🗄️ Database

고성능 서비스를 위한 Redis의 활용과 아키텍처

🎓 Lecture

2024.12

☕ Java, 🐳 Infra

궁극의 성능 튜닝과 트러블 슈팅

🎓 Lecture

2025.01

🐳 Infra

대용량 비동기 프로세스를 위한 Kafka 활용

🎓 Lecture

2025.02

🌱 Spring, 🎨 Design Pattern, 🔧 Software Engineering

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트

🎓 Lecture

2025.02

☕ Java, 🌐 Network, 💻 OS, 🔐 Secure

면접 전에 알고 가면 좋을 것들 - 신입 Java 백엔드 개발자편

🎓 Lecture

2025.03

🎨 Design Pattern

도메인 주도 개발 시작하기

📚 Book

2025.04

☕ Java

이펙티브 자바

📚 Book

2025.05

🌱 Spring, 🐳 Infra, 🔧 Software Engineering

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

🎓 Lecture

2025.06

🗄️ Database

개발자를 위한 레디스

📚 Book

2025.07

☕ Java

자바 - 고급 1편, 멀티스레드와 동시성

🎓 Lecture

2025.08 -

🧠 Self-Improvement

생성형 AI 기반 학습 및 기존 문서 보강

✍️ Activity

-


상세 학습 기록 (Detailed Study Notes)

그림으로 배우는 HTTP & Network Basic

  • 핵심 학습 내용

    • TCP/IP 프로토콜 스택 심화: OSI 7계층과 TCP/IP 4계층의 매핑 및 각 계층(L2, L3, L4, L7)의 핵심 역할과 헤더 구조 이해.

    • TCP 연결 제어 및 신뢰성: 3-Way Handshake(연결 수립), 4-Way Handshake(연결 종료) 과정과 시퀀스 번호/ACK를 이용한 신뢰성 보장 메커니즘 학습.

    • TCP 흐름 제어 및 혼잡 제어:

      • 흐름 제어(Flow Control): 수신 윈도우(RWND)를 통해 수신 측의 처리 속도에 맞춰 송신량을 조절하는 슬라이딩 윈도우(Sliding Window) 기법 이해.

      • 혼잡 제어(Congestion Control): 네트워크 혼잡 상황을 감지하여 혼잡 윈도우(CWND)를 조절하는 알고리즘(Slow Start, AIMD, Fast Retransmit, Fast Recovery) 학습.

    • HTTP 프로토콜의 진화: HTTP/1.1의 지속 연결(Keep-Alive) 및 파이프라이닝, HTTP/2의 멀티플렉싱 및 헤더 압축, HTTP/3의 QUIC 프로토콜 특징 비교.

  • 인사이트

    • 브라우저 URL 입력부터 응답 수신까지의 네트워크 내부 과정을 시각적으로 파악함

    • 웹 통신 프로토콜의 동작 원리에 대한 기술적 토대를 마련하고 네트워크 전반의 기본기 확보함

우아한형제들 최연소 기술이사 김영한의 스프링 완전 정복 (Roadmap)

  • 핵심 학습 내용

    • AOP 프록시(CGLIB, JDK Dynamic Proxy)의 동작 원리 및 @Transactional과 같은 선언적 트랜잭션의 내부 메커니즘 이해

    • HTTP 웹 기본 지식 및 서블릿의 동작 방식부터 시작하는 스프링 기반 기술의 근간 학습

    • 스프링 컨테이너와 빈 관리(IoC/DI)의 원리 및 싱글톤 레지스트리로서의 역할 파악

  • 인사이트

    • 프록시 패턴 관점에서 트랜잭션의 자가 호출 문제를 명확히 규명함

    • 프레임워크 내부 메커니즘을 추적하고 이를 바탕으로 실제 개발 환경에서 발생하는 예외 상황을 해결하는 역량을 키움

한 권으로 읽는 컴퓨터 구조와 프로그래밍

  • 핵심 학습 내용

    • 컴퓨터의 데이터 표현 방식, 특히 부동소수점 오차의 발생 원리와 금융 계산 등에서 BigDecimal을 사용해야 하는 이유 학습

    • 메모리 계층 구조(레지스터, 캐시, 메인 메모리)와 지역성(Locality) 원리, 그리고 Cache Hit Ratio가 프로그램 성능에 미치는 영향 이해

  • 인사이트

    • 하드웨어의 특성을 이해함으로써 부동소수점 정밀도 문제를 인지하고 BigDecimal을 사용하는 등 더욱 안정성 높고 예측 가능한 코드 작성함

    • 소프트웨어가 실행되는 물리적 환경에 대한 이해가 코드 품질에 직결됨을 깨닫고 최적화된 자료형 선택의 중요성을 인식함

우아한형제들 최연소 기술이사 김영한의 스프링 부트와 JPA 실무 완전 정복 (Roadmap)

  • 핵심 학습 내용

    • JPA 영속성 컨텍스트의 1차 캐시, 쓰기 지연, 변경 감지(Dirty Checking) 동작 원리와 이를 통한 성능 최적화 방법 습득

    • OSIV(Open Session In View) 전략의 이해와 성능 최적화를 위한 커넥션 관리 및 DTO 변환을 통한 API 스펙 분리 원칙 적용

    • Querydsl을 활용한 동적 쿼리 처리 및 Fetch Join을 통한 N+1 문제 해결

  • 인사이트

    • JPA의 변경 감지 메커니즘을 활용하고 DTO로 계층 간 역할을 분리하며 Querydsl로 안정적인 동적 쿼리를 작성하는 실전적 설계 방식을 확립함

    • 데이터 접근 기술의 성능 병목 지점을 파악하고 N+1 문제를 해결하며 대규모 트래픽을 고려한 최적화 역량을 확보함

Java의 정석

  • 핵심 학습 내용

    • Java 언어의 기본 문법부터 객체지향 개념(상속, 다형성), 예외 처리, 컬렉션 프레임워크, 스레드 등 Java 개발에 필수적인 핵심 개념 전반 체계적 정리

    • JVM의 구조와 메모리 관리 방식(GC)에 대한 이해를 통해 메모리 누수나 성능 저하 문제를 분석할 수 있는 기반 지식 습득

  • 인사이트

    • Java 언어에 대한 체계적인 지식 기반을 갖추게 되어 코드의 동작 원리를 명확히 이해하고 타인에게 논리적으로 설명함

    • 객체지향 원리를 실제 코드로 구현하는 능력을 향상시키고 언어의 내부 구조를 파악하여 기술적 안정성을 확보함

Real MySQL 8.0 (1권 & 2권)

  • 핵심 학습 내용

    • InnoDB 아키텍처 심화: 버퍼 풀(Buffer Pool)의 LRU 리스트 관리, 체인지 버퍼(Change Buffer)를 통한 인덱스 업데이트 최적화, 더블 라이트 버퍼(Double Write Buffer)를 이용한 데이터 무결성 보장 원리 이해.

    • MVCC와 잠금: 언두 로그(Undo Log)를 활용한 MVCC 구현으로 넌블로킹 읽기 지원, 넥스트 키 락(Next-Key Lock)을 통한 Phantom Read 방지 및 레코드 락/갭 락의 상호작용 이해.

    • 쿼리 실행 계획 및 최적화: EXPLAIN 결과를 분석하여 type (ref, range, index_merge 등)과 Extra (Using index, Using temporary 등) 필드의 의미를 파악하고, 커버링 인덱스를 활용한 쿼리 성능 개선 기법 습득.

    • 트랜잭션 격리 수준: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE의 차이와 각 수준에서 발생할 수 있는 문제(Dirty Read, Non-Repeatable Read, Phantom Read) 이해.

  • 인사이트

    • 실행 계획 분석을 통해 비효율을 진단하고 개선하는 엔지니어링 관점 확보함

    • 인덱스 활용과 레코드 락의 범위를 예측하여 데드락을 사전에 방지하는 등 데이터베이스 성능 최적화 역량을 구비함

외워서 끝내는 네트워크 핵심이론 - 기초

  • 핵심 학습 내용

    • OSI 7계층과 TCP/IP 4계층 모델의 비교 및 각 계층의 역할과 책임(R&R) 이해

    • Wireshark와 같은 도구를 통한 실제 네트워크 패킷 분석 및 프로토콜 동작 확인

  • 인사이트

    • 흩어져 있던 단편적인 네트워크 지식들을 OSI 계층 모델을 중심으로 유기적으로 연결하고 체계적으로 정리함

    • 통신 장애 발생 시 각 계층별 역할에 근거하여 문제 지점을 논리적으로 추론하고 해결책을 찾아가는 분석력 키움

객체지향의 사실과 오해

  • 핵심 학습 내용

    • 객체지향이란 현실 세계를 단순히 모방하는 것이 아니라, 명확한 역할, 책임, 협력 관계를 가진 새로운 세계를 창조하는 과정임을 이해

    • 객체지향의 본질이 클래스가 아닌 객체의 동적인 협력 관계에 있다는 사실 학습

  • 인사이트

    • 클래스 중심 사고에서 벗어나 객체 간의 동적인 협력 관계와 메시지에 집중하는 관점 확립함

    • 객체의 상태보다 행동과 책임을 우선적으로 고려함으로써 자연스러운 캡슐화를 유도하고 변경에 유연한 코드 설계 능력 갖춤

혼자 공부하는 컴퓨터 구조+운영체제

  • 핵심 학습 내용

    • 컴퓨터의 기본 구성 요소인 CPU, 메모리, 보조기억장치의 역할과 상호작용, 그리고 컴퓨터가 데이터를 표현하는 방식 이해

    • 프로세스와 스레드의 차이, CPU 스케줄링, 메모리 관리(가상 메모리, 페이징) 등 운영체제의 핵심 원리 학습

  • 인사이트

    • Java 코드가 JVM 위에서 어떻게 동작하고 운영체제가 이를 어떻게 관리하는지 구체적으로 연결하여 파악함

    • 성능 및 메모리 관련 문제를 깊이 있게 분석하고 하드웨어 자원을 효율적으로 사용하는 소프트웨어 설계의 기반을 마련함

현실 세상의 컴퓨터 공학 지식 - 네트워크

  • 핵심 학습 내용

    • 대용량 서비스 환경에서 L4/L7 스위치와 같은 로드밸런서의 트래픽 분산 및 장애 대응 역할 이해

    • CDN과 캐시 서버를 활용한 콘텐츠 전달 가속화 및 원본 서버 부하 감소를 위한 네트워크 성능 최적화 전략 학습

  • 인사이트

    • 이론적인 네트워크 지식을 넘어 실제 대규모 서비스 아키텍처에서 이러한 기술들이 어떻게 유기적으로 결합되어 사용되는지 구체적인 사례를 통해 이해함

    • 시스템 설계 시 네트워크 성능과 안정성을 어떻게 고려해야 하는지에 대한 실무적인 관점 확보함

재고시스템으로 알아보는 동시성이슈 해결방법

  • 핵심 학습 내용

    • 재고 시스템에서 발생할 수 있는 동시성 문제(Race Condition)의 다양한 시나리오 및 데이터 정합성 문제의 본질 파악

    • Pessimistic Lock (비관적 락), Optimistic Lock (낙관적 락), Named Lock, Redis 분산 락 등 다양한 동시성 제어 기법들의 내부 동작 원리와 장단점 비교 분석

  • 인사이트

    • 각 동시성 제어 기법의 성능, 구현 복잡성, 데이터 일관성 수준 등 트레이드오프를 명확히 이해함

    • 비즈니스 요구사항에 가장 적합한 해결책을 논리적으로 선택하고 그 이유를 설명할 수 있는 능력을 갖춤

HTTP 완벽 가이드

  • 핵심 학습 내용

    • HTTP/1.1과 HTTP/2.0의 차이점 및 Keep-Alive, Connection Pool과 같은 커넥션 관리 스펙을 통한 네트워크 통신 효율화 방법 학습

    • REST API 설계 원칙 중 하나인 멱등성(Idempotency)의 중요성과 이를 보장하기 위한 PUT, PATCH 메서드 사용 기준 이해

  • 인사이트

    • TCP 커넥션 생성 비용을 인지하고 Keep-Alive와 같은 기술을 활용하여 서버 간 통신 효율을 최적화하려는 엔지니어링 관점 확보함

    • API 설계 시 멱등성을 고려하여 더욱 안정적이고 예측 가능한 시스템을 구축하는 역량에 집중함

오브젝트

  • 핵심 학습 내용

    • 객체지향의 4대 특성과 오해: 객체지향을 '현실 세계의 모방'으로 보는 관점의 한계와, 역할(Role), 책임(Responsibility), 협력(Collaboration) 중심의 새로운 세계 창조라는 본질적 관점 확립.

    • 책임 주도 설계(RDD) vs 데이터 주도 설계: 객체의 상태(데이터)가 아닌 행동(책임)을 먼저 결정하는 설계 방식의 중요성과 이를 통해 얻을 수 있는 낮은 결합도와 높은 응집도 이해.

    • GRASP 패턴 심화: Information Expert, Creator, Controller 등 9가지 패턴을 실제 설계 문제에 적용하여 책임을 할당하는 논리적 근거와 트레이드오프 분석 능력 배양.

    • 유연한 설계를 위한 원칙: 의존성 역전 원칙(DIP), 개방-폐쇄 원칙(OCP)을 준수하기 위한 컴파일 타임 의존성과 런타임 의존성의 분리 기법 학습.

  • 인사이트

    • 객체 스스로 상태와 행동을 관리하도록 책임을 위임하여 캡슐화와 응집도를 강화하고 변경의 파급 효과를 최소화함

    • 유연하고 확장 가능한 구조를 설계하기 위해 컴파일 타임과 런타임 의존성을 분리하는 설계 원칙을 내재화함

가상 면접 사례로 배우는 대규모 시스템 설계 기초 1 & 2

  • 핵심 학습 내용

    • 분산 시스템 핵심 알고리즘:

      • 안정 해시(Consistent Hashing): 서버 추가/삭제 시 데이터 재배치를 최소화하는 해시 링 및 가상 노드 기법.

      • 가십 프로토콜(Gossip Protocol): 분산 환경에서 노드 간의 상태 정보를 효율적으로 전파하고 장애를 감지하는 방법.

      • 머클 트리(Merkle Tree): 대규모 데이터의 불일치를 빠르게 탐지하고 복구하는 동기화 메커니즘.

      • 블룸 필터(Bloom Filter): 집합에 원소가 속하는지 여부를 확률적으로 빠르게 검사하여 불필요한 디스크 I/O를 줄이는 기법.

    • 처리율 제한 및 동시성 제어: 토큰 버킷/누출 버킷 알고리즘을 활용한 유량 제어와 데이터 일관성을 위한 Quorum(N, W, R), Vector Clock 활용법.

    • 대규모 서비스 설계: 채팅, 검색, 피드 시스템 등 실제 사례를 통한 아키텍처 패턴 학습.

  • 인사이트

    • 모든 설계에는 트레이드오프가 존재함을 인지하고 서비스의 비즈니스적 요구사항에 최적화된 아키텍처를 선택하는 판단력 기름

    • 분산 시스템의 핵심 원리를 바탕으로 대규모 트래픽을 견디는 안정적인 시스템 구조를 도출하는 역량을 확보함

대용량 처리를 위한 MySQL 이해

  • 핵심 학습 내용

    • 대용량 데이터 환경에서 조회 성능을 높이기 위해 의도적으로 중복을 허용하는 반정규화 설계 전략과 데이터 불일치 문제 해결 방안 학습

    • 단일 테이블의 데이터가 너무 커졌을 때 성능 저하를 방지하기 위한 수평적 확장(Sharding)과 수직적 확장(Partitioning)의 개념 및 적용 기준 이해

  • 인사이트

    • 데이터 규모와 비즈니스 요구사항에 따라 정규화와 반정규화를 유연하게 선택하는 실무적 감각을 익힘

    • 대규모 데이터로 인한 미래의 성능 저하를 예측하고 이를 방지하기 위한 데이터 모델링 전략을 수립하는 설계 능력을 갖춤

실습으로 배우는 선착순 이벤트 시스템

  • 핵심 학습 내용

    • 대규모 트래픽 환경에서 선착순 시스템이 마주하는 동시성 문제의 본질과 해결을 위한 다양한 접근법 학습

    • DB 직접 접근 방식의 한계와 Redis를 활용한 성능 개선 및 분산 락을 이용한 동시성 제어 방법 습득

  • 인사이트

    • 단일 서버 환경과 분산 환경에서의 동시성 제어 방식 차이를 명확히 이해하고 상황에 맞는 적절한 기술을 선택함

    • 분산 락과 원자적 연산 등 다양한 기법의 트레이드오프를 분석하여 서비스 요구사항에 최적화된 해결책을 도출함

고성능 서비스를 위한 Redis의 활용과 아키텍처

  • 핵심 학습 내용

    • 캐시와 DB 간의 데이터 불일치 문제를 해결하기 위한 캐싱 전략(Look-aside, Write-back) 및 Cache Stampede 현상 방지책(TTL Jitter 등) 학습

    • Redis의 고가용성을 확보하기 위한 Sentinel, Cluster 구성 방법과 장애 복구 메커니즘 이해

  • 인사이트

    • 무거운 명령어가 전체 서비스에 미치는 위험성을 인지하고 Lua Script를 활용해 여러 명령어를 원자적으로 실행하는 방법을 익힘

    • 캐싱 전략과 고가용성 구성을 통해 시스템의 응답 속도와 안정성을 동시에 확보하는 운영 노하우를 습득함

궁극의 성능 튜닝과 트러블 슈팅

  • 핵심 학습 내용

    • JVM 메모리 구조 및 GC 튜닝: Heap(Young/Old), Metaspace 등 메모리 영역별 역할과 주요 GC 알고리즘(Serial, Parallel, G1GC, ZGC)의 동작 방식 및 STW(Stop-The-World) 최소화 전략 학습.

    • 스레드 덤프(Thread Dump) 분석: jstack을 활용하여 스레드 상태(RUNNABLE, BLOCKED, WAITING, TIMED_WAITING)를 분석하고, 데드락(Deadlock) 및 락 경합(Lock Contention)으로 인한 성능 병목 지점을 파악하는 기술 습득.

    • 메모리 덤프(Heap Dump) 분석: jmap, MAT(Memory Analyzer Tool) 등을 사용하여 메모리 누수(Memory Leak) 원인 객체(Dominator Tree)를 식별하고 해결하는 방법 학습.

    • 애플리케이션 모니터링: APM(Application Performance Monitoring) 도구를 활용한 트랜잭션 추적 및 시스템 리소스(CPU, Memory, I/O) 병목 현상 진단 방법론 이해.

  • 인사이트

    • 스레드 덤프와 힙 덤프와 같은 객관적인 데이터를 기반으로 장애 원인을 체계적으로 규명하고 해결하는 능력을 갖춤

    • 감에 의존하지 않고 과학적인 방법으로 문제에 접근하여 시스템의 가용성을 극대화하는 트러블슈팅 역량을 확보함

대용량 비동기 프로세스를 위한 Kafka 활용

  • 핵심 학습 내용

    • Kafka 내부 아키텍처: 브로커(Broker), 토픽(Topic), 파티션(Partition) 구조와 높은 처리량을 위한 순차 I/O(Sequential I/O), 페이지 캐시(Page Cache) 활용 원리 이해.

    • 데이터 신뢰성 및 성능 최적화: ISR(In-Sync Replicas) 모델을 통한 복제 메커니즘, acks 설정에 따른 전달 보장 전략 및 제로 카피(Zero-Copy) 기술을 통한 네트워크 전송 효율화 방식 습득.

    • 비동기 메시징 패턴: 컨슈머 그룹(Consumer Group)의 리밸런싱, 메시지 전달 보장 수준(At-least-once, Exactly-once) 및 비동기 처리를 통한 서비스 간 디커플링(Decoupling) 전략 학습.

  • 인사이트

    • 비동기 이벤트 스트리밍을 통해 핵심 로직과 부가 로직을 분리하여 시스템 전체의 내결함성과 회복탄력성을 확보함

    • 시스템 간의 직접적인 의존성을 제거하고 대량의 데이터를 안정적으로 처리하는 분산 아키텍처 설계 능력을 키움

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트

  • 핵심 학습 내용

    • 테스트의 진정한 목적은 코드의 '구현' 검증이 아닌 객체의 '행동(Behavior)'과 '계약(Contract)'이 올바르게 지켜지는지 확인하는 것임을 이해

    • Mocking을 통해 테스트 대상의 외부 의존성(DB, Network)을 격리하는 방법과 테스트하기 좋은 아키텍처(DIP)의 중요성 학습

  • 인사이트

    • 테스트 용이성을 코드 리팩토링의 중요한 기준으로 삼고 테스트하기 어려운 코드는 나쁜 코드라는 관점을 확립함

    • 외부 의존성을 주입받는 구조를 통해 테스트의 독립성을 확보하고 실제 환경과 유사한 검증 환경을 구축하는 역량을 키움

면접 전에 알고 가면 좋을 것들 (신입 Java 백엔드)

  • 핵심 학습 내용

    • 백엔드 개발자에게 필수적인 CS 지식(Network, OS, DB, Security 등)의 핵심 정리 및 실제 개발 업무와의 연결 고리 파악

    • 기술 면접에서 나오는 질문의 숨은 의도 파악과 단답형 지식 나열이 아닌 자신의 경험과 지식을 논리적으로 구조화하여 답변하는 방법 습득

  • 인사이트

    • 그동안 학습했던 파편화된 CS 지식들을 좋은 백엔드 시스템을 만들기 위한 기본기라는 실무적 관점에서 체계화함

    • 기술 면접이 단순 지식 암기 확인이 아니라 기본기를 바탕으로 한 문제 해결 능력을 검증하는 과정임을 깊이 이해함

도메인 주도 개발 시작하기

  • 핵심 학습 내용

    • 도메인 모델링 및 DDD 핵심 요소: 엔티티(Entity)와 밸류(Value) 타입의 구분, 유비쿼터스 언어(Ubiquitous Language) 정의 및 바운디드 컨텍스트(Bounded Context)를 통한 모델 경계 설정 이해.

    • 애그리거트와 리포지터리: 복잡한 비즈니스 규칙을 애그리거트(Aggregate) 단위로 묶어 일관성을 유지하고, 리포지터리(Repository)를 통해 영속성을 관리하는 실전 구현 기법 학습.

    • 도메인 서비스 및 이벤트: 엔티티에 속하기 어려운 로직을 위한 도메인 서비스 활용, 도메인 이벤트를 이용한 서비스 간 결합도 해소 및 트랜잭션 범위 최적화 방법 습득.

  • 인사이트

    • 애그리거트 단위로 트랜잭션 범위를 분리하여 잠금 범위를 최소화하고 도메인 이벤트를 활용해 시스템의 결합도를 낮춤

    • 복잡한 비즈니스 로직을 모델의 경계 안에서 관리하며 대규모 시스템에서도 유지보수가 용이한 설계 원칙을 정립함

이펙티브 자바 (Effective Java)

  • 핵심 학습 내용

    • 객체 생성과 파괴: 정적 팩토리 메서드(Item 1), 빌더 패턴(Item 2), 싱글턴(Item 3), 불필요한 객체 생성 방지(Item 6) 및 try-with-resources(Item 9) 사용 권장 사항 학습.

    • 클래스와 인터페이스: 접근 권한 최소화(Item 15), 불변성 활용(Item 17), 상속보다는 컴포지션(Item 18), 인터페이스 우선(Item 20) 등 유연한 설계 원칙 습득.

    • 메서드 및 제네릭: 방어적 복사(Item 50), null 대신 빈 컬렉션 반환(Item 54), 로 타입(Raw Type) 사용 금지(Item 26), 와일드카드 활용(PECS, Item 31) 등 타입 안전성 확보 방법 학습.

    • 동시성: 공유 중인 가변 데이터 동기화(Item 78), 과도한 동기화 회피(Item 79) 등 멀티스레드 프로그래밍 원칙.

  • 인사이트

    • 불변 객체와 방어적 복사를 적극적으로 활용하여 복잡한 락 메커니즘 없이도 스레드 안전성을 확보하는 설계를 지향함

    • 자바 언어의 특성을 올바르게 활용하여 안전하고 가독성 높은 코드를 작성하는 전문적인 개발 습관을 갖춤

Spring Cloud로 개발하는 마이크로서비스 (MSA)

  • 핵심 학습 내용

    • Service Discovery(Eureka), API Gateway, Config Server 등 MSA를 구성하는 핵심 컴포넌트의 역할과 동작 원리 이해

    • OpenFeign을 활용하여 마이크로서비스 간 HTTP 통신을 인터페이스 기반의 선언적 방식으로 간결하게 처리하는 방법 습득

  • 인사이트

    • MSA 도입 시 직면하는 통신 복잡도와 장애 전파 등 기술적 과제들을 깊이 이해하고 적절한 도입 시점을 판단하는 안목 기름

    • 각 도메인의 독립성을 보장하고 특정 서비스의 장애가 전체로 확산되는 것을 최소화하는 구조적 설계 역량을 확보함

개발자를 위한 레디스

  • 핵심 학습 내용

    • Redis가 싱글 스레드 기반으로 동작하는 이유와 그로 인해 얻는 원자성(Atomicity)의 이점 이해

    • 주요 자료구조인 String, Set, Sorted Set, Hash, List의 내부 동작 방식과 시간 복잡도(Time Complexity), 그리고 각 시나리오에 맞는 최적의 자료구조 선택 기준 학습

  • 인사이트

    • Redis를 단순 캐시가 아닌 분산 락, 메시지 큐, 실시간 랭킹 등 다양한 시나리오에 활용할 수 있는 도구로 재인식함

    • 비즈니스 요구사항에 맞춰 최적의 데이터 구조를 설계하고 활용하여 시스템의 전반적인 성능을 개선하는 능력을 키움

자바 - 고급 1편, 멀티스레드와 동시성

  • 핵심 학습 내용

    • Java 메모리 모델(JMM)을 기반으로, 멀티코어 환경에서 각기 다른 CPU 캐시와 메인 메모리 간의 데이터 불일치로 인해 발생하는 가시성(Visibility) 문제와 volatile 키워드의 역할 이해

    • 원자성(Atomicity) 문제를 해결하기 위한 synchronized와 ReentrantLock의 동작 원리, 그리고 CAS 알고리즘의 개념 학습

  • 인사이트

    • CPU 캐시와 메인 메모리 간의 데이터 불일치라는 하드웨어 레벨에서 동시성 문제의 근본 원인을 명확히 이해함

    • 특정 상황에 어떤 동시성 제어 기법이 적합한지 판단하고 안전한 멀티스레드 환경을 구축하는 전문성을 확보함

생성형 AI 기반의 학습 회고 및 문서 보강

  • 기간 2025년 9월 -

  • 활동

    • 과거에 학습했던 CS, Java, Spring, DB 등의 방대한 내용을 생성형 AI(Gemini)와 토론하며 재정리하는 스터디 진행함

    • 잘 몰랐거나 애매했던 개념에 대해 AI에게 질문하고 답변을 받으며 기존 지식의 빈틈을 메우는 상호작용적 학습 수행함

  • 인사이트

    • 학습 내용을 제3자에게 설명하고 피드백을 받는 과정을 통해 무엇을 알고 모르는지 인지하는 메타인지 능력을 키움

    • 단순 지식 나열을 넘어 기술적 근거를 끊임없이 고민하며 한 단계 깊은 이해를 추구하는 능동적인 학습 습관을 정립함

Last updated

Was this helpful?