HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
학습 TIL
/
📝
2일차 배운 것 정리 (1)
📝

2일차 배운 것 정리 (1)

대주제
Web
작성완료
작성완료
전날 정리 노트 이동
다음 정리 노트 이동
주제
브라우저렌더링
컴퓨터시간
암호화
함수형프로그래밍
이벤트루프
정규표현식
날짜
Mar 22, 2022

목차

목차1. 브라우저에 URL을 입력하면 발생하는 일브라우저에 URL을 입력하면 발생하는 일선택과제2. 컴퓨터 시간 원리2-1. 시간이란?2-2. 협정 세계시 UTC2-3. 컴퓨터가 시간을 표현하는 방법3. 암호화3-1. 암호화란단방향 암호화양방향 암호화브라우저의 암호화 방식4. 함수형 프로그래밍4-1. 함수형 패러다임객체지향과 함수형프로그래밍4-2. 함수형 프로그래밍의 장단점a 사이드 이펙트 없다b 재사용성 높다c. 코드가 짧고 간결하다선언형 프로그래밍멀티패러다임5. 객체지향과 프로토타입5-1. 객체지향이란1. 객체란2. 객체지향이란?5-2. 프로토타입효과적인 프로토타입 사용6. 이벤트루프6-1.이벤트 루프란6-2. 이벤트루프의 동작과정콜스택 → WebAPI (비동기작업) → TaskQueue선택과제7. 모듈모듈이란모듈과 컴포넌트 용어 정리Http-server를 통한 실습8. 유니코드8.1 유니코드란9. 정규표현식정규표현식 목적정규표현식 연습 사이트정규표현식 연습9-2. 패턴과 플래그패턴플래그9-3. JS에서의 정규표현식생성방법Testexecmatchreplacesearch9-4. 예제 풀이Run-length encoding개미수열10. 쿠키와 세션, 웹스토리지10-1. HTTP 통신→ HTTP의 무상태성으로 인해 쿠키/세션 등장10-2. 쿠키Set-Cookie 옵션쿠키의 취약점10-3. 세션10-4. 웹스토리지10-5. 세션스토리지

1. 브라우저에 URL을 입력하면 발생하는 일

브라우저에 URL을 입력하면 발생하는 일

: 잠깐의 로딩동안 많은 일들이 일어난다.
 
Step1 . URL을 해석
https://www.naver.com:443
protocol URL Port
 
Step2. DNS 조회
  • Domain Name System
    • 도메인 주소를 IP주소로 요청하는 과정
  • 1) 로컬호스트와 브라우저 캐시에 해당 URL 존재하는 지 확인 → IP주소 요청 2) 없다면, root DNS 서버에 URL의 IP주소 요청 3) 없다면, .com 도메인에 대한 하위 TLD이름 서버에 요청 4) 발견했다면 해당 IP주소를 반환하고, 다음 번에 빠르게 반응하기위해 일정시간 IP주소를 캐싱
 
Step3. IP가 존재하는 서버로 이동
  • 라우터를 통해 해당 서버가 존재하는 서버의 게이트웨이까지 이동
 
Step4. ARP를 이용하여 MAC 주소 변환
  • ARP: Address Resolution Protocol
    • 논리주소인 IP 주소를 물리 주소인 MAC 주소로 변환하는 프로토콜
    • MAC 주소는 기계의 실제 위치를 의미하는 고유한 주소이므로 실제 통신에 사용된다.
      • gps좌표와 같다. (37.567, 126.71)
    • ARP는 논리주소인 IP주소(서울-양천구-신정동) 을 통해 범위를 좁혀나간 후 최종적으로 실제 위치인 MAC 주소(gps좌표) 를 반환한다.
    •  
Step5. TCP 통신을 위한 Socket을 여는 단계
  • 대상 서버와 통신을 위한 TCP 소켓 연결
  • 소켓연결은 3-way-handshake 과정을 통해 진행 (추가블로깅 필요)
 
Step6. 서버가 응답을 반환
  • HTTP/HTTPS 프로토콜로 들어온 패킷을 읽고 처리
  • 요청에 따른 적절한 응답 값을 반환
 
