본문 바로가기

분류 전체보기

(68)
토비의 스프링 1.4 제어의 역전 제어의 역전(Inversion of Control, IoC)은 객체지향 프로그래밍에서 중요한 개념이며, 스프링 프레임워크를 통해 널리 알려진 용어입니다. 이 개념은 프로그래밍에서 꽤 오래전부터 존재해왔으며, IoC의 핵심은 프로그램의 흐름 제어를 개발자가 아닌 프레임워크에 위임하는 것입니다. 이를 통해 개발자는 비즈니스 로직에 집중할 수 있으며, 코드의 유연성과 재사용성이 향상됩니다. UserDao 코드를 더욱 개선하여 IoC의 개념을 적용해 보겠습니다. 오브젝트 팩토리의 도입 UserDaoTest는 원래 테스트를 위한 클래스였지만, 특정 구현 클래스의 사용에 대한 책임을 가지게 되었습니다. 이를 해결하기 위해, 객체 생성 책임을 분리하는 팩토리(Facotry)의 개념을 도입할 수 있습니다...
토비의 스프링 1.3 DAO를 확장하기 전 현재까지의 상황DAO를 확장하기 전 현재까지의 상황 현재의 설계 상태는 객체지향 설계 원칙 중 하나인 '관심사의 분리'를 적용하여, 두 가지 주요 관심사를 명확히 구분한 상태입니다. 이 두 관심사는 각각 '데이터베이스(DB) 연결 관리'와 '데이터 액세스 오브젝트(DAO)의 비즈니스 로직 처리'입니다. 이러한 분리의 목적은 변화의 성격에 기인합니다. 즉, 변화의 이유, 시기, 주기 등이 서로 다르기 때문에 이들을 별도로 관리하는 것이 유리합니다. 1. 데이터베이스 연결 관리: 이 관심사는 어떤 종류의 데이터베이스에 연결할 것인지, 접속 정보(예: 호스트 주소, 사용자 이름, 비밀번호 등)를 어떻게 설정할 것인지에 초점을 맞춥니다. 이는 애플리케이션의 구성 요소 중 하나로, 종종 환경..
토비의 스프링 1. 오브젝트와 의존관계 1.1 초난감 DAO 자바 개발에서 "아티팩트(Artifact)"라는 용어는 빌드 과정에서 생성되는 파일이나 결과물을 의미합니다. 이 아티팩트는 소스 코드, 설정 파일, 라이브러리, 컴파일된 클래스 파일 등 다양한 형태를 가질 수 있으며, 자바 개발의 중요한 산출물입니다. 자바 아티팩트의 종류 1. JAR 파일 (Java Archive File): JAR 파일은 자바 클래스 파일과 해당 애플리케이션 또는 라이브러리에 필요한 리소스 파일들을 압축한 아카이브 파일입니다. - 이는 자바 애플리케이션을 배포하거나 라이브러리를 공유할 때 흔히 사용됩니다. 2. WAR 파일 (Web Application Archive File): 웹 애플리케이션의 배포를 위해 사용되는 아티팩트입니다. - JSP, 서블릿, 자바 클..
Spring – JDBC Template Introduction to JDBC (Java Database Connectivity) JDBC는 Java Database Connectivity를 의미합니다. JDBC는 데이터베이스와 연결하고 쿼리를 실행하기 위한 자바 API입니다. 이것은 Sun Microsystems에서 제공하는 표준 추상화(API 또는 프로토콜)로, 다양한 데이터베이스와 통신하기 위한 자바 애플리케이션에 대한 명세입니다. JDBC는 자바 데이터베이스 연결 표준을 제공합니다. 데이터베이스에 접근이 필요한 프로그램을 작성하는 데 사용됩니다. JDBC는 데이터베이스 드라이버와 함께 데이터베이스 및 스프레드시트에 접근할 수 있습니다. 관계형 데이터베이스(RDB)에 저장된 엔터프라이즈 데이터는 JDBC API를 통해 접근할 수 있습니다...
PlatformTransactionManager 트랜잭션 [Transaction] ※ 트랜잭션[Transaction] 트랜잭션은 데이터베이스 관리 시스템(DBMS)에서 데이터의 무결성을 보장하기 위해 사용되는 기본 단위입니다. 간단하게 말하자면, 트랜잭션은 데이터베이스에 대한 하나 이상의 연산들의 그룹으로, 이들 연산은 하나의 단일 작업으로 취급됩니다. 트랜잭션의 주요 특징[ACID]은 다음과 같습니다: 1. 원자성(Atomicity): 트랜잭션 내의 모든 연산들은 전체적으로 완료되거나 전혀 실행되지 않아야 합니다. 즉, 모든 단계가 성공적으로 완료되거나, 하나라도 실패하면 전체 트랜잭션이 취소(롤백)됩니다. 2. 일관성(Consistency): 트랜잭션이 완료된 후에는 데이터베이스가 일관된 상태를 유지해야 합니다. 이는 트랜잭션 전후로 데이터베이스의..
Spring Tool Suite 4 Spring Tool Suite 4 설치 아래 URL에서 스프링 툴 수트 4를 다운로드할 수 있습니다. https://spring.io/tools Spring | Tools spring.io 개발 Host PC의 CPU와 OS 버전에 따라 STS4(Spring Tools 4 for Eclipse)를 선택합니다. 파일 확장자가 *.jar 파일임을 확인합니다. 해당 spring-tool-suite 4 파일을 원하는 디렉토리로 복사합니다. 그리고 윈도우 검색창에서 cmd를 검색합니다. cmd을 실행시켜 prompt에 해당 spring-tool-suite 4 파일이 복사된 경로로 이동하기 위한 관련 커맨드를 실행시킵니다.(이 방법은 로컬 host pc에 JDK가 설치되어 있어야 합니다) prompt에 다음과 같..
AOP Spring AOP 비즈니스 로직에서 반복적으로 사용되는 트랜잭션 코드를 효과적으로 분리하여 부가 기능으로 제공하는 것입니다. 이로써 분리된 트랜잭션 코드는 마치 투명한 유리처럼 다른 코드에 영향을 주지 않으면서도 메소드 호출 과정에서 동적으로 참여하여 부가 기능을 제공합니다. 이 투명성은 언제든지 부가 기능을 추가하거나 제거할 수 있으며, 기존 코드는 항상 원래 상태를 유지할 수 있습니다. 이것은 의존성 주입(DI)의 멋진 응용 방식 중 하나로, 코드를 깔끔하게 유지하면서도 유연성을 제공합니다. 자동 프록시 생성 스프링 프레임워크에서 AOP를 구현할 때, ProxyFactoryBean을 사용하는 접근 방식은 많은 장점을 가지지만, 설정의 중복 문제가 종종 발생합니다. 이는 특히, 대규모 애플리케이션에서..
Spring ProxyFactoryBean ProxyFactoryBean ProxyFactoryBean은 스프링 프레임워크에서 제공하는 빈(Bean)으로, 다양한 유형의 프록시(Proxy) 객체를 생성하고 관리하는데 사용되는 중요한 구성 요소 중 하나입니다. ProxyFactoryBean을 사용하면 다음과 같은 기능을 수행할 수 있습니다. 1. 프록시 객체 생성: ProxyFactoryBean은 주어진 대상 객체(타겟 객체)를 감싸고, 필요한 경우 프록시를 생성합니다. 이 프록시는 대상 객체와 동일한 인터페이스를 구현하거나 상속받은 클래스를 생성할 수 있습니다. 이렇게 생성된 프록시 객체는 대상 객체의 메서드 호출을 중간에서 가로채서 추가 동작(로깅, 트랜잭션 관리 등)을 수행하거나, 대상 객체의 메서드를 호출하기 전/후에 사전/사후 처리를 할 ..
Factory Bean 스프링 프레임워크에서 팩토리 빈(FactoryBean)은 객체 생성을 책임지고 해당 객체를 반환하는 특별한 종류의 빈(Bean)입니다. FactoryBean 은 다른 빈을 생성하는 용도로 사용될 수 있으며, 주로 복잡한 객체 생성 로직이 필요한 경우에 활용됩니다. ※ BeanFactory 인터페이스와 혼동하지 마세요 스프링 프레임워크에서 FactoryBean 인터페이스를 사용하는 궁극적인 이유는 복잡한 초기화 로직을 갖는 객체의 생성을 캡슐화하고, 스프링의 의존성 주입(DI) 컨테이너에 통합하기 위함입니다. FactoryBean을 사용하면 다음과 같은 이점들이 있습니다: 1. 복잡한 생성 과정 캡슐화: 객체 생성 과정이 복잡할 때, 이 로직을 FactoryBean 내부에 숨겨서 사용자가 간단히 빈을 요청..
Java Dynamic Proxy와 Spring FactoryBean 프록시와 프록시 패턴, 데코레이터 패턴 트랜잭션 경계 설정 코드를 비즈니스 로직에서 분리하는 방법에 초점을 맞추고 있습니다. 프록시 패턴 프록시 패턴은 클라이언트와 타깃(실제 객체) 사이에 프록시(대리자) 객체를 배치하여, 타깃의 메소드 호출을 제어하거나 부가적인 작업을 수행하는 패턴입니다. 이 패턴의 주된 목적은 두 가지입니다: 1. 접근 제어: 클라이언트가 타깃 객체에 직접 접근하는 것을 제한하거나 특정 조건에서만 접근을 허용합니다. 2. 부가 기능 추가: 타깃 객체의 메소드 호출 전후에 부가적인 작업을 수행하여, 타깃의 기능을 확장합니다. 프록시 패턴의 핵심은 타깃과 동일한 인터페이스를 프록시가 구현함으로써 클라이언트가 타깃인 줄 알고 프록시를 통해 작업을 수행하게 하는 것입니다. 예를 들어, Us..