'오늘부터 IT를 시작합니다.' 라는 책을 보고 기본적인 지식들을 정리하면 좋을 것 같아 해본다.
이 책을 왜 IT 교양서라고 이름을 붙였는지 알 것 같았다. 단순한 정보 전달이 아니라 다른 교양지식이나 실생활에 겪는 것들을 함께 보여주며 IT 지식을 전달해준다.
비유를 정말 잘 하셔서, 컴퓨팅적 사고 외에도 드넓은 사고를 하신다는 것이 느껴졌다. IT 분야의 기본적인 히스토리나 상식을 알고 싶은 분들께 추천한다.
프로그래밍 언어를 작성하면 컴파일러와 인터프리터라는 통역사가 이 언어를 기계어로 통역해줌
리팩터링
- 이미 작성된 코드의 가독성과 유지보수성을 높이기 위해 내부 구조를 변경하는 것.
- 일기장 속 글씨는 나만 알아봐도 무방하지만 공개적인 글을 쓴다면 모두가 알아보는 것이 중요
크롤링
- 데이터를 수집하고 분류 (콘텐츠 다운로드, 인덱스 생성함)
- 스파이더, 검색 엔진 봇이라고도 함
스크레이핑
- 인터넷에 존재하는 데이터를 자동화된 방법으로 수집하는 모든 작업
파싱
- 일정한 패턴으로 정보를 추출해 무언가 만들어내는 것. 데이터를 원하는 형태로 가공하는 작업이 주요 목적
HTML
- 화면에 기본적인 틀을 구성하는 뼈대 역할
HTML5
- 클라이언트와 서버와의 통신이 가능해짐.
- 다양한 부가기능을 통해 액티브 엑스, 플로그인을 사용하지 않고도 웹을 구축할 수 있게 됨
CSS
- HTML이 단순히 정보를 전하는 구조라면 CSS는 정보를 전하는 실용성과 디자인이 융합할 수 있는 언어.
- 인라인 스타일 : 짧은 문법으로 가장 우선순위로 적용됨. 너무 많이 쓰면 복잡해지고 유지보수가 힘들어짐
- 내부 스타일 : HTML 안에 CSS 사용하는 방법. HTML 문서 하나로 스타일 시트 관리 가능. 정보와 디자인이 분리해야 하는 현태의 HTML 특성상 좋은 방법은 아니라고 생각
- 외부 스타일 : CSS 파일 분리.가장 많이 사용. HTML에 구애받지 않고 자유롭게 창작. 여러 페이지를 동시에 스타일 적용할 수 있고 반복 작업을 하지 않아도 됨 => 기성복에 비유할 수 있음
자바스크립트
- 상속과 클래스 개념이 없는 객체 기반 언어, 브라우저에 의해 해석 가능
- HTML 문서 안에 기술 가능하고 함께 수행, 클라이언트 자원을 활용할 수 있음
- HTML을 화려하게 만들어준 장본인 / 인터랙티브하게 화려하게 보여줄 수 있게 됨
Node.js 프레임워크
- 자바스크립트는 웹브라우저에서 동작이 가능.
- Node.js는 자바와 같은 서버 언어처럼 데스크톱 터미널에서 사용 가능 => 프런트엔드와 백엔드 모두 개발 가능한 언어가 됨
스크립트 언어
- 컴파일하지 않고도 실행할 수 있는 언어
- ASP, PHP, JSP 등이 있음
클라이언트 사이트 스크립트
- 크롬이나 익스플로러처럼내장된 번역기에 의해 서버를 거치지 않고 사용자 쪽에서 처리되는 스크립트
- JavaScript, VBScript 등
데이터 베이스
- 영화 대사처럼 사용자에게 직접적으로 정보를 전달하는 것
- 관계형DB, 객체 지향DB, 분산DB, NoSQL DB, 그래프, 데이터에어 하우스가 있음
서버
- 클라이언트에게 네트워크를 통해 정보나 서비스 제공.
- 서버를 통해 전세계가 연결되어서 어떤 정보라도 가져올 수 있음
- 애플리케이션 서버, 웹 서버, 프록시 서버, 메일 서버, 데이터베이스 서버가 있음
- 프록시 서버
- 클라이언트와 서버 중간에 위치하는 것.
- 클라이언트 요청에 따라 각 서버에 맞게 라우팅해주거나 서버나 클라이언트에 데이터를 추가, 삭제하면 전달해주는 서버
- 데이터베이스 서버
- 사용자 정보에 대한 정보를 담고 있음
- My SQL, MongoDB, Oracle 등이 있음
JSON
- 언어를 배우지 않아도 JSON 방식을 통해 전달하면 이해할 수 있음
- 정보를 전달하기 위한 하나의 공통적인 방법
<a>
- 하이퍼텍스트에서 중요한 태그
- 문서와 문서를 연결하고 빛의 속도로 해외 페이지 열람 가능
- 배가 출발하거나 정지할 때 가장 먼저 사용하는 도구인 anchor를 뜻 함
디도스 공격
- 새로고침 테러. 서버가 한계에 도달해 이용할 수 없게 됨
데이터베이스의 수납
- 데이터를 쉽게 찾아 사용하기 편한 환경을 만드는 것.
- 우선순위가 높은 물건은 꺼내기 쉬운 공간에 배치, 고유값 (가장 자주 사용하는 데이터임)을 인덱스라는 공간에 수납하여 쉽게 꺼내쓸 수 있도록 정리
관계형 데이터베이스
- 실무에서 가장 많이 사용.
- SQL, MySQL, Oracle 등
- 데이터의 종속성을 관계로 표현하는 것 = 인맥으로 데이터를 관리하는 인플루언서 (테이블 = 모임, 데이터 = 사람, 공존지수가 높은 한 명은 모임과 모임을 연결하여 새로운 관계를 만들어주고 교류할 수 있게 함)
고유 값
- 데이터를 대표하는 값. 유니폼의 숫자처럼.
- 등번호 같은 고유값을 PK (Primary Key)
데이터 정의어 : 데이터 전체 골격을 결정해서 모양을 갖춤.
- CREATE : 테이블 생성 (냉장고 구매)
- ALTER : 테이블 잘못 생성 or 수정 (냉장고 교환 or 반품)
- DROP : 테이블 삭제 (냉장고 처분)
- TRUNCATE : 테이블 초기화 (냉장고 안 내용물 정리)
데이터 조작어 : 요리에서 레시피와 같은 부분
- SELECT : 원하는 데이터 추출 (재료 선택)
- INSERT : 새로운 데이터 추가 (재료를 냉장고에 쌓아두기)
- UOPDATE : 데이터 수정 (오래된 재료는 버리고 새로운 재료 넣기)
- DELETE : 데이터 삭제 (사용하지 않을 재료 버리기)
NoSQL
- 비관계형 데이터베이스.
- JSON 형식으로 여러 정보를 한 곳에 집어 넣는 것
- 빅데이터를 RDB에 맞게 입력하면 다운타임 발생 => 최소화하기 위해 등장.
프레임워크
- 설계와 구현을 재사용할 수 있는 일련의 협업화된 형태로 클래스를 제공하는 것.
- 구조를 결정할 뿐만 아니라 그 위에 개발된 개발자의 코드를 제어하며 구체적이고 확장 가능한 기반 코드를 가지고 있음. (이미 지어진 기본 집을 구매 => 내부에 필요한 것들이나 꾸미는 것을 새롭게 추가/변형)
라이브러리
- 공통으로 사용할 수 있는 기능을 모듈화 한 것.
- 스스로 동작하는 완전한 프로그램은 아니고 특정 기능만으로 수행하도록 개발한 코드.
- 사용하는 이유는 책에 담긴 지식을 습득하는 것과 유사
동기화와 비동기화 : 지각으로 늦은 데이터를 기다릴지? 먼저 갈 지? 시스템에 맞게 선택하기
- 동기화 : 순차적으로 한 번에 하나씩 처리, 디버깅이 쉬움, 정확한 순서가 필요한 시스템에 유리
- 비동기화 : 여러가지 로직을 동시에 처리, 빠르게 결과가 도출됨, 기능과 사용자가 많은 사이트 유리
객체 지향이 가진 특징
1. 객체
- 자신의 속성을 가지고 있으며 다른 것과 식별가능 한 것
- 객체지향 프로그래밍에서 클래스는 객체를 만들기 위한 확장 가능한 코드 템플릿 (구현 가능한 초기 값을 제공)
2. 캡슐화
- 중요한 데이터를 보존하고 보호.
- 내부 정보를 최소한으로 외부에 노출
3. 다형성
- 서로 다른 클래스의 객체가 같은 값을 받은 후 각자의 방식으로 동작
4. 상속
- 적은 양의 코드로 새로운 클래스를 작성할 수 있도록 하는 방식
5. 추상화
- 중요한 특징 추려낸 후 간단히 표현.
- 여러 가지 요소를 하나로 통합하는 방향성을 가짐.
- 데이터나 프로세스 등을 의미가 비슷한 개념이나 표현으로 정의해 나가는 과정이면서 각 개별 개체의 구현에 대한 상세함은 갖추는 것.
클래스
- 객체를 정의하는 틀, 설계도
- 클래스 (붕어빵 틀)는 객체(붕어빵)를 생성하는 기능을 제공
- 클래스 덕분에 동일한 결과를 얻을 수 있음
캡슐화
- 캡슐에 약을 담는 것. (비법이 담긴 밀가루 반죽과 팥앙금)
상속
- 붕어빵에서 잉어빵
추상화
- 피카소 그림처럼 중요한 정보만 표현.
- 미완성된 설계도와 같음.
- 이를 이용해서 각각 자신이 만들 설계도를 완성하는 것이 효율적
API : 추상적인 개념 vs 라이브러리 : API를 이용해 개발된 구현체
기본적인 CS 지식을 얻을 수 있고, 왜 이런 언어들이 탄생했는지 역사도 알 수 있어 좋았다. 평소 개발자분들께 왜 그렇게 DB를 설계했고, 왜 에러가 발생했는지 등을 묻는데 그때 들었던 설명들이 100% 이해가 안 되어도 경청하며 이해하려 노력했었다. 그러면서 CS에 대해 지레짐작하며 흐름을 이해하고 있었고.. 이 책을 읽으며 더 정리가 되었다. 약간 문법공부를 하지 않고 외국어를 공부하며 지레짐작하다가 문법책을 보게 된 느낌?
지금 이 내용들도 완벽하게 기억하지는 못 하겠지만, 나중에 개발자와 소통할 때 잔잔히 더 도움을 줄 것 같다는 생각이 든다. :)
'📝공부, 스크랩 > 프로덕트' 카테고리의 다른 글
URI, 웹브라우저 요청 흐름 (0) | 2023.02.19 |
---|---|
인터넷 네트워크 이해 - 통신, IP, TCP, UDP, PORT, DNS (0) | 2023.02.01 |
[Toss 강의] 지속 가능한 성장 만들기 - 바이럴 (0) | 2022.07.31 |
[리텐션] 복귀 유저 / 실행 계획 (0) | 2022.06.14 |
[리텐션] 현재 유저 / 신규 유저 (0) | 2022.06.13 |