파이썬, Java, C++는 모두 클래스를 선언하여 객체를 생성하고,

상속을 구현하는 클래스 기반 객체지향 프로그래밍 언어입니다.

자바스크립트 역시 객체지향 프로그래밍 언어이지만,

위 언어들과는 객체와 상속을 다루는 방식에서 차이점이 있습니다.

이번 글에서는 자바스크립트의 프로토타입(prototype)에 대해 알아보면서,

자바스크립트는 프로토타입 기반의 객체지향 프로그래밍 언어이다.

 

라는 말의 의미를 정확히 이해해보겠습니다.

 

 


목차

    1. 왜 프로토타입 기반 객체 생성 방식일까?
      1. 클래스 기반 언어?
      2. 생성자 함수와 프로토타입 예시
    2. 프로토타입 객체(prototype, __proto__)
      1. 프로토타입이란
      2. '생성자 함수, 프로토타입, 객체' 의 구조
      3. 함수 객체 생성 시 내부 동작
      4. 프로토타입 체인 vs 스코프 체인
      5. 프로토타입 교체

요약

→ 다른 객체지향 언어들이 클래스를 기반으로 상속을 구현하는 것과 달리, 자바스크립트는 프로토타입을 기반으로 상속을 구현한다. (*ES6에서 클래스 도입) ⇒ 중복 제거 (코드 재사용) 가능.

모든 객체는 [[Prototype]]이라는 내부 슬롯을 가지며, 이는 프로토타입의 참조를 가리킨다. 프로토타입은 객체 간 상속을 구현하는 메커니즘으로, 프로퍼티와 메서드를 객체 간 공유할 수 있게 한다.

모든 객체는 proto 접근자 프로퍼티를 통해 자신의 프로토타입, 즉 [[Prototype]] 내부 슬롯에 간접적으로 접근할 수 있다. Object.prototype은 모든 객체의 원형이며, 프로토타입 체인은 프로토타입이 단방향 링크드 리스트 형태로 연결되어 있는 상속 구조를 말한다.

 


1. 왜 프로토타입 기반 객체 생성 방식일까?

프로그래밍 언어는 크게 명령형(절차지향형)과 객체지향형으로 나눌 수 있습니다.

  • 명령형(절차지향형) : 프로그램은 명령어 또는 함수의 목록임.
  • 객체지향형 : 프로그램은 독립적 단위, 즉 객체의 집합임.

객체지향에서 핵심 개념 중 하나는 바로 추상화입니다.
이는 객체가 가질 수 있는 다양한 속성 중에서 필요한 속성만을 간추려 설계하는 것을 말합니다.

 

 

클래스 기반 언어?

자바스크립트는 초기에 브라우저 내에서 간단한 상호작용을 위해 만들어진 스크립팅 언어로,

함수와 객체 리터럴을 중심으로 동작하도록 설계되었습니다.

 

이 때문에 자바스크립트는 전통적인 클래스 기반 언어와는 다른 객체 모델을 가지고 있지만,

ES6부터는 class 키워드를 도입해 클래스 문법도 지원하게 되었습니다.

 

그럼에도 불구하고, 겉으로는 클래스처럼 보이는 문법도

내부적으로는 여전히 프로토타입(prototype) 기반으로 동작합니다.

(즉, class와 extends 같은 최신 문법은 모두

프로토타입 체인을 이용한 상속과 메서드 공유의 문법적 설탕(syntactic sugar)에 불과합니다.)

 

생성자 함수와 프로토타입 예시

먼저 생성자 함수를 이용한 객체 생성 예제를 살펴봅시다.

function Circle(radius) {
    this.radius = radius;
    this.getArea = function() {
        return Math.PI * this.radius ** 2;
    };
}

const circle1 = new Circle(1);
const circle2 = new Circle(2);

 

이렇게 작성하면 circle1과 circle2는 각각 자신만의 getArea 메서드를 가지게 됩니다.
즉, 코드 중복은 없지만, 메모리가 중복으로 사용되는 문제가 발생합니다.

이를 개선하려면 공통 메서드를 프로토타입에 정의해주는 방식이 효과적입니다.

 

function Circle(radius) {
    this.radius = radius;
}
Circle.prototype.getArea = function() {
	return Math.PI * this.radius ** 2;
};

const circle1 = new Circle(1);
const circle2 = new Circle(2);

 

이번엔 getArea 메서드가 Circle.prototype에 정의되었기 때문에,
모든 인스턴스는 하나의 메서드를 공유하게 됩니다.

 

이를 통해 내부적으로는 메모리 낭비를 방지하고,

객체 간 메서드 일관성을 확보할 수 있습니다.

 

2. 프로토타입 객체 (prototype, __proto__)

프로토타입이란

프로토타입은 "어떤 객체의 부모 역할을 하는 객체"입니다.

 

자바스크립트 엔진 내부에는 객체가 가지는 숨겨진 정보·동작을 담은 내부 슬롯내부 메서드가 있고,
이들은 모두 [[…]] 형태로 표기됩니다.

그중 [[Prototype]] 내부 슬롯이 바로 프로토타입 참조를 저장합니다.

 

function Person(name) {
  this.name = name;
}
// 생성자 함수에 붙는 prototype
console.log(Person.hasOwnProperty('prototype'));   // true

const p = new Person('Lee');
// 인스턴스가 상속받는 __proto__
console.log(p.hasOwnProperty('__proto__'));       // false
console.log(p.__proto__ === Person.prototype);    // true

 