Step7. 브라우저 렌더링
  • HTML 파일을 읽어 DOM Tree 구축
  • DOM Tree를 화면에 렌더링
  • 스크립트 실행
 

선택과제

  • http가 있음에도 불구하고 https가 왜 탄생했는지
    • 암호화 위해
  • https가 생김으로 인해 기존과정에서 무엇이 추가되는지
    • TLS 핸드쉐이킹 과정(암호화)
 

2. 컴퓨터 시간 원리

2-1. 시간이란?

물리량
  • 물리학 관점에서 시각과 시각사이의 간격
위치
  • 시간은 위치에 따라 다르게 표현된다.
  • ex) 경도0도(UTC)와 동경 135도의 시간
천문 현상
  • 지구자전속도의 불규칙성으로 시간 보정이 필요하다
  • 윤년, 윤달 ..
환경에 따라 다른 시간
  • 문화에 따라 다른 시간 (양력/음력, 태양력, 태음력)
  • 역사적 사건에 따라 시간이 다르기도 함(그레고리력 1592년 10/4 ~ 10/15 미존재)
  • 사회적 제도에 의해 변하기 도 함 (summer Time)
 
모든 조건을 만족하는 시간을 정하는 것은 어렵다. 따라서 표준화된 시간 필요 ⇒ UTC

2-2. 협정 세계시 UTC

notion image
  • 원자 시계와 윤초보정을 통해 표준화한 시각
  • 모든 시간대를 UTC+0을 기준으로 함
 

2-3. 컴퓨터가 시간을 표현하는 방법

 
시스템시간을 타임스탬프 형식으로 표현
  • 시스템시간 : 특정시간을 기준으로 시스템 클럭의 틱을 세는 것
    • 타임스탬프 : 시스템시간을 값으로 표현한 것
  • 타임스탬프는 운영체제 마다 기준시간과 단위가 다르다
    • 유닉스 계열에서 시간을 표시하는 방법을 Unix Time 이라고 부름
Unix Time
  • 1970년 1월 1일 0시 0분 0초를 기준 시각으로 함
notion image
 
현재시간을 알아내는 방법
  • 네트워크 타임 프로토콜(NTP)을 통해 시간을 받아온다. (인터넷필수)
 
시간대를 고려하는 방법
  • 국가, 지역별로 데이터베이스에 기록하여 처리 ⇒ TimeZone 데이터
  • 표준화된 표기법을 통해 표기
 
UTC 시간 vs TimeZone 시간
  • UTC
  • TimeZone
js에서의 시간사용
  • Date 객체로 간단한 날짜 표현
  • date-fns, luxon 라이브러리를 통해 시간 계산등에 사용
 

3. 암호화

3-1. 암호화란

  • 평문을 해독할 수 없는 암호문으로 변환하는 것
  • 단방향(해싱)과 양방향 암호화 존재
 

단방향 암호화

해시 알고리즘을 통해 평문을 복호화할 수 없는 형태로 암호화하는 방법
  • 사용자 비밀번호 등 알 수 없어야 하는 데이터에 주로 사용
  • SHA-256 알고리즘 많이 사용
 
  • Rainbow Table등을 통해 해커가 원문을 알아낼 수 있다.
    • 탈취당하더라도 원문을 알아낼 수 없도록 조치가 필요
    • Salt : 평문에 임의의 문자열을 추가하여 암호화 하는 방법
    • Key stretching : 해시를 여러번 반복하여 원문을 알기 힘들게 만드는 방법
    •  

양방향 암호화

평문을 복호화 할 수 있는 형태로 암호화 하는 방법
  • 대칭키와 비대칭키 알고리즘으로 나뉨
 
AES 대칭키 암호화
notion image
  • 같은 키를 이용하여 암호화와 복호화 진행
 
비대칭키 암호화
  • 많은 사람들에게 사용할 때 보안을 강화하기 위해 등장한 방식
  • 모든 사람이 접근 가능한 공개키와 사용자만 가지고 있는 개인키로 구성
    • notion image
 

