2024
- 구글 엔지니어는 이렇게 일한다: 목차
- Kotlin - 코틀린 빌드
- Kotlin - DSL(2): `invoke()` 관례, 실전 DSL
- Kotlin - DSL(1): 수신 객체 지정 람다
- DDD - 도메인 복잡성 관리: 바운디드 컨텍스트
- Kotlin - 애너테이션과 리플렉션(3): 애너테이션으로 직렬화 제어, 리플렉션으로 역직렬화 구현
- Kotlin - 애너테이션과 리플렉션(2): 리플렉션 API, 리플렉션으로 직렬화 구현
- DDD - 비즈니스 지식 찾기: 유비쿼터스 언어
- Kotlin - 애너테이션과 리플렉션(1): 애너테이션
- DDD - 비즈니스 도메인 분석
- Kafka - 코드로 관리(2): 컨슈머 그룹 관리, 클러스터 메타데이터, 고급 어드민 작업, 테스트
- Kafka - 코드로 관리(1): `AdminClient` 생성/수정/닫기, 토픽 관리, 설정 관리
- Kafka - 컨슈머(3): 폴링 루프 벗어나기, 디시리얼라이저, 컨슈머 그룹없이 컨슈머 사용
- Kafka - 컨슈머(2): 오프셋, 커밋, 리밸런스 리스너, 특정 오프셋의 레코드 조회
- Kafka - 컨슈머(1): 컨슈머 그룹, 리밸런스, 컨슈머 생성, 토픽 구독, 폴링 루프, 컨슈머 설정, 파티션 할당 전략
- Kafka - 프로듀서(2): 시리얼라이저, 파티션, 파티셔너, 헤더, 인터셉터, 쿼터, 스로틀링
- Kafka - 프로듀서(1): 프로듀서 생성, 프로듀서 설정
- Kafka - 카프카 브로커 설치, 브로커 설정
- Kafka - 카프카 용어, 장점, 이용 사례
- Clean Architecture - 의식적으로 지름길 사용
- Clean Architecture - 아키텍처 경계 강제 (ArchUnit, 빌드 아티팩트)
- Clean Architecture - 설정 컴포넌트
- Clean Architecture - 경계 간 매핑 전략
- Clean Architecture - 테스트
- Clean Architecture - 영속성 어댑터 구현, 트랜잭션, 포트 인터페이스
- Clean Architecture - 웹 어댑터 구현
- Clean Architecture - 유스케이스, 입력 유효성 검증, 비즈니스 유효성 검증, 입출력 모델
- Clean Architecture - 패키징 구성
- Clean Architecture - 의존성 역전 (Dependency Inversion Principle)
- Clean Architecture - 계층형 아키텍처 문제점
- DDD - CQRS
- DDD - 이벤트(2): 비동기 이벤트 처리
- DDD - 이벤트(1): 이벤트, 핸들러, 디스패처
- DDD - 바운디드 컨텍스트
- Git commit message convention
- DDD - 애그리거트의 트랜잭션, 선점 잠금, 비선점 잠금, 오프라인 선점 잠금
- DDD - 도메인 서비스
- DDD - 표현 영역, 응용 영역, 값 검증, 권한 검사
- DDD - 스펙(2): 스펙 조합, Sort, 페이징(Pageable), 스펙 빌더 클래스, 동적 인스턴스 생성, @Subselect, @Immutable, @Synchronize
- DDD - 스펙(1): 스펙 구현, 스펙 사용
- DDD - 레파지토리(2): 애그리거트 로딩 전략, 애그리거트 영속성 전파
- DDD - ERD
- DDD - 레파지토리(1): 엔티티와 JPA 매핑 구현, 엔티티와 밸류 매핑(@Embeddable, @AttributeOverrides, AttributeConverter), 기본 생성자, 필드 접근 방식(@Access), 밸류 컬렉션 매핑
- DDD - 애그리거트, 애그리거트 루트, 애그리거트 참조, 애그리거트 간 집합 연관, 애그리거트를 팩토리로 사용
- DDD - 표현/응용/도메인/인프라스트럭처 영역, DIP, 도메인 영역의 주요 구성 요소, 애그리거트, 모듈 구성
- DDD - 도메인 모델, 도메인 모델 패턴, 도메인 모델 도출 과정, 엔티티와 밸류
- Kotlin - 지연 계산 초기화('lazy()'), 늦은 초기화('lateinit', '.isInitialized'), backing field, backing property
- Kotlin - 프로퍼티 위임, 'ReadOnlyProperty', 'ReadWriteProperty', 프로퍼티 위임 도구 (Delegates.observable(), Delegates.vetoable(), Delegates.notNull()), 위임 프로퍼티 컴파일
- Kotlin - 연산자 오버로딩, 'infix', 가변 컬렉션에 '+=', '+' 적용, Comparable, 구조 분해 연산자
- Kotlin - 제네릭스(2): 'reified', 타입 변성 'in'/'out', 공변과 무공변, 타입 프로젝션, 스타 프로젝션
- Kotlin - 제네릭스(1): Any, 타입 정보 보존, 제네릭 확장 함수, 타입 파라메터 제약, 타입 소거
- Kotlin - 'inline'
- Kotlin - 확장 람다, StringBuilder, buildString(), 영역 함수
- Kotlin - 에러 방지(2): 자원 해제('use()'), Logging, 단위 테스트
- Kotlin - 에러 방지(1): 커스텀 에러 타입 정의, 'require()', 'check()', Nothing 타입, 'TODO()'
- Kotlin - 객체 지향 프로그래밍(5): object, inner class, 'this@클래스명', companion object
- Kotlin - 객체 지향 프로그래밍(4): 타입 검사, 타입 검사 코딩, 내포된 클래스(nested class)
- Kotlin - 객체 지향 프로그래밍(3): 클래스 위임, 상속/합성/클래스 위임, 다운 캐스트('is', 'as'), 봉인된 클래스('sealed')
- Kotlin - 객체 지향 프로그래밍(2): 추상 클래스, 업캐스트, 다형성, 합성, 합성과 상속, 상속과 확장, 어댑터 패턴, 멤버 함수와 확장 함수
- Kotlin - 객체 지향 프로그래밍(1): 인터페이스, SAM(fun interface), init, 부생성자, 상속, 기반클래스 초기화
- Kotlin - 함수형 프로그래밍(3): Sequence, Local 함수, 확장 함수, 익명 함수, fold(), 재귀
- Kotlin - 함수형 프로그래밍(2): 고차 함수, 리스트 조작, Map
- Kotlin - 함수형 프로그래밍(1): 람다, 컬렉션 연산, 멤버 참조, 최상위 함수와 프로퍼티
- Kotlin - 함수(2): null 이 될 수 있는 타입, 안전한 호출, 널 아님 단언, 엘비스 연산자, 널 아님 단언, 확장 함수, 제네릭스, 확장 프로퍼티
- Kotlin - 함수(1): 확장 함수, 오버로딩, when, enum, data 클래스, 구조 분해 선언
- Kotlin - 객체: 생성자, 패키지, 리스트, 배열, 스프레드 연산자('*'), Set, Map, 클래스, 프로퍼티 접근자, 가시성 변경자
- Kotlin - 코틀린 기본 - 데이터 타입, 문자열, 반복문, `in` 키워드, 자바-코틀린 변환
- Spring Security - 전역 메서드 보안: 사전/사후 권한 필터
- Spring Security - 전역 메서드 보안: 사전/사후 권한 부여
- Spring Security - OAuth 2(3): JWT 와 암호화 서명
- Spring Security - OAuth 2(2): 권한 부여 서버 구현
- Spring Security - OAuth 2: 승인 코드 그랜트 유형을 이용한 간단한 SSO App 구현
- Spring Security - OAuth 2(1): Grant 유형
- Spring Security - BE, FE 분리된 설계의 애플리케이션 구현
- Spring Security - CORS (Cross-Site Resource Sharing, 교차 출처 리소스 공유)
2023
- Spring Security - CSRF (Cross-Site Request Forgery, 사이트 간 요청 위조)
- Spring Security - 필터
- Spring Security - 권한 부여(2): 경로, HTTP Method 에 따른 엑세스 제한
- Spring Security - 권한 부여(1): 권한과 역할에 따른 액세스 제한
- Spring Security - 간단한 애플리케이션 구현
- Spring Security - 인증 구현(3): HTTP Basic 인증
- Spring Security - 인증 구현(2): SecurityContext
- Spring Security - 인증 구현(1): AuthenticationProvider
- Spring Security - 암호 처리
- Spring Security - 사용자 관리
- Spring Security - 스프링 시큐리티 기본 구성 요소
- Spring Security - 웹 애플리케이션의 보안
- TroubleShooting - Kafka: could not be established. Broker may not be available.
- Spring Boot - 스프링 이벤트
- Spring Boot - 스케쥴링 태스크
- Spring Boot - Redis 와 스프링 캐시(5): Sorting
- Spring Boot - Redis 와 스프링 캐시(4): 스프링 프레임워크 Cache
- Spring Boot - Redis 와 스프링 캐시(3): 분산락, CyclicBarrier
- Spring Boot - Redis 와 스프링 캐시(2): RedisTemplate 설정
- Spring Boot - Redis 와 스프링 캐시(1): Spring Data Redis, Lettuce
- Spring Boot - REST-API 호출
- Spring Boot - 데이터 영속성(6): 엔티티 상태 이벤트 처리, 트랜잭션 생명주기 동기화 작업
- Spring Boot - 데이터 영속성(5): EntityManager
- Spring Boot - 데이터 영속성(4): 트랜잭션과 @Transactional
- Spring Boot - 데이터 영속성(3): JpaRepository, 쿼리 메서드
- Spring Boot - 데이터 영속성(2): 엔티티 클래스 설계
- Spring Boot - 데이터 영속성(1): JPA, Spring Data JPA
- Spring Boot - 스프링 부트 테스트
- Spring Boot - AOP
- Docker 관련 명령어들
- Spring Boot - 웹 애플리케이션 구축 (5): 국제화 메시지 처리, 로그 설정, 애플리케이션 패키징과 실행
- Spring Boot - 웹 애플리케이션 구축 (4): application.properties, Profile 설정
- Spring Boot - 웹 애플리케이션 구축 (3): Interceptor, ServletFilter
- Spring Boot - 웹 애플리케이션 구축 (2): HttpMessageConverter, ObjectMapper
- Spring Boot - 웹 애플리케이션 구축 (1): WebMvcConfigurer 를 이용한 설정, DispatcherServlet 설정
- Java - Java 8 ~ Java 17
- Java8 - 날짜와 시간
- Java8 - CompletableFuture (2): 비동기 연산의 파이프라인화
- Java8 - CompletableFuture (1): Future, 병렬화 방법
- Java8 - Optional 클래스
- Java8 - 디폴트 메서드
- Java8 - 람다 테스팅, 디버깅
- Java8 - 리팩토링, 디자인 패턴
- Java8 - Stream 으로 병렬 데이터 처리 (2): Spliterator 인터페이스
- Java8 - Stream 으로 병렬 데이터 처리 (1): 병렬 스트림, 포크/조인 프레임워크
- 돼지고기 고추장찌개
- Java8 - Stream 으로 데이터 수집 (2): Quiz
- Java8 - Stream 으로 데이터 수집 (2): Partitioning, Collector 인터페이스, Custom Collector
- Java8 - Stream 으로 데이터 수집 (1): Collectors 클래스, Reducing 과 Summary, Grouping
- Java8 - Stream 활용 (2): Quiz (2)
- Java8 - Stream 활용 (2): Quiz (1)
- Java8 - Stream 활용 (2): 리듀싱, 숫자형 스트림, 스트림 생성
- Java8 - Stream 활용 (1): 필터링, 슬라이싱, 매핑, 검색, 매칭
- 떡볶이
- Java8 - Stream
- Java8 - 람다 표현식 (2): 메서드 레퍼런스, 람다 표현식과 메서드의 조합
- Java8 - 람다 표현식 (1): 함수형 인터페이스, 형식 검사
- Java8 - 동작 파라메터화
- Java8 - Java8 이란?
- Spring Boot - REST-API with Spring MVC (2): POST/PUT 메서드 매핑, Pageable/Sort, 검증, 예외처리, 미디어 콘텐츠 다운로드
- Spring Boot - REST-API with Spring MVC (1): GET/DELETE 메서드 매핑, 응답 메시지 처리(마셜링)
- Spring Boot - HTTP, Spring Web MVC 프레임워크, REST-API
- REST-API
- Spring Boot - Spring bean, Spring bean Container, 의존성
- Spring Boot - MSA 와 Spring Boot
- NestJS - 테스트 자동화
- NestJS - 클린 아키텍처
- NestJS - Metadata(Reflection Class)
- NestJS - Custom Parameter Decorator
- NestJS - CQRS
- NestJS - Health Check
- NestJS - Task Scheduling
- NestJS - Middleware, Guard, Interceptor, Pipe, ExceptionFilter 그리고 Life Cycle
- NestJS - Interceptor
- NestJS - Exception Filter
- NestJS - Logging
- NestJS - Custom Provider
- NestJS - Guard, JWT
- 인증, JWT, Sliding Session, Refresh Token
- NestJS - Middleware
- 애호박전
- 된장찌개
- 느타리버섯 볶음
- Typescript - TypeORM vs Sequelize
- NestJS - Database, TypeORM
- NestJS - Pipe, Validation
- IoC(제어 반전), DI(의존성 주입)
- NestJS - 동적 모듈로 환경변수 구성
- NestJS - Module 설계
- NestJS - Provider, Scope
- NestJS - Interface
- 관점 지향 프로그래밍 (AOP, Aspect-Oriented Programming)
- 눈 건강: 소고기, 배 볶음
- Decorator
- Event Loop
- TroubleShooting - Nestjs: Failed to execute command: npm install --silent
- Nestjs - 기본
- AWS - Security (2): VPC Traffic Mirroring, WAF
- AWS - Security (1): Security Group, ACL, VPC Flow Log
- IP check 의 여러 가지 방법
- AWS - Network 연결 옵션 (5): AWS Direct Connect
- 미역국
- 강아지 닭가슴살
- AWS - Network 연결 옵션 (4): Route 53 DNS Resolver (DNS 해석기)
2022