구분 설명
prototype · “생성자 함수”가 자동으로 갖는 데이터 프로퍼티· 새 인스턴스의 [[Prototype]]을 가리킴
__proto__ · 모든 인스턴스가 상속받는 접근자 프로퍼티(getter/setter)· 자신의 [[Prototype]]에 간접 접근

 

더보기

잠깐정리 

prototype을 갖는 함수 == 생성자가 될 수 있는 함수( Constructible )

 

1. Constructible 함수

    1) 함수 선언문 : function f(){}

    2) 함수 표현식 : const f = function(){}

 

2. Non-constructible 함수

    1) 화살표 함수 : () => {}

    2) bound함수 : Function.prototype.bind

    3) 클래스 메서드로 정의된 함수

 

'생성자 함수, 프로토타입, 객체' 의 구조

모든 프로토타입 객체는 constructor 프로퍼티를 가집니다.

constructor는 다시 자기 자신을 생성한 생성자 함수를 가리키므로,
객체 ⇄ 프로토타입 ⇄ 생성자 함수가 서로 연결되어 있는 구조가 만들어집니다.

 

 

함수 객체 생성 시 내부 동작

함수 객체가 생성될 때 내부적으로 일어나는 일을 정리해보면 다음과 같습니다.

  1. 함수 선언문은 런타임 이전에 자바스크립트 엔진에 의해 먼저 실행된다. (함수 호이스팅)
  2. 해당 함수 객체에 prototype 데이터 프로퍼티를 자동 생성한다.
  3. 이 prototype안에 constructor 프로퍼티가 자동으로 생성되어,
    다시 원래의 생성자 함수를 가리키도록 연결된다.
  4. 이후 new로 인스턴스를 생성하면, 인스턴스의 [[Prototype]](즉 __proto__)가
    이 함수의 prototype 객체를 참조하도록 설정된다.
  5. prototype의 속성들은 상속 받아 인스턴스(객체)에서 사용할 수 있다.
  6. 때문에 인스턴스는 constructor 프로퍼티를 상속받아 사용할 수 있다.
  7. constructor 프로퍼티를 통해 생성자 함수와 인스턴스가 연결된다.

 

결과적으로 생성자 함수 → 프로토타입 객체 → 인스턴스로 이어지는

단방향 링크드 리스트,
프로토타입 체인이 완성됩니다.

(*체인 최상단은 null값 입니다.)

 

프로토타입 체인 vs 스코프 체인

  • 프로토타입 체인: 객체 간 상속과 프로퍼티 검색을 위한 메커니즘
  • 스코프 체인: 식별자(변수·함수명) 검색을 위한 메커니즘

 

프로토타입 교체

객체 간의 상속 관계는 프로토타입 수정을 통해 동적으로 변경할 수 있습니다.

하지만, 프로토타입을 직접 교체 시

constructor 프로퍼티와 생성자 함수 간의 연결이 파괴됩니다.

 

때문에 프로토타입 교체를 동적으로 변경하는 것은 지양해야 하며,

상속 관계를 인위적으로 설정하려면 다음과 같은

“직접 상속” 방식을 사용하는 편이 더 안전하고 명확합니다.

const child = Object.create(parentProto);

 

참고자료

- 모던 자바스크립트 Deep Dive (19장. 프로토타입, 16장. 프로퍼티 어트리뷰트)

"브라우저에 example.com 이라는 url를 치고
엔터를 누르면 내부적으로 어떻게 동작하는지 설명해주세요."

이는 웹 개발자라면 반드시 이해하고 있어야 할 웹의 핵심 동작 원리이며,
면접에서도 자주 등장하는 기본 질문 중 하나입니다.

 

이번 포스팅에서는 웹 브라우저의 요청 흐름
네트워크 관점에서 단계별로 깔끔하게 정리해보려고 합니다 :)

 


 

웹 브라우저 요청 흐름

URL Parts

1) URL 파싱 및 프로토콜 확인

사용자가 https://www.example.com/path?query=value와 같은 URL을 입력하면

브라우저는 이를 다음과 같은 구성 요소로 나눕니다.

구성요소 예시 의미
프로토콜 https:// 어떤 통신 방식을 쓸 것인지
호스트 이름 www.example.com 어느 서버에 접속할 것인지
경로 및
쿼리 파라미터
/path?query=value 어떤 리소스를 요청할 것인지

 

이 과정을 통해 서버에 '요청'을 하는 것입니다.

 

 

2) DNS 조회

호스트 이름을 통해 실제 통신할 서버의 IP 주소를 알아내기 위해

DNS(Domain Name System) 조회가 이루어집니다.

 

DNS 조회는 최적의 응답 속도를 내기 위해서

아래 순서로 캐시 계층을 탐색합니다.

  1. 브라우저 DNS 캐시
  2. OS DNS 캐시
  3. 로컬 네트워크 캐시 (예: 공유기, 라우터)
  4. ISP(통신사)의 DNS 서버
  5. 루트 네임서버 → 권한 네임서버로 이어지는 실제 DNS 질의

이 과정을 통해 예: 93.184.216.34 와 같은 공인 IP 주소를 얻습니다.

더보기

[추가정리] 공인IP  vs  사설IP


항목 공인IP 사설IP
용도 인터넷 상 통신을 위한 주소
(전 세계에서 고유한 주소)
로컬 네트워크 내부 통신용 주소
(내부 네트워크 안에서만 고유한 주소)
접근 가능 전 세계 어디서든 접근 가능 인터넷 외부에서 직접 접근 불가
할당 주체 ISP (통신사) 공유기 또는 라우터(DHCP 기능)
예시 93.184.216.34, 223.130.200.107 192.168.x.x, 10.x.x.x

