진로 상담 부탁드립니다.

gurugio의 이미지

안녕하세요.

지금 회사에서 클라우드서버에 들어가는 커널을 담당하고있는데요
자잘한 문제들 해결하거나 튜닝하고, 버전 업그레이드해서 배포하는 정도의 일을 하고있습니다.
커널 개발도 아니고 데브옵스도 아니고 애매한 경력이라 뭔가 좀더 영역을 넓혀야될것 같다는게 고민입니다.
커널 개발을 제대로 해보고싶었지만 진입하는게 쉽지 않네요.
늘 변두리만 기웃거리고있습니다.

요즘들어 생각하는게 클라우드 시장이 계속 유지될것 같고,
커널만 봐서는 안되겠고 공부를 더 해야 살아남겠다는 위기감이 듭니다.
사실 임베디드일을 하다가 이직한 경우라 클라우드라는것 자체를 전혀 모릅니다.
클라우드에 들어가는 기술중에 커널과 연관된 기술이나 로우레벨 기술이 뭐가 있을까요?
키워드만이라도 주시면 감사하겠습니다.

jachin의 이미지

virtio 에 대해서는 알고 계시나요? 가상화 기술에 대한 부분 중, 가상화 가속을 하기 위한 Intel VMCS 전략에 대한 문서를 통해 공부해보시면 어떨까 생각합니다.

https://firmware.intel.com/sites/default/files/A_Tour_Beyond_BIOS_Launching_VMM_in_EFI_Developer_Kit_II.pdf
https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/intel-vmcs-shadowing-paper.pdf

gurugio의 이미지

감사합니다. 찾아보겠습니다.

익명_사용자의 이미지

클라우드는 distributed network system에서의, fault tolerant하고, horizontally scalable하며 reliably deliverable system을 만드는데에 많은 포커스가 맞춰져 있습니다. 사실 VM 레벨에서의 로우레벨 퍼포먼스보다는 the overall performance of the entire system over a large scaled network across multiple data center and region이 더 중요한 주제들이죠. 따라서 분산 시스템에 대한 이해와 reliability, scalability를 위한 여러 시스템 디자인 지식이 더 중요합니다.

임베디드와 로우 레벨일을 많이 하셨기에, 클라우드 분야로 좀 더 다가가더라도 기존에 쌓아두신 로우레벨 경험과 연관된 일을 하시고 싶은 점 이해가 갑니다. 하지만, 클라우드 시장이 계속 유지될것이라 생각하고, 여러 이유로 인하여 hot한 분야인 클라우드로 커리어 방향을 바꾸실 것을 고려하신다면, 로우레벨 찾지 마시고 클라우드 분야에서 많은 초점이 맞춰지는 방향으로 바꾸는것을 고려해보세요. 클라우드는 로우레벨 퍼포먼스가 상대적으로 덜 중요합니다. 개별 머신의 성능보다는 시스템 전반적인 레벨에서의 퍼포먼스가 더 중요하죠. 차라리, 클라우드 보다는 머신 가상화 기술에 촛점을 두는것으로 고려해보시거나, 아예 전형적인(?) 클라우드 엔지니어로 변화를 시도하는것을 추천드립니다.

사실 kernel과 distributed system은 비슷한점이 아주 많습니다. kernel에서의 경험을 활용할 기회가 있을 것 입니다.

P.S. 머신 가상화와 클라우드 기술들은 다른 문제들을 푸는 기술들 입니다. 클라우드의 특성상 VM을 사용하기 적합한 것 일 뿐이지, 클라우드의 주로 다뤄지는 기술들은 머신 레벨 가상화는 거리가 멉니다. 머신 가상화에 특화 된 엔지니어를 클라우드 엔지니어로 보기에는 좀 거리감이 있다고 생각합니다.

gurugio의 이미지

저도 전적으로 공감하고있습니다.
클라우드기술이라고 말씀하시는 것이 분산시스템을 말씀하시는거라고 이해하면될까요?
분산시스템을 공부하려면 어떻게 시작하면 좋을지 조언부탁드립니다.

저도 분산시스템을 공부해보려고 작년에 잠시 알아본적이있는데 전공책들은 전부 아주 오래되거나
수학책에 가깝고, 너무 어려웠었습니다. 결국 시작도 못했었습니다.

익명_사용자의 이미지

