RaspberryPi 장비 사진을 넣으려 했지만 또 사진을 안찍었다. 다음주에 바로 수정해야지
5주차에 이어 6주차 학습주제는 Linux다. 아직 Shell사용에 미숙하지만 linuxOS를 조작하고 gcc를 이용해 컴파일을 곧 잘 한다. 2주일동안 linux와 조금 친해진 기분이다.
학원에 도착하는 루틴도 잡혔다. 지하철에서 학원까지 1시간동안 독서하며, PC전원을 누르고, 수통에 찬물을 채우고, 수업을 준비하고 jungol 알고리즘을 푼다. 이제 공부하는 생활이 자리잡히면서 여유가 생긴다. 학원 동기들은 어떻게 공부하고있는지 물어보고 배울점을 찾아봐야겠다.
이번주는 원래 동원 예비군(2박3일) 일정이 있었다. 만약 예비군으로 수업에 빠졌다면 공결 처리가가능하다. 하지만 동원훈련은 "직업훈련" 사유로 연기가 가능하다. 학원 매니저님을 통해 한달치 출석부와 확인서를 발급받아 제출하였고, 하루만에 병무청으로부터 연기완료를 회신받았다.
갑작스런 요청에도 빠르게 처리해 주시고, 행정적 업무가 아닌 공부에 실질적인 도움이 될 수 있게 지원해 주는 매니저님이 있어 감동적인 일주일이 됐다.
6주 차 회고
수업을 준비하며 VirtualBox를 켜고 SSH를 이용해 접속한다.
linux 교재는 "사물인터넷을 위한 리눅스 프로그래밍 with 라즈베리파이"이다. 900page 정도의 책을 수업에 따라 필요한 챕터를 오고가며 수업이 빠르게 진행된다.

User land와 Kernel land가 왜 필요한지에 대해 생각하며 개념을 배운다. 이어서 리눅스의 파일 시스템 특징으로 개념을 확장한다. System Call과 Stream에 대해 배우고 C언어로 파일 입출력 테스트를 통해 실제 동작을 확인한다.
많은 개념들을 배우다보면 어느순간 배운 내용들이 합쳐지면서 이해가 된다. 그때가 될때까지 최대한 깊게 생각하고 계속해서 질문한다. 강사님이 시야가 넓고 질문에 대답을 잘해주셔서 많은 내용을 배우고 있다.
새로 배운 내용
- 알고리즘 풀이: 백트랙킹, DFS를 이용한 외곽선 지우기 문제를 푼다. 영상처리에 기본이 되는 알고리즘이다. 풀이속도가 느리지만 꾸준히 풀고있다.
단계별로 문제를 풀다보니 STL연습문제를 만났다. for-each의 확실한 개념을 잡고 STL vector 의 front, back, pop_back, swap 기능을 배운다. 작지만 명확한 역할을하는 꼭 필요한 기능들이다.
- GCC(GNU Compiler Collection): 컴파일러의 집합이다. gcc와 g++을 이용한 c/c++ 컴파일 과정을 배운다.
1)-E 전처리 과정(pre-process)을 거쳐 중간단계의 파일인 .i 파일을 제작한다.
2)-s compiling 전처리된 파일을 어셈블리 파일로 컴파일해 .s 파일로 변환한다.
3)-c assembling 어셈블리 파일로 목적파일( .o 파일)로 변환한다.
4)-o 목적파일들로 실행파일을 생성한다. ( .out 파일 )
자동 빌드도구인 make를 통해 Makefile(=makefile, gnumakefile)에 작성된 일련의 빌드를 자동화 할 수 있다.
- inode, vnode: fileSystem기반에서 장비의 실제 주소를 가르키는 개념.
파일의 크기, 종류, 접근권한 등등 정보를 가지고 있는
- 저수준 파일 입출력 (system call): 파일 시스템인 linux에서 파일을 조작하기 위한 system call 함수를 kernel단계에서 제공한다. file descriptor table을 통해 ID를 부여해 관리하고, 저수준 파일 입출력이라 한다.
- 고수준 스트림 입출력 (c library): 외부장치와 속도차이를 극복하기 위해, 버퍼를 이용하는 파일 입출력 라이브러리를 제공한다. 이러한 버퍼를 통해 프로그램과 파일 사이에 단방향의 통신흐름 개념을 스트림 이라고 한다. 스트림을 통해서 User space에서 줄단위&블록 단위의 입출력을 할 수 있도록 c standard lib로 제공한다.
- RTP, RTSP: 오버헤드가 적은 UDP(Datagram)로 전송을 하는데, TCP처럼 패킷의 순서정보를 담아 전송순서를 보장하는 개념의 프로토콜로 이해했다. google의 Youtube에 사용하는 QUIC 프로토콜과 비슷하다고 생각했는데, 차이점이 무엇인지 알아봐야 할것 같다.
앞으로 해야할 내용
- 알고리즘 풀이: 매일 풀고있는 알고리즘. IM 단계로 들어오며 일주일간 29/96을 풀었다. 문제해결에 시간이 오래 걸리고 있는데, 많은 시간을 투자해 최대한 많이 풀어내자.
- RTP와 QUIC의 비교: UDP기반 통신인 RTP와 QUIC의 차이에 대해 알아보고, 어떤 특징들이 있는지 비교해 봐야겠다.
- raspberryPi memory 구매: 라즈베리 파이에 사용할 메모리를 구입하자. os를 막 다루고 모든것을 알아보자. 교육을 받으면서 메모리나 장비의 한계에 제한되지 말고, 아끼지말고 투자하여 궁금한것을 전부 해보자.
이번 주를 마무리하며
linux수업은 재미있다. 추상적인 개념을 이해하고 실습을 통해 확인하는 작업을 반복하며 수업을 듣는다. 강사님이 그림판을 굉장히 잘 다뤄 개념을 잡는데 많은 도움이 된다. 주말엔 교재를 보니, 아리송한 내용을 정리한다. 차주는 RaspberryPi를 이용해 수업을 진행한다. 다음주 수업이 기다려 진다.