*DHCP(Dynamic Host Configuration Protocol)

  : IP 주소, 서브넷 마스크, 게이트웨이, DNS 등을 자동으로 배정해주는 것.

 

*공유기나 라우터가 하나의 공인 IP만 받아서 외부와 통신하고,
내부에서는 여러 장비에게 사설 IP를 나눠줍니다.
이때 사용되는 기술이 바로 NAT(Network Address Translation)입니다.

 

*NAT(Network Address Translation)

  : 내부(사설) IP와 외부(공인) IP를 서로 변환해주는 기술입니다.

 

3) TCP 연결

브라우저는 서버와의 신뢰성 있는 통신을 위해 TCP 연결을 설정합니다.

TCP는 데이터가 순서대로, 빠짐없이 도착하도록 보장하는 전송 계층(TCP/IP 4계층) 프로토콜 입니다.

3-Way Handshake를 통해 연결이 성립됩니다.

 

4) TLS 핸드셰이크 (HTTPS인 경우)

HTTPS 프로토콜을 사용할 경우, TCP 위에서 TLS(Transport Layer Security) 핸드셰이크가 이어집니다.

TLS는 암호화, 무결성, 인증을 제공하여 안전한 통신을 보장합니다.

이때 서버는 SSL 인증서를 제공하고 대칭키를 교환하여 보안 연결을 수립힙니다.

보안 연결까지 완료되면 이제 본격적으로 데이터를 주고받을 준비가 완료된 것입니다.

 

5) 소켓을 통해 HTTP 요청 전송

브라우저는 이제 본격적으로 HTTP 요청을 서버에 보냅니다.

GET /path HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Macintosh; ...)

 

요청은 보통 REST API 형식으로 작성되며, 필요한 경우 헤더나 쿠키, 인증 정보 등이 함께 전송됩니다.

 

6) 서버에서 응답 처리

요청을 받은 웹 서버(Nginx, Apache 등)는 내부적으로 백엔드 애플리케이션 서버와 통신합니다.
이후 필요한 경우 DB 조회, 비즈니스 로직 처리, 파일 접근 등을 수행한 뒤 다음과 같은 HTTP 응답을 생성합니다.

 

7) HTTP 응답 수신

브라우저는 서버로부터 HTML을 포함한 응답을 받습니다.

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 3489

응답에는 HTML 본문뿐만 아니라 상태 코드, 헤더, 쿠키 등 다양한 정보가 포함됩니다.

 

8) 브라우저 렌더링 및 리소스 추가 요청

브라우저는 HTML 파싱을 시작하면서 CSS, JS, 이미지 등 다른 리소스를 확인합니다.
각 리소스에 대해 별도의 HTTP 요청을 서버에 병렬적으로 전송합니다.

 

9) 페이지 렌더링 및 화면 표시

DOM Tree, CSSOM Tree를 생성하고

Render Tree를 구성하여 레이아웃 및 페인팅을 수행,

자바스크립트 실행 및 이벤트 바인딩 등의 작업을 통해 최종 화면 완성합니다.

 

정리 : 브라우저 요청 흐름 전체 요약

1. URL 파싱
2. DNS 조회
3. TCP 연결
4. TLS 핸드셰이크
5. HTTP 요청
6. 서버 응답
7. HTML 응답 수신
8. 브라우저 렌더링
9. 화면 표시

 

정리하면서...

 

이번 내용을 정리하며 특히 DNS 조회 시에 캐시 계층을 순차적으로 탐색한다는 것을 새롭게 알게 되었습니다.

그 중 우리가 흔히 쓰는 와이파이 공유기에도 이러한 DNS 캐시가 저장된다는 사실이 흥미로웠습니다.

 

같은 도메인에 여러 번 접속할 때, 공유기가 DNS 서버로의 요청을 줄여 주어

응답 속도 향상과 트래픽 절감에 도움을 준다는 점에서

단순한 네트워크 장비를 넘어서 지능적인 역할을 수행하고 있다는 것을 깨달았습니다.

 

또한, 이 공유기가 해킹될 경우 DNS 하이재킹, 관리자 페이지 탈취, 펌웨어 취약점 공격 등을 통해

사용자를 악성 사이트로 유도하거나 네트워크를 장악할 수 있다는 사실도 함께 알게 되었습니다.

 

이러한 맥락에서, 흔히 말하는 ‘공용 와이파이 사용이 보안에 취약하다’는 말이 왜 중요한지
실제 사례와 연결해 이해할 수 있었고,
개발자로서 네트워크 보안과 기본 원리에 대한 이해가 얼마나 중요한지 다시 한 번 느끼는 계기가 되었습니다.

 

또한, 정보처리기사 공부를 하며 개념적으로만 알고 있던 DHCP, NAT 등의 내용도
이번 웹 브라우저 요청 흐름과 함께 연결하여 정리해보며
실제 동작 맥락 속에서 의미를 이해할 수 있는 기회가 되었습니다!

 

다음에도 흥미로운 주제, 정리하면 좋을 내용을 들고 오도록 하겠습니다.😀

 

 

참고자료 :
모든 개발자를 위한 HTTP 웹 기본 지식 (김영한)
https://www.geeksforgeeks.org/what-is-url-uniform-resource-locator/

'스터디 > Web' 카테고리의 다른 글

