참조 ..
- JAVA CONCURRENCY IN PRACTICE
- 텀즈(http://www.terms.co.kr)
- http://en.wikipedia.org/wiki/Main_Page
- http://skyul.tistory.com/263
- 텀즈(http://www.terms.co.kr)
- http://en.wikipedia.org/wiki/Main_Page
- http://skyul.tistory.com/263
[Concurrency] 용어정리
thread-safety
- 멀티쓰레드가 코드(클레스)를 실행할 때 코드의 실행 결과는 정확해야(correctness) 한다.
race condition(경쟁조건)
- 상대적인 시점이나 또는 JVM이 쓰레드를 교차해서 실행하면 상황에 따라 계산의 정확성이 달라질 때 경쟁조건이라 한다.
Memory Visibility(메모리 가시성)
- 다수의 스레드에서 메모리를 공유할 때 발생되는 문제로, 하나의 스레드가 특정 메모리 값을 변경하면 다른 쓰레드에서 변경된 값을 정확하게 읽을 수 있어야 한다.
lock(synchronized)
- 단일 연산 특성을 보장한다.
- 락은 자신이 보호하는 코드 경로에 여러 쓰레드가 serializing access(순차적으로 접근)하도록 한다. (상호배제 참조)
- 상호배제 및 메모리 가시성을 확보하기 위해서 사용한다.
intrinsic lock(암묵적인 락) or monitor lock(모니터 락)
- 자바에 내장된 락
- Reentrant 지원
Reentrant
- 특정 쓰레드는 자기가 이미 획득한 lock(synchronized)을 다시 확보할 수 있다.
- pthread(POSIX 스레드)의 기본 락 동작과 다르다고 함. pthread에선 확보 요청 기준으로 락을 허용한다.
Pool-Base(thread pool)
- 서버에 부하에 걸리더라도 메모리가 부족해서 죽는 경우는 생기지 않는다.
- CPU와 메모리 사용을 위한 경쟁이 상대적으로 적기 때문에 성능이 떨어져도 점진적으로 서서히 떨어진다.
Thread-Per-Task
- 요청이 들어올때 마다 쓰레드를 생성하는 전략
- CPU와 메모리를 사용하기 위해서 경쟁이 치열하기 때문에 성능이 pool-base 보다 상대적으로 낮다.
reordering(재배치)
- 컴파일러가 메모리 접근 속도 향상, 파이프라인(pipeline) 활용 등 최적화를 목적으로 제한된 범위 내에서 프로그램 명령의 위치를 바꾸는 것을 말한다.
- single thread 에서는 차이점을 전혀 알수가 없지만 multi thread 에서는 동작할 경우에는 확연하게 나타난다.
Atomic Operation
- 특정 Operation 의 실행중에는 다른 Operation 으로부터 간섭 받지 않은 Operation 을 말한다.
- Mutex 와 같은 OS 의 자원을 사용하지 않고 내부의 Operation 만으로 동기화를 처리 할 수 있기 때문에 가벼운 Lock 이라고 한다.
- Operation(값을 쓰거나 읽는 것) 을 레지스터나 캐쉬가 아니라 메인 메모리에서 수행되도록 해주기 때문에 무거운 Lock(synchronized)을 사용하지 않더라도 메모리 가시성(Memory Visibility)을 확보할 수 있다.
volatile 변수
- volatile로 선언된 변수는 컴파일러와 런타임 모두 '이 변수는 공유해 사용하고, 따라서 실행 순서를 재배치(reordering) 해서는 안된다' 라고 이해한다. 프로세서의 레지스터에 캐시 되지도 않고, 프로세서 외부의 캐시에도 들어가지 않기 때문에 volatile 변수의 값을 읽으면 항상 다른 스레드가 보관해둔 최신의 값을 읽어갈 수 있다.
wait, notify
- 특정 조건을 만족하면 수행하는 프로그램에 사용됨.
- wait, notify 보다 Semaphore, BlockingQueue를 사용하는 편이 낳다.
Future
- 특정 작업의 상태(시작되지 않은 상태, 시작한 상태, 완료된 상태)를 확인할 수 있도록 만들어진 클레스
- Executor 에 Runnable or Callable 을 등록하면 Future 인스턴스를 받을 수 있고, 받은 Futrue 인스턴스를 사용해 작업의 결과를 확인 하거나 실행 도중에 작업을 취소할 수 있다.
Mutual Exclusion, Mutex(상호배제)
- 다수의 스레드가 동시에 Share Data 에 접근하면 정확한 데이터(계산되지 않은 값 or 예측할 수 없는 값)를 얻을 수 없을 것이다. 그렇기 때문에 순차적으로 공유 데이터에 접근해야 한다.
- Mutual Excusion 은 Thread 가 Share Data 를 사용할 때 다른 Thread 들은 사용하지 못하도록 해야 한다.
- 한번에 한 스레드만 특정 락을 소유하는 것.
Semaphore
- 자원을 공유하는 방법으로 멀티스레드의 행동을 조정하거나 또는 동기화 시키는 기술.
Share Data(공유 데이터)
- Thread 에 의해 공유되는 메모리 영역(Heap, Method Area)
- Heap
: Instance Variable(Object 의 Member Variable)
- Method Area
: Static Variable(Class Variable)
JVM 의 Lock
- Heavy-Weight Lock 과 Light-Weight Lock 으로 구분된다.
- Heavy-Weight Lock
: Monitor Lock 을 의미하며, 각 Object 에 대해 OS Mutex 와 조건 변수 등을 사용하여 다소 무겁게 구현됨.
- Light-Weight Lock
: Atomic Operation 을 이용한 아주 가벼운 Lock 을 의미한다.
Context Switching(작업간 전환)
- 자신의 현 상태를 잃지 않은 채 한 프로그램에서 다른 프로그램으로 전환할 수 있게 해주는 것. 멀티태스킹과 같은 의미가 아니라는 점에 유의할 필요가 있음. 멀티태스킹은 CPU가 여러 프로그램들 사이를 빠르게 왔다 갔다 하며 처리함으로써, 모든 프로그램들이 마치 동시에 실행되는 것 처럼 보이게 하지만, Context Swtiching 에서는 CPU가 여러 프로그램 사이를 왔다 갔다 하는 것 대신에, 한번에 오직 하나의 프로그램만 실행 시킨다. (출처. 텀즈)
쓰레드 한정(Thread-limit)
- Thread safety 기법의 한 방법으로 단일 쓰레드에서만 객체를 사용하도록 한정하는 방법이다.
- 객체를 단일 쓰레드에서 사용하기 때문에 공유변수 문제를 해결 할 수 있다.
스택 한정(Stack-limit)
- Thread-limit 기법중 하나로 특정 객체를 로컬 변수로 한정해서 사용하는 방법.
- 로컬 변수는 현재 실행 중인 스레드 내부의 스택에만 존재하기 때문에 다른 쓰레드는 사용할 수 없다.
- 위 조건들을 만족하면 쓰레드에 안전하다고(Thread safety) 말할 수 있다.
final
- final 키워드를 사용해서 선언된 변수나 객체의 값은 변경할 수 없다.
(물론 변수가 가리키는 객체가 불변 객체가 아니라면 해당 객체에 들어 있는 값은 변경할 수 있다.)
- 멀티쓰레드가 코드(클레스)를 실행할 때 코드의 실행 결과는 정확해야(correctness) 한다.
race condition(경쟁조건)
- 상대적인 시점이나 또는 JVM이 쓰레드를 교차해서 실행하면 상황에 따라 계산의 정확성이 달라질 때 경쟁조건이라 한다.
Memory Visibility(메모리 가시성)
- 다수의 스레드에서 메모리를 공유할 때 발생되는 문제로, 하나의 스레드가 특정 메모리 값을 변경하면 다른 쓰레드에서 변경된 값을 정확하게 읽을 수 있어야 한다.
lock(synchronized)
- 단일 연산 특성을 보장한다.
- 락은 자신이 보호하는 코드 경로에 여러 쓰레드가 serializing access(순차적으로 접근)하도록 한다. (상호배제 참조)
- 상호배제 및 메모리 가시성을 확보하기 위해서 사용한다.
intrinsic lock(암묵적인 락) or monitor lock(모니터 락)
- 자바에 내장된 락
- Reentrant 지원
Reentrant
- 특정 쓰레드는 자기가 이미 획득한 lock(synchronized)을 다시 확보할 수 있다.
- pthread(POSIX 스레드)의 기본 락 동작과 다르다고 함. pthread에선 확보 요청 기준으로 락을 허용한다.
Pool-Base(thread pool)
- 서버에 부하에 걸리더라도 메모리가 부족해서 죽는 경우는 생기지 않는다.
- CPU와 메모리 사용을 위한 경쟁이 상대적으로 적기 때문에 성능이 떨어져도 점진적으로 서서히 떨어진다.
Thread-Per-Task
- 요청이 들어올때 마다 쓰레드를 생성하는 전략
- CPU와 메모리를 사용하기 위해서 경쟁이 치열하기 때문에 성능이 pool-base 보다 상대적으로 낮다.
reordering(재배치)
- 컴파일러가 메모리 접근 속도 향상, 파이프라인(pipeline) 활용 등 최적화를 목적으로 제한된 범위 내에서 프로그램 명령의 위치를 바꾸는 것을 말한다.
- single thread 에서는 차이점을 전혀 알수가 없지만 multi thread 에서는 동작할 경우에는 확연하게 나타난다.
Atomic Operation
- 특정 Operation 의 실행중에는 다른 Operation 으로부터 간섭 받지 않은 Operation 을 말한다.
- Mutex 와 같은 OS 의 자원을 사용하지 않고 내부의 Operation 만으로 동기화를 처리 할 수 있기 때문에 가벼운 Lock 이라고 한다.
- Operation(값을 쓰거나 읽는 것) 을 레지스터나 캐쉬가 아니라 메인 메모리에서 수행되도록 해주기 때문에 무거운 Lock(synchronized)을 사용하지 않더라도 메모리 가시성(Memory Visibility)을 확보할 수 있다.
volatile 변수
- volatile로 선언된 변수는 컴파일러와 런타임 모두 '이 변수는 공유해 사용하고, 따라서 실행 순서를 재배치(reordering) 해서는 안된다' 라고 이해한다. 프로세서의 레지스터에 캐시 되지도 않고, 프로세서 외부의 캐시에도 들어가지 않기 때문에 volatile 변수의 값을 읽으면 항상 다른 스레드가 보관해둔 최신의 값을 읽어갈 수 있다.
wait, notify
- 특정 조건을 만족하면 수행하는 프로그램에 사용됨.
- wait, notify 보다 Semaphore, BlockingQueue를 사용하는 편이 낳다.
Future
- 특정 작업의 상태(시작되지 않은 상태, 시작한 상태, 완료된 상태)를 확인할 수 있도록 만들어진 클레스
- Executor 에 Runnable or Callable 을 등록하면 Future 인스턴스를 받을 수 있고, 받은 Futrue 인스턴스를 사용해 작업의 결과를 확인 하거나 실행 도중에 작업을 취소할 수 있다.
Mutual Exclusion, Mutex(상호배제)
- 다수의 스레드가 동시에 Share Data 에 접근하면 정확한 데이터(계산되지 않은 값 or 예측할 수 없는 값)를 얻을 수 없을 것이다. 그렇기 때문에 순차적으로 공유 데이터에 접근해야 한다.
- Mutual Excusion 은 Thread 가 Share Data 를 사용할 때 다른 Thread 들은 사용하지 못하도록 해야 한다.
- 한번에 한 스레드만 특정 락을 소유하는 것.
Semaphore
- 자원을 공유하는 방법으로 멀티스레드의 행동을 조정하거나 또는 동기화 시키는 기술.
Share Data(공유 데이터)
- Thread 에 의해 공유되는 메모리 영역(Heap, Method Area)
- Heap
: Instance Variable(Object 의 Member Variable)
- Method Area
: Static Variable(Class Variable)
JVM 의 Lock
- Heavy-Weight Lock 과 Light-Weight Lock 으로 구분된다.
- Heavy-Weight Lock
: Monitor Lock 을 의미하며, 각 Object 에 대해 OS Mutex 와 조건 변수 등을 사용하여 다소 무겁게 구현됨.
- Light-Weight Lock
: Atomic Operation 을 이용한 아주 가벼운 Lock 을 의미한다.
Context Switching(작업간 전환)
- 자신의 현 상태를 잃지 않은 채 한 프로그램에서 다른 프로그램으로 전환할 수 있게 해주는 것. 멀티태스킹과 같은 의미가 아니라는 점에 유의할 필요가 있음. 멀티태스킹은 CPU가 여러 프로그램들 사이를 빠르게 왔다 갔다 하며 처리함으로써, 모든 프로그램들이 마치 동시에 실행되는 것 처럼 보이게 하지만, Context Swtiching 에서는 CPU가 여러 프로그램 사이를 왔다 갔다 하는 것 대신에, 한번에 오직 하나의 프로그램만 실행 시킨다. (출처. 텀즈)
쓰레드 한정(Thread-limit)
- Thread safety 기법의 한 방법으로 단일 쓰레드에서만 객체를 사용하도록 한정하는 방법이다.
- 객체를 단일 쓰레드에서 사용하기 때문에 공유변수 문제를 해결 할 수 있다.
스택 한정(Stack-limit)
- Thread-limit 기법중 하나로 특정 객체를 로컬 변수로 한정해서 사용하는 방법.
- 로컬 변수는 현재 실행 중인 스레드 내부의 스택에만 존재하기 때문에 다른 쓰레드는 사용할 수 없다.
- 위 조건들을 만족하면 쓰레드에 안전하다고(Thread safety) 말할 수 있다.
final
- final 키워드를 사용해서 선언된 변수나 객체의 값은 변경할 수 없다.
(물론 변수가 가리키는 객체가 불변 객체가 아니라면 해당 객체에 들어 있는 값은 변경할 수 있다.)
[JVM] 용어정리
Dynamic Loading
- Runtime 시 동적으로 클레스를 읽어오는것. Class 가 참조되는 순간 동적으로 Load 및 Link 가 이뤄지는 것을 Dynamic Loading 이라고 한다.
- Load Time Dynamic Loading, Runtime Dynamic Loading 으로 구분한다.
- Load Time Dynamic Loading
: 하나의 Class 를 Loading 하는 과정에서 이에 관련된 Class 들을 한꺼번에 Loading 하는 것을 의미한다.
- Runtime Dynamic Loading
: 소스코드에서 객체를 참조하는 순간에 동적으로 Loading 하는 방식. Reflection 이라는 기술의 기본이 되며 [Reflection in java] 참조하자.
Class Loader
- JVM 안에서 Class 를 Load 하고 Link 를 통해 적절히 배치하는 일련의 작업을 수행하는 모듈
Namespace
- JVM 으로 Class를 중복해서 Load 하지 않기 위해서 Class Loader Name + Pakage Name + Clasa Name 이 필요하다. Class Loader 는 하나의 Namespace 를 가지고 있어 Load 한 Class의 Full Qualified Name을 저장한다. 이러한 정보를 토대로 Class 를 Load 하기 전에 동일한 클래스를 찾기 때문에 중복해서 Class 를 Load 하지 않는다.
Class Loader Delegation Model
- Class Loader 의 계층구조로 상위 Class Loader 로 임무를 위임하는 방식을 말한다. 지금까지 단순히 사용만 하던 놈들이 어떻게 Load 되고 어떻게 위임되어 사용되는지 알기 쉽게 설명해 놓은듯. 215p 참조.. 생각보다 유익함
Class Sharing
- 여러개의 JVM 이 기동할때 공통으로 사용하는 Class를 공유하자는 개념. Java 5 에서 새로 추가된 기능이라고 함. 자바 진영이 속도와 메모리 등의 열악함을 극복하기 위해 무쟈게 노력하는듯.. 노력하는 그들이 부러움...
- Runtime 시 동적으로 클레스를 읽어오는것. Class 가 참조되는 순간 동적으로 Load 및 Link 가 이뤄지는 것을 Dynamic Loading 이라고 한다.
- Load Time Dynamic Loading, Runtime Dynamic Loading 으로 구분한다.
- Load Time Dynamic Loading
: 하나의 Class 를 Loading 하는 과정에서 이에 관련된 Class 들을 한꺼번에 Loading 하는 것을 의미한다.
- Runtime Dynamic Loading
: 소스코드에서 객체를 참조하는 순간에 동적으로 Loading 하는 방식. Reflection 이라는 기술의 기본이 되며 [Reflection in java] 참조하자.
Class Loader
- JVM 안에서 Class 를 Load 하고 Link 를 통해 적절히 배치하는 일련의 작업을 수행하는 모듈
Namespace
- JVM 으로 Class를 중복해서 Load 하지 않기 위해서 Class Loader Name + Pakage Name + Clasa Name 이 필요하다. Class Loader 는 하나의 Namespace 를 가지고 있어 Load 한 Class의 Full Qualified Name을 저장한다. 이러한 정보를 토대로 Class 를 Load 하기 전에 동일한 클래스를 찾기 때문에 중복해서 Class 를 Load 하지 않는다.
Class Loader Delegation Model
- Class Loader 의 계층구조로 상위 Class Loader 로 임무를 위임하는 방식을 말한다. 지금까지 단순히 사용만 하던 놈들이 어떻게 Load 되고 어떻게 위임되어 사용되는지 알기 쉽게 설명해 놓은듯. 215p 참조.. 생각보다 유익함
Class Sharing
- 여러개의 JVM 이 기동할때 공통으로 사용하는 Class를 공유하자는 개념. Java 5 에서 새로 추가된 기능이라고 함. 자바 진영이 속도와 메모리 등의 열악함을 극복하기 위해 무쟈게 노력하는듯.. 노력하는 그들이 부러움...
[Memory] 용어설명
Swapping
- 프로세스가 메모리에 적재되어 실행되다가 스케줄링 정책에 따라 임시로 보조 기억 장치로 보내어졌다가 다시 메모리로 돌아오는 것을 스와핑이라 한다.
Fragment(단편화)
- 메모리 공간 중 일부가 사용 못하게 되는 부분을 일컫는다.
External Fragmentation(외부 단편화)
- 프로세스들이 기억 장치에 적재되고 제거되는 일이 반복되면서 많은 수의 매우 작은 공간들로 fragment 된는 것을 일컫는다.
Compaction(압축)
- External Fragmentation 에 대한 해결책의 하나로 프로그램이 눈치채지 못하는 동안 그것들의 위치를 한쪽 끝으로 옮기는 것을 말한다. 그러기 위해서는 프로그램의 논리 주소가 실행시에 동적으로 Relocation 될 수 있어야 한다.(Relocation 은 Concurrency 용어정리 참조)
- 프로세스가 메모리에 적재되어 실행되다가 스케줄링 정책에 따라 임시로 보조 기억 장치로 보내어졌다가 다시 메모리로 돌아오는 것을 스와핑이라 한다.
Fragment(단편화)
- 메모리 공간 중 일부가 사용 못하게 되는 부분을 일컫는다.
External Fragmentation(외부 단편화)
- 프로세스들이 기억 장치에 적재되고 제거되는 일이 반복되면서 많은 수의 매우 작은 공간들로 fragment 된는 것을 일컫는다.
Compaction(압축)
- External Fragmentation 에 대한 해결책의 하나로 프로그램이 눈치채지 못하는 동안 그것들의 위치를 한쪽 끝으로 옮기는 것을 말한다. 그러기 위해서는 프로그램의 논리 주소가 실행시에 동적으로 Relocation 될 수 있어야 한다.(Relocation 은 Concurrency 용어정리 참조)
[web] 용어설명
Rendering(렌더링)
- 컴퓨터 프로그램을 사용하여 모델로부터 영상을 만들어내는 과정을 말한다.
Entry point
- 프로그램 코드와 통신하는 point.
- ex> java, c, c++ 의 "main()"
인코딩
- 문자들의 집합을 컴퓨터에서 저장하거나 통신에 사용할 목적으로 부호화하는 방법을 가리킨다.
RPC(Remote procedure call:원격 프로시저 호출)
- 원격 제어를 위한 프로그래머의 세세한 코딩 없이 로컬or다른 주소 공간에 있는 함수나 프로시저를 실행하는 기술이다.
XML-RPC
- 인코딩 형식은 XML을 사용하고, 전송 방식은 HTTP 프로토콜을 사용하는 RPC 프로토콜의 일종으로 매우 단순한 규약이다. (인터넷 위에서 동작하는 RPC 프로토콜이다.)
- 컴퓨터 프로그램을 사용하여 모델로부터 영상을 만들어내는 과정을 말한다.
Entry point
- 프로그램 코드와 통신하는 point.
- ex> java, c, c++ 의 "main()"
인코딩
- 문자들의 집합을 컴퓨터에서 저장하거나 통신에 사용할 목적으로 부호화하는 방법을 가리킨다.
RPC(Remote procedure call:원격 프로시저 호출)
- 원격 제어를 위한 프로그래머의 세세한 코딩 없이 로컬or다른 주소 공간에 있는 함수나 프로시저를 실행하는 기술이다.
XML-RPC
- 인코딩 형식은 XML을 사용하고, 전송 방식은 HTTP 프로토콜을 사용하는 RPC 프로토콜의 일종으로 매우 단순한 규약이다. (인터넷 위에서 동작하는 RPC 프로토콜이다.)
[IT] 용어설명
- IT 쪽에서 일하다보면 항상 어떤 용어를 접하고 무심코 사용하게 된다. 그 용어들에 대해서 누군가가 '그것의 의미는 무엇인가요?' 라고 물어보면 당황스러울때가 종종있다. 예를들어 가시성, 프레임웤, 인프라 등등의 용어가 있을 수 있다. 이와같이 항상 사용하는 용어이면서 누군가가 물어봤을 때 직관적으로 설명할 수 있도록 용어를 정리하고 싶어졌다.
Information technology(IT)
- 정보기술
Service Discovery
- 네트워크 Plug & Play 와 비슷한 의미를 갖으며, 디바이스가 현재 속해 있는 네트워크 상에서 사용 가능한 서비스 혹은 디바이스를 자동으로 검색, 사용할 수 있는 기술을 의미한다.
Context Aware Service(상황 인식 서비스)
- 현실공간과 가상공간을 연결하여 가상공간에서 현실의 상황을 정보화하고 이를 활용하여 사용자 중심의 지능화된 서비스를 제공하는 기술(1991, Anid Dey)
- 사용자의 특성과 환경 상황 정보(Environmental Context Information)를 인식하여 사용자의 행동에 능동적으로 반응하고, 개개인에 알맞은 맞춤형 Service를 고객에게 제공할 수 있어야 한다.
Framework
- 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된(cooperation) 형태로 클래스를 제공하는 것.
guru(구루)
- 산스크리트(범어) 로써, 어떤 분야에 폭넓은 지식을 가지고 있는 사람을 뜻한다. (전문가, 선생님 등)
dogma(도그마)
- 책을 읽다가 '도그마'에 빠지지 말자라는 문구를 읽고, 도그마가 무엇인가? 라는 궁금증일 생겼다. 흠.. 칼톨릭 교회에서 나왔다고 하더구만.. 하튼 무조건, 맹목적으로 믿는것을 도그마라고 함.
공리(公理)
- 공리는 참인 것으로 가정된 명제(命題)를 뜻한다. 이것은 보통 다른 명제들을 증명하는 기본적 사실로 사용된다.
명제(命題)
- 논리학적으로 뜻이 분명한 문장을 말한다.
가역성(reversibility)
- 시간이 흐르는 동안 물체의 운동이 변화했을 때 시간을 거꾸로 되돌린다면 처음의 물체 상태로 되돌아갈 수 있는 성질을 말한다. 이 때 외부나 자신 모두에게 어떤 변화를 남기지 않아야 한다 .
- IT 측면에서 보면 가역성이란 프로그램 개발 시 요구사항이 변경되면 구조가 변경되는 것이 아니라 해당 모듈만 교체(변경)하면 되는 성질(것).
Unit testing(단위 테스트)
- 소프트웨어 단위 테스트란 어떤 모듈에 이것저것을 시켜보는 코드를 가리킨다. 일반적으로, 단위 테스트는 일종의 인위적인 환경을 구축한 다음, 테스트할 모듈의 루틴들을 호출한다. 그런 다음 반환된 결과들을 이미 알고 있는 값과 비교해 보고나 똑같은 테스트를 이전에 돌렸을 때 나온 값과 비교해 보아서(회귀테스트 regression tresting) 올바른지 검사한다. (실용주의 프로그래머 중에서..)
Stub(스터브)
- stub는 나중에 적재되거나 원격지에 위치해 있는 큰 프로그램을 대리하기 위한, 작은 프로그램 루틴이다. 예를 들어, 원격 절차 호출(RPC)을 사용하는 프로그램이 stub와 함께 컴파일되면, 그 stub는 요청된 절차를 제공하는 프로그램의 대역을 맡는다. stub는 요구를 받아들여서, 그것을 원격 절차에게 전달한다. 원격지에 있는 프로시저가 서비스를 끝내면, 결과가 stub에게 반환되며, stub는 그것을 서비스를 요구했던 프로그램에게 전달한다
Trigger(트리거)
- 이벤트가 수행될 때 자동적으로 어떤 operation이나 처리를 수행하는 객체의 하나이다.
Meta, Meat data, Meta language
- Meta : "근원적인 정의 또는 설명"을 의미하는 접두사이다.
- Meta data : 데이터에 대한 정의나 설명
- Meta language : 언어에 대한 정의나 설명
fault-tolerant(내고장성, 무정지형)
- 내고장성 : 고장 부분이 시스템 전체에 영향을 주지 않는 것.
- 무정지형 : 컴퓨터 시스템이나 그 구성요소들을 설계할 때 주로 사용되는 말로서, 어떤 한 부품에 장애가 생겼을 때 예비 부품이나 절차가 즉시 그 역할을 대체 수행함으로써 서비스의 중단이 없도록 하는 것을 말한다.
Enterprise architecture(EA)
- 조직의 프로세스 및 정보 시스템 및 부서의 구조와 기능을 기술하는 방법을 말한다.
CBD(Component based development)
- 컴포넌트 기반 개발
- CBD는 공통적인 인터페이스를 가지고 있어서 여러 시스템에서 사용이 가능하도록 프로그램 코드의 구성요소를 만들고, 조립 및 재 사용하는 개발 방식이다. 이는 소프트웨어를 통째로 개발하던 기존의 방식과 달리, 부품 역할을 하는 소프트웨어 컴포넌트를 각 기능별로 개발하고, 각자에게 필요한 것을 선택하여 조립함으로써, 소프트웨어 개발에 드는 노력과 시간을 절약할 수 있다. (텀즈)
Side Effect(부수효과, 부작용)
- 함수나 expression(표현식)에 있어서의 어떤 상태(state)의 수정이 리턴값에 영향을 주는 것을 side effect라고 한다. 예를들어서 어떤 함수에서 전역변수나 static variable 혹은 그것의 인자를 수정했는데, 다른 함수의 결과에 영향을 끼친다면 이 함수를 side-effecting 함수라고 한다. side effect는 프로그램의 결과를 예측하기 힘들게 한다. 그러므로 가능하면 side effect에 자유롭도록 함수를 작성할 필요가 있다.
일반적으로 절차지향적언어를 이용해서 함수를 작성할 경우 side effect의 취약한 것으로 알려져 있다. 함수형언어를 사용하면 side effect를 최소화 할 수 있다.
추상화(abstract)
- 복잡한 자료, 모듈, 시스템등으로 부터 핵심적인 부분을 간추려 내는 것을 말한다.
marshalling
- 객체를 직렬화(객체를 바이트 스트림으로 변환)
unmarshalling
- 객체로 역직렬화(바이트 스트림을 객체로 변환)
NAS(Network attached storage)
- NAS는 네트웤에 접속되도록 특화된 파일서버이다. 이것은 이더넷이나 TCP/IP와 같은 전통적인 LAN 프로토콜을 사용하며, 오직 유닉스의 NFS와 도스/윈도우의 SMB와 같은 파일 입출력 요청만 처리한다. (출처 텀즈)
Information technology(IT)
- 정보기술
Service Discovery
- 네트워크 Plug & Play 와 비슷한 의미를 갖으며, 디바이스가 현재 속해 있는 네트워크 상에서 사용 가능한 서비스 혹은 디바이스를 자동으로 검색, 사용할 수 있는 기술을 의미한다.
Context Aware Service(상황 인식 서비스)
- 현실공간과 가상공간을 연결하여 가상공간에서 현실의 상황을 정보화하고 이를 활용하여 사용자 중심의 지능화된 서비스를 제공하는 기술(1991, Anid Dey)
- 사용자의 특성과 환경 상황 정보(Environmental Context Information)를 인식하여 사용자의 행동에 능동적으로 반응하고, 개개인에 알맞은 맞춤형 Service를 고객에게 제공할 수 있어야 한다.
Framework
- 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된(cooperation) 형태로 클래스를 제공하는 것.
guru(구루)
- 산스크리트(범어) 로써, 어떤 분야에 폭넓은 지식을 가지고 있는 사람을 뜻한다. (전문가, 선생님 등)
dogma(도그마)
- 책을 읽다가 '도그마'에 빠지지 말자라는 문구를 읽고, 도그마가 무엇인가? 라는 궁금증일 생겼다. 흠.. 칼톨릭 교회에서 나왔다고 하더구만.. 하튼 무조건, 맹목적으로 믿는것을 도그마라고 함.
공리(公理)
- 공리는 참인 것으로 가정된 명제(命題)를 뜻한다. 이것은 보통 다른 명제들을 증명하는 기본적 사실로 사용된다.
명제(命題)
- 논리학적으로 뜻이 분명한 문장을 말한다.
가역성(reversibility)
- 시간이 흐르는 동안 물체의 운동이 변화했을 때 시간을 거꾸로 되돌린다면 처음의 물체 상태로 되돌아갈 수 있는 성질을 말한다. 이 때 외부나 자신 모두에게 어떤 변화를 남기지 않아야 한다 .
- IT 측면에서 보면 가역성이란 프로그램 개발 시 요구사항이 변경되면 구조가 변경되는 것이 아니라 해당 모듈만 교체(변경)하면 되는 성질(것).
Unit testing(단위 테스트)
- 소프트웨어 단위 테스트란 어떤 모듈에 이것저것을 시켜보는 코드를 가리킨다. 일반적으로, 단위 테스트는 일종의 인위적인 환경을 구축한 다음, 테스트할 모듈의 루틴들을 호출한다. 그런 다음 반환된 결과들을 이미 알고 있는 값과 비교해 보고나 똑같은 테스트를 이전에 돌렸을 때 나온 값과 비교해 보아서(회귀테스트 regression tresting) 올바른지 검사한다. (실용주의 프로그래머 중에서..)
Stub(스터브)
- stub는 나중에 적재되거나 원격지에 위치해 있는 큰 프로그램을 대리하기 위한, 작은 프로그램 루틴이다. 예를 들어, 원격 절차 호출(RPC)을 사용하는 프로그램이 stub와 함께 컴파일되면, 그 stub는 요청된 절차를 제공하는 프로그램의 대역을 맡는다. stub는 요구를 받아들여서, 그것을 원격 절차에게 전달한다. 원격지에 있는 프로시저가 서비스를 끝내면, 결과가 stub에게 반환되며, stub는 그것을 서비스를 요구했던 프로그램에게 전달한다
Trigger(트리거)
- 이벤트가 수행될 때 자동적으로 어떤 operation이나 처리를 수행하는 객체의 하나이다.
Meta, Meat data, Meta language
- Meta : "근원적인 정의 또는 설명"을 의미하는 접두사이다.
- Meta data : 데이터에 대한 정의나 설명
- Meta language : 언어에 대한 정의나 설명
fault-tolerant(내고장성, 무정지형)
- 내고장성 : 고장 부분이 시스템 전체에 영향을 주지 않는 것.
- 무정지형 : 컴퓨터 시스템이나 그 구성요소들을 설계할 때 주로 사용되는 말로서, 어떤 한 부품에 장애가 생겼을 때 예비 부품이나 절차가 즉시 그 역할을 대체 수행함으로써 서비스의 중단이 없도록 하는 것을 말한다.
Enterprise architecture(EA)
- 조직의 프로세스 및 정보 시스템 및 부서의 구조와 기능을 기술하는 방법을 말한다.
CBD(Component based development)
- 컴포넌트 기반 개발
- CBD는 공통적인 인터페이스를 가지고 있어서 여러 시스템에서 사용이 가능하도록 프로그램 코드의 구성요소를 만들고, 조립 및 재 사용하는 개발 방식이다. 이는 소프트웨어를 통째로 개발하던 기존의 방식과 달리, 부품 역할을 하는 소프트웨어 컴포넌트를 각 기능별로 개발하고, 각자에게 필요한 것을 선택하여 조립함으로써, 소프트웨어 개발에 드는 노력과 시간을 절약할 수 있다. (텀즈)
Side Effect(부수효과, 부작용)
- 함수나 expression(표현식)에 있어서의 어떤 상태(state)의 수정이 리턴값에 영향을 주는 것을 side effect라고 한다. 예를들어서 어떤 함수에서 전역변수나 static variable 혹은 그것의 인자를 수정했는데, 다른 함수의 결과에 영향을 끼친다면 이 함수를 side-effecting 함수라고 한다. side effect는 프로그램의 결과를 예측하기 힘들게 한다. 그러므로 가능하면 side effect에 자유롭도록 함수를 작성할 필요가 있다.
일반적으로 절차지향적언어를 이용해서 함수를 작성할 경우 side effect의 취약한 것으로 알려져 있다. 함수형언어를 사용하면 side effect를 최소화 할 수 있다.
추상화(abstract)
- 복잡한 자료, 모듈, 시스템등으로 부터 핵심적인 부분을 간추려 내는 것을 말한다.
marshalling
- 객체를 직렬화(객체를 바이트 스트림으로 변환)
unmarshalling
- 객체로 역직렬화(바이트 스트림을 객체로 변환)
NAS(Network attached storage)
- NAS는 네트웤에 접속되도록 특화된 파일서버이다. 이것은 이더넷이나 TCP/IP와 같은 전통적인 LAN 프로토콜을 사용하며, 오직 유닉스의 NFS와 도스/윈도우의 SMB와 같은 파일 입출력 요청만 처리한다. (출처 텀즈)
헤스켈 컴파일러에서 Parallesim 과 Concurrency 용어를 구분해서 사용한다고 함.
Paralleism
- 헤스켈 프로그램을 성능 향상을 목적으로 여러 프로세서에 돌리는 것을 의미한다. 이 과정은 의미 변화 없이 눈에 보지이 않게(자동으로) 이루어지는 것이 이상적이다.
Concurrency
- 프로그램을 I/O를 수행하는 여러 개의 쓰레드를 구현하는 것을 의미한다. Concurrent 헤스켈 또한 병렬 머신에서 실행될 수 있으나, Concurrency의 주 목적은 성능 향상이 아니라 이 방법이 프로그램을 작성하고 가장 쉽고 직접적인 방법이기 때문이다. 쓰레드가 I/O를 수행하기 때문에 프로그램의 의미는 비결정적(non-deterministic)이다.
Paralleism
- 헤스켈 프로그램을 성능 향상을 목적으로 여러 프로세서에 돌리는 것을 의미한다. 이 과정은 의미 변화 없이 눈에 보지이 않게(자동으로) 이루어지는 것이 이상적이다.
Concurrency
- 프로그램을 I/O를 수행하는 여러 개의 쓰레드를 구현하는 것을 의미한다. Concurrent 헤스켈 또한 병렬 머신에서 실행될 수 있으나, Concurrency의 주 목적은 성능 향상이 아니라 이 방법이 프로그램을 작성하고 가장 쉽고 직접적인 방법이기 때문이다. 쓰레드가 I/O를 수행하기 때문에 프로그램의 의미는 비결정적(non-deterministic)이다.
'study' 카테고리의 다른 글
추상화(abstraction), 일반화(generalization) (0) | 2016.03.02 |
---|---|
[도서] - 자바 병렬 프로그래밍 (0) | 2010.06.30 |
[도서] - Java Performance Fundamental (0) | 2010.06.30 |
[Apache Click] - 클릭(??) (0) | 2010.06.28 |