
앞으로도 공부할 것을 구분하기 위해 컴퓨터에 대해서 한번 정리를 해보았다. 내가 알아야할 것 위주로.
- CPU: 컴퓨터의 두뇌
-> 실제로 계산을 해주는 계산기로 보면 된다, 컴퓨터 사양을 볼 때 코어수와 클럭수가 높을수록 여러 작업을 동시에 하기 좋다.
ex) 6코어 12스레드 -> 코어: 일꾼 수, 스레드: 동시에 처리할 수 있는 작업 수
클럭은 숫자가 높을수록 한 번에 처리하는 속도 빠름
- 메모리(RAM): 지금 쓰고 있는 작업 공간
-> 크롬, 워드, 카톡을 동시에 켜두면:
1)RAM이 그만큼 많이 필요해짐.
2)RAM이 부족하면 컴퓨터가 버벅거림
- 저장장치(HDD, SSD): 파일을 오래 보관하는 창고
-> HDD (Hard Disk Drive): 옛날 식 느리지만 큰 창고 -> 안에 회전하는 디스크가 있음 ex) 옛날 노트북을 켜면 바탕화면이 뜨기까지 1~2분걸림
SSD(Solid State Drive): 최신 방식의 빠른 스마트 창고 -> 반도체 메모리로 저장(USB랑 같은 원리) ex) 요즘 노트북은 켜면 바탕화면이 10초만에 뜸
- 운영체제(Windows, macOS, Linux): 컴퓨터 전체를 관리하는 관리자
나는 항상 운영체제가 헷갈렸다. 내가 맥북으로 개발을 할 때 나는 Linux shell로 서버에 접근을 했고 회사에서 쓰는 OS는 UbuntuOS라고 얘기를 들었다. 그럼 나는 무슨 운영체제를 쓰는거지..??
-> 내 노트북은 macOS 환경이고 회사 서버는 Ubuntu(Linux)OS로 비유로 설명하면
이라고 한다. “저는 macOS 환경에서 개발하고,
SSH를 통해 Ubuntu(Linux) 서버에 접속해 작업합니다.” -> 이게 정확한 표현이라고.
- 시스템 소프트웨어: 컴퓨터가 잘 작동하게 도와주는 기본 도구
컴퓨터가 ‘기본적으로 돌아가게’ 해주는 소프트웨어
(사용자가 직접 쓰는 앱이 아니라, 앱이 돌아갈 수 있게 바닥을 깔아주는 것)
-> “이게 시스템 소프트웨어인가?” 빠른 판별법
1) 사용자가 “작업”을 하기 위한 앱이 아니라 컴퓨터를 돌리기 위한 구성요소다
2) 하드웨어와 OS/앱 사이를 연결해준다 (드라이버)
3) 없으면 부팅이 안 되거나, 특정 기능/앱이 아예 실행이 안 된다
4) 화면에 자주 안 보이고 뒤에서 조용히 돈다
- 응용프로그램(한글, 엑셀, 브라우저): 실제로 목적을 가지고 쓰는 프로그램
-> ex) 한글, 엑셀, 크롬
개발이란 결국 응용프로그램을 만드는 일이다(시스템 개발도 있지만 대부분은 응용프로그램 개발)
- 모바일 앱: 스마트폰에서 쓰는 소프트웨어
-> 모바일 앱도 응용프로그램에 속한다. pc/웹/모바일로 나뉠뿐 본질은 같음
PC랑 웹은 어떻게 다를까?
pc는 컴퓨터에 설치해서 사용하고 웹은 인터넷에 접속해서 사용하는 것
ex) pc 응용프로그램: 메모장, 포토샵
웹 응용프로그램: 구글, 노션
- 인터넷 구조: 전 세계 컴퓨터가 연결된 큰 망
-> 집에서 유튜브를 보면 미국 서버에 있는 영상이 내 컴퓨터로 전송됨
- LAN / WAN
LAN: 집, 학교, 회사 안의 작은 네트워크
WAN: 도시·나라를 넘는 큰 네트워크
-> 회사 프린터를 여러 사람이 같이 쓰는 것: LAN
해외 사이트 접속:WAN
- IP 주소, DNS
IP: 컴퓨터의 집 주소
DNS: 주소록
-> DNS가 “naver.com = IP”로 바꿔줘서 바로 접속 가능
- Wi-Fi, Bluetooth
Wi-Fi: 인터넷 연결
Bluetooth: 기기끼리 짧은 거리 연결
-> 무선 이어폰: Bluetooth
카페에서 노트북 인터넷: Wi-Fi
- 클라우드 서비스: 내 컴퓨터가 아닌 인터넷 속 저장공간
- AWS
- VPC, IAM, RDS, S3
-> 구글 드라이브에 문서를 저장하면 집 PC, 회사 PC, 폰에서 다 열 수 있음.
내가 서버를 직접 사서 관리하지 않고, 인터넷으로 빌려 쓰는 컴퓨터 자원 서비스
온프레미스: 예전 방식으로 회사가 서버를 구매해서 서버실 만들고 고장나면 직접 수리하고 트래픽이 늘면 서버를 또 구매하는 방식
클라우드: 필요할 때 서버를 생성하고 안쓰면 삭제. 트래픽이 늘면 버튼 한번으로 확장하고 관리 대부분을 클라우드 업체가 대신하는 방식
클라우드는 서버만 빌리는게 아님
| 종류 | 의미 | 예 |
| ------ | -------- | ------------------ |
| 컴퓨팅 | 컴퓨터 | EC2 |
| 스토리지 | 저장공간 | S3 |
| 데이터베이스 | DB 서버 | RDS |
| 네트워크 | 트래픽 관리 | VPC, Load Balancer |
| 보안 | 계정·권한 관리 | IAM |
- 데이터와 정보
데이터: 그냥 숫자·문자
정보: 의미 있는 결과
-> “85, 90, 70”: 데이터
“평균 82점”: 정보
- 파일 형식: 파일의 종류
사진: JPG
문서: PDF, DOCX
영상: MP4
- 데이터 저장 방식: 데이터를 어디에 저장하느냐
-> USB / 외장하드 / 클라우드 중 선택
- 백업과 복구: 혹시 모를 사고 대비
ex) 노트북 고장 났는데 클라우드에 저장해 둔 덕분에 과제 살림: 백업
문제가 생겼을 때 백업해 둔 데이터를 다시 되살리는 과정: 복구
ex)DB 복구
1.DB 장애 발생
2.백업 파일(backup.sql) 확인
3.새 DB 생성
4.백업 파일 import
mysql -u root -p dbname < backup.sql
5.서비스 정상화
DB 복구는 보통 인프라/DBA 담당이긴 하지만 개발자도 해야할 것이 있을 것 같아서 찾아봤다.
1.어디까지 망가졌는지 영향 범위 분석 -> 이걸 알아야 복구 전략을 세움
2.복구시점 결정에 참여 -> 유실되면 치명적인 데이터가 뭔지, 복구 시점 뒤로 새로운 데이터들이 저장된적이 있었는지 등 비즈니스 로직을 아는 개발자가 결정해야 하는 사항
3.데이터 정합성 검증 -> 회원 수 맞는지, 주문 건수 맞는지 등 확인
4.애플리케이션 쪽 임시 대응 -> 서비스 일시 중단 페이지를 띄우거나 쓰기 요청을 막는 등 데이터가 더 망가지는 것을 막아야함
5.유실 데이터 보정 -> 복구 시점 이후 데이터가 사라졌다면 로그/외부 시스템 기준으로 유실된 데이터 재생성 스크립트 작성
6.재발 방지 설계 -> 트랜잭션 처리 개선, 잘못된 DELETE/UPDATE 방지
,소프트 삭제 도입,이중 백업 구조 제안,배치/관리자 기능에 권한 제한 등
소프트 삭제: 데이터를 실제로 지우지 않고, 삭제된 것처럼 표시만 하는 방식 <-> 하드 삭제
UPDATE users SET deleted = true WHERE id = 10;