본문 바로가기

분류 전체보기

(11)
레디스를 활용한 동시성 문제 해결 Lettuce vs Redisson 레디스를 활용하여 동시성 문제를 해결할 때 사용하는 대표적인 두 가지- Lettuce- Redisson    Lettucesetnx 명령어를 활용하여 분산락 구현set if not exist의 줄임말로 키와 밸류를 set 할 때 기존의 값이 없을 때만 set 하는 명령어이다.spinLock방식이므로 retry 로직을 개발자가 작성해주어야 한다.♚ spin Lock이란?락을 획득하려는 스레드가 락을 사용할 수 있는지 반복적으로 확인하면서 락 획득을 시도하는 방식이다. 락이 해제될 때까지 계속해서 시도하므로, 락을 빠르게 획득할 수 있지만 시스템에 부하를 줄 수 있다. 적용 코드 ) Redissonpub/sub 기반으로 lock 구현 제공Pub/Sub 방식: 채널을 하나 만들고 락을 점유 중인 스레드가 락을..
레이스 컨디션 레이스 컨디션레이스 컨디션이란 컴퓨터 프로그램에서 동시에 실행되는 여러 프로세스나 스레드가 서로의 작업을 예상하지 못하고 경쟁하는 상황을 말한다. 이로 인해 프로그램의 동작이 예기치 않게 변할 수 있다. 표를 보고 쉽게 이해해 보자. Thread1StockThread2select *from stockwhere id = 1{id : 1, quantity : 5 } update set quantity = 4from stockwhere id = 1{id : 1, quantity : 4 }  {id : 1, quantity : 4 }select *from stockwhere id = 1 {id : 1, quantity : 3 }update set quantity = 3from stockwhere id = 1 예..
동시성 이슈 트러블 슈팅(작성중) 재고시스템 구현중, 주문서비스 로직에서 동시성 오류가 발생하였다.예를 들어, 재고가 100개인 상황에서 100개의 주문을 동시에 요청했을 때, 모든 재고가 완전히 소진되지 않는 상황이 발생했다.왜?레이스컨디션이 일어났기 때문이다. 레이스컨디션이란 둘 이상의 Thread가 공유 데이터에 액세스할 수 있고 동시에 변경을 하려고할 때 발생하는 문제이다. 그럼 내 프로젝트에선 왜 레이스 컨디션이 일어나는가?-> A와 B가 동시에 주문을 요청했을 때, 재고 수량 갱신이 누락되는 문제가 발생할 수 있다. 예상으로는 A의 주문에 맞춰 재고수량이 변경된 뒤 B의 주문 재고수량이 수정된다 생각하지만 실제로는 A의 요청을 받고 갱신하기 전에 B의 요청을 받아 같은 재고 수를 가져오게되어 A,B모두 수량이 같은 상태에서 재..
Docker Compose Docker Compose 를 사용하는 이유는?편하게 설정하기: Docker Compose는 여러 컨테이너를 한 파일에 적어서 설정할 수 있어요. 이 파일에는 컨테이너가 무슨 이미지를 쓸지, 어떤 포트를 사용할지, 환경 변수는 뭐가 필요한지 등을 적어둬요. 이렇게 하면 여러 컨테이너를 한 번에 쉽게 설정할 수 있죠.자동으로 배포하기: 설정 파일이 있으면, Docker Compose가 알아서 컨테이너들을 만들어 주고 실행해 줘요. 개발자가 일일이 명령어를 입력할 필요가 없어요.의존성 관리: 컨테이너들이 서로 의존하는 관계가 있으면, Docker Compose가 이를 관리해 줘요. 예를 들어, A 컨테이너가 B 컨테이너를 필요로 하면, A를 먼저 켜고 나서 B를 실행하는 식이죠.모니터링과 로깅: Docker..
DockerFile dockerFile?도커 이미지를 빌드하기위한 파일(일종의 레시피)어떤파일실행?설치? 어떤os?같은걸 적어놓는 파일 빌드라는과정으로 이미지로 변환필요한 파일을 다운받고 설정한데로 명령을 실행후에 빌드된 이미지를 실행하면 컨테이너가 실행 왜 써?- 앱을 컨테이너로 만들 때 이미지를 만드는 용도, 앱이 필요한것을 한곳에 담을수있음- 누구나 dockerfile을 보고 똑같은 환경을 쉽게 만들수있음- 앱 생성과정을 매번 똑같은 방식으로 자동화시킬수 있다. # DockerfileFROM ubuntu:latestMAINTAINER Your Name RUN apt-get update && apt-get install -y nginxCOPY index.html /usr/share/nginx/htmlEXPOSE 80CM..
CI/CD 란? CI/CD는 간단히 말해서 애플리케이션 개발단계부터 배포 때까지 모든 단계 들을 자동화를 통해서 좀 더 효율적이고 빠르게 사용자에게 배포할 수 있는 것을 말한다.CI = 빌드 및 테스트 자동화CD = 배포 자동화 CI(Continuous Integration)CI는 지속적인 통합을 뜻한다.코드 변경사항이 주기적으로 빌드되고 테스트되어 merge되는것을 말하며 개발자용 자동화 프로세스이다. 예를 들어, 개발자들이 오랜기간 각자 코드를 작성하고 합치게 된다면 개발을 한 시간보다 충돌을 해결하는데 시간이 더 소모될 것이다. 만약 동시에 개발하여 분기가 너무 많거나 상당히 긴 코드가 중복되어 충돌이 생긴다면 생각도 하기 싫을 것이다.. 또한 통합을 할때마다 빌드, 테스트, 머지 과정을 거치게 된다면 불필요한 시..
객체지향 프로그래밍 1. 객체 지향 언어객체지향이론의 기본 개념은 ‘실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다.’1.2 객체지향 언어기존 언어의 발전된 형태임. 코드간의 서로 관계를 맺어 줌으로써 보다 유기적으로 프로그램을 구성.객체지향언어의 주요 특징코드의 재사용성이 높고 유지보수 용이코드의 관리가 용이함신뢰성이 높은 프로그래밍 가능(제어자와 메서드 이용)중복된 코드제거 2. 클래스와 객체2.1 클래스와 객체의 정의와 용도클래스란?객체를 정의해놓은 것(정의), 객체의 설계도 또는 틀(클래스:붕어빵틀, 인스턴스 : 붕어빵)객체를 생성하는데 사용(용도)객체 그 자체는 아니다.객체?실제로 존재하는 것, 개념이나 논리, 클래스에 정의된 내용대로 메모리에 생성된 것2.2 객체와 인스턴..
[운영체제] 커널모드와 사용자 모드 CPU Protection Ring CPU Protection Rings(보호 링)은 운영체제가 시스템의 보안을 관리하고 각 프로세스의 권한을 분리하는 데 사용되는 메커니즘이다. 위 사진을 보면 0부터 3까지 링이 있는데 이 링은 권한수준을 나타내며, 낮은 번호일수록 권한이 높아진다. CPU가 실행될떄 마다 Protection Ring에 적혀있는 레벨정보에 따라 실행여부가 결정된다. Ring 0 (커널 모드) - 커널이 동작하는 모드이다. - 운영체제의 핵심 서비스를 실행하고, 시스템 레벨 작업을 수행하는 모드이다. - 모든 하드웨어 자원과 권한에 대한 접근이 허용된다. Ring 1, 2 (예비 권한) - 일반적으로 사용되지 않는다. - 몇몇 운영체제는 이러한 중간 권한을 사용하여 특정 작업을 분리하거나..
[운영체제] OS (커널, 쉘, 시스템 콜) OS (Operating System) 운영체제 (Operating System) 운영체제란? 컴퓨터 자원을 효울적으로 관리하고 프로그램에 대한 일반적 서비스를 지원하는 시스템 소프트웨어이다. 주요 운영체제로는 윈도우, LINUX, MAC등이 있다. OS는 커널을 의미하는데 일반적으로 커널에 여러가지 추가된 상태를 OS라고 통칭하여 부르고 있고 운영체제의 코어를 커널이라고 생각할 수 있다. 운영체제는 사용자가 사용하는 응용프로그램이 효율적으로, 적절하게 동작하도록 지원하는 것이 목표이다. 1. 운영체제의 역할 시스템 자원 관리자 역할 프로세스 관리는 다중 작업을 지원하며, CPU 스케줄링과 프로세스 간 통신을 담당한다. 메모리 관리는 물리적인 메모리를 효율적으로 할당하고 관리한다. 파일 시스템 관리는 파..
[컴퓨터 구조] 가산기 이진수의 덧셈 간단한 논리연산을 가지고 계산기를 만들수있다. 게이트들을 연결하여 새로운 게이트를 만들 수 있다. sum 비트 0 + 0 = 0 ,carry는 0 0 + 1 = 1, carry는 0 1 + 0 = 1, carry는 0 1 + 1 = 0, 하지만 carry는 1 '합'은 두 비트를 더했을 때의 결과이다. 이진 덧셈에서는 0과 0을 더하면 0, 1과 0을 더하거나 0과 1을 더하면 1이 된다. 1과 1을 더하면 0이 된다 (이 경우, 캐리가 발생한다). 예를 들어, 반가산기에서 두 입력 비트가 각각 1과 0일 경우, 합은 1이 됩니다. 합은 XOR 게이트를 사용하여 구할 수 있습니다. XOR 게이트는 두 입력이 서로 다를 때 1을 출력하고, 같을 때 0을 출력합니다. XOR Gate를 쓰면 계..