Upstage AI LAB 부트캠프 5기/성장 기록

코딩 테스트의 첫걸음: 컴퓨터 공학을 처음 배우며

김 도경 2024. 10. 22. 21:39

컴퓨터 공학 강의는 이전에 들었던 통계나 파이썬 강의와는 전혀 다른 차원의 경험이었다.

이름은 익숙하지만 실제로 깊이 있게 다뤄보니 완전히 새로운 세계가 열렸다.

처음엔 막연히 낯설고 어렵게 느껴졌지만, 차츰 빠져들게 되는 과목이었다.

 

학습해야 할 개념도 방대하고, 이해하기 어려운 부분이 많았지만 그만큼 도전적인 재미가 있었다.

특히 알고리즘이나 자료 구조 같은 주제는 복잡하면서도 흥미로운 탐구의 대상이었다.

외워야 할 것들도 적지 않았지만, 그 덕분에 학습 과정에서 성취감을 느낄 수 있었다.

 

이번 강의를 교양 과목으로 접근하면 최고의 경험이었지만,

전공 필수 과목으로 본다면 상당히 까다롭고 도전적인 수업이라고 느꼈다.

 

취업을 위해서
컴퓨터 공학까지 공부를..!

 

취업 준비 과정에서 단순히 이력서를 제출하고, 코딩 테스트를 거쳐 최종 면접을 보게 될 것이라고만 생각했다.

그래서 코딩 테스트가 가장 큰 산이라고 여겼고, 그저 주어진 문제에 맞춰 코딩을 하면 된다고 생각했었다. 하지만 그 정도로는 충분하지 않았다. 코딩 테스트 이전에 넘어야 할 더 큰 산이 있었는데, 바로 기술 면접이었다. 이 기술 면접에서 필수적으로 다뤄지는 개념이 바로 CS, 즉 컴퓨터 공학의 지식이었다.

 

뿐만 아니라, 코딩 테스트에서도 컴퓨터 공학 지식은 반드시 필요했다. 코딩만 잘한다고 되는 것이 아니라, 그 밑바탕에 깔린 컴퓨터 공학 개념들이 중요한 역할을 했다.

 

컴퓨터 공학의 내용들은 정말 방대하고 많다! 

 

컴퓨터 공학 강의에서 다룬 주요 주제들은 각각의 깊이와 범위가 매우 방대했다.

컴퓨터 구조, 운영체제, 네트워크, 시스템 프로그래밍, 데이터베이스 등 다양한 분야를 학습해야 했는데, 이 모든 내용들이 각각 매우 중요한 개념들을 포함하고 있었다.

 

컴퓨터 구조는 CPU, 메모리, 입출력 장치 등 하드웨어의 구성과 이들이 데이터를 어떻게 처리하고 저장하는지에 대한 원리를 배우는 부분이다. 이를 통해 컴퓨터가 내부적으로 어떻게 작동하는지 이해하게 된다.

운영체제는 컴퓨터 자원을 관리하고 사용자와 하드웨어 간의 인터페이스 역할을 하는 시스템 소프트웨어로, 프로세스 관리, 메모리 관리, 파일 시스템 등 다양한 기능을 포함하고 있다.

네트워크는 컴퓨터 간의 데이터 통신과 인터넷의 원리를 배우는 영역으로, TCP/IP 프로토콜, 라우팅, 데이터 전송 방식을 다룬다.

시스템 프로그래밍은 운영체제와 하드웨어 간의 상호작용을 다루며, 주로 저수준 언어를 통해 시스템 자원을 효율적으로 활용하는 방법을 배우는 과정이다.

마지막으로 데이터베이스는 데이터를 효율적으로 저장하고 관리하는 방법을 배우며, 관계형 데이터베이스, SQL 등을 중심으로 데이터의 구조화, 저장, 검색 방법을 익힌다.

 

이 모든 주제들이 방대하게 느껴졌던 이유는 컴퓨터 공학이 성능, 용량, 비용 같은 현실적인 문제들을 해결하기 위한 학문이기 때문이다.

우리가 사용하는 모든 프로그램은 결국 컴퓨터의 하드웨어 부품 위에서 실행되기 때문에, 이를 이해하고 최적화하는 것이 필수적이다. 컴퓨터 부품이 얼마나 효율적으로 프로그램을 실행하느냐에 따라 시스템의 성능과 비용이 결정되기 때문에, 이 모든 컴퓨터 공학 지식을 습득하는 것이 중요하다는 걸 실감하게 되었다.

 

항상 쓰는 컴퓨터이지만, 그 내부가 어떻게 구성되고 작동하는지에 대해서는 깊이 생각해본 적이 없었다.

우리가 사용하는 소프트웨어들이 어떻게 하드웨어와 상호작용하고, 시스템이 어떻게 자원을 관리하며, 데이터가 어떻게 처리되는지에 대해 공부하면서, 비로소 컴퓨터가 얼마나 복잡하고 정교한 구조를 가지고 있는지 깨닫게 되었다.

 

그나마 익숙했던 컴퓨터 구조

https://hongong.hanbit.co.kr/%EC%BB%B4%ED%93%A8%ED%84%B0%EC%9D%98-4%EA%B0%80%EC%A7%80-%ED%95%B5%EC%8B%AC-%EB%B6%80%ED%92%88cpu-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%B3%B4%EC%A1%B0%EA%B8%B0%EC%96%B5%EC%9E%A5/

 

