1. 컴퓨터 구조와 운영체제
- 프로세스: 실행중인 프로그램
- 멀티 프로세스: 두개 이상의 프로세스가 동시에 실행되는것
- 운영체제: 사용자가 컴퓨터를 조작 및 제어하고 작업의 편의성을 제공하기 위한 ’시스템 소프트웨어’
- 병렬처리: 여러 개의 작업을 동시에 실행하여서 효율을 높이는 것(GPU)
- 캐시메모리(SRAM): CPU와 주기억장치의 속도 차이를 해결하기 위해 일시적으로 필요한 적은 양의 데이터를 저장하는 기억장치
- 주기억장치: 컴퓨터의 수치, 자료, 명령등을 기억하며 프로그램 및 운영체제가 실행되기 위해 위치되는 곳
- 스케쥴링: 작업에 필요한 자원을 언제 누가 어떻게 사용할지 결정해 주는것
- 멀티쓰레드: 하나의 프로세스가 여러 작업 단위를 가지며 작업을 수행하는것
- 보조기억장치: 비휘발성 메모리로 운영체제 및 일반 프로그램들, 여러 지워지면 안되는 데이터 들이 저장되어 있는 곳
- 사용자 인터페이스(UI): 시스템 또는 장치를 조작할 수 있게해주는 사용자를 위한 매개체나 경계면
2. 소프트웨어 설계
- 자료형: int, str같은 데이터 형식을 일컫는 말
- 자료구조: 데이터를 효과적으로 저장하기 위해 어떤 논리나 규칙으로 자료를 모아 놓은 구조
- 객체: 현실세계에 있는 어떤 대상을 추상화하여 가상의 공간에 표현한것
- 클래스: 객체를 생성하기 위해 어떤 속성과 방법의 집합을 추상화하여 표현한것
- 인터프리터: 한 줄씩 프로그래밍 언어를 번역하고 실행하는 것
- 오버라이딩: 상속받은 클래스에서 어떤 기능을 재정의하는것을 의미
- 오버로딩: 함수의 이름은 같으나 매개변수를 다르게 설정하여 사용 목적에 따라 다르게 불러오는것
- 단위테스트: 가장 작은 단위의 test로 함수, 모듈 등 제일 작은 단위의 기능을 test하는것
- 스택 영역: 정적 메모리 할당을 위한 곳으로 함수, 지역변수, 매개변수 등을 사용하기 위한 메모리 영역
- MTV: python기반의 웹 구현을 위한 프레임워크인 Django(장고)가 적용하는 디자인 패턴
3. 소프트웨어 설계
- 프로토콜: 통신규약으로 원거리에서 장비간 메시지를 주고 받는 양식과 규칙
- OSI 7계층(내림차순): 응용 계층(Application layer), 표현 계층(Presentation Layer),세션 계층(Session Layer),전송 계층(Transport Layer),네트워크 계층(Network Layer / TCP),데이터 링크계층(DataLink Layer / IP), 물리계층(Physical Layer)
- 패킷: pack과 bucket의 합쳐진 말로 네트워크를 통한 정보 전송의 기본 단위
- REST: 자원의 상태를 이름으로 구분하여 주고받는 개념
- API: 소프트웨어 간의 상호작용을 위한 인터페이스
- HTTP: 하이퍼텍스트를 통해 인터넷에서 데이터를 주고 받기 위한 프로토콜
- 서버: 요청을 받는 주체
- 클라우드 서비스: 사용자가 원격으로 서버를 사용할 수 있도록 하는 가상화된 서버
- 디도스(DDoS): 대량을 트래픽을 보내 네트워크 서비스를 중단 시키는 사이버 공격
- 스키마: DB에서 어떤 구조로 데이터가 저장되는지에 대한 정보
4. 빅데이터 및 인공지능
- 머신러닝(ML): 기계학습
- 시계열 데이터: 일정한 시간동안 수집된 데이터
- LLM: ChatGPT와 같이 대규모 언어에 대한 처리를 할 수 있는 AI 모델
- 딥러닝(DL): AI가 학습이나 문제해결을 위한 알고리즘을 담고있는 AI의 핵심 사고방식
- 과적합(overfitting): AI가 데이터를 과하게 학습하는 것
- 데이터 전처리: 데이터를 학습 또는 분석하기 전에 적합한 형태로 만드는 것
- 데이터 마이닝: 축적된 다량의 데이터 속에서 실제로 가치있는 정보만 추출
- 기계 학습 종류:
- 지도 학습: 정답이 있는 데이터를 활용해 데이터를 학습(입력값과 결과값 둘 다 제공 후 학습)
- 비지도 학습: 정답이 없는 데이터를 비슷한 특징끼리 군집화 하여 새로운 데이터에 대한 결과를 예측하는 방법
- 준지도 학습: 위 두 학습을 적절히 섞는 방
- 강화 학습(RL): 분류할 수 있는 데이터가 존재하는 것도 아니고 데이터가 있어도 정답이 따로 정해져 있지 않으며 자신이 한 행동에 대해 보상(reward)를 받으며 학습하는 것 - 강화학습의 개념: 만약 이것을 지도 학습(Supervised Learning)의 분류(Classification)를 통해 학습을 한다고 가정하면 모든 상황에 대해 어떠한 행동을 해야 하는지 모든 상황을 예측하고 답을 설정해야 하기 때문에 엄청난 예제가 필요.
- 강화학습 예시: 게임을 예로들면 게임의 규칙을 따로 입력하지 않고 자신(Agent)이 게임 환경(environment)에서 현재 상태(state)에서 높은 점수(reward)를 얻는 방법을 찾아가며 행동(action)하는 학습 방법으로 특정 학습 횟수를 초과하면 높은 점수(reward)를 획득할 수 있는 전략이 형성 됨. 단, 행동(action)을 위한 행동 목록(방향키, 버튼)등은 사전에 정의가 되어야 함.
- AI의 정확도: 1에 가까울 수록 높은 수치를 나타냄
- 텐서플로우(TensorFlow): 구글에서 개발하였으며 오픈소스 라이브러리로 딥러닝, 기계학습 등 AI 분야에서 많이 사용되는 것
5. 소프트웨어 문서
- 개체 관계 다이어그램(ERD, Entity Relationship Diagram): 개체들 간의 관계를 나타내는 다이어그램
- 와이어프레임: 사용자에게 보여지는 웹 사이트에 대한 대략적인 UI를 의미하며 보통 기획단계에 작성
- 소프트웨어 요구사항 명세서: 이해관계자들과 개발자들간에 협의가 이뤄진 후 개발될 소프트웨어가 만족해야하는 내용을 구체적으로 담은 문서
- 테스트케이스(Testcase): 시험항목에 대한 내용을 담고 있는 문서
- API 명세서: 소프트웨어 상호작용에 대한 문서로 어떤 매소드를 어떻게, 언제 사용하는지 구체적인 사항을 작성하는 문서
- 소프트웨어 버전 및 문서의 버전 표시: 일반적으로 3.12.5 이런식으로 표기. 버전의 각 자리의 바른 명칭은 ‘Major version(매이저버전).Minor version(마이너리버전).Patch version(패치버전)’
- 개인정보: 직/간접적으로 개인을 식별할 수 있는 정보
- 소프트웨어 요구사항 명세서(SRS): 발주자가 이해할수 있을만큼 명확하고 자세한 요구사항을 명세
- 소프트웨어 설계 사양서(SDS): 프로젝트 담당 팀들이 이해할수 있을만큼 소프트웨어의 전반적인 설계에 대해 구체적으로 담고 있는 문서
- 소프트웨어 코드 사양서(SCS): 각 팀마다 소프트웨어를 개발하기 위한 작성할 코드에 대한 표준 문서
- 핵심 개발 실무자가 변경되도 소프트웨어 문서는 변하면 안됨. 단, 소프트웨어가 바뀔 시 문서 또한 동기화 되어야 함
- 업무 분류 체계(WBS): 프로젝트의 범위, 일정, 진척사항 등 효율적인 일정 관리와 명확한 서비스 개발 범위를 지정하기 위한 문서
- WBS 항목: 프로젝트 단계, 상세 테스크, 작업 담당자, 기간, 진척도, 일정차트, 보고 / 회의 시점
'CS' 카테고리의 다른 글
OpenAI의 Chat Completions response format (0) | 2024.09.26 |
---|---|
MTV 패턴(Django) (0) | 2024.08.09 |
CS관련 기술 모의 면접에 대한 간단한 고찰 (0) | 2024.08.09 |
02. CPU의 스케쥴링 및 메모리 심화 (1) | 2024.07.29 |
01. 컴퓨터의 네가지 핵심 부품 (1) | 2024.07.26 |