클라우드에서 사용되는 많은 기술들이 분산 시스템을 기반으로 작성되어 있습니다. 어느 계층의 기술에 주안점을 두느냐에 따라 클라우드 기술의 정의는 달라지겠지요.
제가 이전글에서 언급한 기술들은 제 자의적 판단에 의한, 요즘 hot하다고 주목받는 클라우드 관련 기술들입니다.

GCP, AWS, Azure 기술 컨퍼런스에 가보면 패널들이 자주 언급하는 기술 트렌드가 있습니다. 물론, 구글이나 아마존, 마소같이 클라우드 *사업*을 선도하는 업체들이 주력하는 프로덕트라는 의미도 됩니다만, 주목받는 클라우드 기술 트렌드를 찾아 볼 수 있는 기회가 되기도 합니다. 초반에는 Amazon EC2같이 virtual machine과 스토리지를 제공하는 IaaS 제품들이 주를 이뤘다면, 요즘은 PaaS => SasS로 넘어가며 serverless architecture의 유행과 함께 aws lambda나 gcp function, 그리고 PubSub, Spanner, AI, Bigdata같은 기술들에 대한 얘기가 많습니다. gurgio님께선 분산시스템이 아니라 클라우드에서 hot한 주제들에 대해 공부 시작 방법을 물어보시는것으로 이해하겠습니다.

무언가를 배우는 가장 빠르고 좋은 방법은 다른 사람들이 이미 만들어 놓은 제품들을 많이 사용해보는것 입니다.

가령, 클라우드 시장에서 만들어지고 유행하는 기술동향이나 제품들을 전혀 파악하지 못하고, paxos algorithm이나 구현해보고 논문만 읽어봤자 현실 주제와 동떨어져 기술 변화의 트렌드를 읽지 못하는 경우가 발생 할 수 있습니다. 일단, 클라우드 프로덕트를 만드는 회사들의 기술 컨퍼런스도 가보고, 존재하는 제품들도 이용해보신 후, 어떠한 클라우드 기술들이 주목받으며 사람들이 어떻게 클라우드 제품들을 이용하는지부터 충분히 경험해보시길 추천드립니다. 좋은 기회가 된다면 사시는곳 meetup 그룹들도 찾아가보시고요.

그렇게 클라우드 서비스/프로덕트의 유저의 입장에서 많은 정보를 습득하시면 현재 유행하는 클라우드 제품의 트렌드와 여러가지 아이디어가 떠오를것 입니다.
종종, https://highscalability.com 도 들려서 최신 소식도 살펴보세요. 그런 과정들을 거치다 보면, 어느순간 grugio님의 흥미를 끄는 특정 기술 분야가 생길것이고, 해당 분야로 심화학습과 프로젝트 경험을 쌓다보면 cloud engineer로써 충분히 자리를 잡으실 것이라 생각합니다.

너무 일반적이고 누구나 생각할만한 뻔한 얘기로 들릴수도 있을것입니다. 하지만, 특정 기술을 지칭하여 "XXX 기술을 공부하시고, YYY를 하시면 됩니다" 같은 답변은 올바른 답변이 되기가 힘듭니다. 다시 말씀드리자면, 가장 좋은 공부 방법은, 다른 사람들이 어떻게 클라우드 기술들을 쓰고 어떤 클라우드 제품들이 나와 있으며, 클라우드 시장의 변화를 지속적으로 주시하는 것 입니다. 그렇게 하시면 뭘 공부 해야 할지는 감이 올 것입니다.

오늘부터라도 AWS나 GCP에 간단한 프로젝트라도 만들어보시고 여러가지 아이디어 구상도 해보세요.

gurugio의 이미지

제가 클라우드 산업 자체도 잘 몰랐었는데 그래서 뭘 해야할지도 몰랐던것 같습니다.
조언 감사합니다.
말씀하신대로 시작해보겠습니다.

jachin의 이미지

분산 네트워크 시스템을 구현하기 위해 TCP Congestion Algorithm 이나, Routing, Ethernet 제어 등의 방향 외에 추가적으로 공부해야 할 것들이 있을까요? 기존의 Subnet Routing 외에, Backbone 구성을 위한 시스템 구성을 위해 공부해야 하는 내용들이 궁금합니다.

gurugio의 이미지

