java

    [우아한 테크 캠프 팀 프로젝트] 파일 이동 및 삭제 My-Storage(3)

    다음은 파일 이동과 삭제에 대한 내용이다. 데이터 무결성에 과하게 집중했는데, 시간이 지나서 문제가 될 수 있음을 깨달았다. 당시에는 도메인 지식이 부족해서 더 폭넓게 생각하지 못한 것 같아 아쉬움이 있는 부분이다. 당시 구현할 때, 파일 이동과 삭제에 있어서 중요한 것은 폴더의 하위 파일 및 폴더들이 동시에 이동하고 삭제되어야 한다는 부분에 집중했다. 현재 DB 상에 구현된 파일 트리 구조는 pk를 기반으로 parent를 찾아가기 때문에 이동의 경우 해당 파일이나 폴더의 Parent ID 값만 바꿔주면 됐다. 삭제의 경우 하위 파일들을 모두 찾아서 한 번에 삭제해야 했다. 이때 락을 걸지 않으면, 삭제 중인 폴더에 어떤 파일을 추가할 수 있고, 타이밍이 맞지 않아서 새로 추가된 파일은 삭제되지 않는 문..

    [우아한 테크 캠프 팀 프로젝트] 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이라는 ..

    [Java] 가비지 컬렉션(Garbage Collection)과 5가지 알고리즘

    가비지 컬렉션(Garbage Collection) 최근 친구가 전화로 자바에서 생긴 메모리 이슈 관련 도움을 구한 적이 있었다. 친구랑 같이 원인을 찾다 보니 계속 새로운 객체를 생성하여 참조된 객체를 Garbage Collection이 제거하지 않아 생기는 문제일 수 있음을 알게 되었다. 이런 것을 방지하기 위해 싱글톤 패턴으로 코드를 작성하고 Spring에 와서는 Bean을 생성하고 DI를 적용하여 자동으로 싱글톤 패턴이 적용되었다. 그래서 항상 하던 대로 코드를 작성하다 보니 Garbage Collection을 신경 쓰지도 않았고 어떻게 동작하는지도 몰라서 궁금하여 찾아보고 정리하게 되었다. 특히 나도 나중에 저런 메모리 이슈가 생길 수 있고 지금 공부하는 내용이 도움이 될 것 같다고 생각된다. G..