전체 게시물
-
[Spring] Redis를 사용하여 조회 성능 개선하기Backend/스프링(spring) 2024. 9. 17. 17:23
1. 회고 카드(Section)와 회고 보드(Retrospective)우리 프로젝트는 1개의 회고 보드에 여러 개의 회고 카드를 작성할 수 있다. 즉, 회고 보드와 회고 카드는 1:N 관계이다. 따라서 회고 보드를 조회하면 작성된 모든 회고 카드를 조회할 수 있다. 2. 새로운 회고 카드(Section) 생성하기우리 프로젝트는 회고 보드(retrospective)에 작성된 모든 회고 카드(section)를 DB에서 조회한다. GET /sections를 호출하여 모든 회고 카드를 조회하는 것을 확인할 수 있다. 새로운 회고 카드를 등록하면 POST /sections 요청을 통해 DB에 새로운 회고 카드를 등록한다. 생성된 회고 카드를 포함하는 모든 회고 카드를 가져오기 위해서 다시 GET /section..
-
[운영체제] 임계 구역과 동기화 기법(뮤텍스 락, 세마포)legacy/Operating System 2024. 9. 17. 14:27
이전에 뮤텍스 락과 세마포에 대해서 다룬 적이 있습니다. 현재 글은 이전 글을 다듬어서 새로 작성된 게시물입니다.https://server-technology.tistory.com/338 동기화가 필요한 이유여러 스레드가 동시에 임계 구역(Critical Section)에 접근하면 데이터 일관성 문제가 발생할 수 있다. 임계 구역이란 공유 자원에 여러 스레드가 동시에 접근하였을 때 문제가 발생할 수 있는 코드 영역이다. 여러 스레드가 동시에 임계 구역에 접근하여 문제가 발생하는 것을 레이스 컨디션(Race Condition)이라고 한다.레이스 컨디션 문제를 해결하기 위해서는 동기화 처리가 필요하다. 동기화란 실행 순서를 제어하고 상호 배제를 준수하는 것이다.실행 순서 제어 : 여러 스레드가 존재할 때 ..
-
[운영체제] 해시 테이블(Hash Table)과 해시 충돌(Hash Collision)legacy/Operating System 2024. 9. 11. 12:28
1. 해시 테이블(Hash Table)이란?해시 테이블이란 키와 값의 대응으로 이루어진 데이터 구조이다. 예를 들어, ISBN 번호가 키라면 그에 대응하는 책 제목이 값이 된다. 만약 ISBN 번호 9791162245651을 키로 입력하면 대응하는 값으로 혼자 공부하는 파이썬이 반환된다. 해시 테이블에서는 해시 함수를 사용하여 키를 특정 버킷에 매핑한다. 버킷은 배열처럼 여러 개로 이루어진 저장 공간이다. 해시 함수는 입력된 키에 대해 인덱스를 계산해 해당 버킷에 데이터를 저장하거나 찾을 수 있도록 한다. 예를 들어, Hanbit이라는 키를 해시 함수에 입력하면 해시 함수가 계산한 인덱스 2에 데이터를 저장하게 된다. 다른 키들도 마찬가지로 해시 함수를 통해 계산된 인덱스를 기반으로 버킷에 저장된다. 2..
-
[운영체제] 페이징 기법과 페이지 테이블의 문제점legacy/Operating System 2024. 9. 10. 21:28
1. 페이징 기법은 외부 단편화 문제를 해결한다.페이징(paging) 기법은 프로세스의 논리 주소 공간은 페이지(page)라는 일관된 크기로 나누고 물리 주소 공간을 페이지와 동일한 크기인 프레임(frame)으로 나눈다. 프레임에는 페이지가 적재된다. 페이징 기법은 프로세스의 논리 주소 공간을 일관된 크기의 페이지로 나누기 때문에 메모리에 빈 공간이 발생하지 않는다. 따라서 외부 단편화가 발생하지 않는다. 가상 메모리 기법이란 프로세스의 일부만 메모리에 적재하여 실제 메모리보다 더 큰 프로세스를 실행할 수 있도록 하는 메모리 관리 기법이다. 보조기억장치의 일부를 메모리처럼 사용하거나 실행에 필요한 프로세스의 일부만 메모리에 적재하여 메모리보다 더 큰 프로세스를 실행할 수 있다. 페이징 기법에서도 스와핑..
-
[Spring] 스프링 이벤트, @TransactionalEventListenerlegacy/Spring 2024. 9. 9. 16:08
1. 스프링 이벤트(Spring Event)를 사용하는 이유스프링 이벤트(Spring Event)를 사용하는 이유는 서비스 간의 의존성을 줄이기 위해서이다.스프링 이벤트를 사용하기 전에는 OrderService가 (1)사용자의 주문 요청을 처리하고 (2)푸시 메시지 발송 및 (3)메일 전송을 처리한다. OrderService는 PushService와 MailService를 의존하게 된다.반면에 스프링 이벤트를 사용하면 OrderService는 사용자의 주문 요청을 처리하는 책임만 갖고, 스프링 이벤트가 푸시 메시지 발송과 메일 전송을 처리한다. OrderService는 주문 요청만 처리하기 때문에 푸시 메시지 발송 및 메일 전송에 대한 책임을 갖지 않는다. 2. 스프링 이벤트(Spring Event) 구..
-
[운영체제] 프로세스 간에 데이터를 주고받는 방법 (Inter Process Communication)legacy/Operating System 2024. 9. 7. 19:51
프로세스 간에는 기본적으로 자원을 공유할 수 없다. 각 프로세스는 독립된 주소 공간을 가지고 있기 때문에 자신의 메모리 공간에만 접근할 수 있다. 만약 프로세스가 서로의 메모리 공간에 접근할 수 있다면 의도치 않게 데이터를 변경하거나 충돌이 발생할 수 있다.만약 프로세스 간에 데이터를 주고받고 싶다면 IPC(Inter-Process Communication) 방식을 사용해야 한다. 1. 공유 메모리공유 메모리 방식은 사용자 영역 일부를 데이터를 주고받기 위한 메모리 공간으로 사용한다. 프로세스 A는 B에게 전달하고자 하는 데이터를 공유 메모리에 저장하고, 프로세스 B는 공유 메모리에 저장된 데이터를 읽는다. 이렇게 되면 프로세스 A가 B에게 데이터를 전달한 것과 마찬가지가 된다. 공유 메모리 방식은 사용..