[HTTP] IP, TCP/UDP, PORT, DNS 개념정리  (0) 2025.01.18
STOMP란? WebSocket과의 차이  (0) 2024.03.13
Web Socket 통신 방식이란?  (0) 2024.03.13

목차

  1. IP (Internet Protocol)
  2. TCP/UDP
  3. PORT
  4. DNS

 

2. IP (Internet Protocol)

인터넷 프로토콜 스택의 4계층

 

인터넷 프로토콜 스택은 네트워크 통신을 가능하게 만드는

4개의 계층으로 이루어져있다.

 

위에서부터 차례로 애플리케이션 계층(HTTP/FTP), 전송계층(TCP/UDP),

인터넷 계층(IP), 네트워크 인터페이스 계층으로 구성된다.

IP는 그 중 세 번째 계층인 인터넷 계층에 속한다.

 

 

IP란 무엇인가?

IP는 간단히 말해, 인터넷에서 사용하는 지정된 주소를 말한다.

 

예를 들어, 클라이언트가 원격 서버와 통신하고자 할 때, 

서버가 가까운 거리에 있다면 케이블을 이용해 직접 연결할 수 있을 것이다.

하지만 서버와 클라이언트의 물리적 거리가 멀다면

인터넷 망을 통해 통신해야 한다.

 

이 과정에서 서로의 위치를 식별하기 위해 사용하는 주소가 바로 IP이다.

 

IP는 보통 100.100.100.1과 같이 숫자로 이루어져있으며

이는 특정 형식에 따라 규칙적으로 구성된다.

또한 IP주소는 고정적이지 않고 변경 가능한 값이다.

 

IP 패킷과 정보 전송

인터넷에서 데이터는 IP 패킷이라는 형태로 전송된다.

IP 패킷은 출발지 IP, 도착지 IP, 그리고 기타 부가 정보를 포함하고 있다.

이러한 패킷은 인터넷 망을 통해 목적지까지 전달되며,

이 과정에서 경유지(라우터)를 거치기도 한다.

 

2.  TCP / UDP

 

IP의 한계

IP를 사용하면 통신을 가능하게 해주지만

여러 한계를 가지고 있기 때문에 안정적이고 신뢰성있는 통신을 보장하기 어렵다.

 

1. 비연결성

IP는 연결 상태를 확인하지 않고 데이터를 전송한다.

즉 클라이언트는 대상 서버의 상태를 알 수 없기 때문에

수신자가 없거나 서비스 불능 상태에서도 패킷을 전송한다.

2. 비신뢰성

IP는 데이터를 나눠서 패킷 단위로 전송하는데

이 과정에서 패킷 손실이나 순서가 섞이는 등의 문제가 발생할 수 있다.

3. 프로그램 구분 문제

같은 IP를 사용하는 애플리케이션이 여러 개일 경우

어떤 애플리케이션으로 데이터를 전달할지 구분이 어렵다.

 

이러한 한계를 극복하고자 존재하는 개념이 TCP이다.

TCP(Transmission Control Protocol)는 전송 제어 프로토콜이다.

 

TCP는 연결 지향적 프로토콜로, 안정적인 데이터 전송을 보장한다.

3-Way-Handshake 방식을 통해 양측이 통신 준비가 완료되었는지 확인하고,

패킷에 필요한 데이터를 추가하여, 데이터 전달 보증과 순서를 보장한다.

 

같은 계층에 있는 UDP는 IP와 거의 같은데 PORT와 체크섬이 추가된 개념이다.

 

3.  PORT

PORT는 IP가 가지고 있는 세 번째 한계점(프로그램 구분 문제)를

해결하기 위한 중요한 개념이다.

 

IP 주소를 아파트에 비유한다면, 포트는 몇 동 몇 호를 의미한다.

즉, 포트를 사용하면 하나의 IP 주소에서 여러 애플리케이션을 구분할 수 있다.

 

기본적으로 HTTP는 80포트번호를 사용하고

HTTPS는 443이다.

일반적으로 표준 포트 번호를 사용하는 경우, URL에서 포트 번호를 생략한다.

ex. https://example.com:443 -> https://example.com

 

 

4. DNS 

앞서 IP는 100.100.100.1과 같이

숫자로 이루어진 인터넷상의 주소라고 언급했다.

하지만 숫자로 이루어진 IP주소는 직관적이지 않고,

네트워크 환경에 따라 변경될 수도 있어 매번 기억하기 어렵다.

 

예를 들어, 우리가 구글에 접속할 때 173.194.126.240:443과 같은 IP주소를 입력하는 대신,

간단하게 https://google.com으로 접속한다. 

이는 사용자의 편의를 위한 시스템 덕분이다.

 

DNS란?

DNS(Domain Name System)은 도메인 이름과 IP주소를 연결하는 전화번호부와 같은 역할을 한다.

 

클라이언트가 https://~로 시작하는 도메인 이름을 사용해 서버에 데이터를 요청하면,

DNS는 해당 도메인과 매핑된 IP주소를 찾아

클라이언트 요청에 올바른 서버로 전달한다.

 

DNS 덕분에 사용자는 복잡한 IP주소를 외울 필요 없이,

직관적이고 기억하기 쉬운 도메인 이름을 사용할 수 있다!

 

출처 : 모든 개발자를 위한 HTTP 웹 기본 지식 (김영한)

'스터디 > Web' 카테고리의 다른 글

