본문 바로가기
반응형

IT 개인 공부95

커맨드 패턴(Command Pattern) 커맨드 패턴(Command Pattern)은 행위(Behavioral) 패턴 중 하나로써 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장하거나 로그에 남기는 패턴이다. 요청에 사용되는 각종 명령어들을 추상 클래스와 구체 클래스로 분리하여 단순화한다. 요청을 객체화시키기 때문에 상태가 남게 되며 이는 나중에 작업을 취소, 로그 등에 활용할 수 있다. 커맨드 패턴의 구조는 다음과 같다. Invoker : Client가 요청을 전달하는 매개체, 내부에서 적절한 Command에게 해당 요청을 처리하도록 위임 Receiver : 요청을 처리하기 위해 수행해야 하는 일을 가지는 객체 Command : 요청을 실행, 취소하는 기능을 가지는 인터페이스, Receiver에게 요청.. 2021. 8. 13.
[Spring] Bean & DI & IoC 컨테이너 스프링의 특징 중 하나는 바로 의존성 주입(Dependency Injection, DI)이다. ​계층이나 서비스들 간에 의존성이 존재할 경우 스프링 프레임워크가 서로를 알아서 연결해주기 때문에 개발자가 따로 연결할 필요가 없으며 높은 재사용성과 가독성이 있는 코드를 만들어낼 수 있는 장점이 있다. ​ 그렇다면 스프링 프레임워크에서 어떤 친구가 DI를 제공해줄까? 바로 IoC 컨테이너라는 친구가 이러한 기능을 제공해준다. 객체를 직접 생성하지 않고 스프링 프레임워크에 등록하면 IoC 컨테이너가 원하는 곳에 등록된 객체를 주입하여 객체 간의 의존성을 만들어준다. ​그럼 IoC 컨테이너는 무엇인지에 대해 먼저 알아보자. IoC(Inversion of Control)는 스프링의 특징으로 제어권이 개발자에게 있는.. 2021. 8. 13.
[Spring] 스프링(Spring) MVC 패턴 이전에 MVC 패턴에 대해서 공부하였다. MVC 패턴은 Model, View, Controller로 구성되어 역할들을 분리하여 개발이 용이하도록 하는 디자인 패턴이라고 설명하였었다. 스프링(Spring) 또한 웹 애플리케이션을 개발할 때 기본적으로 MVC 패턴을 바탕으로 개발한다. 어떻게 보면 Model, View, Controller로 비슷하게 볼 수 있지만 약간 다르기 때문에 한번 알아보도록 하자. ​ 스프링 MVC 패턴은 다음과 같은 구조를 가진다. MVC 패턴에서 사용자는 Controller, View와 소통하였다면 스프링 MVC 패턴에서 사용자는 DispatcherServlet라는 친구와만 소통한다. 이를 프론트 컨트롤러 패턴이라고 한다. ​ 스프링 MVC 패턴은 다음과 같이 동작한다. 사용자가.. 2021. 8. 12.
[Spring] 스프링(Spring)이란? 스프링을 이용한 웹 개발을 공부하기에 앞서 먼저 스프링에 대해서 공부 및 정리해보려고 한다. 스프링의 정의는 자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크이다. 따라서 스프링 프레임워크(Spring Framework)가 더 정확한 표현이다. 스프링의 주요 특징은 다음과 같다. 경량 컨테이너로서 자바 객체를 직접 관리, 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하여 스프링부터 필요한 객체를 얻어 올 수 있다. ​영속성과 관련된 다양한 서비스를 지원. IBATIS, Hibernate 등 이미 완성도가 놓은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다. ​확장성이 높음. 스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도.. 2021. 8. 12.
로드 밸런싱(Load Balancing) 보통 대부분의 인터넷 서비스는 클라이언트-서버 모델(Client-Server Model)을 사용한다. 클라이언트-서버 모델(Client-Server Model) : 서비스 요청자인 클라이언트와 서비스 자원의 제공자인 서버 간에 작업을 분리해 주는 분산 애플리케이션 구조이자 네트워크 아키텍처를 의미한다. 예를 들어 하나의 서버가 다수의 클라이언트를 관리하는 1:N 관계를 가진다고 하자. 서버가 맡은 클라이언트의 수가 굉장히 적다면 우리는 트래픽에 대해 아무런 걱정을 할 필요가 없을 것이다. 충분히 서버의 성능으로 모든 클라이언트의 요청을 처리해 줄 수 있기 때문이다. 그렇다면 클라이언트 수가 굉장히 많다면 어떻게 될까? 서버의 성능은 한계가 존재하기 때문에 결국 클라이언트의 모든 요청을 신속하게 처리해주기.. 2021. 7. 31.
프록시 패턴(Proxy Pattern) 프록시 패턴(Proxy Pattern)은 구조(Structural) 패턴 중 하나로써 접근이 어려운 객체와 여기에 연결하려는 객체 사이에서 인터페이스 역할을 수행하는 패턴이다. ​프록시는 대리인을 의미한다. 어떤 업무가 발생하였을 경우 그 업무가 사장이 직접 처리해도 되지 않을 정도의 업무라면 굳이 사장에게 보고하지 않고 대리인을 통해 처리할 것이다. 프록시 패턴 역시 이러한 원리이다. ​중요한 것은 프록시는 대리인의 역할로 요청을 처리해 줘야 한다. 즉, 사장과 고객을 연결해 주는 인터페이스 역할을 수행할 뿐 자신이 고객의 요청에 대해 관여해서는 안 된다. ​주로 네트워크 연결, 메모리의 대용량 객체로의 접근 등에 이용한다. 또한, 스프링을 공부하다보면 프록시 패턴을 굉장히 히 활용하는 것을 알 수 있.. 2021. 7. 31.
플라이웨이트 패턴(Flyweight Pattern) 플라이웨이트 패턴(Flyweight Pattern)은 구조(Structural) 패턴 중 하나로써 인스턴스가 필요할 때마다 매번 생성하는 것이 아니고 가능한 한 공유해서 사용함으로써 메모리를 절약하는 패턴이다. ​간단히 얘기하면 사용하려고 하는 인스턴스가 이전에 생성하여 존재한다면 인스턴스를 생성하지 말고 가져다 써서 메모리를 절약하겠다는 의미이다. ​플라이웨이트 패턴을 사용하면 다수의 유사 객체를 생성하거나 조작할 때 유용하게 사용할 수 있다. ​ String 객체를 생성하는 리터럴 방식의 String Constant Pool이 대표적인 플라이웨이트 패턴을 적용한 예시이다. 플라이웨이트 패턴의 구조는 다음과 같다. FlyweigtFactory : Flyweight 객체를 생성 및 공유해 주는 역할을 수.. 2021. 7. 31.
메멘토 패턴(Memento Pattern) 메멘토 패턴(Memento Pattern)은 행위(Behavioral) 패턴 중 하나로써 특정 시점에서의 객체 내부 상태를 객체화함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공하는 패턴이다. ​Ctrl + Z와 같은 되돌리기 기능을 생각하면 이해하기 쉽다. 어떤 동작을 수행하다가 이전 상태로 돌아가야 할 경우 Ctrl + Z를 눌려서 이전 상태로 복구하는 작업을 해주도록 구현하는 것이 메멘토 패턴이다. ​ 메멘토 패턴의 구조는 다음과 같다. Originator : 현재 상태를 표현하는 State를 가지고 있으며, Memento 객체를 통해 현재 상태를 변경 Memento : Originator의 상태를 나타내는 클래스, Memento를 이용하여 Originator의 상태를.. 2021. 7. 29.
상태 패턴(State Pattern) 상태 패턴(State Pattern)은 행위(Behavioral) 패턴 중 하나로써 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용하는 패턴이다. ​객체 상태를 클래스로 나타내어 캡슐화하고 어떤 동작을 수행할 때 객체의 상태를 참조하는 방식으로 처리한다. ​전략 패턴과 비슷한 패턴이지만 차이점이 존재한다. ​ 전략 패턴은 특정한 계열의 알고리즘들을 캡슐화하여 필요에 따라 외부에서 교체하는 패턴이었다면 상태 패턴은 내부에서 어떤 동작을 객체의 상태에 따라 수행하도록 구현하여 적합한 동작을 수행하도록 하는 패턴이다. ​즉, 전략 패턴은 외부(클라이언트)에서의 개입이 요구되지만 상태 패턴은 외부에서의 개입이 요구되지 않는다. ​전략 패턴은 상속을 대체하려는 목적, 상태 패턴은 조건문들을 대체하려.. 2021. 7. 29.
반응형