본문 바로가기

👨‍🏫일문일답40

Concurrency Issue and Thread-safety 자원 공유 시 발생하는 문제인 동시성 문제(concurrency issue)에 대해 알아본다. 여러 스레드 및 애플리케이션에서 하나의 자원을 동시에 사용하려고 하면 경쟁 상태(race condition)가 발생한다. 이를 동시성 문제라고 하고 이런 상황이 발생되지 않는 성질을 스레드 안전성(thread-safety)라고 한다. 이를 달성하기 위한 방법에 대해 살펴보려고 한다. Java API를 이용한 해결 방안 - synchronized - 메서드나 코드 블록에 synchronized 예약어를 사용하여 락을 걺 - 하나의 프로세스에서만 락이 가능하고 여러 프로세스 또는 앱에서 접근 시 사용 불가 - 따라서, 여러 애플리케이션 혹은 서버가 데이터에 접근해야 하는 실무 환경에서는 거의 사용되지 않음 Data.. 2024. 4. 6.
AJAX 사용 시 CSRF 토큰 쿠키 httpOnly 옵션 사용 여부? CSRF 방어에 대해 공부하면서 안전한 CSRF 저장 방식과 사용 방식에 대한 고민을 하게 되었다. 스프링에서 제공하는 CSRF 저장소에는 세션과 쿠키 두 가지가 있는데, 전자를 사용할 경우 세션에서 토큰을 꺼내서 폼에 토큰을 추가하여 클라이언트에 전달하게 되고, 후자를 사용하게 될 경우 토큰을 쿠키에 담아 클라이언트에게 전달하게 된다. 세션을 사용하게 되면 토큰 값이 노출되고 뷰에 토큰을 삽입하는 코드를 작성해야 해서, 쿠키를 사용하는 것이 더 안전하고 편리해 보였다. 따라서 쿠키 방식을 사용하기로 정하였다. 이 경우, 스프링 시큐리티의 기본값이 세션 저장 방식이기 때문에 쿠키 저장 방식으로 설정을 바꿔줘야 한다. 그러고 나서 httpOnly 옵션을 false로 설정할 것인가 말 것인가를 선택해야 하는.. 2024. 3. 17.
무중단 배포(zero-downtime deployment) 서비스를 중단하지 않고 배포하는 방법이다. 로드밸런서와 두 개 이상의 인스턴스를 사용하여 진행한다. 블루그린, 카나리, 롤링 전략이 있다. 블루-그린 배포 전략은 기존 환경과 동일한 새 인스턴스(그린)에 배포 후 로드밸런서를 통해 트래픽을 기존 인스턴스(블루)에서 새로운 환경으로 전환하는 방식이다. 카나리 배포 전략은 기존 버전과 새로운 버전을 "같이 운영"하되, 새로운 버전의 비율을 점진적으로 늘려가며 이상이 없는지 확인 후 새로운 버전으로 전환하는 방식이다. 롤링 배포 전략은 기존에 인스턴스 중 일부를 "중단"한 뒤 새로운 버전을 배포한 다음, 트래픽을 기존 인스턴스에서 새로운 인스턴스로 전환하는 방식이다. 장단점 블루-그린 배포 전략 -> 버전 간 호환성 문제 없음. 추가적인 인스턴스 필요. 카나리.. 2024. 3. 4.
프로세스 스케쥴링 방식 비선점형 방식 CPU 점유 시 다른 프로세스가 현재 실행 중 프로세스를 중단 시킬 수 없음 FIFO(First In First Out) 도착한 시간대로 실행 가장 간단, 공평 평균 반환 시간이 긺 SJF(Short Job First) 작업이 끝나기까지 실행 시간 추정치가 가장 작은 작업 먼저 평균 대기 시간 짧음 실행 시간 긴 작업 많을 경우 무한 대기 상태가 발생할 수 있음 HRN(Highest Response-ratio Next) FIFO와 SJF의 단점 보완 우선순위 공식((대기시간 + 서비스시간)/서비스 시간)으로 계산하여 그 수치가 값부터 낮은 순으로 우선순위가 부여됨 선점형 방식 하나의 프로세스가 CPU 점유 시 다른 프로세스가 현재 사용 중인 프로세스를 중단시킴 RR(Round Robin) .. 2024. 1. 29.
728x90