웹 브라우저 요청 흐름  (0) 2025.01.18
STOMP란? WebSocket과의 차이  (0) 2024.03.13
Web Socket 통신 방식이란?  (0) 2024.03.13
[2022년 1회 필기] : 데이터베이스 구축(3과목)

 

1번은 논리적 설계 시 고려사항

데이터 베이스 설계 단계 :

1. 개념 설계 : ERD작성

2. 논리 설계 : 스키마 평가 및 정제, 정규화, 트랜젝션 인터페이스 설계

3. 물리 설계 : 성능 고려 → 레이블, 클러스터링, 인덱스, 뷰 생성 > 반정규화

 

WHERE 조건절이 없는 DELETE 명령어 수행 → 내용 삭제

DROP TABLE 수행 → 테이블 삭제

 

SQL 문법

  • DDL (정의어) : CREATE / DROP / ALTER
  • DML (조작어) : INSERT / UPDATE / DELETE / SELECT
  • DCL (제어어) : COMMIT / ROLLBACK / REVOKE / GRANT

 

> : 왼쪽이 오른쪽에 포함되는 관계

슈퍼키 > 후보키 > 기본키 / 대체키

 

슈퍼키 : 유일성 만족O, 최소성 만족X

후보키 : 유일성 만족O, 최소성 만족O

후보키에서 적합한 키를 기본키로 사용

후보키에서 기본키가 아닌 나머지를 대체키라고 부름

 

뷰 : 물리적 테이블로부터 논리적으로 생성한 가상의 테이블

  • 여러 개 생성이 가능하다
  • 뷰끼리 조합하여 새로운 뷰 생성이 가능하다
  • 물리적 테이블에 종속적이다. (물리적 테이블 삭제 시 같이 삭제됨)
  • ALTER 불가. DROP 후 다시 생성해야 함.

4번. 뷰에는 일반적으로 SELECT 문만 시행한다. (읽기용)

1. 기본 SELECT문 : 

SELECT * (ALL)

SELECT FROM 테이블

 

2. 조건문 추가 :

SELECT FROM 테이블 WHERE (조건문 AND/OR)

 

3. 그룹 추가 :

SELECT FROM 테이블 WHERE (조건문 AND/OR) GROUP BY 속성 HAVING 조건문

 

4. 정렬 추가 :

SELECT FROM 테이블 WHERE (조건문 AND/OR) GROUP BY 속성 HAVING 조건문 ORDER BY 속성 ASC/DSC

 

1번. 열 이름을 다시 부여할 수 있는 키워드 → ALTER (REVOKE : 권한뺏기)

2번. 생성(CREATE) 변경(ALTER) 제거(DROP)

3번. DISTINCT 사용 시 중복 값을 제거함.

       예) SELECT DISTINCT 학년

 

사원 테이블로부터 급여 값을 가져오므로 5개의 값을 가져온다.

 

변형 ) SELECT DISTINCT 급여 FROM 사원;

          중복을 제거하여 30000, 35000, 40000 이렇게 3개의 값을 가져온다.

트랜잭션 상태 : 

실행시작 → 활동 → 부분완료 (COMMIT) → 완료

                          → 부분완료 (ROLLBACK) → 철회

                          → 실패 (COMMIT) → 완료

                          → 실패 (ROLLBACK) → 철회

 

COMMIT을 하면 실제 DB에 반영된다.

1번. GRANT

2번. REVOKE

4번. ROLLBACK

UNION연산 : 중복상관없이 그대로 합침

 

분산 데이터베이스 시스템 : 

  • 데이터베이스 시스템 구축 시에 한 대의 물리적 시스템에 데이터베이스 관리 시스템을 설치하고 여러 명의 사용자가 데이터베이스 관리 시스템에 접속하여 데이터베이스를 사용하는 구조를 중앙 집중형 데이터베이스라고 한다.
  • 그에 반해, 물리적으로 떨어진 데이터베이스에 네트워크로 연결하여 단일 데이터베이스 이미지를 보여주고 분산된 작업 처리를 수행하는 데이터베이스를 분산 데이터 베이스라고 한다.

4번. 분산 데이터베이스 시스템의 주요 구성 요소는 분산처리기, 분산 데이터베이스, 통신 네트워크 등이 있다.

P2P 시스템은 필요 없음. 

단일 데이터베이스는 분산 데이터베이스 시스템이 맞지 않는 개념임.

 

 

 

 

[ 참고 자료 ]

https://www.comcbt.com/

https://www.youtube.com/watch?v=-6hvrQJghEw&list=PLniy99c_7Zfo2WD2mED6jDX4NyHyKLwbF&index=3

https://velog.io/@yewon-july/Distributed-Database

[2022년 1회 필기] : 소프트웨어 개발(2과목)

 

 

1번. 추상화 : 상위 클래스/메소드/함수를 통해 애플리케이션의 특성을 간략하게 나타내고,

상세 내용은 하위 클래스/메소드/함수에서 구현한다.

2번. 의존성에서는 독립성을 높이는 것을 목표로 한다. "응집도는 높이고 결합도는 낮추고"

3번. 가독성의 키는 누구나 읽기 쉽게 쉽게 코드를 작성하는 것이다.

4번. 중복성에서는 공통 모듈을 사용하여 최소화 할 수 있는 코드를 작성한다.

+ 단순성 : 한 번에 한 가지 처리만 수행하도록 한다.

 

1번. 테스트 스텁은 하향식 테스트에 해당

2번. 테스트 드라이버는 상향식 테스트에 해당

3번. 테스트 슈트는 케이스들의 모임

