본문 바로가기
[Docker] 멀티호스트 환경에서 Docker 실행 환경 구축 [Docker] 멀티호스트 환경에서 Docker 실행 환경 구축 -Docker 에서 작동하는 웹 앱을 제품 환경에서 운용할 때는 앱이 사양대로 올바르게 작동할 뿐만 아니라 서비스 이용자가 항상 이용할 수 있도록 운용 관리를 해야 한다.이러한 컨테이너 기반은 보통 멀티호스트 환경으로 구축한다. 8.1. 멀티호스트 환경에서 컨테이너 관리의 개요 -웹 시스템의 실행 환경은 웹 서버, 프록시 서버, 데이터 스토어 등 역할이 다른 여러 개의 서버 기능이 연계되어 작동한다. * 멀티호스트 환경과 클러스터링 -시스템의 일부에서 장애가 발생해도 서비스가 정지되지 않도록 만드는 장치가 필요하다.이를 구현하는 기술 중 하나로 클러스터링이 있다.클러스터링은 여러 대의 서버나 하드웨어를 모아서 한 대처럼 보이게 하는 기술이다.. 2020. 3. 27.
Efficient Android Threading #7 Executor 프레임워크를 통한 스레드 실행 제어 Efficient Android Threading #7 Executor 프레임워크를 통한 스레드 실행 제어 이 글은 Efficient Android Threading 의 일부 내용만 발췌한 내용입니다.자세한 내용은 책을 구입해서 보세용.9.1. Executor -Executor 는 interface 로 void execute(Runnable command); 하나의 함수를 갖는다.단순하지만 강력하다. 이는 테스크를 만드는 것과 실행 사이에 분리를 확실하게 해주기 때문에 기본 Thread 인터페이스보다 더 자주 사용된다. -public class SimpleExecutor implements Executor { @Override public void execute(Runnable runnable){ new.. 2018. 3. 23.
[Objective-C] Class Extension 으로 delegate 정의하기 [Objective-C] Class Extension 으로 delegate 정의하기 -header 파일에 delegate 를 표시하는 것은 확장성 측면에서 좋지 않을 수 있다.그래서 꼭 header 파일에 delegate 가 들어갈 이유가 없다면 다음과 같이 Class extension 을 사용하면 된다. // implementation file@interface SomeClass() @end @implementation SomeClass @end -위의 방법으로 @interface 를 재정의하는 것을 class extension 이라고 하는데,저 부분에 들어가는 내용들은 private access level 이라고 보면 된다.저 안에 정의된 것들은 해당 클래스 내부에서만 사용할 수 있다. 꼭 deleg.. 2017. 7. 19.
[Java Concurrency] 목차 정리 [Java Concurrency] 목차 정리 [Java Concurrency] 스레드 안전성 [Java Concurrency] 객체공유 [Java Concurrency] 객체구성 [Java Concurrency] 구성 단위 #1 [Java Concurrency] 구성 단위 #2 [Java Concurrency] 작업 실행 [Java Concurrency] 중단 및 종료 #1 [Java Concurrency] 중단 및 종료 #2 [Java Concurrency] 스레드 풀 활용 [Java Concurrency] GUI 앱 [Java Concurrency] 활동성 최대로 높이기 #1 [Java Concurrency] 활동성 최대로 높이기 #2 [Java Concurrency] 성능, 확장성 #1 [Java .. 2017. 5. 11.
[Java Concurrency] 단일 연산 변수와 넌블로킹 동기화 [Java Concurrency] 단일 연산 변수와 넌블로킹 동기화 - 병렬 알고리즘과 관련한 최근의 연구 결과를 보면 대부분이 넌블로킹 알고리즘, 즉 여러 스레드가 동작하는 환경에서 데이터의 안정성을 보장하는 방법으로 락을 사용하는 대신 저수준의 하드웨어에서 제공하는 비교 후 교환(compare-and-swap) 등의 명령을 사용하는 알고리즘을 다루고 있다. - 넌블로킹 알고리즘은 운영체제나 JVM 에서 프로세스나 스레드를 스케줄링 하거나 가비지 컬렉션 작업, 그리고 락이나 기타 병렬 자료 구조를 구현하는 부분에서 굉장히 많이 사용하고 있다. - 넌블로킹 알고리즘은 락을 기반으로 하는 방법보다 설계와 구현 모두 훨씬 복잡하며, 대신 확장성과 활동성을 엄청나게 높여준다. - 넌블로킹 알고리즘은 훨씬 세밀.. 2017. 5. 9.
[Java Concurrency] 성능, 확장성 #2 [Java Concurrency] 성능, 확장성 #2 11.4. 락 경쟁 줄이기- 작업을 순차적으로 처리하면 확장성(scalability)을 놓치고, 작업을 병렬로 처리하면 컨텍스트 스위칭에서 성능에 악영향을 줄 수 있다. 따라서 락을 놓고 경쟁하는 상황이 벌어지면 순차적으로 처리함과 동시에 컨텍스트 스위칭도 많이 일어나므로 확장성과 성능을 동시에 떨어뜨리는 원인이 된다. 즉 락 경쟁을 줄이면 줄일수록 확장성과 성능을 함께 높일 수 있다. - 병렬 앱에서 확장성에 가장 큰 위협이 되는 존재는 바로 특정 자원을 독점적으로 사용하도록 제한하는 락이다. - 락을 두고 발생하는 경쟁 상황에는 크게 두 가지를 생각해 볼 수 있다. 락을 얼마나 빈번하게 확보하려고 하는지, 한 번 확보하고 나면 해제할 때까지 얼마나.. 2017. 5. 4.
[Java Concurrency] 성능, 확장성 #1 [Java Concurrency] 성능, 확장성 - 스레드를 사용하는 가장 큰 목적은 바로 성능을 높이고자 하는 것이다. 스레드를 사용하면 시스템의 자원을 훨씬 효율적으로 활용할 수 있고, 앱으로 하여금 시스템이 갖고 있는 능력을 최대한 사용하게 할 수 있다. 그와 동시에 기존 작업이 실행되고 있는 동안 새로 등록된 작업을 즉시 실행할 수 있는 준비를 갖추고 있기 때문에 앱의 응답 속도를 향상시킬 수 있다. - 성능을 높이는 방법은 대부분 앱의 내부 구조를 복잡하게 만들어야 하는 경우가 많고, 따라서 안전성과 활동성에 문제가 생길 가능성도 적지 않다. 최악의 경우에는 성능을 높이기 위해 적용한 프로그래밍 기법 때문에 프로그램의 다른 부분에서 역효과를 가져오거나 성능상에 문제를 일으킬 수도 있다. - 성능.. 2017. 5. 3.
[Java Concurrency] 구성 단위 #2 [Java Concurrency] 구성 단위 #2 5.4. 블로킹 메소드, 인터럽터블 메소드 - 스레드는 여러 가지 원인에 의해 블록 당하거나, 멈춰질 수 있다. 스레드가 블록되면 동작이 멈춰진 다음 블록된 상태(BLOCKED, WAITING, TIMED_WAITING) 가운데 하나를 갖게 된다. 블로킹 연산은 단순히 실행 시간이 오래 걸리는 일반 연산과는 달리 멈춘 상태에서 특정한 신호를 받아야 계속해서 실행할 수 있는 연산을 말한다. ( I/O 작업 끝나기를 기다리거나, 기다리던 락을 확보하거나, 다른 스레드의 작업 결과를 받아오는 등의 신호 ) - Thread 클래스는 해당 스레드를 중단시킬 수 있도록 interrupt 메소드를 제공하며, 해당 스레드에 인터럽트가 걸려 중단된 상태인지를 확인할 수 .. 2017. 4. 21.
[Java Concurrency] 구성 단위 #1 [Java Concurrency] 구성 단위 #1 5.1. 동기화된 컬렉션 클래스 - 동기화되어 있는 컬렉션 클래스의 대표 주자는 Vector 와 Hashtable 이다. - JDK 1.2 부터는 Collections.synchronizedXxx 메소드를 사용해 이와 비슷하게 동기화되어 있는 몇 가지 클래스를 만들어 사용할 수 있게 됐다. 이와 같은 클래스는 모두 public 으로 선언된 모든 메소드를 클래스 내부에 캡슐화해 내부의 값을 한 번에 한 스레드만 사용할 수 있도록 제어하면서 스레드 안전성을 확보하고 있다. - 동기화된 컬렉션 클래스는 스레드 안전성을 확보하고 있기는 하다. 하지만 여러 개의 연산을 묶어 하나의 단일 연산처럼 활용해야 할 필요성이 항상 발생한다. - 동기화된 컬렉션 클래스는 대.. 2017. 4. 20.
반응형