작년 10월 정도에 스프링의 기초 개념인 DI IoC, AOP 들과 톰캣의 ThreadPool 및 Argument Resolver, Exception Resolver 등의 내용을 POJO(Java 17)와 몇몇 라이브러리들(리플렉션 등) 만을 활용하여 "나만의 작은 W

이 글에서 해볼 것은 스프링 개발을 해봤다면 누구나 아는 @ReqeustMapping 만들기이다. 이게 어떻게 그렇게 마법처럼 동작하는 걸까? 우선 @ 이러한 형태의 객체를 메서드나, 클래스나 혹은 파라미터에 붙여 사용하는 경우가 많다. 이를 annotation 이라

DI/IoC 컨테이너 리팩토링이 어느정도 되어서, 가져왔다.스프링과 유사하게, 정확히는 스프링 부트와 유사하게 만드려고 했고 내가 구현한 부분을 설명하고, 스프링의 실제 구현과 다른점을 살펴본 후, 테스트로 검증을 해보는 순서로 진행하게 될 것 같다. 스프링에선 @Co
우선 지금까지의 구현 결과물 부터 보자. 이렇게 보면 뭣도 없어보이지만.. 이게 뭐 어쩌라고 싶겠지만.. 여기서 볼 것은, import 부분이다. 스프링을 전혀 사용하지 않고 오로지 POJO로만(Reflection, CGLIB 등 사용함) 스프링과 똑같이 동작하게
오늘은 스프링 프레임워크의 핵심 요소 중 하나인 ArgumentResolver를 직접 구현해보면서, 깊이 있게 알아가보자. 바로 이전 포스팅에서 전체적인 구조와 DispatcherServlet(프론트 컨트롤러)에 대해 설명했으니, 이번 글에서는 ArgumentResol
오늘은 예전에 만들어 뒀던, 유사 SpringFramework AOP를 소개하고 스프링 AOP와 어떤 점이 다른지, 스프링 AOP는 어떤 원리로 동작하는지 살펴보자. 이 글을 본다면, IoC 컨테이너의 생명주기, BeanPostProcessor의 역할, 그리고 CGL
이전 DIY AOP: Spring AOP 만들어보기 에서는 Advice-Pointcut-Advisor 의 관계 보다는 프록시 시점과 DI가 어떻게 통합되는지, AdvisorRegistry에 언제 등록되어 찾고 캐싱을 어떻게 하는지 등등 위주의 설명이었다. 오늘은 보다

톰캣이나 Netty 같은 상용 서버 프레임워크가 아닌, 내가 직접 제작한 서버(Sprout)의 구조와 동작 방식, 그리고 다양한 실행 조합 하에서의 성능 및 안정성 테스트 결과를 공유하려 한다. 이를 통해 Java 기반 멀티스레드 서버의 내부 구조와 실험적 조합(NIO
이전에도 이에 대한 주제로 구조 및 구현에 대한 설명을 작성한 바 있지만, 추가로 구현된 부분 및 리팩토링한 지점들이 새로 생겨 새로이 작성하게 되었다.IoC(Inversion of Control) 컨테이너는 현대 애플리케이션 프레임워크의 핵심이기도 하다. 스프링 프레
본 시리즈는 Sprout라는 IoC 컨테이너를 직접 구현하면서 얻게 된 인사이트를 정리한 글입니다.Spring의 내부 동작을 직접 구현해보며 얻은 개념 정리를 목표로 하며, 코드 구현과 함께 실제 구동 로그를 바탕으로 설명합니다.이전 포스트에서는 컴포넌트 스캔, 의존성
이 글은 Sprout 프레임워크에 내장된 HTTP 서버가 Java NIO(New I/O)를 기반으로 어떻게 Non-Blocking I/O를 구현하고, 다수의 동시 연결을 효율적으로 처리하는지에 대해 상세히 설명해 볼 예정이다. 특히 Selector를 활용한 이벤트 루프
이전에 Gatling을 사용하여 내가 만들어본 bio 및 nio 서버의 성능 및 안정성 테스트를 진행한 바 있다. 그리고 서버의 더 구체적인 구조에 대해서도 서술한 바 있다. 오늘은 async-profiler로 더 정확한 원인을 분석하여 성능을 개선해본 회고를 작성해

주요 병목: HttpUtils.readRawRequest, ClassLoader, ObjectOutputStream인라이닝 실패 이유: 메서드 크기 초과, 스택 초과, 예측 불가능한 분기GC 영향: 전체 실행 시간 대비 0.03%개선 포인트: 메서드 분리, 조기 리턴

이거 한다고 아무것도 못함
프로토콜 감지 → 핸드셰이크 → 프레임 파싱 → 세션 라이프사이클 → ArgumentResolver → Dispatcher 구조 → 논블로킹 write → graceful close