42 서울 본과정 과제 회고

jiholee·2022년 1월 5일
3

회고

목록 보기
3/3

공통 과정에서는 c/c++을 주로 배운다. 자료구조나 알고리즘, 운영체제와 관련된 내용들을 컴공에 준하게 배울 수 있다. 마지막 과제인 트렌센던스까지 하면 타입스크립트, 프레임워크, DB까지 사용한 멋진 프로젝트를 할 수 있다. 모든 과제에서 키워드만 던져주기 때문에 알아서 공부해야한다. 수단과 방법을 가리지 않고 공부하는 습관도 가질 수 있게 된다. 과제가 혼자 하기에는 영 어렵기 때문에 스터디나 인맥을 잘 관리해서 좋은 정보를 얻는것도 중요하다. 실패하는 것에 연연하지 않게 되고, 경쟁이 아닌 동료와의 끈끈한 협력을 배울 수 있다.

🍒 Libft

libc의 대표적인 함수들을 클론하여 나만의 라이브러리를 만든다. calloc, memmove, memcpy 와 같이 메모리를 만지는 함수나 strcpy, substr, split등의 문자열 관련 함수를 만들면서 자료형, 포인터, 메모리 관리를 이해할 수 있다.

🍎 get_next_line

file descriptor로부터 유닉스 개행문자(LF, '\n') 또는 EOF 기준으로 한 줄 씩 읽는 함수를 만든다. read, write 등의 파일 입출력 시스템콜, static 변수에 대해 공부한다. libft와 get_next_line 까지 하면 컴퓨터 메모리 구조에 대한 이해도가 높아진다.

🍇 ft_printf

printf 함수를 똑같이 구현한다. 과제에 어렵다고 적혀있고 어려웠다.🥺 가변인자를 이용해서 cspdiuxX% 에서 flag, precision, 각각의 우선 순위까지 고려해야 한다. f%인 보너스까지 하면 부동소수점에 대해 깊이 공부하는 시간이 될 것이다. 하지만 시간이 엄청 오래 걸리기 때문에 잘 선택 해야한다. 그리고 이때 부터는 관리하는 함수, 파일이 많고 디버깅도 필수라서 vim에서 vscode로 넘어가면 좋다..

🧇 cub3d

1인칭 슈팅 게임엔진을 만든다. ray casting이라는 그래픽 알고리즘을 이용한다. 3차원이라 수학 공부도 많이 해야한다. 이 과제에서 메모리 할당 후에 해제하는 malloc free 에러로 고생했다. AddressSanitizer를 사용하면 좋다. 이번에 새로 생긴 so_long은 2차원 게임 만드걸 먼저 하던데 그정도가 적당한 것 같다. 2차원도 제대로 못하고 3차원을 한 느낌이다...🥺

🍓 minishell

미니 bash 쉘을 만드는 과제이다. echo, cd, pwd, export, unset, env, exit 명령어는 builtin으로 만들고 나머지 명령어는 PATH 환경 변수에서 실행 파일을 찾아 잘 실행시켜야 한다. fork, pipe, execve 등의 프로세스 생성과 제어, dup 등의 파일 디스크립터 관련 시스템 콜을 이해하고 활용한다.

🍪 philosophers

"식사하는 철학자"에서 발생하는 deadlock 문제를 해결한다. 철학자를 프로세스 또는 스레드로, 포크를 공유자원으로 설정하여 mutex와 semaphore를 공부한다. 멀티 스레드, 멀티 프로세스 환경이다 보니 디버깅이 난감했지만 확실히 이해할 수 있었다.

🍮 ft_services

docker container로 구성된 쿠버네티스 클러스터를 구축한다. kubectl ~ 온갖 옵션과 명령어로 pod에 들어갔다가 나왔다가 죽였다가 살렸다가 한다. 각 컨테이너들이 서로 잘 통신하도록 yaml 파일을 작성한다. 인프라 관련 과제인데 minishell에서 잘 공부해 놓으면 상당히 도움이 많이 된다. (포그라운드/백그라운드 프로세스, exit code 등등)

🧁 cpp module

c++ 문법과 객체지향 개념을 익힐 수 있다. 과제에서 요구하는 키워드를 그때 그때 책을 찾아서 보다보면 웬만한 문법서 하나 다 읽는다. 객체지향 자체가 좀 어렵긴한데 확실히 코드로 짜면 이해하는데 수월하다.

🍻 ft_containers

c++ 컨테이너인 vector, list, stack, queue, map과 이터레이터를 구현하는 템플릿 프로그래밍을 하는데,,, 자료구조 공부를 많이 하게 된다. 이때 이진 탐색 트리에 대해 깊게 공부할 수 있었다. 그런데 c++를 배우는게 옳은건가 라는 생각을 많이 하게된다.

🍹 webserv

HTTP 1.1 프로토콜 기반으로 소켓 통신하는 웹서버를 만든다. nginx를 모델로 get, post, delete 요청을 처리 한다. c++배우길 잘했다는 느낌을 처음 받았다.😂 상속개념도 적극 활용해야 한다. 나는 workmap 웹 프로젝트를 한 뒤에 과제를 시작해서 그나마 이해하기 편했다. 다른 사람 코드도 좀 봤는데 확실히 잘 읽히는 코드랑 영 안 읽히는 코드가 있긴 하다.
팀프로젝트라 팀원에게 배우는 것도 정말 많다. 지금까지 한 과제중에 제일 재밌고 좀 더 깊게 잘 공부하면 포트폴리오로 쓸 만 할 것 같다.

🍄 Transcendence

대망의 마지막 과제였다. 웹 탁구 게임을 만드는데 관리자 기능이 있는 채팅도 가능해야 하고 친구 추가 나 차단 기능도 있어야 하고 요구사항이 많았다. 그런데 진짜 서비스를 하려면 이 정도 요구사항은 아주 최소한이라는 것을 알게 되었다. 인턴생활이랑 병행하다 보니 빡셌지만 팀원들이 다들 너무 좋은 분들이라 끝까지 할 수 있었다. 업무에 좀 익숙해지고 나면 이런 식으로 토이 프로젝트를 하면 좋을 것 같다. 이때 현직자 멘토링을 받으면서 지라, 컨플루언스 사용을 잠깐 했는데 역시 회사에서도 지라를 사용해서 도움이 많이 되었다.


잘한점

  • 클러스터가 닫혀도 스터디를 만들거나 찾아서 꾸준히 공부했다. 덕분에 교육날짜가 넉넉해서 중간에 웹 프로젝트도 할 수 있었다.
  • c/c++ 공부를 잘 해두면 다른 언어를 공부하고 사용할 때 확실히 수월하다. 또한 c++로 꾸준히 알고리즘 문제를 풀어 왔던걸 기반으로 파이썬으로 알고리즘 문제를 풀어보니 훨씬 수월하다.
  • 동료분들과 너무 멀지도 너무 가깝지도 않은 적당한 관계를 유지하다 보니 기본적으로 만족스럽게 생활하고 있다.

개선할 점

  • 깃허브 커밋 메세지를 한글로 잘 올렸으면 좋았을 텐데 그러지 못했다. 잘 하지도 못하는 영어로 아무도 안볼거라고 생각하고 그냥 적당히 적었다.

  • 주말에는 토이 프로젝트를 하거나 이력서를 적극적으로 쓰고 코딩테스트도 보는게 좋을 것 같다.

  • 멘토나 앞서가는(?) 주변 동료의 피드백을 적극 활용하자.

0개의 댓글