기타/내용
-
클라우드 네이티브 애플리케이션 디자인 패턴기타/내용 2024. 1. 5. 00:53
MSA는 클라우드 네이티브 애플리케이션의 기본 VM은 호스트의 자원을 사용하여 게스트 OS를 띄움 컨테이너는 호스트 자원을 다른 컨테이너와 공유하며 사용함 MSA를 구성할 때 DDD를 사용하여 서비스를 나눌 수 있다. CNA에 사용할 수 있는 패턴이 여러 개가 있다. 통신 패턴 동기 패턴에는 용청 응답 패턴이 있다. 쉽게 HTTP 통신이 있다. RPC라는 패턴이 있는데 TCP위에서 동작하며 타 서비스의 메서드를 사용하는 것이다. 위임된 서비스를 호출하는 것이지만. 굳이 Rest가 있는데 써야 하나 싶다. 그래서 퇴보되다가 gRPC가 등장해서 많이 사용하는 듯하다. 더 효율적이면서 타입 안정성을 지킬 수 있다고 한다. Rest는 여러 사용자에게 노출될 때 좋고 RPC는 서버 간에 효율적인 통신과 처리량이 ..
-
구글 엔지니어는 이렇게 일한다기타/내용 2023. 11. 20. 23:08
프로그래밍은 수단이다. 가치 있는 변경을 받아들여라 소프트웨어 엔지니어링은 여러 선택지 사이에서 트레이드오프를 평가해야 한다. 때로는 확장성이 떨어지는 정책을 받아들여야 할 때도 있다. 투자 비용이 회수되기 시작할 때까지 회사가 살아남지 못할 수 있다. 하이럼의 법칙은 유지보수를 할 때 기억해야 하는 법칙인데. 내가 만든 API가 나의 의도와는 다르게 사용될 수 있다는 논리이다. API명세에 있지 않은 기능을 쓴다면 '동작하는 코드'. 모범적으로 따른다면 '유지보수가 가능한 코드' 그 시절 최적화 기법이 유효한지는 알 수 없다. 구글의 인프라팀은 비욘세 규칙을 만들어 책을 덜 수 있었다. 인프라 업데이트는 자주 할수록 위험도가 떨어진다. 문제는 일찍 발견할수록 비용이 적어진다. 코드의 위험을 빨리 발견하..
-
가상 면접 사례로 배우는 대규모 시스템 설계 기초기타/내용 2023. 10. 5. 23:18
NoSql : key value, 그래프, 칼럼, 문서 저장소등이 있음. 조인은 불가능함 언제 쓰나? 아주 낮은 지연시간이 필요할 때. 다루는 데이터가 비정형일 대 , 많은 양의 데이터 저장이 필요할 때 수직확정성은 장애 자동 복구와 다중화가 불가 수평적 확장은 이후에 부하분산을 위해 로드밸런서를 둔다. 로드밸런서는 공개 주소로 접근. 로드밸런서는 서버와 사설 주소로 소통 DB의 다중화로 인해 안정성과 성능 향상 응답시간은 캐시로 줄일 수 있음 정적 콘텐츠는 CDN으로 뺀다. 웹서버가 CDN을 본다. 캐시 만료 정책이 있으면 좋다. 일관성 관련은 Facebook의 논문이 있다. DB 캐시와 CDN 활용. CDN이 죽었을 경우를 대비해야 한다. 캐시로 DB의 부하를 줄일 수 있다. 상태에 의존적인 서버를 ..
-
파이브 라인스 오브 코드기타/내용 2023. 8. 23. 00:06
완벽은 더 이상 추가할 것이 없을 때가 아니라 더 이상 뺄 것이 없을 때 이뤄진다. 배운 것을 활용하라. 가장 단순한 리팩터링은 기능의 변경 없이 코드를 변경하는 것이다. 리팩터링은 순전히 경제적인 이유이다. 변경하기 쉽게 만들어라. 더 잘알 때까지 규칙을 따르라. 코드 조사가 오래 걸리면 나쁘다. 함께 변해야 하는 것 끼리 같이 있어야 한다. 성능 최적화는 리팩터링과는 다른 단계이다. 상속보다는 컴포지션을 활용.. 사용하지 않는 코드를 삭제하라 보이스카우트 규칙. 번거롭지만 안전한 코드가 낫다. 자신감이 떨어지는 이쁜 코드보다 특이한 안전한 코드가 낫다. 동일 수준의 추상화를 사용하자. 호출 또는 전달 하나만 하자 sum(arr)과 arr.length는 공존하면 나중에 추상화 수준이 모호해진다. 인생에..
-
SQL 튜닝의 시작기타/내용 2023. 8. 8. 23:54
책이 오라클 기준인 듯 SQL의 의미를 파악하는 것이 성능문제를 유발하는 SQL에 대한 개선의 시작이다. 서브쿼리는 where절에서 비교조건으로 사용되는 Selet쿼리이다. join보다 작성이 쉬워서 많이들 작성한다. 서브쿼리가 여러 개 존재할 경우 옵티마이저가 최적화과정에서 잘못된 cost를 계산하는 경우가 많다. 무조건 사용하지 말라는 것은 아니다. 필요한 경우도 있다. 보통 사용패턴은 서브쿼리 먼저 수행 후 main SQL의 컬럼값과 비교하고나 Not exists 등으로 값이 있는지 체크하는 쿼리등인데 성능문제가 있을 수 있다. 무조건 나쁘기보단 사용의도에 맞게 수행되는지 확인하라. 서브쿼리의 동작방식은 2가지가 있음. 필터방식과 조인방식 필터방식은 mainSql의 매row마다 서브쿼리가 실행되는 ..
-
아파치 카프카 애플래케이션 프로그래밍 with 자바기타/내용 2023. 7. 20. 23:22
기존 1대 1 데이터 파이프라인은 장애가 전파되지만 카프카로는 끊을 수 있다. 데이터 포맷에는 제한이 거의 없다. 상용환경은 최소 3대의 브로커를 운영한다 왜 매직넘버3을 사용할까 1대 : 장애가 나면 서비스의 장애로 이어진다 2대 : 한 대가 죽을 경우 다른 한대가 리더가 되지만 복제 시간차로 인해 메시지 유실이 있을 수 있다 리플리카 2 설정 3대 : 2대가 복제가 돼야 메시지를 안정적으로 처리했다고 판단한다 2대 : 2가 설정 값이기 때문에 한 대가 죽으면 브로커는 메시지를 받지 않아서 서비스 장애 카프카는 데이터를 보낼 때와 소비할 때 모두 배치 처리하기에 효율적이다. 브로커를 늘리거나 줄임으로써 효율적으로 관리할 수 있다. 카프카는 메시지를 파일단위로 관리하는데 느릴 거 같지만 운영체제 레벨에서..
-
카프카, 데이터 플랫폼의 최강자기타/내용 2023. 6. 30. 00:35
변화의 방향은 느슨한 결합 이벤트를 카프카에 저장해 필요한 조직에게 전달 전달의 확인이 복잡한 것이 단점 pub/sub의 교환기의 부하, 정합성관리 등으로 메시징 시스템의 성능이 좋지 못했으나 카프카는 책임을 프로듀서와 컨슈머에게 할당함으로써 고성능이 될 수 있었음 하나의 토픽에 여러 프로듀서 컨슈머, 컨슈머와 프로듀서 역시 여러 토픽에 발행 및 소비가 가능함 디스크에 메시지를 저장해 안정성을 높일 수 있음 주키퍼는 카프카의 메타정보 및 상태관리, 분산 애플리케이션을 위한 코디네이터 클라이언트의 정보를 주키퍼는 지노드라는 key value에 저장함. 모두 메모리에 저장하고 스냅샷과 트랜젝션 로그를 남김. 앙상블은 과반수 방식으로 안정성을 유지함 분산시스템은 같은 기능의 서버가 여러대있는 것이며 높은 성능..
-
실용주의 프로그래머기타/내용 2023. 6. 20. 00:31
특정 기술에 메이지 말자. 각자 맞는 환경이 있다. 소프트웨어를 잘 만드는 것에 관심이 없다면 이 일을 하는 이유가 없다. 비판적 사고, 현실주의자 당신이 조직을 바꿀 수 있다. 자신의 무지와 실수를 인정하라 비난하거나 변명하지 마라. 대안을 제시해라. 잠깐 내면의 소리를 들어라. 멍청하게 들리나? 뭐라 말할지 빤히 보이는데 굳이 확인하지 마라 깨진 창문을 내버려 두지 마라. 조악한 설계, 형편없는 경영상의 결정이 깨진 창문이다. 깨진 창문을 두세 개 고르고 동료들과 문제해결을 해봐라 개구리가 되지 말라. 주변을 살펴라. 방안의 전등은 몇 개인가? 사용자에게는 오늘의 소프트웨어는 내일의 완벽한 소프트웨어보다 낫다. 지식에 대한 투자가 최고의 이윤을 낸다 주기적으로 투자해라. 기술 서적을 한 달에 한 권 ..