Spring17 [Spring DB] Connection Pool 도입애플리케이션이 데이터베이스에 쿼리를 보내려면 반드시 DB 연결이 필요합니다.이 연결은 생각보다 많은 단계와 시간이 소요됩니다. 예를 들어, 사용자가 웹에서 버튼 하나만 눌러도, 아래와 같은 절차를 거쳐야 DB에 접근할 수 있습니다.애플리케이션 로직은 DB 드라이버에게 커넥션을 요청합니다.DB 드라이버는 TCP/IP 네트워크 연결을 시도합니다.TCP 연결이 완료되면, ID, PW, 부가 정보를 DB에 전달합니다.DB는 전달받은 정보로 내부 인증 및 세션 생성을 합니다.커넥션이 생성이 완료되었음을 애플리케이션에 응답합니다.드라이버는 커넥션 객체를 만들어 반환합니다.이 모든 작업은 매우 비싼 비용을 수반합니다. 특히 네트워크 지연, DB 세션 생성 등의 부하는 실시간 사용자 요청이 몰리는 환경에서 병목이.. 2025. 4. 25. [Spring Docs] DispatcherServlet #2 공식문서는 Dispatcher Servlet에 대해서 뭐라고 할까요? 이번글은 공식 문서에서 소개하는 DispatchServlet에 대해 정리했습니다.정리 범위 : Processing ~ view Resolution ProcessingThe DispatcherServlet processes requests as follows:DispatcherServlet은 요청을 다음과 같이 처리합니다: The WebApplicationContext is searched for and bound in the request as an attribute that the controller and other elements in the process can use. It is bound by default under the.. 2025. 3. 16. 빈 후처리 프록시 팩토리를 사용하는 방법보다더 좋은 방법은 없을까? 이번글은 빈 후처리기에 대해 정리했습니다.참고 강의 : 김영한의 스프링 핵심 원리 - 고급 편 프록시 팩토리로 프록시 객체를 생성하는 방식은 어떤 문제가 존재할까요? 설정 파일이 너무 많아집니다. 예를 들어 스프링 빈이 100개가 존재하는 경우, 프록시를 통해 부가 기능을 적용하기 위해선 100개의 동적 프록시 생성 코드를 만들어야 합니다.스프링은 컴포넌트 스캔을 사용해서 실제 객체를 스프링 빈으로 등록합니다. 동적으로 생성된 프록시 객체는 컴포넌트 스캔을 통해서 등록을 할 수 없기 때문에, 프록시 객체를 직접 빈으로 등록해야 합니다. 예를 들어, 등록해야 할 프록시 객체가 100개가 존재한다면, 수동으로 빈으로 등록해야 합니다. 스프링이 빈을 등.. 2025. 3. 13. 어드바이저 스프링 AOP 할 때 들은 개념인데, 정확이 어떤 걸까요? 이번글은 포인트컷, 어드바이스, 어드바이저에 대해 정리했습니다.참고 강의 : 김영한의 스프링 핵심 원리 - 고급 편 포인트 컷(Pointcut)포인트 컷은 이름 그대로 어떠한 포인트(Point)에 기능을 적용할지 하지 않을지를 잘라서(cut) 구분해 주는 필터링하는 로직입니다.즉, 어디에 부가 기능을 추가할지, 어디에 부가 기능을 적용하지 않을지를 판단해 줍니다. 판단 기준은 주로 클래스나 메서드 이름으로 필터링해 줍니다. 어드바이스(Advice)프록시가 호출하는 부가 기능입니다. 프록시 로직으로 생각하면 됩니다. 어드바이저(Advisor)하나의 포인트컷과 하나의 어드바이스를 가지고 있는 것입니다. 어드바이저 = 1개의 포인트 컷 + 1개.. 2025. 3. 12. 프록시 팩토리 인터페이스와 클래스를 둘다 사용해서JDK 동적 프록시와 CGLIB를 사용하는 경우엔 어떻게 해야할까? 이번글은 프록시 팩토리에 대해 정리했습니다.참고 강의 : 김영한의 스프링 핵심 원리 - 고급편 JDK 동적 프록시와 CGLIB를 동시에 사용하는 경우에 JDK 동적 프록시가 제공하는 InvocationHandler와 CGLIB가 제공하는 MehtodIntercetpor를 둘다 만들어 관리해야 하는 문제가 생깁니다. 한번에 관리해줄 수 있는 방법이 없을까요? 스프링은 이러한 문제를 해결하기 위해서 동적 프록시를 통합해서 편리하게 만들어주는 프록시 팩토리라는 기능을 제공합니다. 프록시 팩터리Spring에서 제공하는 동적 프록시를 편리하게 만들어주는 기능입니다.프록시 팩터리는 인터페이스가 있는 경우엔 .. 2025. 3. 11. CGLIB JDK의 동적 프록시는 인터페이스를 기반으로 프록시 객체를 생성하는데,그렇다면 클래스의 프록시 객체는 어떻게 생성할 수 있을까? 이번글은 클래스의 프록시 객체를 생성해주는 CGLIB에 대해 정리했습니다.참고 강의 : 김영한의 스프링 핵심 원리 - 고급편 CGLIBCode Generator Library로 바이트 코드를 조작해서 동적으로 클래스를 생성하는 라이브러리 입니다.인터페이스를 사용하지 않아도 구체 클래스로 동적 프록시를 만들 수 있습니다. CGLIB 적용간단한 예제로 CGLIB가 어떻게 사용되는지 알아보겠습니다.먼저, 구체 클래스만 있는 서비스 클래스를 생성합니다. ConcreteServicepackage hello.proxy.common.service;import lombok.extern.sl.. 2025. 3. 10. 동적 프록시 동적 프록시가 뭘까요? 이번글은 동적 프록시에 대해서 정리했습니다.참고 강의 : 김영한의 스프링 핵심 원리 - 고급편 동적 프록시동적 프록시는 프록시 객체를 런타임에 자동으로 생성해주는 기술입니다.개발자가 직접 프록시 클래스를 작성하지 않아도, JVM이 런타임 시점에 프록시 클래스를 생성하여 제공합니다. 동적 프록시를 사용하는 이유가 뭔가요? 직접 만들어도 되는거 아닌가요? 동적 프록시는 런타임에 프록시 클래스를 메모리에서 생성하기 때문에 불필요한 클래스 파일이 소스코드나 파일시스템에 남지 않습니다.또한, 반복적인 코드 생성을 자동화해 중복 작업을 최소화하고, 개발자는 핵심 로직에 집중할 수 있게 해줍니다. 동적 프록시는 인터페이스를 기반으로 프록시를 동적으로 만들어주기 때문에, 인터페이스를 필수로 사용.. 2025. 3. 8. 트랜잭션 AOP 주의사항 @Transactional을 사용했는데왜 DB에 데이터가 저장이 안될까? 이번 글은 트랜잭션을 사용시 주의 사항에 대해 알아보겠습니다.참고 강의 : 김영한의 스프링 DB 2편 - 데이터 접근 활용 기술 트랜잭션 AOP에 무슨 문제가 있는 걸까요? 왜 DB에 데이터가 저장되지 않을까요? Transaction AOP @Transactional 어노테이션을 사용하는 경우, Spring에서 프록시 방식의 Transaciton AOP를 사용합니다.즉, 프록시 트랜잭션 객체가 트랜잭션을 처리하고, 실제 객체를 호출해주는 방식입니다.따라서 트랜잭션을 적용하려면 항상 프록시를 통해서 대상 객체(Target)을 호출해야 합니다. 혹시, 프록시 트랜잭션 객체를 거치지 않아서 DB에 데이터가 저장되지 않은걸까요? 네, 맞.. 2025. 3. 1. Thread Local 쓰레드 로컬..?대충 트래잭션 컨텍스트에서 사용한다는 건 들었는데.. 이번 글은 ThreadLocal이 무엇이고, 왜 사용되는지 정리했습니다. Thread Local이란 무엇일까요? Thread Local스레드 로컬은 각 스레드마다 독립적인 값을 저장할 수 있는 공간을 제공합니다.같은 변수를 참조해도, 스레드마다 서로 다른 값을 갖게 되는 특징이 있습니다.즉, 스레드 로컬은 멀티 스레드 환경에서 각 스레드가 독립적인 데이터를 유지할 수 있도록 도와주는 유용한 도구입니다 Spring에서 Thread Local이 어떻게 사용이 되나요? Spring에서 스레드 로컬 여러 사용법이 있지만 그중 트랜잭션 관리(Transaction Context)를 보겠습니다. Transaction Context스프링은 요청마.. 2025. 2. 28. 이전 1 2 다음