본문 바로가기

분류 전체보기77

[java] Proxy Pattern 목적 프록시는 다른 객체를 위한 대체물을 제공할 수 있게 하는 구조적인 디자인 패턴이다. 프록시 컨트롤은 오리지날 객체에 접근하여, 요청이 그 객체를 통과하기 전/후에 어떤 작업을 할 수 있게 해준다. 문제 시스템 리소스(ex. DB)를 소비하는 수많은 객체들이 있고, 가끔 그들이 필요할 때가 있다. 방법1. Lazy Initialization 그 객체가 정말로 필요할 때만 객체를 생성 모든 클라이언트는 지연된 초기화 코드를 실행 하지만 이는 많은 양의 복제 코드를 만들게 된다. 방법2. 객체 클래스에 직접 코드를 삽입 하지만 항상 가능하진 않음 예컨대 closed 3rd-party library의 일부분인 클래스는 어떻게 할 수 없다. 해결 오리지널 서비스 객체와 동일한 인터페이스로 Proxy obje.. 2020. 3. 23.
[gradle] buildscript block의 용도 gradle buildscript 소스코드를 빌드하고 실행하는데 필요한 글로벌 레벨의 depencies & repositories 설정 build.gradle 파일 그 자체를 위한 것. Package Manager / Docker file / spirng-boot-gradle-plugin과 같이 빌드에 필요한 의존성 추가 따라서 소스코드 컴파일과 같은 빌드 작업을 시작하기 전에, 빌드 시스템 준비 단계에서 제일 먼저 실행되는 블록 결국 빌드 자체를 위한 의존성 & 레포를 설정하는 곳 출처 https://stackoverflow.com/questions/17773817/purpose-of-buildscript-block-in-gradle 2020. 3. 23.
[spring] 핵심3_Portable Service Abstraction Portable Service Abstraction (PSA) 추상화된 계층을 사용하여 편리하게 구현할 수 있다. (Service Abstraction) 코드를 수정하지 않고 전혀 다른 기술 스택을 사용할 수 있다. (Portable) Service Abstraction Spring으로 Servlet Applicaiton을 만들고 있지만 서블릿 코드를 전혀 쓰지 않음 서블릿 프로그래밍? HttpServlet 상속 클래스에서 Http Request 처리 -> web.xml 맵핑 Spring에선? Mapping Annotation만 사용하면 내부는 서블릿 기반 작동 Portable 코드를 건들지 않고 다른 기술로 바꿀 수 있다. ex. 현재 Tomcact으로 실행중 -> Webflux로 손쉽게 교체가능 we.. 2020. 3. 22.
[spring] 핵심2_Aspect Oriented Programming Spring Triangle Inversion Of Control (IOC) Aspect Oriented Programming (AOP) Portable Service Abstraction (PSA) 흩어진 AAAA와 BBBB -> 모아놓은 AAAA와 BBBB 다양한 메소드에 공통 코드가 흩어져 있을 때! 일일이 수정하긴 어렵다! 공통코드를 별도 클래스의 별도 메소드로 분리 EX) 처리시간을 재는 메소드 StopWatch 인스턴스 생성 stopWatch.start( ); 코드 stopWatch.stop( ); System.out.println(stopWatch.prettyPrint( )); AOP 구현1 ~ 컴파일 단계 A.java를 A.class로 컴파일하는 단계에서 원하는 코드를 끼워넣는다. 소스에는.. 2020. 3. 21.
[spring] 핵심1_Inversion Of Control / Bean / Dependency Injection Inversion Of Control (IOC) 의존성 관리를 내 클래스 밖에서 누군가 알아서 해준다 -> 제어권의 역전 클래스 안에서 필요한 인스턴스를 생성하지 않는다 -> 주입받음 Dependency Injection -> @Autowired / Constructor / Setter 따라서, DI는 IOC를 구현하는 방법이라 할 수 있다. 이 때, 의존성의 타입(또는 인터페이스)만 맞으면 어떤 것이든 상관없다. 또한, 코드 테스트도 편해진다. IOC Container Bean 객체를 관리하는 컨테이너 기능 = Bean생성 + Bean사이의 의존성 엮기 + Bean제공 ApplicationContext 또는 BeanFactory (주로 전자를 의미) ApplicationContext는 BeanFacto.. 2020. 3. 21.