본문 바로가기

Spring&SpringBoot/<토비의 스프링 3.1 Vol1.1>, 이일민29

DI와 IoC의 차이는 무엇이고 스프링 컨테이너는 무엇을 지원하는가? IoC와 DI의 관계, 그리고 스프링 애플리케이션 컨텍스트 IoC는 소프트웨어에서 자주 발견되는 일반적인 개념이다. 제어권을 이전해서 기존의 제어관계가 역전되는 것을 IoC라고 부른다. IoC는 프레임워크, 컨테이너에서 동작하는 서버 기술, 디자인 패턴 등 객체지향적인 설계에서 사용된다. 프레임워크는 애플리케이션 코드 작성 방법을 정하는 권한을 개발자에서 프레임워크로 넘긴다. 컨테이너는 컴포넌트의 실행 권한을 엔트리포인트에서 컨테이너로 넘긴다. 템플릿 메소드 패턴은 메소드의 실행 권한을 상위 객체에게 넘긴다. 코드의 관심사 분리 관점에서 객체의 생성 권한을 외부 객체에게 넘기는 것이 된다. 스프링 IoC 컨테이너는 특히 객체의 생성 권한의 이전을 통해 런타임 의존관계를 동적으로 만드는데 집중한다. 이를 .. 2023. 3. 2.
애플리케이션 컨텍스트 도입하기 : 의존성 해결과 싱글톤 관리 이번 장에서는 의존성 해결 책임을 애플리케이션 차원에서 관리하기 위해 스프링이 지원하는 애플리케이션 컨텍스트를 도입해본다. 사용 책임만 남은 객체는 외부에서 의존성을 주입받아야 하는데, 이를 의존성 해결이라고 한다. 의존성 해결을 위해서는 구현을 선택하고, 객체를 생성하고, 생성된 객체를 요청에 따라 주입하는 기능이 필요하다. 구현 선택 정보는 환경 설정 파일에서, 객체의 생성과 주입 및 관리는 애플리케이션 컨텍스트가 담당한다. 책임을 더 작게 쪼개서 유연한 설계를 얻는다. 애플리케이션 컨텍스트를 사용하면 일관된 방식으로 오브젝트를 생성하고 주입할 수 있다. 또 내부적으로 싱글톤을 지원하므로 제약 없이 객체 지향 설계를 적용할 수 있다. 예제는 의존성 해결의 책임의 이동에 따라 전개된다. 책임은 테스트 .. 2023. 3. 2.
생성 사용 관심사 분리와 의존성 관리 기법 관심사를 별도의 단위로 분리해야하는 이유는 관심사 분리로 변경의 파급효과를 제한하여 코드 수정을 최소화할 수 있기 때문이다. 이 예제에서는 메소드 추출로 코드 중복을 제거하고, 상속과 인터페이스를 이용해 생성 책임을 분리해보고 차이점을 비교해본다. 테스트 메소드를 작성해 코드가 수정될 때마다 기능이 잘 동작하는지 확인하는 리팩토링도 해본다. 마지막에는 의존성과 관련된 객체지향 개념인 OCP, 응집도와 결합도에 대해 이야기한다. 아래 코드의 add와 get은 UserDao의 메소드로, DB로부터 커넥션을 받아와 sql문을 준비하고 실행시켜 값을 사용한다. 사용한 리소스를 닫고 마무리한다. 보자마자 코드 스멜이 난다. 우선 add와 get에 유사한 코드가 중복된다. 그리고 하나의 메소드가 너무 많은 일을 하.. 2023. 3. 2.
[토비의 스프링 3.1] 1장 예제 실행을 위한 환경 구성 새로 산 m1 맥북에 처음부터 설치를 하려니 꽤 오래 걸렸다. 특히 workbench 실행 오류가 나서 업그레이드했더니 잘 되더라. 내가 사용하는 환경은 다음과 같다. Jdk 11 OS : macOS Monterey IDE : IntelliJ Ultimate DB : MySQL 8.0.27 DB GUI Tool : MySQL WorkBech Community 8.0.27 mysql connector java 8.0.32 JDBC를 사용하는 간단한 자바 애플리케이션을 위한 환경 세팅을 해보자. 간단하다. 데이터베이스 설치하고 기본 설정 해놓고, 자바 애플리케이션과 연결하면 된다. 데이터베이스 설치 및 설정 1. MySQL을 설치한다. 이때 맥 유저들 터미널로 install mysql 을 실행하면 디폴트로 .. 2023. 3. 2.
스프링을 공부한다는 것은 스프링이란 무엇인가? 스프링은 자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크다. 애플리케이션 개발을 빠르고 효율적으로 할 수 있도록 애플리케이션의 바탕이 되는 틀과 공통 프로그래밍 모델, 기술 API를 제공한다. 스프링을 사용한다는 것은 스프링 컨테이너, 공통 프로그래밍 모델, 다양한 기술 API를 활용해 애플리케이션을 개발한다는 뜻이다. 클래스는 스프링 컨테이너 위에서 오브젝트로 만들어져 동작하고, 코드는 스프링의 프로그래밍 모델인 IoC/DI, 서비스 추상화, AOP에 따라 작성하고, 엔터프라이즈 기술을 사용할 때 스프링이 제공하는 기술 API와 서비스를 사용하는 것이다. 스프링의 핵심 설계 철학은 단순함과 유연성이다. 스프링은 객체지향 언어의 장점을 개발자들이 누릴 수 있도록.. 2023. 3. 2.