제가 네트워크는 완전 무지해서요...제대로 책한권 읽어본적이 없습니다.
학교에서 네트워크 기본 이론에 대한 수업을 한번들어본게 다인것 같아요.
시작할만한 책이나 강의같은걸 혹시 아시면 조언부탁드립니다.

익명_사용자의 이미지

아직 찾아보지 않으셨다면 CAP Theorem과 Paxos algorithm에 대해 공부 해 보세요.
Distributed system에서의 scalability, reliability, 그리고 data synchronization에 대한 여러가지 이슈들을 찾아 볼 수 있습니다.

TCP congestion이나 routing, ethernet제어는 분산 네트워크랑 직접적인 연관성은 크지 않다고 생각합니다. 분산 네트워크 아니더라도 일반적인 네트워크 이론에 적용되는 기술들일뿐입니다. 차라리 Software defined networking에 대해 공부를 해보시는것이 클라우드와 관련하여 유용할 부분이 많다고 생각합니다.

gurugio의 이미지

조언감사합니다.
도와주시는김에 좀더 부탁드릴께요 ;-)
Software defined networking을 공부하려면 어떻게 시작해야할까요?
이건 클라우드 공부보다 좀더 세부적일것 같아서요.
좋은 책이나 자료가 있어도 좋을것 같고, 실험해볼만한 제품이 있어도 좋을것 같습니다.

사실 지금 클라우드 서비스를 제공하는 회사에서 일하면서
가장 많이 바틀넷이라고 해야할지 문제가 발생하면 크리티컬한 부분이 네트워크입니다.
스토리지연결도 네트워크이고 vm의 성능도 네트워크가 중요한 부분이고요.
특정 네트워크 드라이버를 공부해볼까했지만, 그 회사에 입사할게아닌이상 어떤 의미가 있는지 모르겠고,
커널의 네트워크 스택을 공부할까 해봤는데 그것도 너무 방대하면서 진입하기 어려운 기술인것 같고요.

회사에서 주요 이슈가 Software defind networking, software defined storage이라서,
이쪽을 시작해보면 여러모로 좋을것 같다는 생각만 가지고 있는 상태였습니다.

Paxos 알고리즘은 이런 강의가있어서 lab과제들을 구현해보면서 약간 맛을 본적이 있습니다.
https://pdos.csail.mit.edu/archive/6.824-2012/
마지막 과제가 Paxos를 구현하는 것이었는데 제가 알고리즘 자체도 이해를 못해서 손도 못댔지요.

익명_사용자의 이미지

SDN은 제 주력 분야가 아니라서 좋은 공부 방법은 잘 모르겠네요.
직접적인 답변은 아니지만, 우연히 발견한 redit이 있어서 공유합니다.
https://www.reddit.com/r/networking/comments/85wl70/learning_sdn_vs_aws/dw0sky4

jachin의 이미지

Distributed System 을 네트워크 시스템에 적용한 것이 SDN 인가요?

분산 네트워크는 OSI 7계층의 4계층 상에 존재하는 프로토콜상의 네트워크인가요? Gossip 프로토콜이나, 요즘 대두되는 Hyperledger 같은 것들이 Distributed Network 이라고 말할 수 있는 것인가요?

SDN 구현은 충분히 할 수 있습니다만, 분산 네트워크 시스템으로서 분류가 되는 것인지 조금은 의아하긴 합니다. :)

익명_사용자의 이미지

제가 같은 용어들을 상황에 따라 다른 의미로도 혼용을 해서 다른 의도로 읽혔던것 같습니다. 의도를 더 잘 전달할 수 있게 다시 써보겠습니다.

Distributed system을 네트워크에 적용한것이 SDN이고, SDN이 분산 네트워크 시스템으로 분류된다는 의미는 아니었습니다.
클라우드 분야에서 많이 쓰이는 Distributed Computing과 관련된 기술들에 관심이 많으신것이면, TCP congestion control이나 routing같이 굳이 클라우드 뿐만이 아니라, 일반적인 네트워크 이론으로 적용될 수 있는 주제들 보다는, SDN같이 클라우드에서 널리쓰이는 기술들에 관심을 두는것이 더 나을것 같다는 의견이었습니다. 그래서 SDN을 배우는것이 클라우드와 관련하여 더 유용할 부분이 많을것 같다고 한 것입니다.

