목록전체 글 (24)
그리미

기반 저장 장치 매체에 저장되는 데이터 구성과 해당 데이터에 어떻게 접근하는 지에 관해 학습을 진행했습니다 파일 구성블록이라 불리는 고정 길이 저장 단위로 각 파일을 논리적으로 분할단일 블록은 각 레코드를 완전히 포함 (데이터 항목 접근 단순화하고 접근 속도 향상) 고정 길이 레코드문제 제기블록 내부 레코드 일부가 블록 넘어 저장되는 경우 어떻게 할 것인가답변) 한 블록을 완전히 채울 수 있는 만큼만 레코드를 할당. 블록 크기 / 레코드 크기 (소수점은 버린다)레코드 삭제가 힘들다. 삭제할 레코드가 차지하는 공간은 다른 레코드로 채워야한다. 혹은 그 공간을 무시할 수 있도록 삭제 표시해야한다.답변) 삭제된 빈 공간을 채우기 위해 레코드 이동하는 건 바람직하지 못하다. 부차적인 블록 접근이 일어나기 때문이..

12.3 자기 디스크 12.3.1 디스크의 물리적 특성 디스크 컨트롤러는 쓰인 각 섹터에 체크섬을 부착. 섹터를 읽을 때 컨트롤러는 검색된 데이터로부터 다시 체크섬을 계산해 저장된 체크섬과 비교. 손상 되었다면 읽기 실패 신호를 보낸다. `손상된 섹터의 재배치` 디스크 초기화나 섹터 쓰기가 시도 될 때 컨트롤러가 섹터 손상을 감지하면 논리적으로 섹터를 다른 물리적 위치에 (별도의 여분 섹터 풀)에 배치할 수 있다. 12.3.2 디스크의 성능 측정 용량, 접근 시간, 데이터 전송 속도 접근 시간 : 읽기/쓰기 요구 받았을 때부터 데이터 전송되기 까지 시간. `탐색 시간` 디스크의 특정 섹터에 있는 데이터에 접근하기 위한 시간 `데이터 전송 속도` 바깥쪽 트랙이 안쪽 트랙보다 더 많은 수의 섹터를 포함해서 ..

# 쓰레드 풀(Thread Pool) 쓰레드 풀은 쓰레드 생성 및 삭제가 빈번하게 일어날 때 발생하는 메모리 할당에 소모되는 비용 문제를 해결하기 위해 만들어졌습니다. 자바에서는 쓰레드 인스턴스의 start() 메서드가 호출되면 커널 쓰레드를 할당받아 사용합니다. 커널 쓰레드를 생성하고 반납하는 연산은 비싼 작업입니다. 이는 쓰레드를 위한 메모리 할당, 스레드 스택 초기화, OS 쓰레드 등록을 위한 OS 콜 등을 포함하기 때문입니다. 서버 어플리케이션에서 매번 새로운 쓰레드를 사용하면 이러한 과정에 드는 비용과 메모리 부족 현상이 발생할 수 있습니다. 또한, 반납한 쓰레드를 해제해야 하기 때문에 GC도 빈번하게 일어납니다. 따라서, 쓰레드 풀은 쓰레드 생성과 메모리에서 쓰레드를 해제하는 비용을 줄이기 위..
본 글에서는 자바에서 Pass by Value와 Pass by Reference를 다루어보겠습니다. 1. Pass by Value란? 함수를 호출할 때 변수의 실제 값을 복사하여 전달하는 방식을 말합니다. 호출된 함수 내에서 이 값을 변경하더라도 원래 변수의 값에는 영향이 가지 않습니다. 예시 void updateValue(int value) { value = 55; } public static void main(String[] args) { int value = 22; updateValue(value); System.out.println(value); // 출력: 22 } 위 예시에서 updateValue 메소드 내에서 value의 값을 바꾸어도 main 메소드에서의 value 값은 그대로 22입니다...
Chapter 1 락이 걸리는 부분을 최소화하기공연 결제 로직에서 전역적으로 걸리는 락을 해제하였습니다.@Component@RequiredArgsConstructorpublic class PurchaseTicketLock { private final Lockable lock; private final PurchaseFacadeService purchaseFacadeService; public void purchaseInOrder(final String nickName, final Long ticketId, final Integer requestSeatCount) { lock.lock(() -> purchaseFacadeService.purchaseTicket(ni..

목표 가상 메모리를 정의 하고 이 점을 설명 한다 요구 페이징을 사용하여 페이지가 메모리에 적재되는 방법을 설명한다 FIFO 최적 및 LRU 페이지 교체 알고리즘을 적용한다 프로세스 작업 집합을 설명하고 프로그램 지역성과 어떤 관련 있는 지 설명한다 여러 운영 체제에서 가상 메모리를 관리하는 방법을 설명한다 가상 메모리란!! 프로세스 전체가 메모리에 올라오지 않더라도 실행 가능한 부분 각 프로그램이 더 작은 메모리를 차지해서 더 많은 프로그램을 동시 수행 할 수 있다 프로그램을 메모리에 올리고 스왚하는 데 필요한 I/O 회수가 줄어 들어 프로그램들이 보다 빨리 실행 copy on write fork를 사용하여 자식을 만들때 실제 메모리를 복사하는 게 아니라 원본 프로세스의 메모리 페이지들을 공유, 특정 ..

요약 (Summary) 객체의 역할을 고려해서 책임과 협력을 나눈다. (현행) TicketService 의 purchaseTicket() 은 account 저장, ticket 저장 그리고 memberTicket 저장을 하고 있다. -> (리팩토링) Ticket 과 Account, MemberTicket 역할에 따라 책임과 협력을 나누었습니다. (현행) Ticket 이 seatCount를 계산하고 있다. -> (리팩토링) Ticket 과 Seat 를 구분하고 Seat 에서 해당 로직을 처리했습니다. 배경 (Background) TicketService @Transactional public void purchaseTicket(final String nickName, final Long ticketId, f..