4번. 테스트 케이스는 말 그대로 테스트를 하는 케이스들을 지칭

 

[ 개발 단계에 따른 애플리케이션 테스트 ]

소프트웨어 개발 단계 : 요구사항 > 분석 > 설계 > 구현

⭐️ 테스트 단계 : 단위테스트 > 통합테스트 > 시스템테스트 > 인수테스트

 

  • 단위테스트 : 정적테스트 / 동적테스트
  • 통합테스트 : 상향식(드라이버) / 하향식(스텁) / 빅뱅 / 백본
  • 시스템테스트 : 기능 / 비기능
  • 인수테스트: 알파 / 베타

 

*선형 자료구조 : 스택, 큐, 리스트, 데크

ㄱ. FIFO 방식은 큐. 스택은 LIFO

ㄴ. 순서 리스트의 뒤에서 노드가 삽입, 앞에서 노드가 제거되는 것은 큐이다.

ㄷ. 선형 리스트의 양쪽 끝에서 삽입과 삭제가 가능한 것은 데크이다.

ㄹ. 스택은 인터럽트 처리, 서브루틴 호출 작업, DFS 등에 응용된다.

 

모듈화의 장점은 독립성을 높이는 것이다.

독립성을 높인다는 것은 "응집도는 높이고 결합도는 낮추는 것".

2번. 기능의 분리가 가능하여 인터페이스가 간단하다.

2번. 소요 인력은 최소화.

3번. 주어진 기간은 지켜야 함.

4번. 참가자의 수를 제한 한다.

Migration은 소프트웨어 재공학의 주요 활동 중 기존 소프트웨어 시스템을 새로운 기술 또는

하드웨어 환경에서 사용할 수 있도록 변환하는 작업을 의미한다.

 

[ 소프트웨어 공학의 3R ]

- 재공학 (Re-Engineering) 분석 > 재구성 > 역공학 > 이관

- 역공학 (Reverse Engineering) 문서

- 재사용 (Reuse) 함수, 객체, 컴포넌트, 애플리케이션의 재사용

 

 

29. 소프트웨어 패키징에 대한 설명으로 틀린 것은?

SW 패키징 도구 활용시 고려사항

1번. 패키징은 개발자 중심이 아닌 사용자 중심으로 진행한다.

 

 

[ 참고 자료 ]

https://www.comcbt.com/

https://www.youtube.com/watch?v=9PddGl6bg1U

https://underflow101.tistory.com/64

 

[ 2022년 1회 필기 ] : 개념 정리가 필요한 문제, 틀린 문제 위주로 정리


 

*SW 개발 과정 : 계획 → 분석 → 설계 → 구현 → Test → 유지운영

요구사항 분석 : 도출 → 분석 → 명세 → 확인 “도분명학”

오답 근거 : 3번의 소프트웨어 시스템이 사용되는 동안 발견되는 오류를 정리하는 단계는 Test 단계 이다.

 

객체지향 기법 5가지

  • Abstraction 추상화 - 공통 설질을 모음
  • Polymorphusm 다형성 - 오버로딩(인자≠) / 오버라이딩(상속.재정의)
  • Encapsultaion 캡슐화 - private으로 감싸기
  • Inheritance 상속 - 부모자식 클래스
  • Information Hiding 정보은닉 - 숨기기

DFD > Data Dictionary

DFD : 데이터가 소프트웨어 내의 각 프로세스를 따라 흐르면서 변환되는 모습을 나타낸 그림.

DD : 자료 흐름도에 있는 자료를 더 자세히 정의하고 기록한 것.

데이터를 설명하는 데이터(메타데이터)

3번에 Data Store은 평행선 2개를 그어서 표시한다.

 

UI 설계 도구

  • 와이어프레임 : 스케치
  • 스토리보드 : 흐름, 설명
  • 목업: 정적 형태의 모형
  • 프로토타입 : 실제 구현된 것처럼
  • 유스케이스 : 내용 기술. 그림.

애자일 : 민첩한, 날렵한 → 빠르게!

애자일 종류 : XP, 스크럼, FDD, 크리스탈, Lean

XP의 5가지 핵심가치 : “의사선생님 제 약좀 피존 용기에 담아주세요.”

  • 의사소통, 피드백, 존중, 용기, 단순성

스크럼 : 스프린트, 15분 매일 회의

스프린트 : 30분마다 동작 가능한 제품을 제공하기 위한 짧은 시간의 단위

 

클래스 설계 원칙 : SOLID

  • 단일 책임 원칙 (Single)
  • 개방/폐쇄 원칙 (Open)
  • 리스코프 치환 원칙 (Liskov)
  • 인터페이스 분리 원칙 (Interface)
  • 의존관계 역전 원칙 (Dependency)

2번 정답 → 변경에 닫혀 있어야 한다. 즉, 막 바꾸면 안 된다.

 

GoF 디자인 패턴 : 생성/구조/행위

디자인 패턴이란 ?

  • 효율을 위한 개발 샘플.
  • 소프트웨어 설계에서 자주 발생하는 문제에 대한 일반적이고 반복적인 해결 방법.

(암기X. 시험용으로만)

  • 생성패턴 : Factory method, Singleton, Abstract factory, Builder, Prototype
  • 구조패턴 : Adapter, Bridge, Composite, Decorator, Facade, Fly weight, Praxy
  • 행위패턴 : Template method, Interpreter, Interator, Command, Chain Of Resposibility, State, Strategy, Mediator, Memento, Visitor, Observer

