비동기
[우아한 테크 캠프 팀 프로젝트] File Upload 구현하기. 효율적인 I/O처리를 위한 InputStream과 OutputStream의 분리 My-Storage(1)
우아한 테크 캠프에서 3주 동안 진행하는 팀 프로젝트를 시작하게 되었다. 3주라는 짧은 시간 안에 아이디어를 내고 기능 구현도 하고 발표까지 해야 했다. 팀은 제비 뽑기로 결정했다. 제비 뽑기로 할 줄은 생각도 안 해서 나처럼 CS 공부가 중요하다고 생각하는 분과 팀을 하기로 했었고, 어떤 주제를 할지 미리 정했었다. 조작한 것처럼 제비 뽑기에서 그 분과 한 팀이 되었고 다른 팀원들에게 해당 주제와 대략적인 기능들을 설명해 주었는데 긍정적인 반응이라서 시작하게 되었다.주제와 주제 선택 이유주제는 네이버의 MyBOX, 구글의 Google Drive와 같은 클라우드 스토리지 서비스이다.이 주제를 선택한 이유는 클라우드 스토리지도 일종의 파일 시스템이고, 그렇다면 CS를 많이 활용할 수 있지 않을까?라는 생각..
코드리뷰 적용, 다시 Redis로.. - MiniPay(5)
코드 리뷰이전에는 굳이 Redis를 사용할 필요가 없다고 생각해서 MySQL을 사용하여 기능을 구현했다. 해당 기능은 이체 트랜잭션을 분리하여 발생한 데이터 정합성 문제를 해결하기 위해 이체 발생 로그를 저장하는 기능이다. 하지만 코드 리뷰에서 데이터가 오래 유지되지 않고 금방 사라져도 되는 데이터라는 점에서 Redis와 같은 메모리 기반의 DB 사용하면 좋겠다는 리뷰를 받았다. 이전에도 Redis를 사용하면 된다고 생각했지만 delete 연산 때문에 사용하지 않은 것인데 뭔가 다른 방법이 필요했다. 현재 producer, consumer 구조를 사용하고 있기에 Redis를 해당 구조에서 사용할 방법을 찾아보았다.Redis Stream찾아보니 Redis가 지원하는 많은 데이터 형식 중 Stream이라는 ..
ThreadPoolTaskExecutor를 사용한 비동기 처리로 이체 서비스 만들기 - MiniPay(3)
Mini Pay step 2 간단 설명 step 1을 끝내고 step 2로 넘어왔다. step 2는 다른 사람의 메인 계좌에 이체를 하는 것과 매일 00시에 이체 한도를 초기화 하는 것이었다. 개인적으로 페이 서비스의 step 중에서 가장 고민을 많이 했으며 가장 재밌어 보이는 step 이었다. step 2에서 고민해야 할 점은 사용자들이 동시에 요청을 보냈을 때 돈의 정합성 문제와 다수의 요청을 동시에 효율적이게 처리해야 할 방법이었다. 효율적이고 정확한 처리를 위한 고민 먼저 돈과 관련되어 있기 때문에 정합성이 가장 중요했다. 왜냐하면 내가 이체를 했는데 나의 계좌에는 돈이 빠져나갔지만, 상대는 돈이 들어오지 않은 상황이 발생하면 안되기 때문이다. 그래서 잠깐 생각을 해 봐도 A→B 라는 돈의 흐름에..