컴퓨터 구조는 그나마 익숙했던 과목이었다. 직접 조립 컴퓨터를 맞춘 경험이 있어, 그때 잠깐 얕게 공부했던 지식이 이번 학습에 큰 도움이 되었다. CPU, 메인 메모리, 보조 기억장치, 입출력 장치는 실제로 눈에 보이는 장치들이라 그런지 상대적으로 이해가 쉬웠다.

 

또한, 컴퓨터가 0과 1로 이루어진 2진수로 작동한다는 기본 개념은 이미 알고 있었기에, 컴퓨터가 이해하는 언어는 기계어이고 우리가 사용하는 언어와는 다르다는 사실은 어느 정도 익숙했다. 하지만 그 기본 개념에서 더 나아가 심화된 내용을 배우다 보니, 처음 접하는 것들이 많았고, 들을 때마다 신기하고 재미있게 느껴졌다.

 

인터럽트, 멀티코어와 멀티 프로세서, 명령어 처리, RAM과 ROM, 엔디안 등은 단어 자체는 들어본 적 있었지만, 이렇게 전문적으로 깊이 있게 배운 적은 없었다. 캐시 메모리도 마찬가지였다.

 

평소 캐시를 삭제해야 한다는 말을 많이 들어 익숙했지만, 정작 캐시가 무엇인지, 어떤 역할을 하는지에 대해서는 깊이 생각해본 적이 없었다. 이번에 배우면서 그동안 스쳐 지나갔던 개념들이 이렇게 많았다는 것을 깨닫게 되었다.

 

가장 어려웠던 것은 네트워크....

https://yozm.wishket.com/magazine/detail/1956/

 

네트워크는 이번 강의에서 가장 어려운 부분이었다. 평소 인터넷이나 네트워크가 어떻게 작동하는지 깊이 생각해본 적이 없어서 그런지, 네트워크의 여러 계층을 하나하나 이해하는 것이 꽤 힘들었다.

특히 OSI 7계층 모델처럼 각 계층이 맡은 역할과 이들이 어떻게 서로 상호작용하는지 파악하는 데 어려움을 겪었다.

 

물리 계층에서부터 응용 계층까지 각각의 개념을 차근차근 배우는 과정에서, 용어나 개념들이 생소하게 느껴졌고 이를 머릿속에 체계적으로 정리하는 것이 쉽지 않았다.

데이터가 어떻게 전송되고, 패킷이 어떻게 구성되며, 라우팅이 어떻게 이루어지는지 등을 이해하는 데 시간이 걸렸다.

 

익숙하게 사용하는 인터넷이 사실은 복잡한 계층 구조와 프로토콜을 기반으로 작동한다는 사실이 새롭게 다가왔고, 이를 배우면서 어려움을 느끼기도 했지만 동시에 흥미롭기도 했다.

 

완전히 처음 보는 내용의 학습을
거치게 되면서

 

파이썬 강의와 통계는 생각보다 수월했다.

강의를 빠르게 들어도 괜찮았고, 실시간 강의에서도 특별한 어려움 없이 따라갈 수 있었다.

하지만 이번에 컴퓨터 공학 강의를 들으면서는 절반쯤은 정신을 놓고 있었다.

강의 내용이 자연스럽게 이해되는 게 아니라, "이게 뭐지? 그래서 어떻게 되는 거지?"라는 생각이 끊임없이 들며, 따라가기가 쉽지 않았다.

강의 내용을 적어가며 최대한 집중하려고 했지만, 실시간 강의만으로 모든 것을 습득하기엔 역부족이었다.

 

그래서 정말 다행이라고 생각한 건 바로 온라인 강의였다!

온라인 강의를 통해 필요한 부분을 다시 반복해서 학습할 수 있었고, 그 덕분에 더 깊이 이해할 수 있었다.

 

온라인 강의의 가장 큰 장점은 몇 번이고 반복해서 들을 수 있다는 점이었다.

이해가 안 되거나 집중이 흐트러질 때 언제든지 멈추고 다시 돌아볼 수 있어서 학습 효율을 높일 수 있었다.

특히 어려운 개념이 나올 때마다 필요한 부분을 재차 확인할 수 있어 학습 과정에서 많은 도움이 되었다.

 

하지만, 문제는 그 방대한 강의량이었다.

컴퓨터 구조, 운영체제, 네트워크, 시스템 프로그래밍, 데이터베이스까지 모든 주제가 매우 알차고 의미 있는 내용으로 채워져 있었지만, 그만큼 공부해야 할 양이 너무 많았다.

강의를 들으면서 다 이해한 것 같았는데, 시간이 조금만 지나도 다시 헷갈리기 시작할 정도로 학습해야 할 개념이 방대했다.

 

특히 컴퓨터 구조나 운영체제 같은 기초적인 내용은 한 번에 습득하기 어려웠고,

네트워크와 시스템 프로그래밍, 데이터베이스 등 더 심화된 내용으로 넘어갈 때는 이해의 깊이가 더 필요하다는 걸 절실히 느꼈다.

한 번에 모든 것을 이해하기엔 벅찼고, 끊임없는 복습이 필요하다는 생각이 들었다.

 

그래서 이번 강의는 단순히 한 번 듣고 끝내는 것이 아니라, 앞으로 꾸준히 복습을 하며 체계적으로 정리할 계획이다.

비록 양이 많아 어려움을 겪었지만, 앞으로 있을 기술 면접과 코딩 테스트 준비에 정말 큰 도움이 될 거라고 생각한다.

 

실무와 면접에서 반드시 필요한 개념들을 다루고 있기 때문에,

이번에 배운 내용들을 확실히 내 것으로 만드는 것이 매우 중요하다고 느꼈다.