본문 바로가기

전체 글

(41)
[디자인패턴] 데코레이터 패턴 이번 글에서는 데코레이터 패턴에 대해서 알아보려고 합니다. 프록시와 데코레이터 패턴 사용예시 데코레이터 패턴이 적용되지 않은 예제코드 데코레이터 패턴이 적용된 예제코드 프록시와 데코레이터 패턴 프록시를 통하여 할 수 있는 기능은 크게 접근 제어와 부가기능 추가라는 2가지 기능으로 나뉘게 됩니다. 프록시 패턴을 포스팅할때, 프록시 패턴은 프록시를 이용한 접근 제어에 의도가 있었다면, 이번에 정리할 데코레이터 패턴은 프록시를 이용한 부가기능 추가에 그 의도가 있습니다. GOF 디자인패턴에서는 프록시 패턴을 아래와 같이 정의하고 있습니다. 데코레이터 패턴(Decorator pattern)이란 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는..
[디자인패턴] 프록시 패턴 이번 글에서는 프록시 패턴에 대해서 알아보려고 합니다. 프록시와 프록시 패턴 사용예시 프록시 패턴이 적용되지 않은 예제코드 프록시 패턴이 적용된 예제코드 프록시와 프록시 패턴 프록시 패턴을 정리하기에 앞서 프록시와 프록시 패턴은 서로 다르다는 것을 인지하셔야합니다. 프록시 패턴은 프록시를 활용하여 만들어진 패턴이기 때문입니다. 먼저, 프록시는 우리말로 대변인이라는 의미를 가지고 있습니다. 대변인은 우리가 해야 할 일을 대신 수행거나 처리해줄 수 있는 역할입니다. 아래 예시를 함께 보도록 하겠습니다. 아내에게 아기를 씻기기 위해 물좀 받아달라고 하였는데, 아내가 이미 받아 두었다고하여 아기를 바로 씻길수 있음(캐싱, 접근제어) 음식매장 관리자인 내가 직원에게 설거지만 하고 퇴근하라고 말을하였는데, 직원이 ..
[디자인패턴] 전략 패턴 이번 글에서는 전략 패턴에 대해서 알아보려고 합니다. 전략 패턴 개념 사용예시 전략 패턴 예제 코드 전략 패턴 개념 GOF 디자인패턴에서는 전략 패턴을 아래와 같이 정의하고 있습니다. "알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만들자. 전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다." 전략 패턴은 템플릿 메서드 패턴과 비슷하지만, 상속에의해 발생되는 단점들을 깔끔하게 해결 할 수 있는 패턴입니다. 즉, 템플릿 메서드 패턴은 부모클래스에 변하지 않는 템플릿을 두고, 변하는 부분을 자식클래스에서 상속을 받아 처리하였다면, 전략 패턴은 변하지 않는 부분을 Context라는 곳에 두고, 변하는 부분을 Strategy라는 인터페이스를 만들고 해당 인터..
[디자인패턴] 템플릿 메서드 패턴 이번 글에서는 템플릿 메서드 패턴에 대해서 알아보려고 합니다. 템플릿 메서드 패턴 개념 사용예시 템플릿 메서드 패턴 예제 코드 템플릿 메서드 패턴 개념 GOF 디자인패턴에서는 템플릿 메서드 패턴을 아래와 같이 정의하고 있습니다. "작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기합니다. 템플릿 메서드를 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재정의할 수 있습니다." 즉, 부모클래스에 전체적인 로직중 변경되지않는 부분과 변경되는 부분을 나누어 템플릿화 시키고 변경되는 부분을 서브클래스에 정의하는 방식입니다. 사용예시 나는 어느 회사에 개발자입니다. 회사의 여러 서비스 중 예약하는 서비스가 오래 걸린다는 말을 듣고, 개발팀장님이 해당 서비스가 실행되..
[Java] ThreadLocal 이해 및 활용 이번 글에서는 ThreadLocal이 왜 필요하고 어떤경우에 사용이 되는지 알아보고 정리를 해보려고 합니다. 그럼 먼저, ThreadLocal이 왜 필요할까요?? 결론부터 이야기하자면 동시성 문제가 발생할 수 있기 때문입니다. 동시성 문제 예제 예제는 간단한 테스트코드를 활용하여 진행해보도록 하겠습니다. public class FieldServiceTest { private FieldService fieldService = new FieldService(); @Test void field() { log.info("main start"); Runnable userA = () -> { fieldService.logic("userA"); }; Runnable userB = () -> { fieldService..
[Spring] Lombok 사용법 이번 글에서는 실무에서 편리하게 사용할 수 있는 Lombok라이브러리에 대해서 알아보려고 합니다. @Getter / @Setter @AllArgsConstructor @NoArgsConstructor @RequiredArgsConstructor @Data 먼저, Lombok은 많은 양의 반복되는 소스코드를 annoation기반으로 개발자가 편리하게 사용할 수 있도록 도움을 주는 라이브러리입니다. 위에 선언한 어노테이션 뿐만 아니라 더 다양한 어노테이션이 존재하지만, 대표적으로 많이 사용하는 어노테이션을 공부해보려고 합니다. @Getter / @Setter @Getter / @Setter는 Lomgok라이브러리를 사용해보지 않아도, 개발자라면 대충 어떤 기능인지 아실거라고 생각합니다. 보통 VO같은 Cla..
[Elasticsearch] Logstash 설치 및 실행 이번 글에서는 3가지를 정리해 보려고 합니다. Logstash 파이프라인 구조 Logstash 설치 및 실행가능 옵션 Logstash 실행(input - tcp방식, output - elastic방식) Logstash 파이프라인 구조 Logstash는 데이터를 수집을하고 그 데이터를 필요한 모양으로 가공을 하여 Elasticsearch뿐만 아니라 필요한 곳으로 데이터를 보낼 수 있습니다. 그래서 Logstash는 어느정도 규모가 있는 아키텍처 시스템에서 잘 활용이 되기도 합니다. 예를들어 수집한 데이터를 AWS S3에 올리거나 Elasticsearch에 보내거나 혹은 파일로 보내거나 이런식으로 수집한 데이터를 다른곳에 보낼때, Logstash가 유용하게 사용 될 수 있습니다. Logstash는 크게 3단..
[Elasticsearch] 노리(nori) 한글 형태소 분석기 이번 글에서는 2가지를 정리해 보려고 합니다. 노리(nori) 설치 노리(nori) 설정 노리(nori)가 필요한 이유를 간단히 설명드리면, Elasticsearch에서는 한글을 단어단위로 나눌때 복합어, 합성어 등 정확하게 단어를 나누기가 쉽지 않습니다. 그래서 한글을 형태소 분석을 하기위해서는 Elastic사에서 직접 개발한 한글 형태소 분석기인 노리(nori)가 필요합니다. 노리(Nori) 설치 노리(Nori)를 사용하기 위해서는 "bin/elasticsearch-plugin install analysis-nori" 명령어를 통해 설치를 진행해야 합니다. 아래와 같이 진행이 되었다면 설치가 완료된 것입니다. 설치가 완료되면 Elastic서버를 내렷다가 다시 올려줍니다. 이제 노리(Nori)를 사용 ..