Tech News
[TechNews] 유용한 개발 관련 아티클 및 영상 #23
망나니개발자
2024. 6. 7. 10:00
반응형
1. 유용한 개발 관련 아티클 및 영상 #23
CTO가 커리어를 걸고 비트 레벨까지 내려가서 DB를 해킹했던 이야기
- “쿠키런: 킹덤”은 메인 데이터베이스로 CockroachDB를 사용하는데, 전통적인 RDBMS처럼 ACID 특성을 가지고 있으며, SQL 기반의 트랜잭션 처리가 완벽하게 작동하는 분산 데이터베이스임
- CockroachDB 클러스터는 기본적으로 Raft 기반의 합의 알고리즘을 사용하고, 가장 높은 수준의 트랜잭션 일관성을 목표로 설정되어 있음
- DB 스케일업 작업 전에 안전장치를 설정하기 위한 작업을 하던 중 의도치 않은 설정 이슈로 인해 절반 이상의 노드들이 비일관성을 탐지하고 에러가 발생하면서 클러스터에서 제외되기 시작하여 다운되었음
- CockroachDB 엔지니어 팀은 진단을 완려하고 난 후 복구가 불가능하다는 결론을 내렸음. 마지막 백업본으로 데이터베이스를 복구하고 서비스를 재개하는 것을 추천했음
- 하지만 “쿠키런: 킹덤”은 Snapshot과 Journal을 사용해 데이터를 커밋 하는 Event Sourcing 기반의 아키텍처를 사용했고, 복구가 가능하다고 판단하여 내부를 뜯어가며 복구에 성공했음
출처: https://tech.devsisters.com/posts/bit-level-database-hacking/
JetBrains IDE의 전체 줄 코드 완성 신규 기능 추가
- JetBrains IDE는 AI 기반이며 로컬에서 처리되는 전체 줄 코드 완성 기능을 2024.1 버전에 추가했음
- AI Assistant와 마찬가지로 모두 작업 속도를 높이는 데 목표를 두고 있음
- 해당 기능은 IDE 버전을 올리고, 설정 화면에서 on 시킬 수 있음
- 참고로 해당 기능은 인터넷 통신을 사용하지 않으며, 학습을 위한 데이터로 수집되지 않아 안전함
JPA가 아닌 JOOQ를 활용한 경험
JOOQ(쥬크)는 DB 접근 기술 중 하나로, JPA 대신 선택할 수 있는 도구임
- JOOQ의 장점
- 낮은 학습 곡선(N+1 문제, 영속성 컨텍스트, 프록시 등을 고려하지 않아도 됨)
- BULK INSERT, FROM 절 서브쿼리, 옵티마이저 & 인덱스 힌트 모두 JOOQ에서 사용 가능함
- "상용 DB에서 돈을 받아서 오픈소스DB에는 오픈소스를 유지할 수 있게 한다."는 철학으로 지속 관리됨
- JOOQ의 단점
- JOOQ는 컴파일 타임 code-generation 도구라서 초기 세팅에 비용이 많이 들음
- 상업용 DB에서 쓰려면 돈을 내야함
출처: https://sightstudio.tistory.com/73
localhost의 동작 원리
- localhost는 부팅과 동시에 os의 기본 로컬 라우팅 테이블에 등록되며, Loopback NI(네트워크 인터페이스)를 통해 네트워크 계층을 거치지 않음
- 네트워크 통신을 위해서는 wifi, lan card와 같은 장비들이 필요한데, OS가 이를 인지하고 NI를 생성함. 이를 통해 OS는 어떤 NI로 데이터를 보낼지 IP 주소를 바탕으로 판단함( 네트워크 라우팅 테이블 )
- 192.168.0.0/16 대역으로 나가려면 NI2 번
- 127.0.0.0/8 대역으로 나가려면 NI0 번
- 0.0.0.0/0 그외 모든 대역은 NI1 번
- 이를 통해 로컬 네트워크와 인터넷을 구분 할 수도 있고, 여러가지 조합이 가능한데, localhost를 위해 Loopback NI가 존재함(위 예시의 N10)
- Loopback NI는 모든 PC에 OS만 설치하면 기본으로 제공 하는 가상의 장치로, WIFI나 LAN 없어도 존재하며, IP주소 중 127.0.0.0/8 범위의 요청을 담당
- localhost에 대한 전체적인 패킷의 흐름을 살펴보면 다음과 같음
- 브라우저에서 localhost 앱으로 데이터 전송을 시도하면, TCP/IP 스택을 통해 패킷으로 나가려고 시도함
- TCP/IP 스택에서 IP주소를 보고 루프백 NI로 감
- 목적지 주소 127.0.0.1을 확인했으니, 패킷을 외부로 보내지 않고 로컬로 다시 보냄
- 패킷은 다시 TCP/IP 스택 계층으로 전달되고, 로컬의 올바른 포트로 전달됨
- 앱은 이 요청을 수신하고, 적절한 응답을 생성하여 다시 루프백 인터페이스로 보냄
- 응답 패킷도 동일한 과정을 거쳐 결국, 최종적으로 요청을 시작했던 브라우저로 전달됨
출처: https://velog.io/@480/localhost-의-동작-원리
반응형