[codestates] 프로그래밍, 웹
코드스테이츠 2일차입니다. 오늘은 기초적인 프로그래밍, WEB, HTML, CSS 를 배웠습니다.
컴퓨터
컴퓨터란, 입력받은 데이터를 정해진 규칙대로 처리해서 처리 결과를 저장하고 출력하는 전자 장치이다.
컴퓨터는 정해진 규칙대로 입출력 데이터를 처리합니다. 여기서 ‘정해진 규칙대로’ 를 위해 구현하는 것이 소프트웨어, 입출력을 담당하는 것이 하드웨어입니다.
소프트웨어
물리적인 형태가 존재하지 않는 컴퓨터의 구성 요소로서, 하드웨어가 어떻게 동작해야 하는지 규정해놓은 명령어의 집합
소프트웨어는 크게 시스템 소프트웨어와 응용 소프트웨어로 구분됩니다.
시스템 소프트웨어는 하드웨어와 연결되어 응용 소프트웨어까지의 중간다리 역할을 합니다.
응용 소프트웨어는 시스템 소프트웨어를 제외한 모든 소프트웨어이며 흔히들 말하는 어플리케이션입니다.
이런 식이라고 합니다.
그러면 코딩할 때 쓰는 java 등의 프로그래밍 언어는 어디에 속할까요? java 자체는 프로그래밍 언어이기 때문에, 어떠한 분류에도 직접적으로 속하지 않는다고 합니다. 그러나 Java를 사용하여 작성한 소프트웨어는 응용 소프트웨어 또는 시스템 소프트웨어로 분류될 수 있구요.
코딩을 하는 IDE (Eclipse, Intellij, VS code) 는 응용 소프트웨어입니다. 시스템 소프트웨어는 운영체제(OS), 디바이스 드라이버, 네트워크 프로토콜, 데이터베이스 관리 시스템(DBMS), 컴파일러, 인터프리터 등이 있습니다.
하드웨어
입/출력, 저장 등을 담당합니다. 하드웨어는 중앙처리장치, 기억장치, 입력장치, 출력장치, 시스템 버스로 분류됩니다.
중앙처리장치
흔히들 말하는 CPU 입니다. 프로그램의 실행과 데이터 처리를 담당하는 장치로 프로세서라고도 불립니다. 제어장치, 연산장치, 레지스터로 이루어져있습니다.
기억장치
CPU 동작에 필요한 데이터를 보관하는 장소입니다. 데이터를 장기적으로 보관하는 보조기억장치(SSD, HDD)와 단기적으로 보관하는 주기억장치(RAM, ROM)로 나뉩니다. 또한 캐시메모리 가 있는데, 주기억장치와 CPU 사이에 위치해서 주기억장보다 용량 작지만 속도는 더 빠릅니다.
이렇게 기억장치를 구분하는 이유는 하드웨의 기술적 한계때문에 입출력 속도가 빠르면서도 용량이 큰 메모리를 생산하지 못하기 때문입니다. CPU 연산속도는 매우 빠른데, 보조기억장치와 연결되어있으면 입출력 속도가 CPU 를 따라가지 못하겠죠. 또한 보조기억장치가 없다면 데이터의 보관이 힘들 것입니다.
입력장치
컴퓨터 내부로 데이터를 입력하는 장치입니다. 마우스, 키보드, 마이크 등등이 있습니다
출력장치
컴퓨터에서 처리된 연산결과를 외부로 출력하는 장치입니다. 모니터, 스피커 등등이 있습니다.
시스템 버스
각 하드웨어 장치들을 묶어주는 통로입니다. 크게 데이터버스, 주소버스, 제어버스로 나뉩니다. 데이터버스는 보내는 데이터, 주소버스는 어디로 갈지, 제어버스는 어떤 제어를 할지 등을 비트로 나타냅니다.
즉, 각각의 버스가 필요할 때만 가는게 아니라 하나의 묶음이 이동한다고 생각하면 됩니다. 이러한 버스의 물리적 선은 1개이지만 논리적으로 3개로 구분해서 사용합니다. 이렇게 물리적으로는 하나의 선으로 전송되지만 논리적으로는 여러 개의 신호가 동시에 전송될 수 있도록 구분하는 방식을 다중화라고 합니다.
시스템의 흐름
강의에서는 계산기를 예로 보였으니 저는 Intellij 로 생각해보겠습니다.
- Intellij 를 실행하면 OS 가 보조기억장치에 있던 Intellij 를 주기억장치(RAM)로 옮깁니다. 이걸 로드라고 하는데 로딩(Loading) 이 이 과정입니다.
- 이후 입력장치(키보드, 마우스) 를 통해 코딩을 하고 실행을 합니다.
- 컴파일러가 CPU에서 코드를 컴파일합니다. 어 코드는 주기억장치에 저장되어 CPU에 의해 실행됩니다
- CPU는 주기억장치에 저장된 기계어 코드를 읽어와 실행하는 역할을 수행합니다.
- 실행 결과는 출력장치(모니터, 프린터 등)를 통해 사용자에게 제공됩니다.
프로그래밍
프로그래밍이란 컴퓨터 프로그램을 만드는 과정입니다. (이제부터 제가 배워야 할 것이죠.)
프로그래밍 언어
프로그래밍 언어는 “컴퓨터가 이해하는 기계어” 와 “인간이 이해하는 자연어” 사이의 언어입니다.
기계어에 가까운 저급언어(assembly 등)와 자연어에 가까운 고급언어(C, Java) 등으로 분류됩니다. (저는 C언어 강의를 들을 때 당최 무슨 말인지 몰라서 저급언어인줄 알았습니다.)
하지만 이제 chatGPT 가 나오면서 완전한 자연어로 프로그래밍할 일도 얼마 안남았다는 생각도 듭니다. 저도 그러고 있으니깐요.
빌드
작성한 프로그래밍 언어를 컴퓨터가 실행할 수 있는 파일로 변환하는 과정입니다.
컴파일
빌드 중 프로그래밍 언어를 기계어로 변환하는 과정입니다.
WEB
클라이언트 서버 아키텍처(2티어 아키텍처)
리소스를 전달해주는 서버와 리소스를 사용하는 클라이언트로 구분된 아키텍처입니다.
3티어 아키텍처
2티어 아키텍처에서 서버가 리소스를 전달해주기 위해 사용하는 DB 가 추가된 형태입니다.
HTML, CSS, JS
HTML 은 웹페이지 구조를 담당하는 마크업 언어이며 CSS 는 디자인 요소를 위한 스타일시트 언어, JS 는 상호작용을 위한 프로그래밍 언어입니다.
댓글남기기