2024/09 8

[Java] Design-Pattern Observer

Observer는 스타크래프트 게임을 해본 사람이라면 익숙한 단어일 것이다. Observer는 사용자에게 시야를 제공할 뿐만 아니라 보이지 않는 유닛이나 지뢰 등을 비추어 보여주는 능력을 가지고 있다. 사전적 의미는 관찰자, 관측자 이며 단어의 의미에 부합하는 역할을 수행하는 유닛이다.디자인 패턴 중 하나인 Observer Pattern의 Observer도 동일한 의미로 생각하면 된다. 한 개 이상의 Observer 객체가 특정 객체의 메서드 호출이나 상태 변경 등을 관찰하고 있다가 해당 객체에 변경 사항이 발생하면 변경을 감지하여 각 Observer 객체의 내부 로직을 수행하게 된다. Observer 패턴은 스프링과 연계하여 사용하면 순수한 자바 기반의 코드보다 더욱 결합도, 의존도를 낮출 수 있을 것..

[Spring] Reflect + Aop 를 활용한 로그 처리

Spring에서는 Reflection을 개발자가 쉽게 사용할 수 있도록 개발용, 테스트용 ReflectionUtils을 제공한다.본 글에서는 ReflectionUtils과 Spring Aop의 @Around Advice를 활용하여 요청과 응답 데이터에 대한 로그를 남기는 작업을 진행한다. 개발환경id 'java'id 'org.springframework.boot' version '3.3.3'id 'io.spring.dependency-management' version '1.1.6'...java { toolchain { languageVersion = JavaLanguageVersion.of(17) }}...implementation 'org.springframework.boot:..

development/spring 2024.09.23

[Java] Design-Pattern Singleton

Java, Spring Framework (Spring Boot) 기반의 개발을 진행할 때 유용하게 사용할 수 있는 디자인 패턴에 대해 정리할 것이다.첫 시작은 대망의 싱글톤 패턴이다. 스프링은 Ioc 컨테이너에서 관리하는 객체를 싱글톤으로 관리한다. 뿐만 아니라, 환경 설정을 할 때 사용하는 @Configuration 어노테이션이 붙은 클래스 역시 Spring CGlib Proxy 방식을 적용하여 싱글톤으로 관리한다. 도대체 싱글톤이 무엇이고, 왜 스프링은 시키지도 않은 싱글톤 방식을 Default로 적용하는걸까? 우선 싱글톤이 무엇인지 정리한 후 왜, 그리고 어떻게 사용하는지 순차적으로 살펴보자. 싱글톤이란 무엇인가?  특정 클래스에 대해 객체(인스턴스)를 단 한 개만 생성하여 관리하는 것을 의미한다..

[Log] Logback 기반의 Slf4j 로그 추상화 설정

Reflection과 Spring Aop를 활용한 공통 로그 처리를 정리하려다 보니 새로 만든 프로젝트에 로그 추상화 설정이 되어 있지 않은 것을 알게 되었다. 선행 작업으로 Logback 기반의 로그 처리 기능을 추가할 것이다.설정에 앞서 기본 개념을 조금 정리하자면,JPA가 자바 표준 ORM Interface이고, Hibernate는 구현체이듯 로그 처리에 있어 Slf4j는 표준 인터페이스 명세이고, Logback은 다양한 구현체 중 하나라고 이해하면 된다.스프링부트에서 Logback 설정을 하려고 찾아보니 부트 Starter Dependency에 이미 logback 및 Slf4j 와 관련된 라이브러리가 추가되어 있었다.Maven Repository에서 Logback Classic ModuleLogb..

development/spring 2024.09.16

[Java] Stream - GroupingBy, FlatMap

Java 8 부터 도입된 Stream의 고급 활용인 GroupingBy와 FlatMap에 대해 정리한다.그에 앞서, Stream은 중간연산과 최종연산으로 구성되는데, Stream의 코드 흐름이 어떻게 진행되는지 간단히 살펴보겠다.public class StreamPractice { public static void main(String[] args) { List myList = new ArrayList(); myList.add("hello"); myList.add("world"); myList.add("!!!"); myList.stream() .filter(x -> { Syst..

development/java 2024.09.15