개발자가 되기 위해서는 단순히 코드를 작성하는 능력만으로는 부족합니다
CS지식과 IT기본 개념은 개발의 근간이 되는 핵심이죠
이번 글에서는 비전공자분들도 이해하기 쉽도록
디자인 패턴, 네트워크, 운영체제, 데이터베이스, API, 웹, 프레임워크 등
개발자라면 반드시 알아야 할 기초 개념들을 쉽고 명확하게 정리하였습니다!
1. cs 기초 지식 (운영체제, 네트워크, 데이터베이스, 자료구조)

1) cs란?
CS(Computer Science)는 컴퓨터가 동작하는 원리와 구조를 이해하는 학문입니다
이는 개발자가 단순한 코더가 아니라,
문제를 효율적으로 해결하는 엔지니어로 성장하는데 필수적인 지식을 말합니다
2) 운영체제(Operating System)
컴퓨터 자원을 효율적으로 관리하고 프로그램이 원활히 실행되도록 돕는 소프트웨어를 말합니다
ex) Windows, macOS, Linux, Andriod 등
CPU, 메모리, 파일 시스템, 프로세스, 스레드 등을 관리
프로세스 관리, 메모리 관리, 입출력 관리가 핵심 역할
3) 네트워크 (Network)
여러 대의 컴퓨터가 서로 데이터를 주고받을 수 있도록 연결된 구조를 의미합니다
| 개념 | 의미 |
| IP 주소 | 네트워크 상 컴퓨터의 고유한 주소 |
| 포트 | 컴퓨터 내 프로그램을 구분하는 번호 (0 ~ 65535) |
| DNS | 도메인 명을 IP주소로 변환 |
| HTTP / HTTPS | 웹 통신 프로토콜 |
| TCP / UDP | 데이터 전송 프로토콜 |
| 구조 | 클라이언트(요청) <-> 서버(응답) |
4) 데이터베이스 (Database)
데이터를 체계적으로 저장 및 관리하는 시스템을 말합니다
데이터 무결성을 유지하기 위해 정확성과 일관성이 중요

4 - 1) 관계형 데이터 베이스 (MySQL, Oracle, MariaDB 등)
데이터 무결성 ( 데이터의 단 1%의 결점도 없어야 한다 )
데이터의 무결성을 위해 철저히 데이터를 관리할 수 있도록 하는
엑셀과 유사한 데이터 관리기법을 말합니다
4 - 2) 클라이언트와 서버 중 데이터의 위치 구분
| 데이터 위치 | 클라이언트 (프론트엔드) | 서버 (백엔드) |
| 표현 방식 | 로컬 / 내부 DB | 서버 / API 요청 / DB |
| 특징 | 빠른 속도 및 오프라인 가능 | 중앙 관 및 안정성을 높임 |
| 사용 시점 | 임시 데이터, 캐시 | 중요 데이터, 공유 데이터 |
5) 자료구조 (Data Structure)
데이터를 효율적으로 저장하고 관리하기 위한 구조
| 자료구조 | 특징 | 사용 예시 |
| 배열 | 같은 크기의 메모리, 인덱스 접근 | 연속된 데이터 저장 |
| 스택 | LIFO (Last In First Out) | 뒤로가기, 함수 호출 |
| 큐 | FIFO (First In First Out) | 프린터 출력 대기, 메시지 처리 |
| 연결 리스트 | 동적 크기, 포인터 기반 | 삽입 / 삭제가 많은 직업 |
| 트리 | 계층 구조 | 파일 시스템, 검색 |
| 해시 테이블 | 키-값 쌍, O(1) 검색 | 캐시, 딕셔너리 |
2. 프로그래밍 언어 : 컴파일 언어 vs 인터프리트 언어
2 - 1) 고급 언어와 저급 언어
고급언어 : 사람 중심의 언어, 생산성이 높다. 컴파일 과정이 필수적
저급언어 : 기계어 중심의 언어 ( 기계어 / 어셈블리어 )
컴파일러란? 컴퓨터와 사람 사이의 번역기 / 고급언어를 기계어로 변경해 주는 도구
2 - 2) 컴파일 언어 vs 인터프리터 언어
| 특성 | 컴파일 언어 | 인터프리트 언어 |
| 변환 방식 | 코드 전체를 한 번에 기계어로 변환 | 코드를 한 줄씩 해석 후 실행 |
| 변환 시점 | 컴파일 타임 (실행 전) -> 코드를 기계가 이해할 수 있는 '기계어'로 바꾸는 시간 |
런타임 (실행 중) -> 프로그램을 실행할 때 한 줄씩 읽고 해석한 뒤, 실행 |
| 실행 속도 | 매우 빠름 | 상대적으로 느림 |
| 개발 편의성 | 낮음 (매번 컴파일 진행) | 높음 (즉시 실행) |
| 주요 예시 | C, C++, Java, C# | Python, Ruby, JavaScript, PHP, R |
| 사용 목적 | 성능과 효율성이 필요한 경우 사용 (편의성 떨어짐) 게임, 시스템 소프트웨어, 고성능 애플리케이션 |
빠른 개발과 프로토타입 웹 개발, 데이터 분석, 자동화 스크립트 |
3. API란?
서로 다른 프로그램 간의 "약속된 통신 방법"
클라이언트 서버와 같은 서로 다른 프로그램에서 요청과 응답을 받을 수 있게 만든 체계
서버 개발자가 API를 개발하고, 클라이언트 개발자는 그 API를 사용
API를 통해 요청과 응답을 주고 받을 때는 데이터도 같이 담긴다
( 클라이언트 소프트웨어는 서버에 요청을 보냄 -> 서버는 요청을 받아서 응답 )

