일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Gradle
- devops
- redis
- MySQL
- AWS
- springboot
- Git
- linux
- db
- php
- ReactJS
- Web Server
- ubuntu
- Design Patterns
- Oracle
- jenkins
- Spring Boot
- jsp
- 맛집
- laravel
- java
- IntelliJ
- JVM
- Spring Batch
- it
- tool
- Spring
- elasticsearch
- javascript
- 요리
- Today
- Total
목록java (242)
아무거나
일반적으로 log4j를 사용하는 코드를 보자. log.debug("error message example") 위와 같은 방식으로 사용하는 경우가 있으며 아래 코드를 보자 if (log.isDebugEnabled()) { log.debug("error message example"); } 이렇게 되면 두번이나 체크하게 될텐데 효과적일까? 라는 의문을 갖게 된다. 예를 들어 log.debug("Entry Number: " + i + ", Value: " + String.valueOf(entry[i])) 이런식으로 디버깅을 사용한다고 하자. 이러면 메세지 파라미터를 생성할 때 String 연산들이 일어나게 되며 해당 작업은 메세지 로깅여부에 상관없이 항상 발생하게 되어 파라미터 생성 비용을 발생시킬 수 있다...
Sentry Java 연동 Sentry란 오류 모니터링을 제공하는 오픈소스 플랫폼이다. 클라우드(=sentry.io)는 무료 및 비용별 과금을 제공하지만 자체 구축하면 무료로 사용할 수 있다. 다양한 언어를 제공하므로 유용하게 사용할 수 있다. sentry.io 에 접속하여 회원가입을 한다. 회원가입을하면 DSN 번호를 확인하자. Settings -> Client Keys (DSN) -> DSN 번호 확인 이제 java 경로인 resources 폴더에 sentry.properties 파일을 생성하고 하기 내용을 입력하자. dsn={myDSN} servername={serverName} stacktrace.app.packages={Package} 그 다음 resources 폴더경로에 logback-spri..
커맨드 패턴(Command Pattern) 요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 매서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴이다. Command 인터페이슬르 구현하면서 사용할 수 있다. 커맨드 패턴 예시 - 1 Command 인터페이스를 구현한다. [Command.java] package com.bkjeon.command; public interface Command { void execute(); } 메인 클래스를 구현한다. [Main.java] package com.bkjeon.command; import java.util.LinkedList; import java.util.List; public class Ma..
프록시 패턴(Proxy Pattern) 프록시 패턴은 쉽게 말해서 대리인이라고 생각하면되고, 작업을 나누어서 구현할 수 있다. 일반적으로 프록시는 다른 무언가와 이어지는 인터페이스의 역할을 하는 클래스이다. 프록시는 어떠한 것과도 인터페이스의 역할을 수행할 수 있다. 즉, 프록시는 결과값을 조작하거나 변경하면 안된다. Client 요청을 proxy가 처리하고, proxy가 처리하지 못한곳은 실제 업무를 처리하는곳에서(=RealSubject) 처리하면 된다. 프록시 패턴 예시 - 1 먼저 Subject 인터페이스를 생성한다. [Subject.java] package com.bkjeon.proxy; public interface Subject { // 리소스가 적게 드는 일 void action1(); //..
플라이웨이트 패턴(Flyweight Pattern) 플라이웨이트 패턴을 통하여 메모리 공간을 절약할 수 있다. Client가 Flyweight를 직접관리하지 않고 Factory나 다른 매니저들한테 Flyweight를 대신 관리하도록 하는것이 해당 패턴의 중요한 부분이다. 플라이웨이트 패턴 예시 - 1 먼저 Client가 다루는 Flyweight 클래스를 생성하자. [Flyweight.java] package com.bkjeon.flyweight; public class Flyweight { public Flyweight(String data) { this.data = data; } private String data; public String getData() { return data; } } Flywe..
메멘토 패턴(Memento Pattern) 객체의 상태를 Memento 라고 불리는 객체에 저장했다가, 다시 꺼내서 객체의 상태를 이전의 상태로 되돌리는 패턴 Originator: 상태값을 가지고 있는 객체 Memento: Originator의 상태를 저장하고 있는 객체 CareTaker: Memento를 관리해주는 관리자 역할을 함 메멘토 패턴 예시 - 1 먼저 abc라는 패키지를 생성하고 그 패키지 안에 Originator 클래스를 생성 [Originator.java] package com.bkjeon.memento.abc; public class Originator { String state; public Memento createMemento() { return new Memento(state);..
상태 패턴(State Pattern) 일련의 규칙에 따라 객체의 상태(State)를 변화시켜, 객체가 할 수 있는 행위를 바꾸는 패턴이다. 어떤 Context라는 객체가 State을 가지고 있고, 그리고 Concrete인 StateA와 StateB가 있고 그거에 대한 어떠한 액션을 취하게 된다. 그 액션을 취한 것이 상태에 영향을 주게 된다. 상태 패턴 예시 - 1 불을 키고 끄는 예제를 만들자. 불을 켜고 끌 수 있는 Light 클래스를 생성 [Light.java] package com.bkjeon.state; public class Light { protected LightState lightState; private LightState offState = new LightState() { @Over..
중재자 패턴(Mediator Pattern) 모든 클래스간의 복잡한 로직(상호작용)을 캡슐화하여 하나의 클래스에 위임하여 처리하는 패턴(M:N 관계를 1:1로 변경) 문자 1:N 으로 되므로 커뮤니케이션이 불편하다. 예를 들어 약속을 잡을때도 A, B, C, D 의 사람이 있다고하면 B는 약속이되고 C는 약속이 안되고 D도 약속이 안되는 등 제각각으로 연락해야하며 한명이 전체적인 의견을 한명씩 연락하여 물어봐야하므로 복잡하다. 그룹채팅 중간에 매개체가 있으로 커뮤니케이션에 용이하다. 아래는 해당 패턴의 기본 설계이다. 위의 굵게 표시된 부분은 우리가 직접 구현해야하고 그렇지 않은 부분은 추상클래스로 구현 Mediator 에서는 협력해서 일하는 사람들 즉, 그 객체들을 담는 그릇이 있다. (=colleag..
옵저버 패턴(Observer Pattern) 옵저버 패턴을 통하여 이벤트 발생 후 객체 외부에서 처리 할 수 있다. Target 객체가 Observer 인터페이스를 가지고 있어서 notify()에서 update()를 호출해서 해당 Observer나 Target 객체에 상태변경(이벤트처리된것을 확인하는 패턴 옵저버 패턴 예시 - 1 가장 기본적인 옵저버 패턴을 구현하자 Button 클래스를 생성한다. [Button.java] package com.bkjeon.observer; public class Button { // notify public void onClick() { if (onClickListener != null) { onClickListener.onClick(this); } } // Obser..
퍼사드 패턴(Facade Pattern) 퍼사드 패턴이란 복잡한 과정을 간단하게 제공 다양한 패키지에서 부터 여러가지 클래스들을 제공받고 facade는 단순한 인터페이스를 제공함으로써 client들이 간단하게 어떤 과정(ex:함수, 프로젝트 등)을 사용할 수 있도록하는 패턴 퍼사드 패턴 예시 - 1 먼저 System이란 Package를 만들고 거기에 메인시스템이될 Facade 클래스를 생성 [Facade.java] 서브시스템인 HelpSystem01를 생성하자. [HelpSystem01.java] package com.bkjeon.facade.system; class HelpSystem01 { public HelpSystem01() { System.out.println("Call Constructor: ..