본문 바로가기

수업 & 공부

(65)
깃 브랜치 전략 (Git-flow , GitHub-flow) 깃 브랜치 전략 여러 개발자가 하나의 저장소를 사용하는 환경에서 효과적으로 활용하기 위해 나온 work-flow 브랜치의 생성, 삭제 병합 등 git 구조를 이용해서 혼란을 줄이며 관리하는 역할을 한다 > 브랜치 생성에 규칙을 만들어 협업을 유연하게 하는 방법론 브랜치 전략이 없으면? 어떤 브랜치가 최신 브랜치인지? 어디에 push를 해야할지? 배포 버전은 어떤걸 써야 하나? 핫픽스는 어떤 브랜치를 기준으로 해야하나? Git-flow 위 사진과 같이 Git-flow 는 5가지 브랜치가 존재한다 그 중 가장 중심이 되는 메인 브랜치는 master과 develop 브랜치이며, 이 두 브랜치는 무조건 있어야 한다. 나머지 merge시 사라지는 보조 브랜치는 feature, release, hotfix 3가지 ..
Filter, Interceptor, AOP 왜 쓰는가? 이전 글 AOP와 같이 공통적으로 처리할 일들을 따로 빼서 관리하기 위해 사용한다. 이러한 공통 업무를 프로그램 전 후에서 자동으로 처리할수 있는 것 3가지가 Filter, Interceptor, AOP 이다 적용순서 Filter -> Interceptor -> AOP -> Interceptor -> Filter 순으로 1. 서버를 실행시켜 서블릿이 올라오는 동안 (FIlter) init이 실행되고 doFilter 실행 2. Dispatcher Servlet이 실행된 후, 컨트롤러에 들어가기 전에 (Interceptor) preHandler 실행 3. 컨트롤러에서 나와 postHandler, after Completion, doFilter 순으로 진행이된다 4. 종료 시 destroy가 실행..
프록시 패턴 (Proxy Pattern) @Transactional 프록시 패턴이란? (Proxy - 대변자) 객체를 감싸고있는 객체. 누군가를 대신하여 그 역할을 수행하는 존재이다. 누군가에게 어떠한 일을 대신 시켜서 처리하는 것 어떠한 객체를 사용할대 직접 참조하는 것이 아니라, 프록시 객체가 원래 객체를 감싸서 client의 요청을 처리하게 한다. (인터페이스 역할) 프록시 패턴 사용이유 접근 권한을 부여할 수 있다 부가 기능을 추가할 수 있다. 어떤 객체를 사용할 때 직접적으로 참조하지 않고 해당 객체를 대항하는 객체를 통해 접근하면 참조하는 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정 할 수 있다. 프록시 패턴의 장점과 단점 장점 전처리와 후처리 사용에 용의하다 사이즈가 큰 객체가 로딩되기 전에도 프록시를 통해 참조 할 수 있다 단점 객체를 ..
AOP (Aspect Oriented Programming) AOP (관점 지향 프로그래밍) 란? 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법 Aspect를 통해 위 공통 로직들을 모듈화 하고 어디에서 사용할지 정의및 관리한다 반복되거나 중복되는 부분들을 분리하여 각 관점(Aspect) 을 기준으로 모듈화 (즉 AOP : Aspect로 모듈화하고 핵심 비지니스 로직에서 분리하여 재사용 한다) 흩어져 있는 부분을 aspect로 모듈화 시킨 것. 그리고 모듈화 시킨 Aspect를 클래스에 어느 곳에 사용해야 하는지만 정의해주면 된다 AOP 주요 용어 Aspect : 흩어진 관심사를 모듈화 한 것 (AOP의 기본 모듈) Advice : 실질적으로 어떤 일을 할 지 정의한 것 (구현체) Pointcut : 어디에 적용해야 하는지 정의한 것 Target : A..
docker - zookeeper - KAFKA 참고 (KAFKA CLI) docker-compose.yml 파일 version: "3" services: zookeeper: image: "bitnami/zookeeper:latest" ports: - "2181:2181" environment: - ALLOW_ANONYMOUS_LOGIN=yes kafka: image: "bitnami/kafka:latest" ports: - "9092:9092" environment: - KAFKA_BROKER_ID=1 - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092 - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092 - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181 - ALLOW_PL..
KAFKA KAFKA 출시 2011년 링크드인 웹 사이트에서 생성되는 로그를 처리하여 웹사이트 활동을 추적하는 것을 목적으로 개발되었다. KAFKA Publish-Subscribe 모델의 메시지 큐이다 대용량 실시간 로그처리에 특화되어 설계된 메시징 시스템으로 분산환경에 특화되어 있다. (분산 이벤트 스트리밍 플랫폼) 메시지 큐 란? 프로세스 또는 프로그램 간 데이터를 교환할때 사용하는 통신 방법중 하나. 메시지 지향 미들웨어를 구현한 시스템을 말한다. 메시지 지향 미들웨어(MOM : Message Oriented Middleware)는 비동기 메시지를 사용하는 다른 응용프로그램 사이의 데이터 송수신을 의미한다. 메시지 큐의 장점 - 비동기(Asynchronous): Queue에 넣기 때문에 나중에 처리할 수 있습..
Stream Stream java8 버전부터 lambda와 함께 Stream기능을 제공한다. Stream은 흐름이라는 뜻으로 배열, 컬렉션 객체 요소를 효율적으로 다룰 수 있고 람다식을 지원하여 코드가 간결하다는 장점이 있다. 특징 원본 데이터 자체를 변경하지 않는다 한번 사용하면 닫혀서 재활용(재사용) 이 불가능하다 내부 반복문으로 처리하여 코드가 간결해 보인다 1. 여러가지 방법으로 Stream 생성하기 import java.util.Arrays; import java.util.List; import java.util.stream.Stream; public class StreamBasic { public static void main(String[] args) { //Array String[] arr1 = new..
Thread (lambda) Thread 하나의 프로세스(실행중인 프로그램) 안에서 실질적인 작업을 처리하는 하나하나의 단위 (JVM에서 하나의 프로세스가 수행되고 main문 안의 실행문들이 하나의 스레드) 람다식을 사용하여 스레드 생성 public class LambdaThread { public static void main(String[] args) { for (int i = 0; i { System.out.println(num +" start lambda Thread"); try{ Thread.sleep(1000); } catch(Exception ignored){ } System.out.println(num + " end lambda Thread :..