브라우저의 암호화 방식

4. 함수형 프로그래밍

4-1. 함수형 패러다임

프로그램은 순차, 분기, 반복, 참조로 구성된다. 패러다임은 위 4가지 요소를 어떻게 이용할 것인가를 다룬다.

객체지향과 함수형프로그래밍

객체지향: 객체를 통해 데이터와 메소드를 묶고, 객체들의 통신을 중심으로 구조
함수형프로그래밍: 데이터를 함수로 묶고 새로운 데이터를 만들어나가는 방식
 

4-2. 함수형 프로그래밍의 장단점

a 사이드 이펙트 없다

→ 단점

b 재사용성 높다

→ 단점

c. 코드가 짧고 간결하다

→ 단점
 

선언형 프로그래밍

  • 함수형프로그래밍 == 선언형 프로그래밍
    • 명령형 프로그래밍 = 절차지향형
      • Goto, if-else, for-while
    • 함수형 프로그래밍 == 선언형,
      • Stateless, Recursion, Pipe
 

멀티패러다임

  • 굳이 나눌 필요가 없다.
 

5. 객체지향과 프로토타입

5-1. 객체지향이란

1. 객체란

객체지향의 객체는 현실에 있는 것을 “추상화”한 것
추상이란
  • 사물의 여러 측면 중 필요한 부분만을 남겨 표현한 것
 

2. 객체지향이란?

객체 위주로 설계하고 프로그래밍하는 패러다임
 
객체지향의 오해
  • 패러다임일 뿐 언어와는 관계가 없다
  • 절차지향보다 객체지향이 무조건 좋은 것이 아니다
    • 복작합 프로그램에 객체지향이 더 적합
 

5-2. 프로토타입

js에서의 객체
  • 클래스 기반 언어처럼 속성과 행위를 정의할 수 있다.
 
js 객체 생성방법
  • 객체 리터럴, Object, 생성자함수
 
프로토타입이 필요한 이유
  • 생성자로 객체 생성 시 같은 속성에 대한 메모리 낭비
 

효과적인 프로토타입 사용

1.상속흉내내기
2.부모 생성자 빌려 쓰기
3. Object.create()

6. 이벤트루프

6-1.이벤트 루프란

  • 이벤트루프는 js가 아닌 브라우저, node.js 관리하는 기능
  • js는 싱글쓰레드, 브라우저는 멀티쓰레드
 

6-2. 이벤트루프의 동작과정

콜스택 → WebAPI (비동기작업) → TaskQueue

 

선택과제

  • MicroTask Queue, Animation Queue

7. 모듈

모듈이란

  • 전역스코프의 변수들 사용
  • 스크립트간의 의존도 파악
 

모듈과 컴포넌트 용어 정리

  • 모듈은 의식적인 것
  • 컴포넌트는 -
 

Http-server를 통한 실습

 
모듈의 특징
  • use strict로 실행
  • 모듈레벨스코프 존재
  • 단 한 번만 평가 된다
  • 지연 실행이 가능하다
 

8. 유니코드

8.1 유니코드란

전 세계 문자를 다룰 수 있도록 하는 표준 시스템
 

9. 정규표현식

정규표현식 목적

  • 패턴을 이용하여 문자검색(search), 문자대체(replace), 문자추출(extract)
 

정규표현식 연습 사이트

  • 정규표현식 테스트 사이트
    • Rubular
      Ruby-based regular expression editor/tester
      Rubular
      https://rubular.com/
      Rubular
  • 정규표현식 퀴즈 사이트 (모든 문제 풀이완료)
    • RegexOne - Learn Regular Expressions - Lesson 1: An Introduction, and the ABCs
      Regular expressions are extremely useful in extracting information from text such as code, log files, spreadsheets, or even documents. And while there is a lot of theory behind formal languages, the following lessons and examples will explore the more practical uses of regular expressions so that you can use them as quickly as possible.
      RegexOne - Learn Regular Expressions - Lesson 1: An Introduction, and the ABCs
      https://regexone.com/
      notion image

