분류 전체보기

· 스프링
Spring TestContext 프레임워크는 단일 JVM 내에서 테스트를 병렬로 실행하기 위한 기본적인 지원을 제공한다.테스트 스위트에 동시성을 도입하면 예기치 않은 부작용, 이상한 런타임 동작, 간헐적으로 또는 무작위로 실패하는 테스트가 발생할 수 있다. 따라서 Spring 팀은 테스트를 병렬로 실행하지 않는 경우에 대한 다음과 같은 일반적인 지침을 제공한다. 병렬로 테스트하는 것을 권장하지 않는 경우테스트가 다음과 같은 경우 테스트를 병렬로 실행하지 말자.Spring 프레임워크의 @DirtiesContext를 사용하는 경우Spring Framework의 @MockitoBean 또는 @MockitoSpyBean을 사용하는 경우Spring Boot의 @MockBean 또는 @SpyBean을 사용하는 경..
· 자바
컨텍스트 스위칭다른 스레드 없이 메인 스레드 하나만 스케줄링하다고 하면, 메인 스레드는 항상 실행될 것이다. 반대로 CPU 개수보다 실행 중인 스레드의 개수가 많다고 하면, 운영체제가 특정 스레드의 실행 스케줄을 선점하고 다른 스레드가 실행될 수 있도록 스케줄을 잡는다. 이처럼 하나의 스레드가 실행되다가 다른 스레드가 실행되는 순간 컨텍스트 스위칭이 일어난다. 컨텍스트 스위칭이 일어나는 상세한 구조를 보면, 먼저 현재 실행 중인 스레드의 실행 상태를 보관해두고, 다음번 실행되기로 스케줄 된 다른 스레드의 실행 상태를 다시 읽어 들인다. 스레드 스케줄링을 하려면 운영체제와 JVM 내부의 공용 자료 구조를 다뤄야 한다는 문제가 있다. 운영체제와 JVM 역시 프로그램 스레드가 사용하는 것과 같은 CPU를 함께..
· 자바
확장성은 CPU, 메모리, 디스크, I/O 처리 장치 등의 추가적인 장비를 사용해 처리량이나 용량을 얼마나 쉽게 키울 수 있을지를 말한다. 병렬 프로그램 환경에서 확장성을 충분히 가질 수 있도록 애플리케이션을 설계하고 튜닝하는 방법은 기존에 해오던 일반적인 성능 최적화 방법과 다른 부분이 많다. 성능을 높이기 위해 튜닝하는 작업을 하는 경우 그 목적은 어쨌건 동일한 일을 더 적은 노력으로 하고자 하는 것이다. 성능이라는 단어에 포함된 '얼마나 빠르게'와 '얼마나 많이'라는 두 가지의 의미는 완전히 다른 뜻을 가지며, 심지어는 서로 화합할 수 없는 상황도 발생한다. 더 높은 확장성을 확보하거나 하드웨어 자원을 더 많이 활용하도록 하다 보면, 앞서 큰 작업 하나를 작은 여러 개의 작업으로 분할해 처리하는 것..
· 스프링
Spring Modulith 에서는@ApplicationModuleTest가 선언된 테스트에 Scenario를 파라미터로 전달한다. Scenario는 아래 단계를 정의하고 정의를 안내하는 API를 노출한다.시스템에 대한 자극(stimulus, publish)을 정의한다. 일반적으로 이벤트 게시 또는 모듈에 의해 노출된 Spring 구성 요소의 호출이 해당한다.실행의 기술적 세부 사항(시간 초과 등)의 선택적 사용자 정의한다.어떤 예상된 결과를 정의한다. 특정 조건을 만족하는 또 다른 애플리케이션 이벤트가 발생하거나, 모듈의 상태 변화가 발생하여 이를 공개된 컴포넌트를 호출함으로써 감지할 수 있는 것을 의미한다.수신된 이벤트 또는 관찰된 변경된 상태를 확인한다.(선택 사항) Scenario 시작 (1)//..
· 개발
모든 스레드가 락을 동일한 순서로 확보하려 할 때 데드락이 발생할 수 있는데, 여기에서 락을 확보하는 순서는 전적으로 메소드를 호출하는 인자의 순서에 달렸다.따라서 두 개의 스레드가 메소드를 동시에 호출하되, 한쪽 스레드는 X에서 Y로의, 다른 쪽 스레드는 Y에서 X로 호출될 때, 데드락이 발생한다. public void transferMoney(Account fromAccount, Account toAccount, DollarAmount amout) { synchronized (fromAccount) { synchronized(toAccount) { // ... } }}위와 같이 중첩된 구조에서 락을 가져가는 상황에서 데드락을 찾아낼 수 있다.락을..
· 자바
카운팅 세마포어는 특정 자원이나 특정 연산을 동시에 사용하거나 호출할 수 있는 스레드의 수를 제한하고자 할 때 사용한다.카운팅 세마포어의 이런 기능을 활용하면 자원 풀이나 컬렉션의 크기에 제한을 두고자 할 때 유용하다. public Semaphore(int permits) { sync = new NonfairSync(permits); }Semaphore 클래스는 가상의 퍼밋을 만들어 내부 상태를 관리하며, Semaphore를 생성할 때 생성 메소드에 최초로 생성할 퍼밋의 수를 넘겨준다. 외부 스레드는 퍼밋을 요청해 확보하거나, 이전에 확보한 퍼밋을 반납할 수도 있다. public boolean tryAcquire(int permits, long timeout, TimeUnit unit) ..
belljun
'분류 전체보기' 카테고리의 글 목록 (3 Page)