1번, 2번 ⇒ 구조패턴 / 4번 ⇒ 행위패턴

 

아키텍처 → 구조

첫 번째 : 설계 / 마지막 : 검토 ⇒ 답 1번

 

1번 정답. 사용성을 심미성보다 우선하여 설계해야 한다.

⭐️ UI 설계 원칙 : 직관성, 유효성, 학습성, 유연성

 

럼바우(Rumbaugh) 객체지향 분석 기법 :

  • 객체 모델링 (객체다이어그램)
  • 동적 모델링 (상태다이어그램)
  • 기능 모델링 (자료흐름도 - DFD)

 

 

[ 참고 자료 ]

https://www.comcbt.com/

https://www.youtube.com/watch?v=L-x1c4PAUOY

https://daanist.tistory.com/23

 

DFD 개념과 작성법

☞ DFD (Data Flow Diagram) 쉽게 말해 자료의 출발지와 목적지를 그림으로 표시한 것이다. 데이터가 소프트웨어 내의 각 프로세스를 따라 흐르면서 변환되는 모습을 나타낸 그림으로 소프트웨어 및

daanist.tistory.com

 

 

STOMP 란?

STOMP는 Simple Text Oriented Messaging Protocol의 약자로

메시징 시스템 간에 데이터를 교환하기 위한 간단하면서도 유연한 텍스트 기반 프로토콜이다.

웹 소켓 기반으로 동작하며, 메시징 애플리케이션에서 표준 프로토콜로 채택되어 있다.

 

[WebSocket에 대한 참고글]

 

Web Socket 통신 방식이란?

목차 프로토콜이란 무엇인가 웹소켓(Web Socket) 프로토콜이란? HPPT 통신과의 차이점 웹소켓 통신 방법 1. 프로토콜이란 무엇인가 프로토콜은 쉽게 이야기하면 "통신을 위한 규칙"이다. 사전전 정의

sol-aftercoding.tistory.com

 

Web Socket과의 차이점은 어떤 것이 있을까?

 

1. Pub/Sub 구조

STOMP는 WebSocket에는 없는 Pub/Sub 구조를 가지고 있다.

발행자(Publisher)가 특정 토픽이나 큐에 메시지를 생성하고 발행한다.

그러면 메시지 브로커(Message Broker)가 발행된 메시지를 관리한다.

구독자(Subscriber)는 특정 주제나 큐에 구독할 수 있는데 이 때 메시지 브로커는

등록된 모든 구독자에게 해당 주제의 메시지들을 전달한다.

메시지 브로커는 메시지의 라우팅, 필터링, 분배 등의 역할을 수행한다.

구독자는 발행된 메시지를 처리하거나 원하는 동작을 수행할 수 있다.

 

Web Socket은 서버와 클라이언트사이에 1:1 통신을 지원하고

간혹 연결이 끊기면 메세지가 사라지거나 하는 불상사가 발생하기도 한다.

그러나 STOMP는 메세지 브로커로 1:N 통신을 지원하기도 하고,

메세지를 서버에 저장했다가 클라이언트에 송신해주기 때문에 더 안전하다.

2. 메시지 형식

STOMP는 텍스트 기반의 메시징 프로토콜로, 사람이 읽을 수 있는 형태를 가지고 있다.

이는 디버깅이나 로깅 등에서 유용하게 사용된다.

Web Socket은 주로 이진 형식으로 데이터를 전송하지만, 텍스트 데이터도 지원한다.

3. 활용 방향

STOMP는 주로 서버 간의 메시징이나 클라이언트 간의 채팅과 같은 사용 사례에 적합하다.

반면 웹 소켓은 주로 브라우저와 서버 사이의 양방향 실시간 통신에 사용되며,

실시간 웹 애플리케이션에서 효과적으로 활용된다.

'스터디 > Web' 카테고리의 다른 글

웹 브라우저 요청 흐름  (0) 2025.01.18
[HTTP] IP, TCP/UDP, PORT, DNS 개념정리  (0) 2025.01.18
Web Socket 통신 방식이란?  (0) 2024.03.13

목차

  1. 프로토콜이란 무엇인가
  2. 웹소켓(Web Socket) 프로토콜이란?
  3. HPPT 통신과의 차이점
  4. 웹소켓 통신 방법

1.  프로토콜이란 무엇인가

프로토콜은 쉽게 이야기하면 "통신을 위한 규칙"이다.

사전전 정의로는 컴퓨터나 장치 간에 통신하기 위한 규칙과 규약의 집합을 나타낸다.

프로토콜은 다양한 종류가 있는데 이러한 종류는 프로토콜이 하는 역할에 따라 분류된다.

 

HTTP는 웹 프로토콜로서 클라이언트와 서버 간에 웹 데이터 통신을 담당한다.

웹 페이지를 열 때 https://URL 이러한 식으로 주소창에 주소가 뜨는데

여기서 https://가 웹 페이지를 로딩하기 위한 리소스를 서버에 요청하기 위한 통신 프로토콜인 것이다.

HTTP에 S가 붙은 것은 http의 보안 버전으로

암호화된 통신을 제공하여 더 안전한 데이터 통신이 가능하게 만든 것이다.

 

그 밖에도 TCP/IP는 네트워크 통신을 위한 기본적인 프로토콜 스택,

FIP는 파일 전송을 위한 프로토콜,

SMTP는 이메일을 보내는데 사용되는 프로콜을 담당하고 있다.

 

아래는 프로토콜의 종류를 표로 정리한 것이다.

