영상버전 : https://youtu.be/zDDB-2vxBBQ
제가 이것저것 두서없이 제자랑만 하잖아요?
사람들에게 무언가의 전문가가 되기 위한 방법을 알려주려고 하다보니
이걸 공유하는게 낫지 않을까 하여 정리를 해봅니다.
전 개발쪽 보다는 인프라에 더 가깝지만,
개발하시는 분들도 알고 하는 것과 모르고 개발 하는 것은 천지차이이기 때문에 제가 정리한 내용을 보시면서 빼먹은게 있다면 하나씩 배워 가시는게 좋지 않을까 합니다.
테크 트리는 링크를 달아놓을께요..
지속적으로 추가할 테니 어딘가 즐겨 찾기를 해주시고, 수시로 확인하시면 좋을 것 같습니다.
추가하고 싶은 내용이 있으면 언제든 코멘트 주시면 수시로 추가하겠습니다.
이 기술을 배우고 싶은데 뭘 배우고 배우면 좋을까요?
같이 물어보시면 여기 테크트리에서 화살표만 따라 가면 되도록 만들 예정인데요..
예를 들어,
블록체인 기술을 알고 싶은 경우
암호화 알고리즘과 네트워크 기술, 그리고 파일 시스템 기술을 알면 배우기 쉽다 같은,
이런식으로 만들어가려고 합니다. 물론 이게 다는 아니겠지만 지속적으로 보완해 가면서 누구나 배우고자 하는 기술을 거슬러 올라가서 공부할 수 있게 하고자 합니다.
그리고 각 기술 박스를 클릭하면 링크가 달린 경우가 있는데요,
이 링크를 클릭하면 기본적으로 wikipedia를 연결해 놓겠습니다.
다국어로 하고 싶어서 기본은 영어로 하겠지만, 한글이라도 정말 좋은 문서가 있다면 한글 문서로 링크를 달 예정입니다.
혹시 스스로 만든 블로그 링크를 주시거나 하면
충분히 교육적으로 괜찮겠다 싶은 경우 링크를 달아드립니다.
이 테크트리에는 네트워크의 기초에서부터
OS의 구성요소, 그리고 이게 클라우드 서비스가 되었을 때의 서비스명과 코어 기술과의 관련..
스토리지역시 파일 시스템의 구성에서부터 클라우드 서비스에서 사용하는 파일 시스템들,
데이터베이스에서 블록 체인 기술까지를 다루어 볼까 합니다.
제가 IT 컨설턴트나 아키텍트에 대해서 이야기 하지만,
무얼 배워야 하느냐? 라는 질문이 많거든요..
그런데, 제가 적은거를 전부 알아야 웬만한 프로젝트에 아키텍트로 들어갈 수가 있는데요..
생각보다 이렇게 광범위하게 아는 것보다,
각각의 전문가들이 모여서 자기 분야의 설계를 하는 경우가 많습니다.
각자의 전문가라는 사람들이 최적의 설계를 한다 하더라도,
자기 분야 외에는 모르쇠 하는 경우가 많아서
결국 퍼포먼스 이슈가 생기고,
자기네는 잘못 없네 하면서 프로젝트가 산으로 갈 때가 많거든요.
여기서 한 분야만 잘아는 아키텍트 들이 많기 때문에
자기가 아는 분야만 어떻게든 해결하고
나머지는 돈으로 쳐바르는 경우를 많이 봐왔습니다.
하지만, 제가 프로젝트마다 들어가서 인정 받는 이유는,
그런 전문가들이 설계한 내용을 읽을 수 있고,
이들이 간과한 그들의 전문 외의 문제를 짚어줄 수 있기 때문입니다.
아주 가볍게 예를 들어드릴께요.
모 대기업 출판회사의 퍼포먼스 이슈로 제가 불려갔을 때에도,
대형 SI기업이 이미 설계를 끝내고 제가 실무 지원으로 들어갔습니다.
이들은 azure SQL Server를 최고 사양으로 쓰고 있어서 RDBMS만 한 달에 250만엔을 내고 있었습니다.
그런데 그걸로 500명 밖에 동접을 받을 수가 없어서 RDBMS를 5Replica를 만들어서 월 1500만엔으로 동접 3000명을 커버하도록 확장하는 프로젝트였지요..
저는 이 확장용 SQL instance를 5대를 만들고 replica 설정만 하면 되는 용도로 불려갔는데,
뭔가 이상했지요.. 월 250만엔짜리 인스턴스에서 500명 밖에 못받는게 말이야 방구야 하면서..
서버 구성 및 네트워크 구성, 그리고 서비스 소스까지 파들어가서
SI기업이 놓치 퍼포먼스 이슈를 잡아 냈지요.
SQL을 CackePHP에 올린 ORM모듈에 던지는데 ORM을 그냥 사용하는게 아니라 in 안의 SQL은 또 상황에 따라 루프 돌려 생성하도록 되어 있는데, 그 단계가 14단계 까지 in안에 in을 넣어놨네요..
이 근본적인 원인 만 해결하고,
CakePHP에서 제공하는 설정만으로는 Replica를 자동으로 절환할 수 없어 소스를 건드려야 하지만,
소스는 개발회사가 별도로 있어 안건드리는 조건으로 일을 해야 하는 상황이었습니다.
그래서 cakePHP내의 코어 모듈 중에 SQL을 호출하는 모듈이 있는데,
그 때의 SQL을 파싱해서 update나 insert가 있으면 마스터로, 없으면 레플리카를 Round robin으로 도메인화 하여 전송 하도록 모듈 자체를 바꾸어서 보여주었는데..
거기서 소스 자체의 문제를 지적했다가 잘렸네요;;;
10년이상 박혀있던 SI업체가 재계약이 끊길 근본적인 문제를 지적해버려서;;
분명 개발자가 할 수 있는 한계가 그 정도가 아닐까 합니다.
조건이 많을 수록 SQL을 잘하는 사람이 최적화를 하고 성능에 맞추어 정규화를 하되 필드의 위치도 최적화 하고, 경우에 따라서 비정규화만 하면 되지만,
그건 개발자의 영역을 벗어난 것이거든요..
이 외에도 블록체인 기술에 대해서 투자를 하려고 하는데 5000TPS 를 넘는 블록체인 기술이 있다고 하여 제게 봐달라고 했는데, 이 기술을 홍보한 업체는 github에 소스 공개가 되어 있지 않았습니다.
보통 메이저 블록체인은 소스공개가 되어 있어서 그 소스를 보고 문제점을 찾을 수 있는데, 일단 공개 안된게 첫 번째이구요,
RDBMS로 캐싱하고 여유분을 블록체인에 올린다면 5000TPS를 저도 믿어주지만,
순수 퍼블릭 블록체인에서 5000TPS라고 하니까 전 믿을 수가 없지요.
프라이빗 블록체인 중에서 Hyperledger의 경우 단일 서버로 하면 4000TPS가까이 나오지만, 노드 한 대 늘릴 때마다 1/2 에서 그 이상 떨어지는게 확인 되었습니다.
이건 근본적인 이슈인데,
아무리 합의 알고리즘 처리가 빠르다고 하더라도,
네트워크 핸드쉐이킹이 0.1초 이상은 잡아야 하는데,
여러 대의 노드에서 엄청 빨리 처리한 데이터라고 하더라도 그걸 한 군데 에서 합의 알고리즘 검증을 위한 통신만 수 초는 걸리게 됩니다.
때문에 블록체인의 트랜잭션이 느린 근본적인 원인을 알고 그에 대한 해결 책들을 찾고 있는 것은 알고 있지만, 어떤 퍼블릭 블록체인도 이 네트워크 속도의 한계를 벗어난 곳은 없습니다.
물론 병렬 쓰레드로 계산하면 0.1초에도 쓰레드 수만큼은 처리가 되므로 1초에 수백 TPS까지 만들 수는 있지만, 퍼블릭 이란 것은 글로벌 네트워크에서의 핸드쉐이크라는 전제이기 때문에 느려질 수 밖에 없는 상황이 엄청나게 많기 때문에 최대 400TPS라 한들 평균 20TPS가 되는건 어쩔 수 없습니다.
게다가 20TPS라고 해도 대기 트랜잭션이 너무 많아 보통 15분 정도에 전송되는 경우가 많지요.
이런 식으로 근본까지 알고 기술을 대하는 것과
자기가 아는 개발 능력만을 가지고 기술을 대하는 것은 엄청난 차이가 생기게 되죠.
이거 들으면 너 잘났어 하면서 또 싫어요 누르겠네요;;
아뭏든,
이 도식은 이제부터 만들어가는거라 부족함이 많고,
아주 오래된 기술들은 저역시 하나하나 기억할 수 없기 때문에 빼먹는 것들이 있는데요..
이걸 같이 이야기 하면서 채워가려고 시작하는 것이니
참여해 주시는 분들이 많을 수록
빨리 더 좋은 내용이 보충 될 거라 믿습니다.
참여하고 싶으신 분들은 제 프로필 보고 연락 주시면
언제든 내용을 받거나 수정권한을 드리겠습니다. ^^
제가 가진 모든 지식을 공유 하고 싶습니다.
이렇게 많은 지식인들의 공유로
한국의 엔지니어의 능력이 모여 세계 최고 수준이 되길 기대합니다!
댓글
댓글 쓰기