내 맘대로 개발공부 막노트
기초 개발지식
Muhly
2023. 12. 28. 19:48
제가 까먹을때마다 꺼내보려고 혼공얄코유튜브 강의를 보고, 정리하였습니다.
https://elderly-erica-191.notion.site/a3ccb17c09344a27b70d506e34f4335d?pvs=4 -> 노련링크
개발자들이 하는일
1️⃣ 코딩, 프로그래밍, 개발
- 코딩 (Coding)
- 소스코드를 작성하는 단순 작업을 의미합니다.
- 프로그램의 구체적인 지시사항을 컴퓨터 언어로 변환하는 과정입니다.
- 구체적인 명령어를 작성하여 컴퓨터가 이해할 수 있는 형태로 만드는 것입니다.
- 프로그래밍 (Programming)
- 코드를 설계하는 것을 말합니다.
- 단순히 코드를 작성하는 것을 넘어서 프로그램의 구조를 구상하고, 문제를 해결하기 위한 알고리즘을 개발하는 과정을 포함합니다.
- 문제 해결 능력과 시스템적 사고를 필요로 하며, 효율적이고 효과적인 코드를 작성하기 위한 전략적 접근이 중요합니다.
- 개발 (Development)
- 소프트웨어를 만드는 모든 과정을 말합니다.
- 코딩과 프로그래밍뿐만 아니라 요구사항 분석, 설계, 테스팅, 유지보수 등 프로젝트의 전체 라이프사이클을 포함합니다.
- 개발은 기술적인 작업 뿐만 아니라 프로젝트 관리, 협업, 사용자 경험 디자인 등 다양한 요소들을 포괄하는 포괄적인 개념입니다.
2️⃣ 고수준 언어 vs 저수준 언어
- 고수준 언어 (High-Level Language)
- 사람에 가까움: 고수준 언어는 사람이 이해하기 쉬운 언어에 가깝습니다.
- 자연어와 유사한 문법을 사용하여 프로그래머가 쉽게 이해하고 사용할 수 있도록 설계되었습니다.
- 예시: 자바(Java), 파이썬(Python), C++, 자바스크립트(JavaScript) 등. 이 언어들은 추상화 수준이 높아 기계가 직접 이해하기 어렵지만 프로그래머에게 친숙하고 직관적인 코딩 경험을 제공합니다.
- 컴파일러 또는 인터프리터 필요: 고수준 언어로 작성된 코드는 컴퓨터가 이해할 수 있는 기계어로 변환되기 위해 컴파일러나 인터프리터를 거쳐야 합니다.
- 저수준 언어 (Low-Level Language)
- 컴퓨터에 가까움: 저수준 언어는 컴퓨터의 구조와 더 밀접하게 연관되어 있습니다.
- 기계어 또는 그에 가까운 형태로, 컴퓨터의 하드웨어와 직접적으로 소통할 수 있는 언어입니다.
- 예시: 어셈블리 언어(Assembly Language)와 기계어(Machine Language)가 대표적입니다. 어셈블리 언어는 하드웨어에 특화되어 있어 특정 컴퓨터 아키텍처에 종속적입니다.
- 하드웨어에 직접적인 제어: 저수준 언어는 메모리 관리와 하드웨어의 직접적인 제어가 가능하며, 이를 통해 성능 최적화가 가능합니다. 하지만 이는 더 복잡한 코딩과 높은 오류 가능성을 수반합니다.
3️⃣ IDE vs 코드 에디터
- IDE (Integrated Development Environment, 통합 개발 환경)
- 통합된 환경: IDE는 코드 작성, 편집, 컴파일, 디버그, 그리고 때로는 테스팅과 배포를 포함한 소프트웨어 개발의 전 과정을 지원하는 통합된 환경입니다.
- 예시: Visual Studio, IntelliJ IDEA, Eclipse, NetBeans 등.
- 고급 기능 제공: 자동 완성, 코드 리팩토링, 버전 관리, 빌드 시스템 통합, 디버깅 도구 등 다양한 고급 기능을 제공합니다.
- 특정 프로그래밍 언어나 프레임워크에 최적화: 특정 언어나 프레임워크에 특화되어 있어 해당 언어나 플랫폼을 사용하는 개발자에게 편리함을 제공합니다.
- 코드 에디터 (Code Editor)
- 기본적인 편집 기능: 코드 에디터는 주로 코드를 작성하고 편집하는 데 사용되며, IDE보다 덜 복잡한 기능을 제공합니다.
- 예시: Notepad++, Sublime Text, Visual Studio Code, Atom 등이 있습니다.
- 경량화 및 유연성: 일반적으로 IDE보다 가볍고 빠르며, 다양한 언어를 지원하고 사용자 정의가 용이합니다.
- 플러그인을 통한 기능 확장 가능: 필요에 따라 플러그인을 추가하여 기능을 확장할 수 있지만, IDE만큼의 통합된 환경을 제공하지는 않습니다.
4️⃣ 디버깅, 빌드, 배포
- 디버깅 (Debugging)
- 정의: 소프트웨어 개발에서 발생하는 버그(오류)나 문제점을 찾아내고 해결하는 과정입니다.
- 중요성: 프로그램이 예상대로 작동하지 않을 때, 디버깅을 통해 오류의 원인을 찾아내고 수정합니다. 이는 프로그램의 안정성과 신뢰성을 보장하는 데 중요합니다.
- 도구: 대부분의 IDE에는 디버깅을 위한 도구가 내장되어 있으며, 이를 통해 코드의 실행을 단계별로 추적하고 변수의 값을 검사할 수 있습니다.
- 빌드 (Build)
- 정의: 소스 코드를 컴파일하고, 필요한 리소스를 결합하여 실행 가능한 소프트웨어 제품(실행 파일, 라이브러리 등)을 만드는 과정입니다.
- 과정: 빌드 과정에는 소스 코드의 컴파일, 라이브러리의 연결, 자산(이미지, 데이터 파일 등)의 포함 등이 포함됩니다.
- 자동화: 대형 프로젝트에서는 자동화된 빌드 시스템(예: Jenkins, Maven, Gradle)을 사용하여 빌드 과정을 효율적으로 관리합니다.
- 배포 (Deployment)
- 정의: 완성된 소프트웨어를 사용자나 클라이언트에게 전달하고 실행할 수 있도록 만드는 과정입니다
- "지속적 배포: 현대적인 개발 방법론에서는 지속적 통합(CI) 및 지속적 배포(CD) 방식을 채택하여, 자동화된 테스트를 거쳐 소프트웨어를 지속적으로 배포합니다.
서버와 클라우드
1️⃣ 서버와 클라이언트
"서버"와 "클라이언트"는 네트워크 환경에서 상호작용하는 두 주요 구성 요소를 나타내며, 이들 간의 관계는 소프트웨어 및 인터넷 서비스의 기본적인 구조를 형성합니다.
- 서버 (Server)
- 정의: 서버는 네트워크상에서 데이터, 자원, 서비스 등을 제공하는 컴퓨터 또는 소프트웨어 시스템입니다.
- 역할: 클라이언트의 요청에 응답하여 필요한 정보나 서비스를 제공합니다. 예를 들어, 웹 서버는 웹 페이지를 제공하고, 파일 서버는 파일을 저장하고 공유합니다.
- 특징: 서버는 일반적으로 강력한 처리 능력을 가지고 있으며, 높은 안정성과 지속적인 가용성이 요구됩니다.
- 클라이언트 (Client)
- 정의: 클라이언트는 서버에 서비스를 요청하는 컴퓨터 또는 소프트웨어 프로그램입니다.
- 역할: 서버에 데이터나 서비스의 요청을 보내고, 서버로부터의 응답을 받아 사용자에게 제공합니다.
- 예시: 웹 브라우저는 웹 서버에 웹 페이지를 요청하는 클라이언트의 일종입니다. 이메일 클라이언트, 온라인 게임의 사용자 인터페이스 등도 클라이언트에 속합니다.
클라이언트-서버 모델:
- 이 모델에서, 클라이언트와 서버는 네트워크를 통해 상호 작용합니다. 클라이언트는 서비스를 요청하고, 서버는 이러한 요청에 응답하여 필요한 서비스를 제공합니다.
- 이 구조는 중앙화된 데이터 관리와 자원의 효율적인 배분을 가능하게 하며, 다양한 클라이언트와의 연결을 관리합니다.
- 이러한 클라이언트-서버 구조는 현대의 많은 네트워크 애플리케이션과 인터넷 서비스에서 핵심적인 역할을 합니다. 이 구조를 통해 효율적인 데이터 처리, 자원 공유, 안정적인 서비스 제공이 가능해집니다.
2️⃣ 클라우드 컴퓨팅
클라우드 컴퓨팅은 인터넷을 통해 컴퓨터 시스템 자원, 특히 데이터 저장소(클라우드 스토리지) 및 컴퓨팅 파워를 온디맨드(필요에 따라)로 제공하는 기술과 비즈니스 모델을 말합니다. 클라우드 컴퓨팅의 핵심은 물리적인 컴퓨터 하드웨어를 직접 관리하거나 소유하지 않고도, 필요한 컴퓨팅 자원을 원격으로 이용할 수 있다는 것입니다.
클라우드 컴퓨팅의 주요 특징:
- 온디맨드 서비스: 사용자는 필요한 만큼의 컴퓨팅 자원을 언제든지 요청하고, 사용 후에는 해당 서비스를 해제할 수 있습니다.
- 네트워크 접근성: 서비스는 인터넷을 통해 어디서나 접근할 수 있습니다.
- 리소스 풀링: 서비스 제공자는 컴퓨팅 자원(서버, 스토리지, 네트워킹, 소프트웨어 등)을 풀로 관리하여 여러 사용자에게 서비스를 제공합니다.
- 신속한 탄력성: 필요에 따라 자원을 빠르게 확장하거나 축소할 수 있습니다.
- 측정 가능한 서비스: 사용한 만큼의 서비스에 대해 비용을 지불합니다.
클라우드 컴퓨팅의 서비스 모델:
- IaaS (Infrastructure as a Service): 가상화된 컴퓨팅 자원을 인터넷을 통해 제공합니다. 예: Amazon Web Services(AWS), Microsoft Azure.
- PaaS (Platform as a Service): 애플리케이션 개발 및 배포에 필요한 플랫폼을 제공합니다. 예: Google App Engine, Heroku.
- SaaS (Software as a Service): 인터넷을 통해 소프트웨어 애플리케이션을 제공합니다. 예: Google Workspace, Microsoft Office 365.
클라우드 컴퓨팅의 장점:
- 비용 효율성: 사전 투자 없이 필요한 만큼의 자원을 사용할 수 있어 초기 비용을 크게 줄일 수 있습니다.
- 유연성 및 확장성: 비즈니스 요구에 따라 자원을 유연하게 확장하거나 축소할 수 있습니다.
- 접근 용이성: 인터넷이 연결된 어디서나 서비스에 접근할 수 있습니다.
- 유지 관리 감소: 서버와 같은 물리적 인프라의 유지 관리에 대한 부담이 감소합니다.
클라우드 컴퓨팅의 도전 과제:
- 보안 및 개인정보 보호: 데이터 보안과 개인정보 보호는 클라우드 컴퓨팅 환경에서 중요한 고려 사항입니다.
- 종속성과 제어의 손실: 클라우드 제공업체에 대한 의존도가 높아질 수 있으며, 일부 제어권을 잃을 수 있습니다.
- 대역폭 제한: 인터넷 연결 속도와 대역폭이 서비스의 성능에 영향을 미칠 수 있습니다.
웹에서 일어나는 일
1️⃣ 웹 반응형 vs 적응형
- 반응형 웹 디자인 (Responsive Web Design)
- 웹사이트가 다양한 화면 크기와 장치에 맞게 콘텐츠와 레이아웃을 자동으로 조정합니다.
- CSS3의 미디어 쿼리를 사용하여 화면 크기에 따라 다른 스타일을 적용합니다.
- 사용자의 화면 크기에 관계없이 동일한 콘텐츠를 유지합니다.
- 예: 화면이 줄어들 때, 레이아웃이 열에서 열 두 개로 바뀌거나 메뉴가 햄버거 아이콘으로 변환됩니다.
- 적응형 웹 디자인 (Adaptive Web Design)
- 서버나 클라이언트 측에서 장치의 화면 크기를 감지하고, 해당 크기에 최적화된 별도의 레이아웃이나 콘텐츠를 제공합니다.
- 다양한 화면 크기에 대해 미리 디자인된 몇 가지 레이아웃이 있으며, 장치에 따라 적절한 레이아웃을 로드합니다.
- 사용자의 화면 크기에 따라 다른 콘텐츠를 보여줄 수 있습니다.
2️⃣ 쿠키,캐시,세션,토큰
>>어머어머 세상에 이런일이?! 한방 정리가 있돠?<<
- 쿠키 (Cookies)
- 웹사이트 방문 시 사용자의 컴퓨터에 저장되는 작은 데이터 조각.
- 로그인 정보, 사이트 선호도, 장바구니 데이터 등을 저장하여 사용자 경험을 개선합니다.
- 캐시 (Cache)
- 자주 사용되는 데이터를 임시로 저장하여 빠르게 접근할 수 있게 합니다.
- 웹사이트 로딩 속도를 높이고 서버 부하를 줄이는 데 도움이 됩니다.
- 세션 (Session)
- 서버 측에서 사용자의 상태를 유지하기 위해 사용됩니다.
- 로그인 상태 유지, 사용자별 정보 관리 등에 사용됩니다.
- 세션 정보는 서버에 저장되므로 쿠키보다 보안이 강화됩니다.
4.토큰(Token)
- 웹에서 사용되는 보안 메커니즘으로, 사용자 인증에 사용됩니다.
- 토큰은 사용자의 신원을 확인한 후 서버에 의해 발급되며, 이후 요청에 포함되어 사용자 인증을 수행합니다.
3️⃣ CDN (Content Delivery Network)
- CDN이란?
- 전 세계에 분산된 서버 네트워크를 사용하여 사용자에게 웹 콘텐츠를 더 빠르게 전달하는 시스템입니다.
- 사용자에게 가장 가까운 서버에서 콘텐츠를 제공함으로써 로딩 시간을 단축시킵니다.
- 작동 방식
- 웹사이트의 정적 콘텐츠(이미지, CSS, JavaScript 파일 등)를 전 세계 여러 위치의 서버에 복사해 둡니다.
- 사용자가 웹사이트에 접근할 때, CDN은 사용자의 위치를 파악하고 가장 가까운 서버에서 콘텐츠를 전달합니다.
- 장점
- 속도 향상: 콘텐츠 로딩 시간이 줄어들어 사용자 경험이 향상됩니다.
- 대역폭 절약: 원본 서버의 트래픽 부담이 줄어들어 대역폭 사용이 감소합니다.
- 보안 강화: DDoS 공격과 같은 네트워크 공격으로부터 원본 서버를 보호할 수 있습니다.
- 확장성: 트래픽이 급증하는 상황에서도 웹사이트의 안정성을 유지할 수 있습니다.
- 용도
- 대규모 트래픽이 예상되는 웹사이트, 글로벌 사용자를 대상으로 하는 서비스, 미디어 파일이 많은 사이트 등에서 널리 사용됩니다.
웹& 모바일 의 세계
1️⃣ 모바일 앱 종류
- 네이티브 앱 (Native App)
- 개념: 특정 운영체제(OS)에 맞게 개발된 앱. 예를 들어, iPhone용 앱은 iOS에서, Android용 앱은 Android에서만 작동.
- 장점: 빠르고 효율적이며, 해당 기기의 기능을 최대한 활용 가능.
- 단점: 각 OS용으로 별도 개발 필요. 이는 시간과 비용이 더 많이 든다는 것을 의미.
- 모바일 웹 (Mobile Web)
- 개념: 스마트폰의 웹 브라우저를 통해 접근하는 웹사이트.
- 장점: 모든 기기에서 접근 가능, 별도의 앱 설치 필요 없음.
- 단점: 네이티브 앱에 비해 속도나 기능 면에서 제한적.
- 하이브리드 앱 (Hybrid App)
- 개념: 네이티브 앱과 모바일 웹의 중간 형태. 앱을 통해 웹 콘텐츠에 접근.
- 예시: '네이버 앱'에서 웹페이지를 볼 때 사용되는 웹뷰.
- 장점: 한 번 개발로 여러 플랫폼에서 사용 가능.
- 단점: 네이티브 앱만큼의 성능은 기대하기 어려움.
- 크로스-플랫폼 (Cross-Platform)
- 개념: 한 번의 개발로 다양한 OS에서 작동하는 앱.
- 장점: 개발 시간과 비용 절감.
- 단점: 특정 플랫폼에 최적화된 성능을 내기 어려움.
2️⃣ 라이브러리 vs 프레임워크
- 라이브러리 (Library)
- 개념: 필요할 때 호출해서 사용하는 코드 집합.
- 사용: 개발자가 필요에 따라 선택하여 사용.
- 예시: 수학 함수 라이브러리에서 특정 계산 함수를 호출.
- 프레임워크 (Framework)
- 개념: 앱의 기본 구조를 제공하는 코드 집합.
- 사용: 개발자가 프레임워크의 규칙을 따라야 함.
- 예시: 웹 애플리케이션 프레임워크에서 페이지 구조 및 데이터 처리 방식을 따름.
3️⃣ API (Application Programming Interface)
- API
- 개념: 소프트웨어나 애플리케이션이 서로 상호작용하기 위한 규칙과 도구, 소통방식
- 사용: 예를 들어, 날씨 정보를 제공하는 API를 통해 날씨 데이터를 얻을 수 있음.
- REST API
- 개념: 인터넷에서 자주 사용되는 API 유형. 웹 주소(URL)와 HTTP 메소드(GET, POST 등)를 사용.
- CRUD: Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 각각 POST, GET, PUT/PATCH, DELETE 메소드로 구현.
4️⃣ 데이터 포맷: XML, JSON, YAML
- XML (eXtensible Markup Language)
- 개념: 데이터를 태그로 구조화. 웹 데이터 교환에 자주 사용.
- 특징: 안정적이지만 복잡할 수 있음.
- JSON (JavaScript Object Notation)
- 개념: 자바스크립트에서 객체를 나타내는 방식으로 데이터를 구조화.
- 특징: 가볍고 읽기 쉽지만, 문법 오류에 민감.
- YAML (YAML Ain't Markup Language)
- 개념: 사람이 읽기 쉽게 데이터를 구조화.
- 특징: 매우 직관적이지만, 복잡한 데이터 구조에는 적합하지 않을 수 있음.
인터넷과 네트워크
1️⃣ IP 주소
- IP (Internet Protocol) 주소는 기기가 인터넷에 연결될 때 할당받는 네트워크 상의 주소입니다.
- 예시: 123.234.135.248와 같은 형태.
- IPv4에서 IPv6로의 전환 중:
- IPv4: 약 46억 개의 주소만을 표현할 수 있는 0~255 범위의 숫자 4개로 구성된 주소 체계.
- IPv6: 더 많은 주소를 표현할 수 있는 새로운 체계로, 현대의 연결된 기기 수 증가에 대응하기 위해 도입됨.
- 공인 IP와 사설 IP:
- 공인 IP는 인터넷 상에서 고유한 주소로, 외부 네트워크에서 접근 가능.
- 사설 IP는 로컬 네트워크 내에서만 사용되는 주소.
- 포트번호와 DMZ 사용: 네트워크 내 특정 기기 또는 서비스에 접근하기 위해 사용.
- ISP (Internet Service Provider): 인터넷 서비스 제공자. 유동 IP 사용이 일반적이며, 고정 IP는 추가 비용이 발생할 수 있음.
- 웹사이트 운영: 포트 포워딩과 DDNS(동적 DNS)를 사용하여 유동 IP를 가진 서버에 안정적으로 접근할 수 있게 함.
2️⃣ 도메인과 DNS
- DNS (Domain Name System): IP 주소를 사람이 읽을 수 있는 도메인 이름으로 변환해주는 시스템.
- 도메인: 웹사이트의 주소 (예: www.yalco.kr).
- DNS Spoofing: 해커가 DNS 쿼리를 가로채 가짜 사이트로 유도하는 공격 방법.
- 네임서버: 도메인 이름과 IP 주소를 연결해주는 서버.
3️⃣ HTTPS
- HTTP에서 HTTPS로의 전환: 보안 기능이 추가된 HTTP 버전.
- HTTPS (Hyper Text Transfer Protocol Secure): 데이터를 암호화하여 안전하게 전송.서버와 클라이언트 사이의 모든 통신 내용이 암호화된다.
- 대칭키와 비대칭키:
- 대칭키: 암호화와 복호화에 동일한 키 사용. 단점은 키의 탈취 위험이 있음.(
- 비대칭키 (공개키 암호화): 암호화와 복호화에 서로 다른 키 사용. 하나는 공개되어 있고, 다른 하나는 비공개됨.
- SSL/TLS 핸드셰이크:
- 네트워크 상의 클라이언트와 서버 간 안전한 연결을 수립하는 과정.
- 클라이언트는 랜덤 데이터를 서버에 보내고, 서버는 SSL/TLS 인증서(디지털 인증서)를 클라이언트에게 보냄.
- 클라이언트는 이 인증서를 확인하고, 서버의 공개키를 얻어 대칭키를 안전하게 전달.
- 이 대칭키를 사용하여 통신 과정에서 데이터를 암호화하고 복호화합니다.
이러한 과정들은 인터넷과 네트워킹의 기본적인 요소들을 구성하며, 데이터의 안전한 전송과 웹사이트의 접근성을 보장하는 데 필수적인 역할을 합니다.
데이터베이스와 운영체제
1️⃣ 데이터베이스
- 데이터베이스는 구조화된 데이터를 저장하고 관리하는 시스템으로, 독립된 정보의 집합소와 같습니다.
- 데이터베이스를 사용하면 데이터를 구조화하여 체계적으로 저장하고, 빠르고 효율적으로 검색, 추가, 수정, 삭제할 수 있습니다.
2️⃣ DBMS (데이터베이스 관리 시스템)
- DBMS는 데이터베이스를 관리하는 소프트웨어 또는 시스템입니다.
- 사용자와 데이터베이스 간의 상호작용을 쉽게 만들어주며, 데이터의 무결성과 보안을 유지하는 기능을 제공합니다.
3️⃣ RDBMS (관계형 데이터베이스 관리 시스템)
- RDBMS는 관계형 모델을 기반으로 데이터를 저장하는 데이터베이스 관리 시스템입니다.
- 데이터는 테이블 형태로 저장되며, 테이블 간의 관계를 통해 데이터를 조직합니다.
- 예시: MySQL, Oracle. 이들은 SQL(Structured Query Language)을 사용하여 데이터를 관리합니다.
4️⃣ SQL vs NoSQL 데이터베이스
- SQL (Structured Query Language) 데이터베이스: 관계형 데이터베이스. 데이터를 정규화된 테이블에 저장하고, SQL을 통해 데이터를 조작합니다.
- NoSQL 데이터베이스: 비관계형 데이터베이스. 유연성과 확장성이 특징이며, 다양한 데이터 저장 방식을 지원합니다.
- 예: MongoDB는 JSON 형식으로 데이터를 저장하며, 동적 스키마를 가지고 있어 구조 변화가 쉽습니다.
- Redis는 키-값 저장소로, 빠른 데이터 접근이 필요한 경우에 사용됩니다.
5️⃣ 리눅스(운영체제의 한 종류)
- 리눅스는 Unix 기반의 오픈 소스 운영체제로, 서버와 개발 환경에서 널리 사용됩니다.
- GUI(Graphical User Interface)가 없는 경우가 많으며, 주로 CLI(Command Line Interface)를 통해 작업을 수행합니다.
- 사용이유 : 개발자들에게 인기가 있는 이유는 맞춤화와 유연성 때문입니다. 리눅스는 사용자가 시스템을 자유롭게 수정하고, 자신의 필요에 맞게 조정할 수 있습니다.
커널 (Kernel)
- 커널은 운영 체제의 핵심 부분으로, 시스템의 하드웨어와 소프트웨어 사이에서 중개자 역할을 합니다.
- 하드웨어(예: CPU, 메모리, 디스크 드라이브)와 소프트웨어 응용 프로그램 간의 통신을 관리하고, 시스템 리소스를 효율적으로 분배합니다.
- 보안, 메모리 관리, 프로세스 관리, 디바이스 드라이버의 통제, 시스템 호출 처리 등을 담당합니다.
셸 (Shell)
- 셸은 사용자와 운영 체제 간의 인터페이스를 제공합니다.
- 사용자가 입력한 명령을 커널에 전달하고, 커널로부터 결과를 받아 사용자에게 출력합니다.
- 대표적인 셸로는 Bash(리눅스와 macOS에서 널리 사용됨), PowerShell(Windows), Zsh 등이 있습니다.
- 텍스트 기반의 명령 줄 인터페이스(CLI) 또는 그래픽 기반의 그래픽 사용자 인터페이스(GUI) 형태를 가질 수 있습니다.
디렉토리 (Directory)
- 디렉토리는 파일 시스템에서 파일과 다른 디렉토리들을 조직하는 방법입니다.
- "폴더"라고도 불리며, 관련된 파일들을 그룹화하여 저장하는 데 사용됩니다.
- 디렉토리 구조를 통해 파일 시스템이 체계적으로 관리되며, 사용자는 쉽게 파일을 찾고 접근할 수 있습니다.
- 예를 들어, 문서, 사진, 응용 프로그램 등을 별도의 디렉토리에 저장하여 관리할 수 있습니다.
요약
- 데이터베이스는 정보를 체계적으로 저장하고 관리하는 시스템입니다.
- RDBMS와 NoSQL 데이터베이스는 서로 다른 데이터 저장 방식을 가지며, 각각의 장단점이 있습니다.
- 리눅스는 맞춤화와 유연성이 뛰어난 오픈 소스 운영체제입니다. 개발자들이 선호하는 이유 중 하나는 시스템을 자유롭게 수정하고 최적화할 수 있다는 점입니다.
- 리눅스 커널은 운영체제의 핵심 부분으로, 시스템의 핵심적인 기능을 관리합니다.
하드웨어와 데이터
1️⃣ CPU (Central Processing Unit)
- 정의: 컴퓨터의 두뇌로, 모든 명령어를 처리하고 계산을 수행합니다.
- 기능: 프로그램의 명령어를 실행하고, 데이터를 처리합니다. 모든 컴퓨터 작업의 중심이 되는 핵심 구성 요소입니다.
2️⃣ 코어
- 정의: CPU 내의 처리 유닛입니다. 현대의 CPU는 멀티코어를 가지고 있어, 여러 코어가 동시에 다양한 작업을 처리할 수 있습니다.
- 기능: 각 코어는 독립적으로 명령어를 처리할 수 있으며, 멀티코어는 동시에 여러 작업을 처리하는 능력을 향상시킵니다.
3️⃣ 스레드
- 정의: 프로그램이나 프로세스 내에서 실행되는 흐름의 단위입니다. CPU 코어가 작업을 수행하는 방식을 결정합니다.
- 기능: 하나의 코어가 여러 스레드를 동시에 처리할 수 있으면, 이를 멀티스레딩이라고 합니다. 이를 통해 프로세스의 효율성을 높일 수 있습니다.
3️⃣ 클럭 (클록 속도)
- 정의: CPU의 작동 속도를 나타내는 단위로, 헤르츠(Hz) 단위로 측정됩니다.
- 기능: 클럭 속도가 높을수록 CPU가 초당 더 많은 명령어를 처리할 수 있습니다. 이는 일반적으로 더 빠른 성능을 의미합니다.
4️⃣ RAM (Random Access Memory)
- 정의: 컴퓨터에서 사용되는 주 메모리로, 데이터를 일시적으로 저장합니다.
- 기능: 프로그램이 실행될 때 필요한 데이터와 명령어를 빠르게 접근할 수 있는 저장공간을 제공합니다. 이는 컴퓨터의 속도와 직접적인 관련이 있습니다.
5️⃣ ROM (Read-Only Memory)
- 정의: 컴퓨터에서 영구적으로 데이터를 저장하는 메모리로, 주로 읽기만 가능합니다.
- 기능: 시스템의 기본적인 입력/출력 시스템, 부트스트랩 루틴과 같은 중요한 시스템 정보를 저장합니다.
6️⃣ 프로세스와 스레드
- 프로세스: 실행 중인 프로그램의 인스턴스입니다. 독립적인 메모리 공간을 가지고 있으며, 운영체제에 의해 자원이 할당됩니다.
- 스레드: 프로세스 내에서 실행되는 작업의 흐름입니다. 스레드는 프로세스의 자원을 공유하며, 멀티스레딩을 통해 효율성을 높일 수 있습니다.
7️⃣ 컨텍스트 스위칭 (Context Switching)과 병렬 처리 (Parallelism)
- 컨텍스트 스위칭: CPU가 한 프로세스(또는 스레드)에서 다른 프로세스(또는 스레드)로 작업을 전환할 때 발생하는 과정입니다.
- 병렬 처리: 여러 프로세서 또는 코어가 동시에 여러 작업을 수행하는 것을 말합니다. 이는 작업의 속도를 높이고 효율성을 증가시킵니다.