인하대학교 CSE3210 오픈소스응용프로그래밍은 2023-2에 새롭게 개설된 강의이다.
인하대에는 원래 오픈소스SW개론이라는 오픈소스의 이름을 걸은 다른 과목이 있는데, 이 과목은 한학기에 Bash, Git, Numpy, Pandas, Scikit-Learn, TensorFlow, PyTorch, HuggingFace Transformers를 다루는 무시무시한 과목이다. 너무 광범위를 다루기에 크게 깊이있지 않고, 후반부로 가서는 크게 도움도 안되는 암기라고 악평이 있는 편이다.
이렇듯 오픈소스SW개론의 평가가 크게 좋지 않기에, 새롭게 개설되는 오픈소스응용프로그래밍(이하 오소응)도 약간의 걱정이 있기는 했다.
오소응 과목에서는 다음과 같은 주제를 다룬다: 오픈소스 라이선스, Git, Docker, software engineering, style guide, code review, design patterns, software testing(Whitebox, Blackbox testing), Google test(실습, Cmake), software reliability(Fuzzing, Static analysis)
강의 교재로는 <구글 엔지니어는 이렇게 일한다(Software Enginnering at Google)>을 사용한다.
https://product.kyobobook.co.kr/detail/S000061352347
대략적인 커리큘럼은 다음과 같다.
1~4주차에 학습하는 라이선스, Git, Docker 부분은 적당한 이론 부분과 실습을 포함하고 있다. 기존에 Git, Docker을 이용해 본 사람들도 추가적으로 얻어가는 게 있을 듯하고, Git은 Github을 이용한 협업을 포함하고, Docker은 Dockerfile의 사용까지 실습했다.
5~9주차에는 소프트웨어 엔지니어링과, 개발 주기등은 이론위주로 진행된다. 스타일 가이드와 코드 리뷰는 적당한 이론으로 필요한 이유를 와닿게 설명하고, 실습을 포함해 실제로 유용하게 사용할 수 있는 것들을 배운다. 스타일 가이드는 구글 스타일 가이드를 기반으로 만든 CSE3210 Style guide를 따로 정의하여 수업과 과제, 시험에서 사용한다. 교수님들의 정성이 엿보이는 부분이다.
또한 디자인 패턴도 배우는데, 대표적으로 어댑터, 팩토리, 빌더, 옵저버 패턴을 배운다. 이 부분은 사실 수업에서는 바로 이해가 되지는 않았다. 이후 여러 번 예시를 보고 검색도 해가면서 학습했다.
10~12주차는 테스트와 소프트웨어 신뢰성에 대해 다룬다. 역시나 이론적으로 테스트의 필요성등을 다룬다. 동적 테스트로는 블랙박스, 화이트박스 테스트에 대해 구체적으로 다루고, Google test를 이용한 실습도 진행한다.
소프트웨어 신뢰성은 퍼징과 정적 분석에 대한 파트로 학술적인 내용이 주를 이루며 AFL++와 c++ check를 통한 실습도 진행한다.
13주차 부터는 팀 프로젝트를 진행하는데, 프로젝트 자체는 자료구조 구현 수준의 간단한 수준이지만, 협업에 중점을 두고 있다. Github을 이용한 협업과 코드리뷰, clang-format와 스타일 가이드를 이용한 스타일 맞추기, CMake, gcov, lcov를 이용한 적당한 빌드 프로세스, Google test를 이용한 테스트 작성, 추가적으로 코드 전체적으로 객체지향 원칙을 잘 맞추고, Modern C++를 경험해 보는 등, 주제는 단순하지만 그 주변으로 달린 것들은 배운 것들을 통째로 모두 사용해 보는 경험이었다.
전체적인 총평으로는 여태껏 들어왔던 강의 중 가장 만족스러운 강의였다. Git, Docker, code style, code review, design pattern, test 등은 실제로 정말 자주 사용되는 사항들이지만 학교 수업으로 크게 다루지 않아서 아쉬웠기에, 해당 과목은 정말 실용적 스킬을 길러줄 것 같다. 또한 실습에서 WSL를 사용하기에 이 또한 여러모로 도움이 될 것 같다.
그리고 C++ 프로젝트를 경험할 수 있는 좋은 경험이 되었다. clang-format, Google test, CMake, gcov, lcov와 Modern C++ 문법등, 아마 해당 과목을 수강하지 않았다면 몰랐을 텐데, 이후 C++로 프로젝트를 하게 된다 하면 어떤 식으로 시작할지 빠르게 방향을 잡을 수 있을 것 같다.
다만 해당 과목에 대해 구글 색이 너무 짙다는 의견이 있는 것 같기도 하다. 스타일 가이드도 구글의 것을 기반으로 하고, 테스트도 Google test 등을 쓰기 때문인데, 사실 이 부분에 대해서는 어차피 어디서라도 가져와서 채용하긴 해야 하고, 교재 자체도 구글 엔지니어링 책이니 크게 상관은 없다고 생각한다. 잘 따져보면 그렇게 많은 부분도 아니고, 구글의 문화라면 적어도 나쁜 것보단 좋은 쪽에 훨씬 가까운 문화라고 생각하기 때문이다.
다만 디자인 패턴등의 파트에서 특히 느껴지는 부분인데, 강의가 조금 강의 슬라이드 읽기 식이라는 느낌이 들기도 했다. 또한 강의 슬라이드가 약간의 번역체의 느낌이 있는데, 이런 지문을 보면 너무 헷갈려서 차라리 영문으로 강의자료를 만드는 것이 나을 것 같다는 생각이 들었다.
이해가 안 되는 부분들은 교재를 읽으면 오히려 더 설명이 잘 풀어 적혀있어 이해가 편했던 것 같다. 교재 책 자체도 훌륭한 책이니 나중에 다시 한번 읽어보는 것이 좋을 것 같다.
시험등도 사실 크게 어렵게 낼 것이 없어서 조금 지엽적으로 들어가는 부분이 있지만, 실제로 외워두어서 나쁠 것 없는 부분들이니 공부한 만큼 성적도 나오고, 얻어갈 것도 많은 수업이라고 생각한다.
'회고 & 기록' 카테고리의 다른 글
Firebase로 간단히 인기 검색어 기능을 만들어본 경험 (0) | 2024.02.03 |
---|---|
썸네일 이미지 용량 최적화를 고민해보았다 (0) | 2023.12.28 |
CSE1312 이산구조를 수강하고 (0) | 2023.12.08 |
앱 개발 프레임워크->웹 프레임워크->웹페이지 렌더링들을 둘러본 이야기 (0) | 2023.08.05 |
카카오 로그인후 기존페이지로 복귀 시도기 (0) | 2023.06.27 |