/images/logo.png

inshining

가능한 최선을 다해 살고 싶다.

Memcached VS Redis

Facebook의 서버 아키텍처 관련 블로그 글 을 보고 Memcached와 Redis 간 차이점에 대해 궁금해서 정리해보았다. Memcached vs Redis? Memcached 와 redis 모두 오픈 소스 인메모리 데이터 베이스로 캐시 용도로 사용된다. 두 사이 몇가지 차이점이 존재한다. Data Structure and Storage: Mecached: 단순 Key-Value Pair 구조이다. 간단한 String 데이터를 저장할 수 있다. Redis: 다양한 종류(String, list, set, sorted set, bit array)와 같은 다양한 구조 데이터 구조를 지원한다. Persistence Memcached: data persistence를 지원하지 않는다.

List vs Deque in Python

파이썬으로 코딩테스트를 준비하다보면 가끔적 list보다 deque를 사용하라는 팁을 듣곤 한다. list 보다 deque가 수행시간이 빠르다는 이유였다. 그럼에도 불구하고 기존 문제들을 풀어오면서 deque의 필요성을 느끼지 못했기에 별로 신경쓰지 않았다. 카카오 인터쉽 문제를 풀다보니 deque를 써야하는 상황이 생겨서 구체적으로 deque와 list가 어떻게 다른지 궁금했다. List in Python 기본적으로 array 구조를 띈다. 즉, 물리적으로 연속된 Linear 자료 구조이다. 그러나 array랑 다르게 파이썬 list는 같은 데이터 타입일 필요가 없다. Deque in Python Deque는 FIFO(First In Frist Out) 구조를 띈다.

세마포란?

시스템프로그래밍, 데이터베이스를 공부하다보면 계속해서 세마포 개념이 등장해서 명확하게 정리하고자 한다. 동기화 배경 지식 세마포, 스핀락은 동기화 작업을 수행하기 위한 방법이다. 동기화는 공유 데이터를 일관성을 유지하며 작업하는 것을 의미한다. 이 때 동기화를 처리하기 위한 공간을 임계 공간이라고 한다. 정리하면 세마포나 스핀락과 같은 방법은 임계 영역 안에서 처리 방법에 관한 내용이다. 스핀락? 스핀락은 세마포보다 비교적 간단한 개념으로 스핀락의 한계로 인해서 세마포 개념이 정립되었기 때문에 스핀락부터 알아보자. 임계 영역이라는 자물쇠를 열고 들어 가기 위해서 열쇠가 필요하다.

git cherry-pick

문제 상황 문제 상황 만약 다른 브랜치에서 쓰인 코드를 현재 브랜치에서도 쓰고 싶다면 2가지 방법이 있다. 원하는 소스 코드가 있는 브랜치에 가서 복사를 해서 붙여넣기를 통해서 현재 브랜치에 삽입힌다. 이 방법은 상당히 ‘무식’한 방법이다. 이런 방법이 자주 쓰인다면 브랜치 관리가 의미없을 정도로 브랜치 간 꼬인 현상이 나타날 것이다. 원하는 코드가 커밋 단위로 쪼개져서 작성되어 있다면 우아하게 해결할 수 있다. 바로 Cherry-pick 을 사용할 수 있다. 즉, 체리 픽을 사용해서 해결한다. 정의 **git cherry-pick**은 Git 버전 관리 시스템에서 특정 커밋을 다른 브랜치로 선택적으로 가져오는 명령어이다.

shell script - 텍스트 일치 여부 검사

문제 상황 C 언어로 짠 코드를 make 명령어를 통해서 빌드, 실행하면 result 라는 파일을 나온다. 이 결과물과 예상 결과물 사이 비교하고자 한다. 문제 해결 방법 shell script 작성 vim diff_case.sh 우선 diff_case.sh 파일 만들어야 한다. #!/bin/bash # make 명령어 실행 make # make 명령어로 생성된 결과 파일 경로 result_file="path/to/result_file.txt" # 테스트 결과 파일 경로 test_file="path/to/test_file.txt" # 결과 파일과 테스트 파일 비교 diff_output=$(diff "$result_file" "$test_file") # 결과 파일과 테스트 파일의 차이 여부 확인 if [ "$diff_output" == "" ]; then echo "일치합니다.

메세지큐 RabbitMQ는 뭐냐?

RabbitMQ는 메세지 브로커의 일종이다. 아키텍처 내부에서 프로세스 간 통신을 하기 위한 방법 중 하나가 메세지 브로커가 있다. 메세지 브로커 말고도 이벤트 브로커도 있으며, 많이 알려진 Kafka는 이벤트 브로커의 한 종류이다. 그렇다면 메세지 브로커와 이벤트 브로커의 무엇이고 서로 무엇이 다를까? 메세지 브로커, 이벤트 브로커 두 브로커의 가장 큰 차이 점은 큐 안에 존재하는 메세지 혹은 이벤트를 별도로 삭제 여부이다. 메세지 브로커에서 컨슈머가 메세지를 사용하고 나면 메세지를 삭제한다. 반면, 이벤트 브로커는 특정 컨슈머가 이벤트를 사용하더라도 삭제되지 않고, 인덱스 처리되어 개별 접근이 가능하도록 보존된다.