Post

C++ Korea meetup 후기

안녕하세요, 남파카입니다.

어제 C++ Korea라는 한국 C++ 개발자 모임 단체의 meet-up을 다녀왔어요.
저는 옥찬호님께서 진행해주신 “빠르게 살펴 보는 C++ 동시성” hands-on 세션에 참가했습니다.

오늘은 meet-up을 통해 느낀점들을 공유하고자 합니다.


Meet-Up에 참가하게된 계기

저는 가끔 심심하면 제가 가고 싶은 분야의 채용 공고를 보는 취미가 있어요.
공고에서 원하는 지원자의 자격 목록을 보면서 동기부여도 얻고, 현재 내 역량이 어느정도인지 자기 객관화도 되거든요.

그래서 채용 공고를 보려고 링크드인을 들어갔는데, 언제인지 모르겠는 과거의 제가 C++ Korea를 팔로우 했어서 이번에 meet-up을 한다는 게시물을 보게 되었어요.
meet-up 목록 중에서 C++ 동시성을 주제로한 hands-on 세션에 관심이 가서, 동료와 함께 참가하게 되었습니다.

42 Seoul에서 C로 배웠던 동시성 개념을 제가 잘 습득 했는지 알고 싶었고, C++에서는 멀티스레드 환경을 어떻게 핸들링 하는지 궁금했어요.
그리고 제가 혼자만의 세계에서 잘못된 지식을 습득한 우물 안 개구리 상태였는지도 알고 싶었어요.


첫 느낌

저에게는 이런 대외 활동이 처음이었기 때문에, 걱정 반 설렘 반의 마음을 가지고 입장을 했습니다.
생각보다 사람이 거의 20명 정도로 많이 적었어요.
그리고 뭔가 알 수 없는 프로그래밍 고수들의 분위기? 같은 것이 느껴졌어요.
프로그래머가 일반 군인이라면, 여기 계셨던 분들은 뭔가.. 특수부대원 같았어요.

뉴비인 저는 살짝 쫄은 상태로 조용히 주위를 둘러보았습니다.
혼자서 컴퓨터로 작업 하고 계신 분들도 있었고, 한 쪽에서는 몇몇 분들이 기술 관련 얘기를 엄청 열정적으로 하고 계셨습니다.
열정적으로 대화 나누는 모습을 보면서 긴장이 오히려 풀렸고, 자유롭게 얘기할 수 있는 좋은 환경이라고 생각이 들었어요.

meet-up 장소와 공간들도 둘러봤는데, 시설이 너무 좋았습니다..
대기업에 가면 이런 좋은 환경에서 회의할 수 있다는 생각이 들면서 동기부여가 되었어요.


Hands-On 후기

진행

Hands-On 세션은, 목차대로 진행 하면서 자유롭게 질의응답 하는 형식으로 진행되었어요.
진행 순서는 크게 아래와 같았습니다:

  1. C++에서 thread 다루기
  2. 멀티스레드 환경에서의 data race 문제
  3. Data race 방지 기법
  4. 뮤텍스 락, 락 가드
  5. 조건 변수
  6. Lock free

세부적으로 나누면 23개의 개념이 있었어요.

제가 이미 알고 있었던 내용은 C언어의 뮤텍스 락, 세마포어 였고 나머지 개념들은 전부 새로 배우는 내용이었어요.

대부분이 새로 배우는 개념이었는데, 신기하게도 설명을 들으면 바로바로 이해가 되었어요.
발표자님께서 설명을 잘 해주신 것도 있고, 제가 운영체제에 대한 기본 CS 지식도 있었기 때문에 이해하기 쉬웠다고 생각해요.

긴가민가한 부분은 다른 분들께서 질문을 해주셔서, 제가 물어볼 필요가 없었어요.
이번 hands-on의 꽃은 질의응답이라고 해도 과언이 아닐만큼, 질문의 퀄리티가 정말 높았습니다.

그리고 설명해주시는 개념들이 실제 실무에서 사용되는지도 알 수 있어서 좋았어요.

