전체 글 529

SSD의 데이터 전송 프로토콜과 폼팩터 (NVMe/M.2)

오랜만에 컴퓨터를 맞추다보니 새롭게 보이는 단어들이 정말 많다. NVMe, M.2 하나 하나씩 알아보겠다.  NVMeNVMe(Non-Volatile Memory Express)는 SATA와 비교 및 대응되는 개념으로, SSD 및 플래시 스토리지에서 사용되는 초당 입/출력(IOPS)당 시스템 오버헤드를 줄인 '데이터 전송 프로토콜'이다. 최대 6Gbps의 전송속도를 가지는 SATA3의 한계를 뛰어넘는 속도를 제공한다. NVMe에 대해서 알아보다보면 PCIe 3.0이든 4.0이든 PCIe 세대가 나오게되는데, NVMe가 데이터 전송시 PCIe 인터페이스를 이용하므로 뗄레야 뗄 수 없는 관계이다. PCIe 3.0 SSD의 최대 속도는 3,500Mbps, 4.0은 7,500Mbps로 최신 세대일수록 전송속도가 ..

제품 속도에 대한 원칙

# Product Velocity를 위한 원칙 1. ‘덜 하기’가 필요함일반적으로 속도와 품질 사이에는 트레이드오프가 존재함대부분의 회사는 요구사항과 기한을 정하고 품질은 결과물로 취급하지만, 우리는 반대로 품질 기준을 정하고 60일 안에 무엇을 출시할 수 있는지 고민함중요한 것은 모든 요구 사항을 다 충족하려 하기보다는, 중요한 것만 빠르게 완성하는 것임요구사항을 제거하고 필요한 일만 하면 속도와 품질을 모두 높일 수 있음Elon Musk도 비슷한 접근 방식을 제안하며, “먼저 요구 사항을 덜 멍청하게 만들어라”고 말함2. ‘바보 모드’가 종종 효과적임‘midwit meme’을 예로 들면, 똑똑한 사람과 바보는 간단한 해결책에 동의하는 반면, 평균적인 사람은 불필요하게 복잡한 문제를 만듦.우리는 종종 ..

나/이슈 2024.12.02

DDR5

조립 PC를 십수년만에 맞추려다보니 새로운 용어들이 많이 나온다...  DDR5는 DDR SDRAM 메모리의 5세대 라인업이라는 뜻이다. DDR은 Double Data Rate의 약자니, SDR(Single Data Rate)부터 알아보면 좋다. SDR SDRAMSDR(Single Data Rate)은 1 클럭당 1 워드 사이즈만큼의 데이터를 전송한다는 의미이다. *워드 사이즈는 CPU가 한 번에 다루는 데이터의 단위로 CPU 스펙에서 32/64 bit 프로세서 등으로 표현된다.SDRAM (Synchronous Dynamic Random Access Memory)SDRAM은 오늘날 컴퓨터에서 가장 일반적인 유형의 DRAM이다. CPU의 클럭속도와 "동기화"되어 더 빠른 데이터 전송이 가능하다. DDR(D..

[AWS] S3 버전 관리와 삭제마커

Amazon S3의 버전 관리를 활성화하면 버킷에 저장되 모든 버전의 객체들을 보존하고, 검색 및 복원할 수 있다. 나도 이걸 알고싶었던건 아닌데...이번에 회사에서 오래된 객체 삭제 관련 테스트를 하다 실수로 파일을 날려버리는 바람에...ㅋㅋㅋㅋㅋ 원전 사고 직후가 이런 모습이었을까? 정말 순간적으로 머리가 새하얘졌는데 버전 관리 덕분에 파일을 복구할 수 있었다. 버전 관리를 활성화하면, S3는 저장되는 객체에 대해서 고유한 버전 ID를 자동으로 생성한다. 사진처럼 photo.gif를 덮어썼다면, 동일한 키인 photo.gif에 대해서 버전 ID가 다른 2개의 객체가 관리된다. 이를 S3에서 확인하려면 "버전 표시" 토글을 켜주면된다.삭제는 저장되어있는 객체를 다 날려버리는 걸까? 결론부터 말하자면, ..

배움에 관하여

집으로 가는 길에 우연히 공근식 박사에 대한 기사를 접하게 되었다.기사를 읽기 전 까지 알지 못했던 사람인데, '만학도의 전설'로 불린다고 한다. 농삿일 10여년을 하시다 남들보다 한발짝 늦게 공부를 시작했음에도 불구하고 카이스트 박사과정까지 통과하셨다. 최근에 왜 이렇게 공부하는게 싫을까?라는 의문이 계속 들었었는데 이 기사덕분에 답을 찾은 것 같다. 처음보는 사람에게 내 직업을 소개하면, "개발자로 사는건 어때요?"라는 질문을 종종 받고는 하는데, 그럴때마다 나는 "평생 고3같아요"라고 답한다. 그만큼 공부에 대한 압박을 많이 받는 편이다. (그런것 치곤 안하지만 ㅋㅋㅋ) IT 관련 직군 어느 누가 안그렇겠냐만, 개발자는 가만히 있으면 100% 뒤쳐진다. 그래서 공부를 위한 공부를 계속 해왔다. 주말..

Github Package를 이용한 라이브러리 배포방법

Github Package?Github Package는 Github에서 출시한 소프트웨어 패키지 호스팅 서비스로, 이를 이용하면 프라이빗 라이브러리를 jitpack이나 jcenter 등 다른 서비스에 의존하지 않고 호스팅 할 수 있다. 원래는 MyMavenRepository를 이용하고 있었지만, 소스코드와 다소 떨어져있기도 하고 회사에서 사용하려니 계정 정보 공유 시에도 불편함이 있어서 Github Package로 옮기게 되었다. 요금은 퍼블릭은 무료, 프라이빗인 경우에는 스토리지와 월별데이터 전송량에 따라 부과된다.https://docs.github.com/en/billing/managing-billing-for-your-products/managing-billing-for-github-packages..

주기적으로 작업을 모아 처리하는 BatchLoader 구현하기

특정 주기마다 작업을 모아서 실행하는 Batch Loader를 Kotlin으로 구현해봤다. 여러가지 쓸모가 있겠지만, 나는 Batch Loader를 UI에서 목록을 표시하고, 표시된 아이템만 따로 불러오는데 유용하게 사용하고 있다.  아이디어대부분의 아이디어는 이 Typescript BatchLoader에서 얻었다.잠시 이론적으로 짚고 넘어가면 코드 이해가 쉬울 것같다.BatchLoader는 일정 주기안에 일어나는 모든 요청들을 받아서 별도의 Queue에 쌓아둔다. 요청을 받으면 CompletableDeferred를 반환한다. CompletableDeferred는 콜백 기반의 비동기 통신 시 성공, 혹은 실패에 대한 응답을 다룰때 유용한 클래스로, Javascript에서의 Promise와 비슷한 역할을 ..