동시성 문제동시(concurrent)에 공유 데이터에 access(접근)하여 데이터를 manipulate(조작)하는 과정에서 데이터의 일관성이 깨지는 문제 동시성 문제의 근본 원인프로세스나 스레드는 instruction 실행 도중 intruppted(중단) 될 수 있고 CPU의 코어는 다른 프로세스나 스레드 작업을 할당 받을 수 있다. 즉, 두개 이상의 프로세스나 스레드를 동시에 수행할 때 CPU의 context-switching으로 인해 발생한다는 것이다. 아래 간단한 예제를 통해 동시성 문제의 한 예를 보자.public class ConcurrencyProblem { public static int COUNT = 0; public static void main(String[] args) { ..
프로세스는 실행 중인 프로그램을 의미하며, 스레드는 경량 프로세스를 의미한다.스레드는 프로세스에 비해 더 적은 컴퓨터 자원을 필요로한다.프로세스가 OS를 통해 자원을 할당 받는다면, 스레드는 프로세스를 통해 자원을 할당 받는다.스레드는 프로세스 내부에서 메서드를 기준으로 한 실행 흐름을 분리한 것이다.자바로 예를 들면 Thread 클래스의 run 메서드를 기준으로 실행 흐름이 분리되어 자원을 할당 받아 수행되는 것이다. 멀티 프로세스와 멀티 스레드는 다중 코어 환경에서 컴퓨터 자원을 효율적으로 사용할 수 있는 환경을 보장한다.멀티 프로세스와 멀티 스레드를 아래 3가지 관점에서 비교 해보도록 하겠다. 자원 관리컨텍스트 스위칭병렬성과 동시성 자원 관리 멀티 프로세스 환경에서는 위와 같이 프로세스 마다 독립..
프로세스실행 중인 프로그램프로그램이 CPU에 의해 수행되고, 메모리에 할당된 상태프로세스는 작업을 완료하기 위해 CPU, memory, file, I/O devices와 같은 자원을 필요로 한다.각각의 프로세스는 독립된 메모리 영역을 할당 받는다.* 프로그램 : 하드웨어를 동작시키는 명령어 집합 프로세스의 구조 프로세스는 메모리에서 위와 같이 여러개의 구역으로 나뉜다.코드 영역(Text Section) : 실행 코드(명령어)가 저장됨데이터 영역(Data Section) : 전역 변수, 정적 변수가 저장되는 영역힙 영역(Heap Section) : 동적으로 할당된 메모리가 저장되는 영역스택 영역(Stack Section) : 함수 호출 시 지역 변수, 매개변수, 리턴 주소 등이 저장되는 영역* JVM으로..
메모리 단편화외부 단편화 첫번째 단계에서 process5, 8, 2가 할당되어있다.process8을 종료 시켜 중간에 비어있는 메모리 영역을 확보하였다.이후 process9를 실행시켜 메모리 영역에 할당하였고, 그런 다음 process5를 종료 시켜마지막 단계처럼 두개의 비어있는 영역을 확보하였다. 이때, process8을 메모리에 할당할 수 있을까??두 비어있는 영역을 합쳐놓으면 process8을 할당할 만큼 충분한 공간이지만 연속적으로 존재하지 않기에 메모리 영역에 할당하지 못한다. 이와 같이 메모리에 충분한 공간이 있지만 연속적으로 존재하지 않아 데이터를 할당하지 못하는 상황을 외부 단편화 라고 한다. 내부 단편화 내부 단편화는 메모리 영역을 여러 프레임으로 나누어 각 프레임에 프로세스를 나누어 할..
메모리는 고유한 주소를 가지고 있는 바이트 배열로 구성된 데이터로 구성된다.CPU는 메모리 주소로 접근하여 저장된 명령어를 가져와 처리함으로써 프로그램을 동작 시킨다.Logical Address와 Physical Address의 구분CPU가 프로세스를 수행하기 위해 사용하는 메모리 주소는 실제 물리적 메모리 주소와 다르다.우리는 이 메모리 주소를 아래와 같이 구분한다.Logical Address : CPU가 생성하는 프로세스의 메모리 주소Physical Address : 실제 메모리에 할당되는 물리적 주소 먼저, 메모리 주소를 왜 구분하는지 알아보자.이를 이해하는 것이 앞으로 설명할 개념을 이해하는데 큰 도움이 될 것이다. 1. 물리적 메모리 주소 추적의 어려움물리적 메모리 주소는 변동될 수 있어, CP..
Garbage Collection"JVM의 가비지 컬렉터가 불필요한 메모리 자원을 해제하는 작업"자바에서 명시적으로 불필요한 데이터를 표현하기 위해서 null을 선언할 수 있다. 허나, 이러한 패턴의 코드는 잘 보이지 않는다. 가독성에도 좋지 않지만 null을 선언하지 않아도 가비지 컬렉터의 알고리즘에 의해 수집 될 수 있다. 가비지 컬렉션은 객체를 참조하는 다른 자원이 있는지 확인하는 Reachable 작업을 통해 제거 대상을 판단한다.가비지 컬렉션의 대상인 힙 영역의 객체들은 스택 영역의 변수들이나 참조타입의 정적 필드 의해 참조된다.스택이나 정적 필드에 의해 참조되는 객체를 Reachable이라고 하고, 참조되지 않는 객체는 UnReachable이라고 한다.가비지 컬렉션은 UnReachable이라고..
[용어 정리] 객체지향 프로그래밍을 이해하기 위해 필요한 아래의 용어에 대해 먼저 설명하겠다.모듈모듈이란 프로그램을 구성하는 기능 단위의 독립적인 명령어들의 집합이다.모듈은 독립적이며 유일한 기능을 갖고 다른 프로그램이나 모듈에서 호출되어 재사용될 수 있어야한다.따라서 모듈은 다양한 형태로 존재할 수 있는데 메서드, 객체, 패키지, 라이브러리 등이 이에 해당한다.(상위 모듈 : 호출하는 모듈 / 하위 모듈 : 호출 당하는 모듈)의존의존이란 모듈(또는 객체 등)이 동작하기 위해 다른 모듈의 자원을 사용하는 상황을 의미한다.이는 호출 당하는 하위 모듈의 변경사항이 호출하는 상위 모듈에 영향을 미친다는 것을 의미한다.의존성의존성의 존재 여부는 호출되는 하위 모듈의 변경사항이 호출하는 상위 모듈에 영향을..
스프링의 application context에 관리되는 빈들은 기본적으로 싱글톤으로 관리된다. 상태를 갖지 않는 객체의 메서드를 사용하기 위하여 매번 인스턴스화 하는 것은 효율적이지 않다.스프링에서는 이러한 이유로 싱글톤 타입이라는 것을 지원하고 싱글톤 타입으로 스프링 빈을 관리할 땐, 속성 없이 메서드만 구현하여 사용을 한다. 허나, 이렇게 메서드만 사용할 목적이라면 굳이 인스턴스화할 필요도 없고 static으로 만들어서 사용해도 되지 않나라는 의문이 들수 있다.static 메서드를 사용하는 것과 싱글톤 빈의 메서드를 사용하는 것의 차이는 클래스 메서드이냐, 인스턴스 메서드이냐의 차이이다.즉, 인스턴스를 사용하냐 하지 않냐의 차이이고, 이는 객체지향적인 프로그래밍을 할 수 있냐 없냐로 나타난다. sta..