정규표현식 연습

<패턴을 찾는 것이 제일 중요>
Q. 이메일 주소에서 중간 문자열만 뽑고 싶다면?
  • kocon135@gmail.com, kocon135@naver.com ⇒ gmail, naver
  • “@” 다음 “.“ 이전의 문자열 추출
  • 사용패턴
    • .+ 한 개 이상의 문자열 추출
    • (...) 특정 문자 캡쳐
  • Step1. 이메일 추출
    • .+@.+\..+ : kocon135@gmail.com
  • Step2. 중간 문자열 추출
    • .+@(.+)\..+ : gmail
  • 참고: 캡쳐는 여러번 가능
    • (.+)@(.+)\..+ : kocon135, gmail
 

9-2. 패턴과 플래그

패턴

플래그

js에서는 6개의 플래그 사용가능
i : 대소문자 구분 없이 검색
g : 패턴과 일치하는 모든 결과 반환 (없다면 가장 첫번째 결과만 반환)
m : 다중 행 모드(multiline)
s : 개행문자 ‘\n’ 도 포함하여 검색
u : 유니코드 전체 지원
y : 문자 내 특정 위치에서 검색 지원
 

9-3. JS에서의 정규표현식

생성방법

  1. RegExp 객체로 정규표현식 생성
const regExp1 = new RegExp("^\d+") // 표현식 const regExp2 = new RegExp("^\d+","gi") // 표현식+플래그
  1. 리터럴 방식으로 생성
const regexp1 = /^\d+/; const regexp2 = /^\d+/gi;

Test

문자열에 찾는 패턴이 있는지 없는지 여부를 리턴
const msg1 = "010-3314-7155" const msg2 = "kocon135@gmail.com" const regExp = /\d{3}-\d{3,4}-\d{4}/ regExp.test(msg1) // true regExp.test(msg2) // false
 

exec

문자열에 찾는 패턴에 대한 정보를 배열의 형태로 제공, 없다면 null 반환
const msg1 = "010-3314-7155" const msg2 = "kocon135@gmail.com" const regExp = /\d{3}-\d{3,4}-\d{4}/ regExp.exec(msg1) // ['010-3314-7155', index: 0, input: '010-3314-7155', groups: undefined] regExp.exec(msg2) // null
 

match

replace

search

 

9-4. 예제 풀이

Run-length encoding

AAAAAABBBDFFFFFFFKK → 6A3B1D7F2K 로 만드는 정규표현식
풀이
const regexp = /(.)\1*/g; const word = 'AAAAAABBBDFFFFFFFKK' word.match(regexp) .reduce((acc,cur)=>(acc + (cur.length + cur.slice(0,1))),""); // '6A3B1D7F2K'
패턴(/(.)\1*/): 새로운 문자 발견 시 해당 문자 캡쳐
플래그(g) : 가능한 모든 패턴 찾아내기
match : 매치 결과 [’AAAAAA’, ‘BBB’, ‘D’, ‘FFFFFFF’, ‘KK’]
reduce: 빈 문자열에서 각 매치결과의 개수와 알파벳을 더해줌

개미수열

10. 쿠키와 세션, 웹스토리지

10-1. HTTP 통신

→ HTTP의 무상태성으로 인해 쿠키/세션 등장

10-2. 쿠키

Set-Cookie 옵션

  • Expires
  • Secure
  • HttpOnly
  • Max-Age
  • Domain
  • Path
 

쿠키의 취약점

  • XSS(Cross-Site-Script) 공격
 

10-3. 세션

  • 서버가 사용자를 구별하기 위한 방법
  • 사용자가 많아서 서버가 여러대가 된다면 인증기능을 하기 어렵다 → JWT 토큰 사용

10-4. 웹스토리지

  • 클라이언트에 데이터를 저장하기 위한 새로운 방법
  • 반영구적 저장
 

10-5. 세션스토리지

  • 새창을 생성할 때 마다 개별적으로 저장되는 데이터
  • key-value 형태로 저장