Spring58 스프링 핵심원리( 심화 ) - 동적 프록시(리플렉션) 지금까지 프록시를 통한 원본 코드에 대한 변경 없이 부가 기능을 적용하는 방법에 대해 알아보았다.처음 컨트롤러 - 서비스 - 레포지토리 각 계층 코드의 직접적인 변경을 요구하던 형태에서본 기능의 코드는 부가 기능으로 인하여 더렵혀지지 않는 방법까지 알아보았다.보다 유지보수에 수월한 형태와 방법을 적용한 것이다! 그러나 여전히 로그 추적기라는 부가 기능을 적용하기 위해서 각 계층의 대상 클래스에 모두 프록시 클래스나 인터페이스들을 만들어야하는 작업은 별도로 필요하다. 반복을 줄이기 위한 방법은 없을까?? 이에 대한 방법으로 자바는 기본적으로 JDK 동적 프록시 기술이나 CGLIB 같은 프록시 생성 오픈소스 기술을 활용하여 프록시 객체를 동적으로 만들어낼 수 있도록 제공한다. 그리고 이 JDK 동적 프록시 .. Spring/SpringCore - advance 2026. 1. 26. 스프링 핵심원리( 심화 ) - 구체클래스 기반 프록시 앞서 다룬 인터페이스의 기반의 프록시 뿐만 아니라, 구체클래스 기반의 프록시를 적용하는 방법에 대해 학습을 이어간다.상속을 통한 프록시 적용결론부터 말하자면, 인터페이스가 존재하지 않아도 '상속'을 통해 프록시 적용이 가능하다. 코드 예시를 통해 살펴보자. 상속을 통한 프록시 적용 예시 코드 프록시 적용 이전 예시먼저, ConcreteLogic이며, 인터페이스가 존재하지 않는 구체클래스이다.(ex, 서비스 로직)import lombok.extern.slf4j.Slf4j;@Slf4jpublic class ConcreteLogic { public String operation() { log.info("ConcreteLogic 실행"); return "data"; }} 그리고 이를 사용하는.. Spring/SpringCore - advance 2026. 1. 14. Spring 개발 환경 세팅하기(STS) - DB 연결 세팅하기 / JDBC 드라이버 / JDBC 의존성 / HikariCP 커넥션풀 설정 / properties 생성 및 설정 앞서 Spring 세팅에 있어, 스프링 컨테이너를 실행하고 ComponentScan을 통해 스프링 Bean 관리 하는 내용까지 살펴보았다. 이제 DataBase 연결과 관련한 세팅에 대해 다뤄보겠다. 단, DB 설치와 관련한 내용은 다루지 않으며 Oracle 11g XE가 설치된 상황을 전제로 설명한다. 먼저, Spring MVC 에서 Oracle 데이터베이스에 연결하기 위한 설정 방법을 단계별로 작성해보겠다.[ 사용환경 ]- Spring Framework 5.0.7- Java 11- Oracle 11g XE- HikariCP 4.0.3- Maven 프로젝트 , Oracle 데이터베이스와 통신하기 위해 필요한 드라이버 설치가 필요하다. 이를 위해선 드라이버를 직접 다운받아 설치하거나 혹은 pom... Spring/Spring(legacy) - MVC 2025. 12. 24. Spring 개발 환경 세팅하기(STS) - root-context.xml 설정을 통해 스프링 Bean 관리(ComponentScan), componentscan 사용 관련 xml 설정 내용 지금까지 스프링 legacy project 구성을 위한 기본적인 환경 설정을 다뤘다. 이제 스프링의 핵심 역할인 DI Container로의 기능을 살펴보고, ComponenScan을 활용한 사용법에 대해서 알아보자.DI Container로 스프링의 역할 및 기능을 살펴보기 위해앞서 구성했던, 프로젝트에 아래와 같이 sample 패키지에 클래스를 만들었다. 먼저, Computer.java의 코드이다. package sample;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import lombok.Getter;import lombok.Setter;@Com.. Spring/Spring(legacy) - MVC 2025. 12. 11. Spring 개발 환경 세팅하기(STS) - pom.xml / IDE JRE 라이브러리 설정(Java Build Path) / 스프링, 자바 버젼 변경하기 https://deeep-diver.tistory.com/146 Spring 프레임워크 개발 환경 세팅하기(STS) - 스프링 프로젝트 생성, 라이브러리(.m2 폴더), 프로젝앞서, [File - New - Spring Legacy Project] 메뉴를 이용하여 MVC 프로젝트를 구성했던 것처럼이클립스(STS), 인텔레제이(Ultimate Version) 와 같은 IDE를 사용하여 쉽게 프로젝트를 구성할 수 있다. 프로젝트를deeep-diver.tistory.com이전에 다룬 프로젝트 구조에서 pom.xml은 Maven 관련 환경 설정 파일이다. 구체적으로는 아래와 같은 내용을 설정하는 것이다. '내 프로젝트를 Maven이 어떤 Java 버전으로 컴파일하고, 어떤 라이브러리와 옵션으로 빌드할지' 를 정.. Spring/Spring(legacy) - MVC 2025. 12. 10. Spring 개발 환경 세팅하기(STS) - 스프링 프로젝트 생성, 라이브러리(.m2 폴더), 프로젝트 구조(구조와 작동 원리) 앞서, [File - New - Spring Legacy Project] 메뉴를 이용하여 MVC 프로젝트를 구성했던 것처럼이클립스(STS), 인텔레제이(Ultimate Version) 와 같은 IDE를 사용하여 쉽게 프로젝트를 구성할 수 있다. 프로젝트를 생성하면 필요한 라이브러리 및 코드들을 다운로드 하는데 이는 .m2 폴더 내에 위치하게 된다. 간혹 스프링 관련 프로젝트를 생성하고 온전히 작동되지 않는 경우, Maven 등에서 스프링 관련 jar 파일들을 다운로드하는 중에 문제가 발생하는 경우가 많다. 이런 경우, [ .m2 - repository ] 폴더의 내용물을 삭제하고 재시작하여 해당 라이브러리들이 다시 다운로드 되는 과정을 거치면 해결 되는 경우가 많다. 이후 스프링 프로젝트 생성을.. Spring/Spring(legacy) - MVC 2025. 12. 9. Spring 개발 환경 세팅하기(STS) - STS3, STS.ini 설정을 통한 실행 환경 설정, Spring MVC 구성, 톰캣 설치 현재 다니고 있는 회사에서는 Spring legacy 환경을 사용하고 있다.이전에 학원에서는 스프링부트만 사용했지만, 회사에서 사용하는 환경이니 스프링 레거시 프로젝트 환경을 구축하는 방법과 구조에 대해 학습한 내용을 정리해보겠다. 대게 스프링 레거시 프로젝트를 STS를 사용해서 구성하는 경우가 많은 것으로 보이기에 IDE는 STS를 사용할 것이며,그 중에서도 STS3 버전을 사용할 것이다. (STS4부터는 Spring boot 개발에 적합하다고 한다.) 이를 위해 먼저 아래의 깃헙 링크에서 STS3을 설치해준다. https://github.com/spring-attic/toolsuite-distribution/wiki/Spring-Tool-Suite-3 Spring Tool Suite 3the dist.. Spring/Spring(legacy) - MVC 2025. 12. 4. 스프링 핵심원리( 심화 ) - 인터페이스 기반 프록시 앞서, 프록시의 역할과 기능 및 사용법에 대해서 알아보았다. 이제, 앞서 만들었던 v1(인터페이스가 있는 구현 클래스)에 프록시를 적용하여 LogTrace 기능을 활용하는 방법에 대해서 알아보자.즉, 프록시를 적용하여 기존 코드를 전혀 수정하지 않으면서 로그 추적 기능을 도입하는 방법에 대해서 구체적으로 파악해보자는 것이다. V1 App 의존관계 v1 App의 기본 의존 관계(클래스 의존)와 런타임시 객체 인스턴스의 의존 관계는 아래의 그림과 같다. V1 App 기존 의존관계 V1 기본 클래스 의존관계 V2 런타임 객체 의존 관계 여기에 로그 추적 기능을 담당하는 프록시를 추가하면 다음과 같은 형태를 지닌다. V1 App 프록시 도입 클래스 의존관계V1 프록시 도입 기본 클래스 의존관계 V1 프록시.. Spring/SpringCore - advance 2025. 11. 7. 스프링 핵심원리( 심화 ) - 프록시 패턴과 데코레이터 패턴(2) 앞서, 추가되었던 요구사항과 함께 지금까지 만들어 온 로그 추적기에 대한 내용 역시 정리해보자. 기존 요구사항→ 모든 Public 메서드의 호출과 응답 정보를 로그로 출력 → 애플리케이션의 흐름을 변경하면 안됨 - 로그를 남긴다고 해서 비즈니스 로직의 동작에 영향을 주면 안됨→ 메서드 호출에 걸린 시간 → 정상 흐름과 예외 흐름 구분 - 예외 발생 시 예외 정보가 남아야 함→ 메서드 호출의 깊이 표현 → HTTP 요청을 구분 - HTTP 요청 단위로 특정 ID를 남겨 어떤 HTTP 요청에서 비롯된 것인지 명확하게 구분할 수 있도록 한다. - 트랜잭션ID (DB 트랜잭션 ❎) 예시 하지만, 지금까지 개발한 로그 추적기는 위의 요구사항을 만족하기 위해서 기존 코드를 많이 수정해야 하는 상황이다. .. Spring/SpringCore - advance 2025. 8. 23. 스프링 핵심원리( 심화 ) - 프록시 패턴과 데코레이터 패턴(1) 이번에는 스프링을 이루는 핵심 디자인 패턴의 일부로 프록시 패턴에 대해서 알아보자. 앞서 다뤘던, 템플릿 콜백 패턴을 비롯하여 공통 로직을 최대한 애플리케이션의 전반적으로 걸쳐 재사용할 수 있도록 하는 방법에 대해서 알아봤었다. 그러나, 여전히 로그 기능 추가로 인한 코드의 수정이 불가피하였다. 그리고 이는 개발자에게 가장 큰 문제로 남게 된다. 따라서 원본 코드의 수정을 필요로하지 않으며, 로그 추적기를 적용할 수 있는 방법에 대해 알아보기 위한 방법을 목표로 내용을 정리해보겠다. 기존 코드의 작동에서 아래와 같은 요구사항이 추가되었다. 요구사항 추가 - 원본 코드 수정없이 로그 추적기를 적용하라. - 특정 메소드는 로그를 출력하지 않도록 하라. → 보안상 일부는 로그를 출력하지 않는 기능 - 다.. Spring/SpringCore - advance 2025. 8. 10. 스프링 핵심원리( 심화 ) - 로그 추적기와 디자인패턴( 템플릿 콜백 패턴 ) 앞서 다룬 내용으로 ContextV1, ContextV2는 변하지 않는 템플릿 역할을 담당하였다. 그리고 변하는 부분을 Strategy 인터페이스로 정의하고 파라미터로 넘겨받아 해당 구현체의 코드를 실행하여 처리하도록 구성했었다. 이와 같이 다른 코드의 인수로 넘겨주는 실행 가능한 코드를 콜백(CallBack)이라고 부른다. 콜백이란?콜백은 다른 코드를 파라미터로 넘겨주는 실행 가능한 코드를 일컫어 표현한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 실행하는 것이다. 즉, CallBack은 코드의 실행이 코드를 넘겨준 곳의 뒤에서 실행된다는 의미이다. 지금까지 다룬 코드를 기준으로 설명하자면, ContextV2 예제에서 콜백은 Strategy에 해당한다.여기에서 클라이언트가 직접 Strategy.. Spring/SpringCore - advance 2025. 5. 30. 스프링 핵심원리( 심화 ) - 로그 추적기와 디자인패턴( 전략 패턴 ) 앞서 로그 추적기를 개발하면서 템플릿 메서드 패턴을 적용하여로그 추적기 기능 관련 코드가 중복되는 현상을 상속과 오버라이딩을 사용하는 템플릿 메서드 패던을 적용하여 개선하였다. 하지만, 상속을 통한 해결에는 결합도가 높아지고, 단일 상속의 한계가 존재하는 등의 상황이 후에 도출될 수 있다. 따라서 상속보단 조합의 방향성을 가지고 서비스 로직마다 변하는 부분과 변하지 않는 부분( 로그 추적기 )을 분리하여 개선하는 방법으로 전략 패턴을 적용해보자. 전략 패턴 적용 전략 패턴은 템플릿 메서드 패턴과 비슷한 역할을 하면서 상속의 단점을 제거할 수 있는 디자인 패턴이다.그 구체적인 방법은 상속이 아닌 위임(조합)을 사용하는 것이다. 템플릿 메서드 패턴의 구조와 전략 패턴의 구조를 비교하여 이해해보자.먼저, 템플.. Spring/SpringCore - advance 2025. 3. 16. 이전 1 2 3 4 5 다음