아쉬운 점은 시간이 짧았다는 점이었어요..
1시간 30분 동안 진행이 되었는데, 수준 높은 질의응답을 하면서 진행되다 보니까 시간이 부족했습니다.
세션이 재미있어서 1시간 30분이 빨리 갔던 거 아닐까 라고도 생각해요.

질의응답

세션이 진행되면서 정말 많은 질문이 오갔었는데, 이 질문들의 수준이 상당해서 정말 많은 것을 배울 수 있었습니다.

기억에 남는 질문들을 적어보자면,

  1. yield() 함수를 사용하면 스케줄링을 다른 thread로 넘기는 건가요?
  2. chrono 사용할 때, 시간 정밀도 고려해야 하지 않나요?
  3. detach() 함수는 스레드를 분리시키는 역할이지, thread 분리 후 종료는 아니지 않나요?
  4. thread들이 사용하는 메모리는 어떤 메모리인가요? main thread의 메모리를 같이 사용하나요?
  5. mutex lock(), unlock() 함수를 왜 for문 스코프 안에서 처리하죠? 밖으로 빼는게 훨씬 낫지 않나요?
  6. Atomic으로 원자적 연산을 하도록 해주는게, 실제 CPU에서 한 개의 명령어로 동작하도록 하는건가요?
  7. 원자적 연산이 CPU 내부적으로는 다른 코어의 메모리 버스를 막도록 해서 동작하는건가요?

이 정도가 기억납니다.

성능을 더 좋게, 더 정확하게, 하드웨어 관점에서의 이해를 위해 나온 질문들이라고 생각해요.
즉, 실무라면 어떻게 사용하는게 최적일지를 생각하는 질문들이었습니다.
질문을 한 번만 하지 않고, 여러 번 파고 들어가서 하는 경우도 있었어요.
모든 질문이 한 번쯤은 제대로 생각해보면 좋을 듯한 질문들이었고, 실제로 배운 것도 많았어요.

또한, 발표자님의 질의응답에 대한 태도에서도 배울 점이 많았어요.
특히 3번 질문은 발표자님께서 설명을 잘못 해주신 부분이었는데, 질문을 들으시고나서 자신의 설명이 잘못되었고, 질문자님의 내용이 맞다고 말씀해주셨어요.
자신이 설명을 잘못했다는 것을 인정하고, 제대로된 지식을 전달하시려는 것을 보면서, 진짜 지식인의 행동이 이런거구나 라고 생각했어요.

그리고 답변을 발표자님만 해주신 것이 아니고, 참석자 중 누구라도 자신이 잘 알고 있다면 자유롭게 답변을 했어요.
다른 사람들은 답변을 할 때 어떻게 하는지 알 수 있었고, 자신의 주장에 대한 이유와 근거를 논리적으로 뒷받침 하면서 상대방을 이해시키는게 정말 멋있었습니다.
저도 4번 질문에 대해서 대답을 했었고, 발표자님께서도 저와 동일하게 알고 계시다고 말씀해주셨어요.
이 계기로 제가 제대로 배웠고, 우물 안 개구리가 아니었구나 라는 것을 느낄 수 있었어요. 😎(뿌듯)


마무리

공부해야 될 것들

세부적인 개념들 중에 Unique_lock, Shared_lock 이라는 것들이 있었어요.
이 개념들을 이해하려면 move semantics, Unique_ptr, Shared_ptr 같은 개념을 알고 있어야 했어요.
저는 C++98만 공부해서, 이 개념들을 몰랐어요.
이제는 Modern C++까지 공부해야 되겠다는 깨달음과 동기부여를 얻었고, 앞으로 할 예정입니다!

결론

이번 meet-up을 통해 깨달은 점을 정리해보자면,

  1. 올바른 방향으로 공부를 잘 해왔다.
  2. CS 지식은 기본이 되야한다.
  3. 성능, 정확성, 하드웨어 관점을 항상 생각하면서 프로그래밍 해야한다.
  4. 아직도 부족한 점이 많다.
  5. 대외 활동을 3개월에 한 번은 참가하자.

오늘도 읽어 주셔서 감사합니다!

Trending Tags