전체 글153 JDK Dynamic Proxy, CGLIB 그리고 AOP 프록시 패턴 프록시 패턴이라는 디자인 패턴이 있다. 프록시 패턴은 실제 기능을 수행하는 객체 대신 가상의 대리자(프록시)를 사용하여 로직의 흐름을 제어하는 디자인 패턴이다. 프록시 패턴의 활용 원래 하려던 기능을 수행하며 그 외의 부가적인 작업 (로깅, 캐싱, 인증, 트랜잭션 등)을 별도로 수행할 수 있다. 비용이 많이 드는 연산 (DB 쿼리)를 실제로 필요한 시점까지 미룰 수 있다. 프록시 객체 만드는 법 기존의 객체를 프록시를 만드는 법은 두가지가 있다. 1. JDK Dynamic Proxy 2. CGLIB JDK Dynamic Proxy JDK Dynamic Proxy 는 Java의 리플렉션 패키지에 존재하는 Proxy라는 클래스를 통해 생성된 프록시 객체를 의미 한다. 타겟클래스를 리플렉션의 Pr.. Spring Boot/AOP 2023. 5. 2. [디자인패턴] Spring 에서 사용되는 프록시, 데코레이터 패턴 프록시(Proxy) 패턴 프록시 패턴은 실제 기능을 수행하는 객체 대신에 가상의 객체를 사용해 로직의 흐름을 제어(접근 제어가 목적)하는 디자인 패턴 입니다. 클라이언트는 서버에 필요한 것을 요청하고, 서버는 클라이언트의 요청을 처리하는 일을 합니다. 프록시는 클라이언트가 요청한 결과를 서버에 직접 요청하는것이 아니라 어떤 대리자를 통해 간접적으로 서버에 요청하는것을 말합니다. 프록시의 주요 기능 접근제어 권한에 따른 접근 차단 캐싱 지연로딩 부가 기능추가 원래 서버가 제공하는 기능에 더해서 부가 기능을 수행한다. 예) 요청 값이나, 응답 값을 중간에 변경한다. 예) 실행 시간을 측정해서 추가 로그를 남긴다. 프록시(Proxy) 패턴 예시 SNS 서비스가 있습니다. 이 SNS의 글의 목록을 조회하여 화면.. Spring Boot 2023. 4. 30. [Spring] Spring에서 사용되는 템플릿 콜백 패턴 콜백 정의 프로그래밍에서 콜백 또는 콜애프터 함수는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다. 템플릿 콜백 패턴 템플릿 콜백 패턴은 전략 패턴의 변형된 형태입니다. 전략패턴은 코드가 변화되는 부분을 매번 클래스로 만들고 외부에서 구체 클래스를 주입해 주어야 한다. 반면 템플릿 콜백 패턴은 변화되는 부분을 독립된 클래스를 만드는 것이 아니라 익명 내부 클래스를 생성하여 이를 활용하므로 주입이 필요하지 않다. 그렇기 때문에 템플릿은 정해져있는 틀, 콜백은 인수로 넘겨주는 실행 가능한 코드. 이 두개를 합쳐 템플릿 콜백 패턴이라 한다. 템플릿 콜백 패턴은 GOF 패턴은 아니고 스프링 내부에.. Spring Boot/디자인패턴 2023. 4. 30. [Spring] Spring에서 사용되는 템플릿 메소드 패턴 템플릿 메소드 패턴 GOF의 디자인 패턴에서는 템플릿 메서드 패턴을 다음과 같이 정의하고 있다. 템플릿 메서드 디자인 패턴의 목적은 다음과 같습니다. 작업에서 알고리즘의 골격을 정하고 일부 단계를 하위 클래스로 연기합니다. 템플릿 메서드를 사용하면 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재 정의할 수 있습니다. 쉽게 말해 부모 클래스에 기본적인 알고리즘의 흐름을 구현하고 중간에 필요한 처리를 자식 클래스에게 위임하는 패턴을 템플릿 메서드 패턴이라고 합니다. 템플릿 메소드 패턴 예제 붕어빵을 만드는 과정이 다음과 같다고 가정해보겠습니다. 슈크림 붕어빵 팥 붕어빵 1. 반죽을 넣는다. 2. 슈크림을 넣는다. 3. 반죽을 넣는다. 4. 3분 기다린다. 1. 반죽을 넣는다. 2. 팥을.. Spring Boot/디자인패턴 2023. 4. 29. [ThreadLocal] 쓰레드 로컬 사용해보기 동시성이란? 동시성 문제는 여러 쓰레드가 같은 인스턴스의 필드에 접근해야 하기 때문에 트래픽이 적은 상황에서는 확률상 잘 나타나지 않고 트래픽이 점점 만나질 수록 자주 발생합니다. 특히 스프링 빈처럼 싱글톤 객체의 필드를 변경하며 사용할 때 이러한 동시성 문제를 조심해야 합니다. 이런 동시성 문제는 지역 변수에서는 발생하지 않습니다. 지역 변수는 쓰레드마다 각각 다른 메모리 영역이 할당되기 때문입니다. 동시성 문제가 발생하는 곳은 같은 인스턴스의 필드(주로 싱글톤에서 자주 발생), 또는 static 같은 공용 필드에 접근할 때 발생합니다. 동시성 문제는 값을 읽기만 하면 발생하지 않고 어디선가 값을 변경하기 때문에 발생합니다. 이러한 문제를 해결하기 위한 것이 스레드 로컬입니다. ThreadLocal 쓰.. Java 2023. 4. 22. 핀포인트 설치하기 연관글 1. 네이버 핀포인트란? 2. 핀포인트 설치하기 글 작성을 위한 환경 구성은 아래와 같이 하겠습니다. - EC2에 Hbase, Collector, Web을 모두 설치 - 로컬 PC에 Agent를 설치해서 Spring boot 프로젝트 구성해서 실행 EC2 - t2.medium - java 11, java 8 - ubuntu 20.04 위와 같이 구성한 이유는 프리티어를 사용해서 구성하려 했으나 Hbase설치 -> 실행, Collector를 설치하고 실행, Web을 설치하고 기동 하면 ec2에 접속이 안 되는 문제가 있었습니다. 원인을 찾지는 못했으나 CPU 지표가 90%가 넘게 치솟고 아마 램도 부족해서 ec2에 접속이 안되는 현상이 일어나지 않나 싶습니다. 그래서 CPU도 2개에 램도 4GB인 .. Spring Boot/모니터링 2023. 4. 1. 네이버 핀포인트란? 연관글 1. 네이버 핀포인트란? 2. 핀포인트 설치하기 네이버 핀포인트를 설치 및 도입하기 전에 APM과 핀포인트에 대해서 알아보겠습니다. APM 목차 APM이란? 애플리케이션 성능이란? APM을 사용하는 다양한 목적 Pinpoint 목차 Pinpoint란? Pinpoint의 특징 Pinpoint의 기능 Pinpoint 아키텍쳐 1.APM이란? Application Performance Management Application Performance Monitoring 애플리케이션의 성능 관리 성능-기계따위가지닌성질이나기능 고객에게 정상적으로 서비스 중인지 관리 메트릭, 이벤트, 로그 및 트랜잭션(MELT)을 모니터링 위와 같이 정의할 수 있는데 단어 그 자체로 우리가 고객에게 제공하는 애플리케이션 성능을.. Spring Boot/모니터링 2023. 4. 1. 도커기본 명령어 및 도커 허브에 이미지 올리기 $ docker run [OPTIONS] IMAGE[:TAG | @DIGEST] [COMMAND] [ARG...] 옵션 설명 -d detached mode 흔히 말하는 백그라운드 모드 -p 호스트와 컨테이너의 포트를 연결(포워딩) -v 호스트와 컨테이너의 디렉토리를 연결(마운트) -e 컨테이너 내에서 사용할 환경변수 설정 --name 컨테이너 이름 설정 --rm 프로세스 종료시 컨테이너 자동 제거 -it -i과 -t를 동시에 사용한것으로 터미널 입력을 위한 옵션 --link 컨테이너 연결 [컨테이너 별칭] 정상적으로는 docker create 와 start를 사용하지만 run 명령어는 현재 그 이미지가 없으면 다운 까지 받아 동시에 실행까지 시켜줍니다. run 명령어 뒤에 [OPTIONS] 에 위와 같은.. docker 2023. 2. 26. Kafka 설치, pub/sub 및 Kafka connect Apache kafka Apache Software Foundation의 Scalar 언어로 된 오픈 소스 메시지 브로커 프로젝트 - Open Source Message Broker Project 링크드인(Linked-in)에서 개발, 2011년 오픈 소스화 - 2014 년 11월 링크드인에서 Kafka를 개발하던 엔지니어들이 Kafka개발에 집중하기 위해 Confluent라는 회사 창립 실시간 데이터 피드를 관리하기 위해 통일된 높은 처리량, 높은 처리량, 낮은 지연 시간을 지닌 플랫폼 제공 Apple, Netflix, Yelp, Kakao, New York Times, Cisco, Paypal, Hyperledger Fabric, Uber, Salesfoce.com 등이 사용 End-to-End 연결.. Kafka 2023. 2. 20. Transaction 사용법 트랜잭션 전파 @Transcational 어노테이션의 기본 옵션은 REQUIRED이다. public class A { @Transcational public void A() { log.info("A 외부 트랜잭션 시작"); B(); } @Transcational public void B() { log.info("B 내부 트랜잭션 시작"); } } 위와 같은 상황에서 A 메서드에서의 트랜잭션을 외부 트랜잭션 B를 내부 트랜잭션이라 말할 수 있다. 스프링의 경우 외부 트랜잭션과 내부 트랜잭션을 묶어서 하나의 트랜잭션을 만들어준다. 내부 트랜잭션이 외부 트랜잭션에 참여하는것이다. 이것이 기본 옵션은 REQUIRED일때의 트랜잭션 방식이다. 물리 트랜잭션의 실제 DB에서의 트랜잭션이고 논리 트랜잭션은 트랜잭션 .. Spring Boot/Transaction 2023. 1. 24. Logback 커스텀하게 사용하기 이전글들에서 로그백설정으로 로그를 나오게 해봤습니다. 하지만 개발을 하다보면 커스텀하게 1에서는 ~~ 이렇게 로그를 찍고 싶고 2에서는 !!! 이렇게 로그를 찍고 싶은 상황이 있을 것입니다. 그 상황에 맞춰서 로그백을 설정하는 법을 알아보겠습니다. logback-spring-prod.xml ${LOG_DIR}/request1.log ${LOG_DIR}/archive/request1.%d{yyyy-MM-dd}_%i.log 1KB 30 [REQUEST1] ${LOG_PATTERN} true ${LOG_DIR}/request2.log ${LOG_DIR}/archive/request2.%d{yyyy-MM-dd}_%i.log 10KB 30 [REQUEST1] ${LOG_PATTERN} true ${LOG_DIR}.. Spring Boot/Logback 2023. 1. 15. Logback - fileAppender 로그를 남기는게 중요하다는것은 저번글에서 알아보았습니다. 그럼 이제 로컬 환경말고 운영 및 개발 환경에서의 로그를 남기는 법에 대해서 알아보겠습니다. 로컬에서는 인텔리제이로 스프링부트 서버를 시작하게되면 인텔리제이 콘솔에 로그를 확인할수있지만 실제 운영서버를 띄운다면 콘솔을 확인 할 수 없습니다. 그렇기 때문에 파일로 저장해놓은뒤 파일에 적힌 로그들을 확인해야합니다. 이제 파일로 로그를 저장하는 법에 대해서 알아보겠습니다. 프로젝트 구성 logback-variables.properties 로그백 설정에서 사용할 변수들을 정의 해놓은 파일입니다. LOG_DIR=logback/logs LOG_PATTERN=[%-5level] %d{yyyy-MM=dd HH:mm:ss} [%thread] [%logger{40}.. Spring Boot/Logback 2023. 1. 15. 이전 1 2 3 4 5 6 7 ··· 13 다음