본문 바로가기

반응형

전체 글

(133)
[Spring] 디자인 패턴 - 전략 패턴 참고 1. 스프링-핵심-원리-고급편, 김영한 전략 패턴, Strategy Pattern 변하지 않는 부분을 "Context"에 두고, 변하는 부분을 "Strategy"라는 인터페이스에 둔다. 그리고, Context는 Stragtegy라는 인터페이스에만 의존한다. 이렇게 되면, 이후 새로운 Strategy를 변경하거나 생성할 때, Context에는 영향이 가지 않는다. 이러한 전략은 스프링의 의존관계 주입(DI)에서 사용하는 전략이다. Context : 변하지 않는 템플릿 역할 Strategy : 변하는 알고리즘 역할 템플릿 메서드 vs 전략 패턴 템플릿 메서드는 부모 클래스에 변하지 않는 템플릿과 변하는 추상 메서드를 두어 관리한다. 하지만, 전략 패턴은 변하지 않는 부분을 Context에 두고, 변하는..
[Spring] 디자인 패턴 - 템플릿 메서드 패턴 참고 1. 스프링-핵심-원리-고급편, 김영한 템플릿 메서드 패턴 프로젝트에서 중복된 코드들을 개선하기 위한 패턴이다. 각 코드에서 변하는 부분(중복되지 않는 부분)과 변하지 않는 부분(중복되는 부분)을 파악 후 변하지 않는 부분을 템플릿(추상 클래스)에 몰아 넣고 변하는 부분은 오버라이딩하는 디자인 패턴이다. 예시 1. 아래와 같이 처음과 끝에 "Hello Start"와 "Hello End"를 고정적으로 출력해주는 클래스들이 있다. public class ex1 { System.out.println("Hello Start"); //중복 System.out.Println("this is ex1"); System.out.println("Hello End"); //중복 } public class ex2 { S..
[Spring] 동시성 문제 - ThreadLocal로 개선 참고 1. 스프링-핵심-원리-고급편, 김영한 동시성 문제 여러 쓰레드가 동시에 같은 인스턴스의 필드 값을 변경하면서 발생하는 문제 동시성 문제가 발생하는 상황 지역 변수에서는 발생하지 않음. (지역 변수는 쓰레드마다 각각 다른 메모리 영역이 할당) 인스턴스의 필드, static 같은 공용 필드에 접근할 때 발생 주로 싱글톤에서 자주 발생 쓰레드 로컬, Thread Local 해당하는 쓰레드만 접근할 수 있는 특별한 저장소이다. 만약, "A" 쓰레드와 "B" 쓰레드가 있다면, A와 B 각각의 전용 저장소가 만들어 진다. 이후, A와 B가 데이터를 변경할 경우, 쓰레드 로컬이 각각의 전용 저장소에 연결해준다. 이를 통해 동시성 문제를 해결할 수 있다. 예시 동시성 문제가 발생하는 변수를 ThreadLocal..
[Java] Runnable, Thread 예시 기본 예시 1. Runnable 인터페이스 생성 Runnable logic1 = () -> { //logics } Runnable logic2 = () -> { //logics } 자바에서 람다식은 인터페이스에서만 사용가능 2. Thread에 Runnable 함수형 인터페이스를 넣어줌 Thread thread1 = new Thread(loagic1) Thread thread2 = new Thread(loagic2) 3. Thread를 실행 thread1.start(); thread2.start(); 쓰레드 실행 제어 함수들 sleep(long millis), sleep(long milis, int nanos) 지정된 시간동안 쓰레드를 정지 시간이 지난 후, 자동으로 실행대기상태가 됨 join(), joi..
[Java] Functional Interface 참고1. 함수형 인터페이스 알아보기 (Functional Interface) 이론편 [ 자바 (Java) 기초 ], 어라운드 허브 스튜디오https://www.youtube.com/watch?v=nKBd1fU1cxM 함수형 인터페이스 (= Functional Interface) 1개의 추상 메서드를 갖는 인터페이스를 말한다. 추상 메서드가 2개면, 함수형 인터페이스가 아니다. 람다 표현식(Lambda expression)과 함께 사용 가능하다. ➡️ 코드가 간단 명료해짐. Java 8 이후부터 Default Method를 사용할 수 있다. @FunctionalInterface 컴파일 시, 함수형 인터페이스의 요구 사항을 만족하는 지 검증해주는 애너테이션 예시 함수형 인터페이스 Runnable @Funct..
[시스템 설계] 사용자 수에 따른 규모 확장성 - 6(메시지 큐) 참고1: 가상 면접 사례로 배우는 대규모 시스템 설계 기초, 알렉스 쉬 참고2: 위키피디아 메시지 큐 메시지 큐는 무손실을 보장하는 비동기 통신 컴포넌트이다. 시스템의 규모 확장을 위해 시스템의 컴포넌트를 독립적으로 분리해야 한다. 이때, 각 컴포넌트 사이에 통신이 필요한데, 메시지큐는 각 컴포넌트 사이의 통신을 도와주는 역할을 한다. 특징 서비스, 서버 간 결합이 느슨해짐 ➡️ 규모 확장에 용이 메시지 큐 VS 메시지 브로커 메시지 큐 : 메시지를 다루는 단순한 Queue 형태의 자료 구조를 기반으로 발행자(생상자), 구독자(소비자)의 시스템을 말한다. 메시지 브로커 : 메시지 큐를 더 확장하여 고급 기능(메시지 라우팅, 변환, 처리 등)을 제공하는 시스템을 말한다. 대표적인 메시지 브로커 Rabbit..
[시스템 설계] 사용자 수에 따른 규모 확장성 - 5 (데이터 센터) 참고1: 가상 면접 사례로 배우는 대규모 시스템 설계 기초, 알렉스 쉬 참고2: 위키피디아 데이터 센터(서버 호텔) 데이터 센터는 서버, 스토리지 시스템 등 IT 인프라를 보관하는 물리적인 시설을 말한다. 서비스를 이용하는 사용자에게 지리적 라우팅(geoDNS-routing 혹은 geo-routing)을 통해 가장 가까운 데이터 센터로 연결시킨다. 만약, 특정 데이터 센터에 장애가 발생하면 장애가 없는 데이터 센터로 연결 geoDNS-routing DNS 요청을 처리할 때, DNS에서 제공하는 geoDNS 서비스를 이용해 가장 가까운 데이터 센터로 라우팅한다. geoDNS는 사용자의 위치에 따라 가까운 데이터 센터에 해당하는 IP주소로 변환하는 DNS 서비스이다. 다중 데이터 센터를 위한 선행과제 여러 ..
[시스템 설계] 사용자 수에 따른 규모 확장성 - 4 참고: 가상 면접 사례로 배우는 대규모 시스템 설계 기초, 알렉스 쉬 무상태 웹 계층 무상태 웹 계층은 클라이언트(사용자)에 대한 상태 정보를 웹 계층에 두지 않는 것을 말한다. 만약, 저장해야 한다면, 데이터베이스와 같은 지속 저장소(RDB, Cache, NoSQL 등)에 보관한다. 이 저장소에 클라이언트 상태 정보를 관리하며 각 서버들이 함께 사용한다. 특징 상태 정보 부재 : 웹 서버가 클라이언트의 상태 정보(세션 상태 및 정보 등)를 모르기 떄문에, 각 클라이언트의 요청은 독립적으로 처리된다. 따라서, 클라이언트는 기본적으로 요청과 함께 필요한 모든 정보를 보내야 한다. 확장성 증대 : 각 서버들은 클라이언트의 상태를 저장하지 않기 때문에 각 서버들의 일관성을 유지할 수 있고, 서버 간 요청을 분..