Truth Hurts
Windows, Android OS, 그리고 다양한 언어들이 탄생할 수 있었던 배경에는 C언어가 있었습니다. 소프트웨어 개발의 근간이 C언어에서 시작했다고 해도 과언이 아닐 정도로 컴퓨터 공학적 지식과 아주 밀접한 상관관계가 존재하는 C언어와 최근 웹 서비스 개발부터 딥러닝 등 다양한 분야를 넘나드는 파이썬 언어까지 두 언어를 활용해 소프트웨어의 기초를 학습하고 고급지식을 습득하기 위한 기본기를 쌓아갑니다.• Intro- Software Basic• C언어의 기초- 프로그래밍 개발환경 구축하기- 변수와 상수- 기본 입출력- 연산자- 조건문- 반복문- 함수- 배열- 포인터- 문자- 문자열- 컴퓨터가 변수를 처리하는 방법- 다차원 배열과 포인터 배열- 동적 메모리 할당- 함수 포인터- 구조체- 파일 입출력- 전처리기
아마존, Microsoft, Google, Facebook과 같은 글로벌 기업 및 국내 모든 IT 기업에서 개발자 채용시 ‘자료구조’를 가장 중요한 개념으로 꼽습니다. 소비자에게 얼마나 잘, 빠르게 보여지느냐가 서비스의 성패를 좌우하기 때문에 데이터 구조를 효과적으로 짜는 것은 매우 중요한 일입니다. 프로그램의 성능과 메모리를 효율적으로 사용할 수 있도록 만드는 컴퓨터 자료구조를 학습합니다.• 자료구조와 알고리즘- 자료구조의 개요- 연결 리스트- 양방향 연결 리스트- 스택- 스택을 활용한 계산기 만들기- 큐- 정렬 - 선택 정렬과 삽입 정렬- 정렬 - 퀵 정렬- 정렬 - 계수 정렬- 정렬 - 기수 정렬- 트리 - 이진 트리- 트리 - 이진 트리의 구현 및 순회- 우선순위 큐- 탐색 - 순차 탐색과 이진 탐색- 그래프 - 그래프의 개념과 구현- 그래프 - 깊이 우선 탐색- 그래프 - 너비 우선 탐색- 탐색 - 이진 탐색 트리- 탐색 - AVL 트리- 해시- 프림 알고리즘- 그래프 - 다익스트라의 최단 경로- 고급 자료구조 - 세그먼트 트리- 덱스 트리- KMP 문자열 매칭- 라빈 카프 문자열 매칭
C언어에서 출발하여 발전된 객체지향 프로그래밍 언어인 C++ 을 C언어와 비교해 가며 학습합니다. 객체의 개념과 캡슐화, 추상화, 다형성 등의 기법들을 활용하여 협업을 위한 효과적인 코드를 작성할 수 있도록 합니다. 소켓 프로그래밍을 통해 네트워크로 통신하는 프로그램의 예제들을 만들며 C++ 언어가 어디에 사용되는지 어떻게 활용될 수 있는 지에 대한 감을 익힐 수 있습니다• C++ 언어의 기본- C언어와 C++ 비교하기- C++의 클래스- C++의 생성자와 소멸자- C++의 클래스 상속- C++의 오버로딩- C++의 캡슐화 기법- C++의 다형성 기법- C++의 템플릿- C++의 스마트 포인터- C++ STL 컨테이너 어댑터- C++ STL 시퀀스 컨테이너- C++ STL 연관 컨테이너- C++ 예외 처리- 소켓 프로그래밍의 개요- 소켓 프로그래밍 함수와 Winsock2- C++ TCP 에코 통신 프로그램- Visual Sudio와 GiHub을 연동해 소스코드 관리하기- C++ Boos.Asio 개요 및 설치- C++ Boos.Asio의 기본적인 사용법- C++ Boos.Asio 동기식 TCP 통신 예제
캡슐화, 추상화, 다형성 등 객체지향 프로그래밍의 특성을 100% 활용하여 C++ 언어로 프로젝트를 진행합니다. 협업을 효과적으로 하기 위한 코드 작성법, 디버깅 효율을 강화하는 방법 등 실제 프로그램을 완성할 수 있는 실전 감각을 길러드립니다.• C++ 프로젝트- 오목 게임 시작 화면 구성하기- 오목 혼자하기 화면 구성하기- 오목 혼자하기 판정 기능 구현하기- 오목 함께하기 화면 구성하기- 오목 함께하기 서버 구현하기- 오목 함께하기 통신 모듈 완성하기- 공개키 기반 구조- OpenSSL 설치하기- OpenSSL TCP 통신 예제- AWS EC2의 개요 및 사용 방법- Ngrok을 활용한 서버 구동 테스트- 기존 오목 네트워크 게임 구성 분석하기- 패킷 변조를 통한 게임 서버 공격- 게임 서버 방어 기법- 오목 서버 프로그램 소스코드 리팩토링- Player VS Compuer 구성 및 알고리즘 이론 학습하기- Alpha-Bea Pruning 인공지능 알고리즘 적용- 오목 인공지능 개선 방안 및 참고 자료- B 트리의 개요와 알고리즘 원리- C# 네임스페이스와 열거형- C# 구조체와 클래스- C# Generics- C# 인터페이스- C# .Net Framework의 개요- Visual C#의 주요 컴포넌트- Visual C#의 주요 이벤트 처리
Part 2. 운영체제
운영체제는 컴퓨터 소프트웨어의 핵심으로 하드웨어와 소프트웨어를 모두 관장합니다. 컴퓨터공학의 주요 이론들이 실제로 적용되어 있기 때문에 운영체제에 대한 이해가 높은 개발자는 모든 회사에서 우대할 수밖에 없습니다. 모바일 어플리케이션 개발, 웹 개발, 보안, 스마트 TV OS 등 대부분의 개발에 적용되는 OS를 학습하여 컴퓨터 공학의 기본기를 쌓을 수 있습니다.• 운영체제 소개- 운영체제 오리엔테이션- 운영체제 큰 그림- 운영체제 큰 그림과 응용 프로그램• 운영체제 핵심 개념 잡기- History로 이해하는 운영체제 핵심 기술(1950-1960초반)- History로 이해하는 운영체제 핵심 기술(1960후반_멀티태스킹)- History로 이해하는 운영체제 핵심 기술(1960후반_시분할시스템)- History로 이해하는 운영체제 핵심 기술(1970년대)- History로 이해하는 운영체제 핵심 기술(1980년대)- History로 이해하는 운영체제 핵심 기술(1990년대)- History로 이해하는 운영체제 핵심 기술(2000년대와 총정리)• 운영체제 구조- 시스템콜- 사용자 모드와 커널모드• 스케줄링- 배치 처리, 멀티 태스킹, 멀티프로세싱 상세- 멀티 프로그래밍
• 프로세스와 스케쥴러의 이해- 스케줄링 알고리즘 기본1- 스케줄링 알고리즘 기본2- 프로세스 상태와 스케쥴러- 프로세스 상태기반 스케쥴링 알고리즘 기본- 선점형과 비선점형 스케쥴러- 스케쥴링 알고리즘 조합- 인터럽트란- 인터럽트 종류- 인터럽트 내부 동작- 프로세스 구조- 프로세스 구조와 컴퓨터 구조- 프로세스 구조와 힙- 프로세스 구조와 스택 오버플로우- 컨텍스트 스위칭 원리- 컨텍스트 스위칭 개념 정리- 프로세스간 커뮤니케이션- 프로세스와 IPC- IPC 기법1 (참고 강의)- IPC 기법2 (참고 강의)- 프로세스 총정리와 프로그램 성능개선방법의 이해
• 운영체제 소개- 스레드 개념- 스레드 장단점- 스레드 동기화 문제- 세마포어- deadlock과 sarvaion
• 가상 메모리의 이해- 가상 메모리 개념- 페이징 시스템- 다중 단계 페이징 시스템과 페이징 시스템 장점- 페이지 폴트- 페이지 교체 알고리즘- 세그멘테이션 기법- 가상 메모리 동작 이해 총정리 (총정리 강의)• 파일 시스템의 이해- 파일 시스템 배경 이해하기- incode 방식과 가상 파일 시스템- 부팅의 이해- 가상머신의 이해- 실제 최신 운영체제 및 운영체제 총정리
Part 3. 시스템 프로그래밍
• 리눅스 배경 이해하기- 컴퓨터 사이언스 전공을 위해 꼭 알아야 할 리눅스(유닉스) 운영체제- 한번은 알아둬야 할 리눅스의 배경, 역사, 그리고 철학 - 1- 한번은 알아둬야 할 리눅스의 배경, 역사, 그리고 철학 - 2• 우분투 리눅스 사용법 익히기- AWS 회원가입- 리눅스 서버(EC2) 생성- 리눅스서버(EC2) IP 생성 및 접속- 리눅스 설치 with VMWare
서비스가 안정적으로 운영되려면 내부의 시스템단에서 메모리, CPU, 데이터 저장 및 통신을 위한 ‘시스템 최적화’가 필수적입니다. 리눅스 운영체제를 기반으로 실제 프로그래밍을 통해 깊이 있게 하드웨어와 소프트웨어를 이해할 수 있습니다. 또한 실제 시스템을 컨트롤하며 하드웨어 및 운영체제가 어떻게 동작하는지, 프로그램의 동작원리를 이해합니다.• 쉘로 시작하는 시스템 프로그래밍 기본- 다중 사용자 지원- 파일 및 권한 관리1- 파일 및 권한관리2- 리다이렉션과 파이프- foreground와 background 프로세스- 프로세스 관리 및 제어- 리눅스 파일 시스템- 리눅스 파일 시스템 탐색- 파일 관련 쉘 명령어 : 하드 링크- 파일 관련 쉘 명령어 : 소프트 링크 및 특수 파일• 시스템 프로그래밍 핵심 기술- 시스템콜과 API- ABI와 표준• 프로세스 관리- 프로세스 ID- 프로세스 ID 시스템콜- 프로세스 생성(fork)- 프로세스 생성(exec)- 프로세스 생성(wai)과 나만의 쉘만들기- 프로세스 생성 (copy on wrie)- 프로세스 종료 (exi)- 프로세스 생성과 종료 총정리 및 wait 시스템콜 상세- 프로세스 스케쥴링 관련(참고)• IPC 기법- 실습1- 실습2• 시그널 동작 메커니즘- 사용법 이해• 쉘 스크립트- 쉘스크립트의 이해와 변수- 쉘스크립트 조건문- 쉘스크립트 반복문과 실제 예제- 쉘스크립트 현업 예제 및 정리• 스레드- 스레드(Phread) 기본- 스레드(Phread) 기본과 동기화• 메모리와 파일시스템- 메모리와 mmap- mmap 예제 및 활용- 파일 시스템 관련 시스템콜 이해
Part 4. 컴퓨터 구조
IOT, AI 우리의 생활을 풍요롭게 하고 또 윤택하게 하는 수 많은 상황들이 결국 컴퓨터에 기인하고 있습니다. 수업에서는 이러한 컴퓨터의 구조와 구동 원리를 이해하고 앎으로써 발전하고 있는 컴퓨터의 구조와 구동 원리를 이해합니다.• 컴퓨터 시스템의 이해- 왜? 컴퓨터 구조를 학습해야 할까?- 컴퓨터 구조란 어떤 과목인가?- 컴퓨터 구성 요소의 기능 및 이해- 컴퓨터 구조와 통신• 데이터의 표현- 데이터의 종류- 논리회로와 데이터 표현- 부울대수와 논리식의 간편화- 조합&기억 논리회로• 중앙처리장치- CPU 내부 구조와 레지스터- CPU 내부구조와 명령어 집합- 마이크로 명령과 ALU- 마이크로 명령어 집합과 구성- 마이크로 명령 - 입출력과 인터럽트- 기본 컴퓨터 프로그래밍- 프로그래밍 언어와 실행• 파이프라인과 벡터처리- 데이터의 종속성 - 병렬처리 그리고 파이프라인- peline 구조 - 데이터&구조- Pipeline 구조 - 산술&명령어 파이프 라인- 파이프라인 CPU의 성능 분석• 메모리 구조- Memory system의 이해- 효율적 메모리 관리 정책- 컴퓨터 성능 개선을 위한 메모리 관리- 다양한 기억장치들에 대한 이해• 입출력 구조- 시스템 BUS 구성 및 제어- 입출력 연결과 주소 지정- 입출력 수행과 인터럽트• 병렬 컴퓨터 구조와 성능분석- 병렬 처리- 멀티프로세서- 시스템 성능 분석과 개선
No comments:
Post a Comment