ALL THE NOTES

기록하는 개발자.

개발하면서 배우고, 삽질하고, 이해한 것들을 기록합니다.

29개의 기록 최신순

토스 네뷸라 디바이스 팜, Appium을 버리고 자체 드라이버를 만든 이유

팀마다 각자 폰을 꽂고 테스트를 돌려야 했던 문제를 토스가 네뷸라라는 디바이스 팜으로 푼 과정을 읽고 정리한 기술 블로그 리뷰. Client/Server/Agent/기기 4계층 구조, Appium 대신 자체 드라이버를 만든 이유, Android/iOS 실시간 미러링을 자체 구현한 방식까지.

3주차 - 재귀로 짜는 이진 트리 순회, 그리고 BST가 성능을 보장하는 이유

전위/중위/후위 순회를 재귀로 구현하며 결과 배열을 함수 밖에 두는 대신 중첩 함수로 감싸는 방법부터, 이진 트리 구조 자체는 탐색 성능을 보장하지 않는다는 것, 균형이 무너지면 O(log n)이 O(n)이 되는 이유, 캐시 지역성 때문에 DB가 이진 트리 대신 B+트리를 쓰는 이유까지.

3주차 - 그래프 탐색, BFS와 DFS를 직접 구현하며 비교

인접 리스트로 무방향/방향 그래프를 만드는 것부터, Queue로 너비 우선 탐색하는 BFS와 재귀로 깊이 우선 탐색하는 DFS를 각각 구현하고 장단점을 비교. 시간 복잡도는 둘 다 O(V+E).

3주차 - HDD는 왜 느리고 SSD는 왜 빠를까

HDD는 기계적으로, SSD는 반도체로 동작한다는 차이에서 출발해서 Platter/Track/Sector 구조와 NAND Page/Block 구조, Wear Leveling까지 정리.

3주차 - 음수는 왜 2의 보수로 표현할까

1의 보수는 0이 2개 생긴다는 한계에서 출발해서, 2의 보수가 왜 덧셈 회로 하나로 뺄셈까지 처리하는지, 그리고 carry를 버려도 되는 이유를 Modulo 연산 관점으로 정리.

2주차 - Java의 GC는 왜 세대로 나뉘어 있을까

Eden/S0/S1/Old로 나뉜 Java의 세대별 힙 구조와 Minor/Full GC의 동작, identity hash code로 객체 동일성을 보증하는 방식, TLAB 덕분에 new()가 malloc()보다 빠른 이유까지.

1주차 - 정글 에세이

정글에 입소하며 적어본 과거, 목표, 자세, 그리고 되고 싶은 모습에 대한 짧은 에세이.

2주차 - 파이썬 GC는 어떻게 작동할까

참조 카운팅이 주력이고 추적 GC가 보조인 파이썬 GC 구조를, CSAPP의 가비지 컬렉터 정의부터 순환 참조와 세대별 수집까지 정리.