영화 올드보이에서 이우진(유지태 역)은 오대수(최민식 역)를 15년 간 가두는 극단적인 복수를 한다. 복수의 이유를 알게 된 미도(강혜정 역)는 "겨우 그런 것 때문에 사람을 가두냐"고 묻는다. 이우진은 속이 좁은 사람일까? 사람은 세상을 살며 잘못을 하고, 실수하며 성장한다. 반대로 말하면, 한 번의 잘못으로 모든 걸 잃게 된다면 누구도 성장할 수 없다. 이우진을 용서하는 사람은 없었다. 용서받지 못했기 때문에 과거의 실수에 머무르고, "겨우 그런 것"에 스스로 파멸했다. 과거에는 집단 생활을 이루며 서로를 보듬고 나가려면 용서가 필요했다. 하지만 개인주의가 강한 SNS 세상에서는 보듬을 것이 없고, 용서의 가치는 점점 퇴색된다. 문제는 SNS가 현실과 긴밀히 연결되어 있어, 그 속의 ..
분류 전체보기
문제https://school.programmers.co.kr/learn/courses/30/lessons/81303 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이세 가지 변수를 잘 관리하는 것이 포인트이다. 1. 현재 컬럼의 위치를 나타내는 정수형 `cur`2. 현재 표의 전체 크기를 나타내는 정수형 `size`3. 삭제한 컬럼의 위치를 보관하는 스택 자료구조인 `deque` (자바에서는 stack이 레거시 자료구조라 deque로 구현함) 그리고 명령어에 따른 동작은 크게 세 가지 메서드로 구현했다. 1. moveColumn()방향에 따라 현재 컬럼 위치(`cur`)를 이동한다. 2. dele..

Node.js의 이벤트 루프는 libuv 라이브러리에 의해 관리된다. libuv 를 학습하면서, 솔직히 정말 이해가 되지 않았다. 구체적으로 이벤트 루프가 무슨 동작을 하는 건지, microtask queue는 무엇인지, 이벤트 루프가 어떻게 논블로킹 I/O를 처리할 수 있는지 등 추상적으로만 이해할 뿐 어느 누구에게 제대로 설명하기가 쉽지 않았다. 그래서 node.js 공식 문서부터 여러 포스팅, git에 올라와있는 node.js, libuv 라이브러리 코드를 며칠간 파헤쳐보았다. libuv란? Node.js의 이벤트 루프는 libuv라는 비동기 I/O 라이브러리에 의해 구현된다. libuv는 C++로 작성된 라이브러리로, Node.js가 단일 스레드로 동작하면서도 비동기적으로 I/O 작업을..

개발 중 예상치 못한 Redis 메모리 초과 문제로 서버가 다운되는 경험을 했다. 테스트용으로 임시 서버를 두고 작업을 해두었던 터라, 잠깐의 시간 동안 Redis Memory가 가득 찰 일은 없겠다는 안일한 생각을 했다. 그래서 Redis의 maxmemory와 maxmemory-policy 설정을 따로 해두지 않았었다. 그러다보니 무제한으로 데이터를 저장할 수 있는 상태가 되었다. 그리고 서버가 꽝 터졌다. 이번 기회를 통해 Redis 설정을 최적화하는 과정을 공유해보고자 한다. 문제 상황개발 중이던 프로젝트에서, Redis를 사용해 방에 참가한 사용자 닉네임을 list 자료구조에 저장했다. 테스트 중, 클라이언트에서 소켓 이벤트를 잘못 처리해 엄청난 양의 데이터가 Redis로 흘러들어왔고, 순식..
문제 상황로컬 환경에서 배포된 서버 Backend의 WebSocket으로 접근하는 상황이었다.인증 정보를 쿠키로 전달하려 했지만, WebSocket 연결이 완료되지 못했다.bet.gateway.ts handleConnection(client: Socket) { try { const cookies = this.jwtUtils.parseCookies( client.handshake.headers.cookie, ); const accessToken = cookies["access_token"]; if (!accessToken) { client.emit("error", { event: "handleConnection", ..

문제 상황 실시간으로 베팅이 이루어지는 서비스이다. "만약 많은 사용자가 동시에 베팅을 진행할 경우, 동시성 문제가 일어나 데이터가 부정확해지는 것은 아닐까?" 고민을 하게 되었다. 구체적인 상황은 아래와 같다.1. 베팅을 하면 카운트가 올라간다. (베팅 참여자, 베팅한 금액)2. 카운트를 올리기 위해 데이터를 조회한다.3. 조회한 데이터에 증가 연산을 수행한다.4. 업데이트 된 데이터를 저장한다. 위 경우, 만약 두 명의 사용자가 데이터가 1인 시점에 접근해 각각 1씩 올려도 3이 아니라 2가 되는 동시성 문제가 발생하게 되는 것이다. 결론부터 이야기하면, 레디스와 레디스의 HINCRBY 명령어를 통해 원자성을 보장할 수 있었다. HINCRBY 명령어와 가상의 테스트 시나리오를 통해, 어떻게 동시성..