[2024.01.01] 해피 뉴 이어~~!
2024.01.01 월요일 잘 가 2023, 2024도 행복한 일만 가득하길!
- 일상
- · 2024. 1. 1.
맨 처음 멀티스레드를 학습했을 때 들었던 의문이 있습니다. "싱글 코어 CPU는 한 번에 하나의 명령만 실행하는데, 왜 락이 필요하지?" 병렬 실행이 배제된다면 충돌도 없을 테니까요. 결론부터 말하면 실제로 문제가 생기는 포인트는 "병렬로 실행되느냐"가 아닌 "작업이 중간에 중단될 수 있느냐" 입니다. 이 글에서 예시는 자바 기준으로 설명하겠지만 자바에만 한정된 내용은 아닙니다. 스레드가 번갈아 실행되고, 그 과정에서 공유 자원의 정합성이 깨지는 문제는 언어 레벨보다 더 로우 레벨의 현상입니다. 후에 소개될 자바의 synchronized, AtomicInteger, volatile을 예로 들었을 뿐, 유사한 해결법은 다른 언어에서도 존재합니다. count++는 한 번의 동작이 아니다.질문을 조금 바꿔보면..
코드를 작성하다 보면 핵심 로직 앞뒤에 붙는 것들이 코드를 지저분하게 만드는 경우가 있습니다. 처음에는 값을 한 번 가공해서 반환하면 끝나는 코드였는데, 시간이 지나면서 파싱이 붙고, 검증이 붙고, 암복호화가 붙고, 로깅이 붙고, 실패 시 복구 처리까지 붙는 경우가 발생하죠. 그때마다 "이 정도는 여기서 그냥 처리해도 되겠지" 하고 조금씩 덧붙이다 보면, 어느 순간에는 핵심 로직보다 부가적인 코드가 더 많은 상태가 됩니다. 이럴 때마다 드는 생각이 있습니다. 꼭 본문 안에서 다 처리해야 하나? 전처리와 후처리 그리고 실패 복구 같은 흐름을 조립할 수 있으면 코드 가독성이 향상되지 않을까? G마켓 기술 블로그의 Middleware 패턴과 코드 수준에서의 활용, try-catch 지옥 벗어나기에서 좋은 방향..
Sorted SetRedis의 Sorted Set은 말 그대로 정렬된 집합을 표현하는 자료구조로, 각 요소는 고유한 멤버와 스코어 한 쌍으로 이루어진다. 스코어는 멤버의 순서를 결정하는 데 사용된다. Sorted Set의 대표적인 기능으로 멤버의 추가, 삭제, 검색을 제공하며, 스코어를 기반으로 한 업데이트, 조회 또한 제공한다. Sorted Set의 특성은 다음과 같다 :1. 고유한 멤버 : 멤버는 고유한 값으로 구성된다. 2. 정렬된 상태로 저장 : 스코어에 따라 정렬되어 저장된다. 3. 빠른 조회 : 내부적으로 skip list로 구현되어 있어 조회 시 O(log(N))의 시간 복잡도를 갖는다.4. 유연한 조회 : 스코어 기준으로도 멤버를 조회 가능하다. Sorted Set의 이..
2024.01.01 월요일 잘 가 2023, 2024도 행복한 일만 가득하길!