3 - 1) API 요청 분류 (CRUD)
어떠한 요청을 보냈는지 파악할 수 있도록 메서드(함수)를 붙여서 전송
| 작업 | 메서드 | 설명 | 예시 |
| Create | POST | 새로운 데이터 생성 | 회원가입, 글 작성 |
| Read | GET | 기존 데이터 조회 | 게시물 목록 조회 |
| Update | PUT / PATCH | 데이터 수정 | PUT : 전체 수정, PATCH : 부분 수정 |
| Delete | DELETE | 데이터 삭제 | 게시물 작성 |
3 - 2) 서버에서 보내는 응답 ( HTTP 상태코드 )
| 코드 범위 | 의미 | 예시 |
| 200번대 | 요청 성공 | 200 OK, 201 Created |
| 400번대 | 클라이언트 오류 (클라이언트 요청에 문제가 있는 경우) |
404 Not Found, 401 Unauthorized |
| 500번대 | 서버 오류 | 500 Internal Server Error |
3 - 3) API 관련 개념
파라미터 : API 메서드 호출 시 전달하는 요청 변수
SDK( software development kit ) : 소프트웨어를 개발하기 위한 도구 (라이브러리, 샘플 코드 포함)
JSON : 요청을 보내거나 응답을 받을 때의 형식을 통일해 주는 형식 (가벼움, 가독성 좋음)
4. 프레임워크 vs 라이브러리
4 - 1) 프레임워크 (Framework)
특정 형태의 소프트웨어가 기본적으로 틀이 갖춰져 있는 것 (구조가 정해져 있어 대규모 프로젝트에 유리)
기본으로 제공되는 기능 위에 개발자가 소스코드를 추가적으로 덧붙여 프로그램을 만들 수 있습니다
ex) 백엔드 : Spring(Java), Django(Python), Express.js(Node.js)
ex) 프론트엔드 : React, Vue.js, Angular
4 - 2) 라이브러리
프로그램 개발을 위해 특정 기능들을 미리 만들어 놓은 것 (자유도가 높아 소규모 프로젝트나 특정 기능에 유리)
라이브러리 함수를 사용해 개발합니다 (개발자 주도)
ex) NumPy, Pandas (Python 데이터 분석) / Axios (Http 요청)
5. 리팩토링 (Refactoring)
이미 작성한 소스코드에 구현된 기능, 로직 변경 없이
코드의 가독성과 유지보수성을 높이기 위해 내부구조를 변경하는 것을 말합니다
5 -1 ) 리팩토링의 목표
가독성 향상 -> 다른 개발자가 쉽게 이해할 수 있는 코드
유지보수성 향상 -> 버그 수정 및 기능 추가가 용이한 코드
중복 제거
성능 최적화 -> 불필요한 연산 제거
6. 디자인 패턴
소프트웨어 개발에서 자주 발생하는 문제를 해결하기 위한 재사용 가능한 솔루션을 말합니다
| 패턴 | 용도 |
| 싱글톤 | 인스턴스를 하나만 생성하도록 제한 |
| 팩토리 | 객체 생성 로직을 분리 |
| 옵저버 | 상태 변화를 감지하고 알림 |
| MVC | 모델 - 뷰 - 컨트롤러 구조로 분리 |
6 - 2) 버전 관리
git, github 등을 통해 코드 변경 이력을 관리하고 협업을 진행할 수 있습니다
장점으로는 이전 버전으로 복구 가능, 팀 협업 시 코드 충돌 해결 가능, 코드 리뷰 및 품질 관리 편리 등이 있습니다
처음에는 모든 개념을 완벽하게 이해하려고 하기 보다는
프로젝트를 진행하면서 필요한 개념부터 학습하고
점차 깊이 있게 탐구해가는 게 좋은 학습 방향이라 생각합니다
이 글이 개발자로 성장하려는 분들께
많은 도움이 되었으면 좋겠습니다~