>> 분산 네트워크는 OSI 7계층의 4계층 상에 존재하는 프로토콜상의 네트워크인가요?
"프로토콜상의 네트워크"라는 의미를 잘 모르겠습니다. OSI 7계층의 4계층에 존재하는 프로토콜을 이용하여 구축한 네트워크인지 물어보시는 건가요?

jachin의 이미지

익명_사용자 wrote:
>> 분산 네트워크는 OSI 7계층의 4계층 상에 존재하는 프로토콜상의 네트워크인가요?
"프로토콜상의 네트워크"라는 의미를 잘 모르겠습니다. OSI 7계층의 4계층에 존재하는 프로토콜을 이용하여 구축한 네트워크인지 물어보시는 건가요?

넵. 말씀하신 내용이 맞습니다.

익명_사용자의 이미지

제가 지칭한 distributed network system은 다음의 위키 페이지에 설명된 distributed networking의 정의에 가깝습니다.
https://en.wikipedia.org/wiki/Distributed_networking

Quote:

Distributed networking, used in distributed computing, is the network system over which computer programming, software, and its data are spread out across more than one computer, but communicate complex messages through their nodes (computers), and are dependent upon each other.
...
Typically, a distributed networking system is composed of processes, threads, agents, and distributed objects.

위에 나와있듯이 distributed networking *system*은 P2P, WAN, SDN같은 컴퓨터 네트워크라기보단, 여러 데이터가 많은 수의 컴퓨터들에게 데이터가 분포되어 있고, 그것들을 처리하기 위한 여러가지 data passing이나 synchronization 기술들이 함께 구축된 컴퓨터 시스템이라고 봐야합니다.

특정 계층의 프로토콜을 이용해서 구현한 시스템은 아닙니다. 하려면 TCP만으로도 할수도 있습니다. 물론 비효율적이고 어려움이 많겠죠. 구현하기 힘든 부분도 많을것이고요. 분산네트워크 시스템을 구축하는데에, SDN도 쓰고, task distribution, message passing, distributed database도 사용합니다. 그러한 부분에서 제가 언급한 CAP theorem이나 paxos같은 중요한 주제들이죠. 필요하면 어느 계층의 프로토콜이라도 가져다 쓰면 그만입니다. Distributed Network[ing] System이 어느 특정 계층의 네트워크 프로토콜 상의 구현물로 정의 된 시스템은 아닙니다.

제가 jachin님의 질문의 요지를 잘못 파악했나 싶은 의구심도 드네요. 제가 쓴 다른 답변들에서는 Distributed Network *System*, Distributed computing, 혹은 분산 시스템같은 표현을 사용했습니다만 jachin님께서 질문하신 Distributed network는 다른것을 지칭하고 있었을수도 있다는 생각이 듭니다. 위의 링크 된 위키 페이지에서 설명된 의미로써의 distributed network system이 아닌, distributed network에 대해서는 전 잘 모릅니다.

jachin의 이미지

분산 네트워크 시스템 말씀이셨군요. 하도 새로운게 많이 나오는 세상이라, 새로운 네트워크 기술이 또 나온 줄 알고 깜짝 놀랬습니다. ^^

클라우드 컴퓨팅에 대해 공부하란 말씀이셨네요. CAP, Paxos 에 대해 이야기 하신 것도 이해되었습니다.

SDN 이 분산 컴퓨팅의 네트워크를 담당하는 것은 맞습니다. 가상화 된 네트워크 개념으로 baremetal 처럼 사용하는 네트워크 장치가 되는 셈이지요.

gurugio의 이미지

회사에 SDN구현프로젝트에서 사람을 못구해서 힘들어하더라구요.
SDN 이론이나 구현을 시작해보려면 어떻게 시작해야할지 조언부탁드려도 될까요?

잠깐만 검색해봐도 openflow가 많이 등장하는데 이게 표준이고 구현체는 따로있는건가요?
openflow라는 표준을 이해하고 단순하게라도 구현해보면 좋을지 아니면,
openflow라는 구현체를 분석하는 어떤 책이나 자료를 보면 좋을지 부탁드립니다.

jachin의 이미지

커널 4.20 버전 소스코드에 eBPF Syscall 과 eBPF, BPF JIT, Open vSwitch 항목들이 있습니다.
각각 무엇을 하는 것인지 공부해보시면 어떨까요? :)

gurugio의 이미지

마침 회사에서 bpf를 써볼까하고있었습니다.
Open vSwitch도 찾아보겠습니다.
감사합니다.