계층 프로토콜
응용(Application) HTTP, SMTP, FTP, Telnet
표현(Presentation) ASCII, MPEG, JPEG, MIDI
세션(Session) NetBIOS, SAP, SDP, NWLink
전송(Transport) TCP, UDP, SPX
네트워크(Network) IP, IPX
데이터 링크(Data Link) Ethernet, Token Ring, FDDI, Apple Talk
물리(Physical) 없음

 

 

2.  웹소켓 (Web Socket) 프로토콜이란? 

웹소켓은 양방향 통신을 지원하는 프로토콜.

실시간, 양방향, 풀-더플렉스(Full-Duplex) 통신을 가능하게 하는 기술이다.

 

클라이언트와 서버 간에 한 번 연결이 이루어지면,

그 후로는 지속적으로 연결을 유지하며 데이터를 주고 받을 수 있다.

이를 통해 서버는 클라이언트에게 실시간으로 데이터를 푸시할 수 있다.

따라서 채팅 앱, 게임, 실시간 거래 정보 제공 등에 활용되고 있다.

 

 

3.  HTTP  통신과의  차이점

앞서 말한 HTTP 통신은 단방향 통신이다.

즉 클라이언트에서 서버로 Request를 보내면 서버는 클라이언트로 Response를 보내는 방식이다.

또한 HTTP는 기본적으로 무상태(Stateless)이므로 상태를 저장하지 않는다.

 

하지만 웹소켓은 양방향 통신으로 연결이 이루어지면

클라이언트가 요청하지 않아도 데이터가 저절로 서버로부터 올 수 있다.

따라서 일일이 요청을 안해도 데이터를 수신 받아 실시간 통신이 가능한 것이다.

 

구글Docs 에서 여러 사람이 하나의 문서를 동시에 수정할 때

사용자가 새로고침을 누르지 않아도 수정 사항을 실시간으로 볼 수 있는 것이

하나의 웹소켓 활용 사례이다.

 

 

4.  웹소켓 통신 방법

웹 소켓 통신 이미지

웹 소켓은 HTTP 포트 80, HTTPS 포트 443 위에서 동작한다.

그렇다면 웹소켓은 어떻게 동작되는지 단계별로 살펴보겠다.

Step1. 핸드셰이킹 (Handshaking)

클라이언트가 서버에게 웹 소켓 연결을 요청하기 위해 HTTP 요청을 전송한다.

요청에는 특별한 헤더인 'Upgrade'와 'Connection'이 포함되어 있다.

서버가 클라이언트의 요청을 받으면 동의하면서 101 상태 코드를 포함한 HTTP 응답을 반환한다.

응답헤더에도 'Upgrade'와 'Connection'이 포함되어 있다.

이 단계에서 클라이언트와 서버는 HTTP에서 웹소켓으로의 업그레이드 동의를 주고 받는다.

Step2. 웹 소켓 프로토콜로 업그레이드

클라이언트와 서버 간에 핸드셰이킹이 완료되면, 웹 소켓 프로토콜로의 업그레이드가 이루어진다.

클라이언트와 서버는 이후의 통신에 웹 소켓 프로토콜을 사용하기로 합의하고,

HTTP에서 웹소켓으로 연결이 업그레이드 된다.

 

일반적인 웹 소켓에서는 ws:// 프로토콜을 사용하고,

암호화된 웹 소켓에서는 wss:// 프로토콜을 사용한다.

# 예시
ws://example.com/socket
wss://example.com/secure-socket

 

Step3. 양방향 통신

핸드셰이킹이 완료되고 프로토콜이 업그레이드 되면,

클라이언트와 서버는 양방향 통신이 가능해진다.

양쪽 시스템은 서로에게 메세지를 전송할 수 있으며,

연결은 유지된 상태로 데이터가 실시간으로 주고 받을 수 있다.

Step4. 프레임 전송

웹 소켓은 데이터를 여러 프레임으로 나누어 전송한다.

이 프레임에는 텍스트, 이진 데이터, 연결 종료 등의 정보가 포함된다.

클라이언트와 서버는 프레임을 통해 메세지를 교환하며,

각 프레임에는 헤더가 포함돼 데이터를 구분한다.

Step5. 연결 종료

클라이언트 또는 서버가 연결을 종료하려면

특정 종료 프레임을 보내거나, TCP 연결을 직접 종료한다.

연결 종료 시에는 양쪽에서 상호 동의하에 이루어져야 하며,

이후에는 더 이상의 통신이 불가능해진다.

 

 

참고자료

 

프로토콜(Protocol)이란? - 정의, 기본 요소, 종류, 기능

프로토콜(Protocol)이란? 통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다. 즉 통신 규약 및 약속이다. 프로토콜의 기본 요소 구

computer-science-student.tistory.com

 

[Web] 웹소켓(WebSocket)이란? 웹소켓과 HTTP의 차이

웹소켓(WebSocket) 프로토콜이란? 웹소켓(WebSocket)은 클라이언트와 서버(브라우저와 서버)를 연결하고 실시간으로 통신이 가능하도록 하는 첨단 통신 프로토콜이다. 웹소켓은 하나의 TCP 접속에 전

code-lab1.tistory.com

 

'스터디 > Web' 카테고리의 다른 글

웹 브라우저 요청 흐름  (0) 2025.01.18
[HTTP] IP, TCP/UDP, PORT, DNS 개념정리  (0) 2025.01.18
STOMP란? WebSocket과의 차이  (0) 2024.03.13

+ Recent posts