1. 자바스크립트 기본 문법

 

1.1. 변수와 데이터 타입 (중요도 🌟🌟)

  • 변수 선언 방식:
    • var: 함수 스코프를 가지며, 중복 선언이 가능. 단, 변수 호이스팅과 같은 문제로 인해 현재는 let이나 const가 주로 사용.
    • let: 블록 스코프를 가지며 중복 선언이 불가능. 변수를 선언할 때 일반적으로 사용.
    • const: 블록 스코프를 가지며 상수로 취급. 한 번 값이 할당되면 변경 불가능.

 

참고 사항:
const 로 선언된 객체나 배열은 그 내용물을 수정할 수 있지만, 변수 자체를 다른 객체나 배열로 재할당 불가능.

 

  • 데이터 타입:
    • 기본 타입: string, number, boolean, null, undefined, symbol
    • 참조 타입: object, array, function . 이러한 타입들은 메모리의 참조를 통해 값을 다룸

 


1.2. 조건문과 반복문 (중요도 🌟🌟)

  • 조건문:
    • if, else if, else 문을 사용하여 다양한 조건에 따라 코드를 실행. 조건이 참이면 그에 해당하는 블록이 실행.
    • 삼항 연산자: 간단한 조건 처리에 사용.
    • 조건이 참일 때 실행할 코드 : 거짓일 때 실행할 코드 형식으로 작성.

 

  • 반복문:
    • for, while, do...while 문을 사용하여 반복 작업을 처리.
    • for 루프: 특정 횟수만큼 반복할 때 사용. 반복 변수 초기화, 조건, 증감식을 포함.
    • for...of 루프: 배열과 같은 반복 가능한 객체의 요소를 순회할 때 사용.
    • for...in 루프: 객체의 속성을 순회할 때 사용.

 

 

 


1.3. 함수와 객체 (중요도 🌟🌟)

  • 함수:
    • 함수는 특정 작업을 수행하는 코드 블록. 필요할 때마다 호출할 수 있으며, 입력으로 매개변수를 받고, 결과를 반환 가능.
    • 함수 선언 방식:
      • 함수 선언: function 키워드를 사용하여 선언하며, 함수 이름을 가짐.
      • 함수 표현식: 함수를 변수에 할당하여 사용 가능.
      • 화살표 함수: ES6에서 도입된 간결한 함수 표현 방식으로, this 바인딩이 기존 함수와 다름.

 

  • 객체:
    • 객체는 여러 개의 값을 하나로 묶어 관리하는 구조. 속성(키-값 쌍)으로 구성되며, 메서드를 포함.
    • 속성 접근 방법: 점(.) 표기법대괄호([ ]) 표기법을 사용하여 객체의 속성에 접근.
    • 메서드: 객체의 속성으로 포함된 함수. this 키워드를 사용해 객체의 다른 속성에 접근.

 

 

 


1.4. 기타 중요한 문법 요소 (중요도 🌟)

  • 배열 메서드: 자바스크립트 배열의 다양한 메서드를 활용하여 데이터를 조작하는 방법을 다룸.
    • push: 배열 끝에 요소를 추가.
    • pop: 배열 끝의 요소를 제거.
    • map, filter, reduce: 배열의 각 요소를 변환, 필터링, 집계하는 고차 함수.

 

  • 비동기 처리:
    • 콜백 함수: 함수가 다른 함수의 인자로 전달되어, 특정 작업이 완료된 후 호출되는 방식.
    • Promise: 비동기 작업의 완료 또는 실패를 처리하는 객체.

 

 

 


2. 자바스크립트를 활용한 서버 통신

 

2.1. HTTP

  • HTTP 프로토콜:
    • 역할: 클라이언트와 서버 간의 요청과 응답을 처리하는 규칙. HTTP는 텍스트 기반의 프로토콜로, 웹 브라우저와 서버 간에 데이터를 주고받기 위해 사용.
    • 요청과 응답:
      • HTTP 요청: 클라이언트에서 서버로 데이터를 요청할 때 사용. HTTP 메서드(GET, POST, PUT, DELETE)와 함께 요청이 이루어짐.
      • HTTP 응답: 서버가 클라이언트의 요청에 응답할 때 사용. 상태 코드(예: 200, 404)를 통해 요청이 성공했는지 여부를 알 수 있음.
    • 예제:
      • 요청: 클라이언트에서 서버로 "GET /users" 요청을 보내 사용자의 정보를 가져올 수 있음.
      • 응답: 서버는 "200 OK" 상태 코드와 함께 사용자의 정보를 JSON 형식으로 반환.

 

 


2.2. API (Application Programming Interface) (중요도🌟🌟🌟)

API는 소프트웨어 애플리케이션 간에 상호작용할 수 있도록 정의된 규칙방법을 의미. API를 통해 다른 애플리케이션이 특정 기능을 사용할 수 있도록 허용하며, 이를 통해 애플리케이션 간에 데이터나 서비스를 주고받을 수 있음.

예시:

  • Google Maps API: 개발자들이 자신의 애플리케이션에 구글 지도를 임베드하고, 경로 검색, 장소 정보를 제공하는 기능을 사용할 수 있도록 하는 API.
  • Twitter API: 개발자들이 트위터의 기능을 활용하여 트윗을 읽고, 작성하거나 특정 해시태그로 검색 가능.

API의 기본 구성:

  • 요청(Request): API는 특정 요청을 받아 데이터를 처리. 요청은 클라이언트가 서버에 보낸 데이터.
  • 응답(Response): 요청을 처리한 후 API는 서버에서 처리된 결과를 반환. 일반적으로 데이터는 JSON 또는 XML 형식으로 전달.

 

 

기본 동작 원리 :
1. 클라이언트가 API 서버에 요청을 보냄
2. 서버는 요청을 처리하고 데이터베이스에서 데이터를 가져오거나, 특정 기능을 수행한 뒤 응답을 반환
3. 클라이언트는 응답받은 데이터 활용하여 필요한 작업을 수행

 

 

 


2.3. RESTful API (중요도🌟🌟🌟)

RESTful API는 REST(Representational State Transfer)라는 아키텍처 스타일을 따르는 API를 의미.

REST는 클라이언트-서버 간에 데이터를 교환하는 방식 중 하나로, HTTP 프로토콜을 기반으로 동작.

RESTful API는 리소스를 URI로 정의하고, 이를 HTTP 메서드로 조작할 수 있도록 설계.

 

 

REST의 기본 개념:

  1. 리소스(Resource): RESTful AP에서 다루는 기본 단위는 “리소스”. 예를 들어, 사용자 목록, 게시글, 상품 정도 등
  2. HTTP 메서드: RESTful API는 HTTP 메서드를 사용하여 리소스를 조작. 주로 사영되는 메서드는 다음과 같음
    • GET: 리소스를 조회
    • POST: 새로운 리소스를 생성
    • PUT: 기존 리소스를 수정
    • DELETE: 리소스를 삭제

예시:

사용자 RESTful API

  • GET /users: 모든 사용자 목록 조회
  • GET /users/1: ID가 1인 사용자의 정보
  • POST /users: 새로운 사용자 생성
  • PUT /users/1: ID가 1인 사용자의 정보를 업데이트
  • DELETE /users/1: ID가 1인 사용자를 삭제

 

RESTful API 특징:

  1. 무상태성 (Statelessness): 각 요청은 독립적이며 요청 간의 상태가 저장되지 않음
  2. URI 기반 리소스: RESTful API는 리소스를 URI로 표현
  3. 다양한 포맷 지원: RESTful API는 JSON, XML 등 다양한 데이터 형식을 지원. 주로 JSON이 사용됨
  4. 클라이언트-서버 구조: 클라이언트는 리소스를 요청하고, 서버는 리소스를 관리.

RESTful API 사용시 주의사항:

  • 정확한 HTTP 메서드 사용: 리소스 조회는 GET, 데이터 생성은 POST, 업데이트는 PUT, 삭제는 DELETE와 같이 HTTP 메서드를 정확히 구분하여 사용
  • 일관된 리소스 URL: API의 엔드포인트 설계는 명확하고 일관성이 있어야 함. 예를 들어, /users/123은 사용자를 나타내고, /product/456은 제품을 나타내도록 일관되게 구성
  • 보안: API 사용 시 인증 및 권한 부여를 위해 OAuth, JWT 같은 인증 방식을 사용하여 데이터를 안전하게 보호

 

 


2.4. API 문서 (API Documentation) (중요도🌟🌟🌟)

API 문서는 개발자들이 API를 올바르게 사용하기 위해 작성된 설명서. API의 사용 방법, 엔드포인트, 요청 형식, 응답 형식, 오류 코드 등을 포함하여 API 사용에 필요한 모든 정보를 제공

 

주요 구성 요소:

  1. 엔드포인트 (Endpoints): API에서 사용 가능한 URL 경로와 그에 맞는 HTTP 메서드가 설명
  2. 요청 형식 (Request Format): 클라이언트가 요청할 때 사용해야 하는 데이터 형식, 헤더, 파라미터 등
  3. 응답 형식 (Response Format): 서버가 클라이언트에게 반환하는 데이터 형식 (JSON, XML 등)
  4. 상태 코드 (Status Codes): 요청이 성공했는지, 오류가 발생했는지를 나타내는 HTTP 상태 코드
    • 200 OK: 성공적인 요청
    • 404 Not Found: 요청한 리소스를 찾을 수 없음
    • 500 Internal Server Error: 서버에서 발생한 내부 오류
  5. 예제 코드: 다양한 프로그래밍 언어에서 API를 사용하는 방법을 보여주는 예시 코드

 

예시:

사용자 관리 API 문서

  • 엔드포인트:
    • GET /users: 사용자 목록을 반환
    • POST /users: 새로운 사용자를 생성
    • GET /users/{id}: 특정 사용자의 상세 정보를 반환
    • PUT /users/{id}: 특정 사용자의 정보를 수정
    • DELETE /users/{id}: 특정 사용자를 삭제

 

 

 


2.5. fetch API 소개 및 사용법 (중요도🌟🌟🌟)

  • fetch API 개요:
    • 역할: fetch API는 네트워크 요청을 보내고, 그 결과를 처리하는 최신 자바스크립트 내장 함수. 이 API는 Promise를 반환하여 비동기 처리의 편리함을 제공.
    • 특징:
      • 비동기적 처리: fetch는 요청을 보내고 기다리지 않고 바로 다음 코드를 실행
      • 간단한 문법: fetch는 기존의 XMLHttpRequest보다 훨씬 간결하게 요청을 처리
      • Promise 기반: Promise를 반환하기 때문에 .then(), .catch()로 응답을 처리
      • fetch() 함수 반환:
        • Response 객체:
          • fetch() 함수가 반환하는 첫 번째 결과로 Response 객체를 나타냄
          • 서버로부터 받은 전체 HTTP 응답
          • HTTP 상태 코드, 헤더, 본문(body) 등을 포함
            • response.ok: 응답이 성공(상태 코드 200~209)이면 true를 반환
            • response.status: HTTP 상태 코드를 반환 (예: 200, 204)
            • response.header: 응답의 HTTP 헤더를 반환
            • response.body: 서버 응답의 본문을 나타내지만 아직 처리되지 않은 상태. 데이터를 읽으려면 body를 변환해야 함

 

  • Data 객체:
    • response.json()은 서버 응답의 본문을 JSON 형태로 파싱한 데이터를 반환
    • 응답의 **본문(body)**만 추출한 값으로 서버에서 실제로 전달하려는 데이터
    • response.json()은 비동기적으로 동작하며, JSON 형식의 데이터를 자바스크립트 객체로 변환

 

  • 기본 사용법:
    • GET 요청: 데이터를 가져올 때 사용.
    • POST 요청: 서버에 데이터를 전송할 때 사용.
  • fetch API의 다양한 옵션:
    • 헤더 추가: 요청에 필요한 헤더 정보를 추가.
    • 메서드 지정: 요청 메서드를 지정 가능(기본값은 GET).
    • 바디 추가: POST 요청 시 데이터를 바디에 추가하여 전송.

 

 

  • Promise와 함께 사용하기:
    • .then(): 성공적으로 응답을 받았을 때 호출.
    • .catch(): 요청이 실패했을 때 호출.
    • .finally(): 성공과 실패 여부에 관계없이 항상 실행되는 코드를 작성 가능.

 

 

 

 


2.6. XMLHttpRequest API 소개 및 사용법

  • XMLHttpRequest API 개요:
    • 역할: fetch 이전에 서버와 비동기 통신을 하기 위해 사용된 오래된 방법.
    • 특징:
      • 콜백 기반: 비동기 요청을 처리할 때 콜백 함수를 사용
      • 복잡한 문법: fetch보다 많은 코드가 필요
      • 동기적 사용 가능: 비동기 외에도 동기적으로 요청을 처리

'특강' 카테고리의 다른 글

웹 심화 이해  (0) 2024.08.14
웹 기본 이해  (0) 2024.08.12
기술면접_CS, SQL 내용정리  (0) 2024.08.08
CS 특강(소프트웨어 설계)  (0) 2024.07.26
CS 특강(컴퓨터 구조와 운영체계)  (0) 2024.07.25

웹 심화 이해

 

웹 서버와 데이터베이스

웹 서버(Web Server)

: 클라이언트(주로 웹 브라우저)에서 요청한 웹 페이지, 이미지, 동영상 등 웹 콘텐츠를 제공하는 서버 소프트웨어 또는 하드웨어를 의미

주로 HTTP(S) 프로토콜을 사용하여 클라이언트의 요청을 수신하고, 요청된 콘텐츠를 찾아 응답하는 역할을 수행

 

 

 

웹 서버 소프트웨어

🔸 Apache HTTP Server

: 가장 널리 사용되는 웹 서버 소프트웨어 중 하나로, 다양한 운영체제에서 동작하며 높은 유연성과 확장성을 제공

 

🔸 Nginx

: 경량화된 고성능 웹 서버로, 높은 동시 연결 처리 능력을 가지고 있으며 주로 리버스 프록시와 로드 밸런싱에 사용

 

🔸Microsoft IIS(Internet Information Services)

: Windows Server 운영체제에서 동작하는 웹 서버 소프트웨어로, Microsoft 제품과의 높은 호환성을 가짐

 

 

 

서버 설정 및 작동 원리

가상 호스트
  • 하나의 웹 서버에서 여러 도메인을 호스팅 할 수 있도록 하는 기술
  • 이를 통해 동일한 서버에서 다양한 웹 사이트를 운영 가능
포트
  • 네트워크에서 서비스를 식별하는 번호
  • 웹 서버는 기본적으로 80 포트(HTTP)와 443 포트(HTTPS)를 사용하여 클라이언트 요청을 처리
라우팅
  • 요청 URL을 분석하여 적절한 응답을 반환하는 과정
  • 웹 애플리케이션의 특정 경로로 요청을 전달하고, 해당 경로에 맞는 콘텐츠나 데이터를 제공하는 역할

 

 

 

웹 서버의 주요 구성 요소

  1. Listener (수신기):
    • 네트워크에서 들어오는 클라이언트의 요청을 수신하는 컴포넌트
    • 지정된 포트를 열어 클라이언트의 연결을 대기
  2. Request Handler (요청 처리기):
    • 수신된 요청을 분석하고, 요청에 따라 필요한 작업을 결정
    • 정적 파일을 찾거나, 동적 콘텐츠를 생성하기 위해 적절한 스크립트를 실행
  3. Response Generator (응답 생성기):
    • 요청 처리 결과를 바탕으로 클라이언트에게 보낼 HTTP 응답을 생성
    • 응답은 상태 코드, 헤더, 바디(컨텐츠)로 구성
  4. Cache (캐시):
    • 자주 요청되는 데이터나 페이지를 저장하여 빠르게 제공할 수 있도록 함. 이는 서버의 부하를 줄이고, 응답 속도를 향상시킴
  5. Logging (로깅):
    • 요청 및 응답, 오류 등의 정보를 기록. 이를 통해 관리자는 서버 상태를 모니터링하고 문제 해결 가능
  6. Security Manager (보안 관리자):
    • 클라이언트의 요청을 검증하고, 접근 권한을 확인
    • HTTPS를 통해 데이터 암호화를 관리하고, 인증 및 권한 부여를 수행
  7. Configuration Manager (설정 관리자):
    • 서버의 설정 파일을 관리하고, 가상 호스팅, 라우팅, 포트 등의 설정을 유지

데이터베이스

관계형 데이터베이스(RDMBS) NoSQL 데이터베이스
  • 데이터를 테이블 형태로 저장
  • **SQL(Structured Query Language)**을 사용하여
    데이터를 관리하고 쿼리함
  • 데이터 간의 관계를 정의할 수 있으며 정규화된 데이터
    구조를 갖춤
  • 예시: MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server
  • 관계형 데이터베이스와 달리 비정형 데이터를 저장하고 처리할 수 있는 데이터베이스
  • 스키마가 없거나 유연한 구조를 가짐
  • 대규모 분산 시스템에서 높은 성능과 확장성을 제공
  • 예시: MongoDB(문서 지향형), Redis(키-값 저장소),
    Cassandra(칼럼 페밀리 저장소), Neo4j(그래프 데이터베이스)

 

 

 


서버 - 클라이언트 통신

🍑API

  • 소프트웨어 간의 상호작용을 가능하게 하는 터페이스
  • 웹 API는 HTTP를 통해 클라이언트와 서버 간의 데이터 교환 가능
  • 예시: Twitter API, Google Maps API, OpenWeather API
API는 응용 프로그램(애플리케이션)에서 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻합니다.
주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공합니다.

🍑 RESTful API

  • 웹 서비스 디자인 아키텍처로, 클라이언트와 서버 간의 상호작용을 정의
  • RESTful API는 자원을 URI로 표현하며, HTTP 메서드(GET, POST, PUT, DELETE)를 사용하여 자원에 대한 작업을 수행
  • 원칙: 무상태성, 캐시 가능성, 계층화된 시스템, 통일된 인터페이스
리소스(HTTP URI로 정의됨)를 어떻게 하겠다(HTTP Method + Payload)를 구조적으로 깔끔하게 표현하는 방법

    🌟REST API의 설계 가이드

  • 리소스에 대한 행위는 HTTP Method(POST, GET, PUT, DELETE)로 표현해야 합니다.
  • /(슬래시)는 계층 관계를 나타낼때 사용합니다.
  • URI 마지막 문자에 /(슬래시)를 사용하지 않습니다.
  • URI에 _(underscore)는 사용하지 않도록 합니다. 또한 영어 대문자보다는 소문자를 씁니다.
    그리고 가독성을 위해서 긴 단어는 잘 사용하지 않습니다.
  • URI에 동사는 GET, POST와 같은 HTTP Method를 표현하기 때문이다.
    동사가 아니라 명사를 사용한다.
  • URI에 파일의 확장자(예를들어 .json , .JPGE)를 포함 시키지 않습니다.

 

 


🍑AJAX

  • AJAX(Asynchronous JavaScript and XML)는 웹 페이지를 새로 고침하지 않고 서버와 비동기적으로 데이터를 주고받는 기술
    이를 통해 사용자 경험을 개선하고, 페이지 응답 속도를 향상시킴
  • 사용 예시: 채팅 애플리케이션, 실시간 검색 기능, 비동기 데이터 로딩

 

🌟자주 쓰이는 설정값

구분 정의
url ajax 요청할 매핑된 url 입력 -
type HTTP 통신의 종류를 설정. put, delete는 모든 브라우저에서 지원하는 것이 아니기 때문에 주의가 필요. 기본값(default) : get
get, post, delete, put
dataType ajax를 통해 리턴받을 데이터의 타입을 설정. 생략했을 경우는, jQuery이 MIME 타입 등을 보면서 자동으로 결정 xml, html, json, 
script, jsonp, text
contentType 기본값을 가장 많이 사용
기본값(default) : application/x-www-form-urlencoded; charset=UTF-8
-
timeout ajax가 호출된 시점부터 시간을 재서 요청이 초과될 경우 에러 등의 상태로 전환함
$.ajaxSetup()의 global timeout에 의해 override됨.
number(milli secs)
data URL 파라미터를 통해 보낼 데이터. 종류 : Object or String or Array
Object는 key:value set 객체여야 하며 value 영역이 array일 경우 jQuery가 serialize를 해줌. value 영역이 String이 아닌 경우 String으로 변환한 뒤 전송됨
-
beforeSend ajax 실행 시 요청이 전송되기 전에 실행되는 event 입니다. 반환값을 false 또는 jqXHR.abort();로 설정하면 ajax 전송을 취소할 수 있습니다. -
success ajax 통신이 성공했을 때 실행되는 콜백함수 -
error request가 실패했을 때 실행되는 콜백함수. cross-domain 요청이나 cross-domain의 jsonp 요청에는 작동하지 않는다. -
complete success나 error가 호출된 이후에 호출되는 콜백함수

 

💡메소드 종류

- GET : 데이터를 읽거나 검색할 때 주로 사용되는 메소드
- POST : 새로운 리소스를 생성할 때 주로 사용되는 메소드
- PUT : 리소스를 생성/업데이트 할 때 주로 사용되는 메소드
- DELTE : 지정된 리소스를 삭제할 때 주로 사용되는 메소드

 

 

 

 


웹 애플리케이션(Web Application)

: 웹 서버에서 동작하는 소프트웨어로, 사용자의 입력을 처리하고 동적인 웹 페이지를 생성하는 데 사용됨

주로 특정 비즈니스 로직이나 기능을 구현하며, 데이터베이스와 상호 작용하여 정보를 저장하고 불러오는 역할 수행

 

 

웹 애플리케이션의 주요 구성 요소

  1. User Interface (사용자 인터페이스):
    • 사용자와 상호 작용하는 화면이나 페이지
    • HTML, CSS, JavaScript 등을 사용하여 구성
  2. Business Logic (비즈니스 로직):
    • 애플리케이션의 핵심 기능과 처리 로직을 구현
    • 사용자의 요청을 처리하고, 필요한 데이터를 조작하여 응답을 생성
  3. Data Access Layer (데이터 접근 계층):
    • 데이터베이스와 상호 작용하여 데이터를 저장하고 불러옴
    • 데이터베이스 쿼리를 생성하고, 결과를 반환
  4. Web API (웹 API):
    • 다른 서비스나 애플리케이션과 상호 작용할 수 있도록 API를 제공
    • RESTful API, GraphQL, SOAP 등
  5. Session Management (세션 관리):
    • 사용자의 로그인 상태를 관리하고, 각 사용자의 세션을 유지
    • 쿠키나 세션 토큰을 사용하여 구현
  6. Error Handling (오류 처리):
    • 애플리케이션에서 발생하는 오류를 감지하고 처리
    • 오류 로그를 남기고, 사용자에게 적절한 메시지를 표시
  7. Security (보안):
    • 애플리케이션의 보안을 관리
    • 사용자 인증, 권한 부여, 입력 검증, 데이터 암호화 등의 기능을 포함
💡웹 애플리케이션 구조를 이루는 구성 요소

- 웹 서버
- 웹 어플리케이션 서버
- 데이터베이스
- 프론트엔드와 유저 인터페이스

웹 서버와 웹 애플리케이션의 차이점

구분 웹 서버 웹 애플리케이션
역할 웹 콘텐츠 제공 (정적 파일, HTTP 응답 처리) 비즈니스 로직 구현, 사용자 입력 처리, 동적 콘텐츠 생성
구성 요소 Listener, Request Handler, Cache, Logging, Security User Interface, Business Logic, Data Access Layer, API
주요 기능 HTTP 요청 수신, 응답 생성, 캐싱, 로깅, 보안 사용자 상호 작용, 데이터 처리, 비즈니스 로직, 세션 관리
사용 기술 HTTP, HTTPS, SSL/TLS, 캐싱 HTML, CSS, JavaScript, 서버 측 언어 (Python, PHP 등)
작동 방식 클라이언트 요청을 처리하고 정적/동적 콘텐츠 제공 사용자의 입력에 따라 동적으로 콘텐츠 생성, 데이터베이스와 상호 작용

 

 

 


웹 보안

주요 웹 보안 위협 요소

 

XSS(교차 사이트 스크립팅)

: 악의적인 스크립트를 삽입하여 사용자 정보를 탈취하거나 웹 페이지를 변조

 

CSRF(교차 사이트 요청 위조)

: 사용자가 의도하지 않은 요청을 보내게 하여 피해를 입힘

 

SQL Injection(SQL 인젝션)

: SQL 쿼리에 악의적인 코드를 삽입하여 데이터베이스를 조작하거나 데이터를 탈취

 

Click Jacking(클릭 재킹)

: 사용자가 의도하지 않은 클릭을 하도록 유도하여 악성 사이트로 이동시키거나 악성 행위를 수행하게 함

 

💡보안을 실천해보자!

비밀번호 관리 : 강력한 비밀번호 생성 규칙(대문자, 소문자, 숫자, 특수 문자 조합)과 2단계 이상의 인증
소프트웨어 업데이트 : 패치 관리와 취약점 관리를 통해 소프트웨어를 최상 상태로 유지
백업 : 정기적인 데이터 백업 전략과 백업 주기 설정 필요 (데이터 손실 시 신속하게 복구 가능)

 

 

 


현대 웹 기술과 트렌드

 

반응형 웹 디자인

: 반응형 디자인은 다양한 기기와 화면 크기에 적응하는 웹 디자인을 의미

미디어 쿼리, 유동형 그리드 레이아웃, 유연한 이미지

 

모바일 퍼스트 디자인

: 모바일 환경을 우선적으로 고려한 디자인 접근법

모바일 사용자가 증가함에 따라 중요성이 커짐

 

 


🧁프론트엔드 프레임워크

React
  • Facebook에서 개발한 JavaScript 라이브러리로, 사용자 인터페이스(UI)를 구축하는 데 사용
  • 컴포넌트 기반 아키텍처 제공 → UI를 독립적인 컴포넌트로 나누어 관리할 수 있음
  • 상태 관리 라이브러리(예: Redux)와 함께 사용 가능
  • 가상 DOM을 통해 빠른 렌더링 성능 제공
  • 예시: Facebook, Instagram, Airbnb
Angular
  • Google이 개발한 프론트엔드 프레임워크로, 모듈화와 양방향 데이터 바인딩을 지원
  • 전체적인 애플리케이션 구조를 제공
  • TypeScript를 사용하여 더 강력한 타입 검사를 지원
  • Angular CLI를 이용해 효율적인 개발 환경을 제공
  • 강력한 라우팅과 폼 처리 기능을 갖추고 있음
  • 예시: Googld Ads, Microsoft Office Online
Vue.js
  • 직관적이고 경량화된 프론트엔드 프레임워크로, 컴포넌트 기반 아키텍처와 반응형 데이터 바인딩 제공
  • 학습 곡선이 낮아 빠르게 개발을 시작할 수 있으며 Vue Router와 Vuex를 통해 상태 관리와 라우팅 기능 제공
  • 예시: Alibaba, Xiaomi, Laravel

🧁백엔드 프레임워크

Django
  • python으로 작성된 고급 웹 프레임워크로, MTV(Model-Template-View) 패턴을 따름
  • 강력한 어드민 인터페이스와 ORM(Object-Relational Mapping)을 제공하여 데이터베이스와의 상호작용을 용이하게 함
  • 서버사이드 렌더링으로 사용자 환경 개선
  • 보안 기능이 내장되어 있어 안전한 웹 애플리케이션을 구축하는 데 적합
  • 예시: Instagram, Pinterest, Mozilla
Node.js
  • 서버 측에서 JavaScript를 실행할 수 있는 런타임 환경으로, 비동기 I/O를 통해 높은 성능을 제공
  • Express.js와 같은 프레임워크와 함께 사용되며, RESTful API를 쉽게 구축할 수 있음
  • NPM(Node Package Manage)을 통해 다양한 패키지 활용 가능
  • 예시: LinkedIn, Netflix, Uber
Spring
  • Java 기반의 엔터프라이즈 애플리케이션 프레임워크로 DI(Dependency Injection)와 AOP(Aspect-Oriented Programming)를 지원
  • MVC(Model-View-Controller) 패턴을 제공
  • 강력한 보안과 트랜잭션 관리 기능 제공
  • 예시: eBay, Baeldung
Flask
  • Python으로 작성된 경량 웹 프레임워크로, 간단한 구조와 유연성을 제공
  • 기본적인 웹 서버 기능을 제공하며 필요한 기능을 플러그인 형태로 추가 가능
  • 소규모 애플리케이션이나 프로토타입에 적합
  • 예시: LinkdedIn, Pinterest, Netflix

 

 

 

 


🍿백엔드 아키텍처

MVC 패턴

  • MVC(Model-View-Controller) 패턴은 애플리케이션의 구조를 모델, 뷰, 컨트롤러로 나누어 관리하는 디자인 패턴
  • 모델은 데이터와 비지니스 로직을 처리하며, 뷰는 사용자 인터페이스를 구성, 컨트롤러는 모델과 뷰 간의 상호작용을 조정
  • 예시: Spring MVC, ASP.NET MVC

 

MTV 패턴

  • MTV(Model-Template-View) 패턴은 Django에서 사용하는 패턴으로, 모델, 템플릿, 뷰로 구성
  • 모델은 데이터베이스와의 상호작용을 담당하고, 템플릿은 HTML과 같은 사용자 인터페이스를 정의하며, 뷰는 요청을 처리하고 모델과 템플릿을 연결
  • 예시: Django 웹 애플리케이션

 

 


클라우드와 컴퓨팅과 호스팅

클라우드 컴퓨팅

: 인터넷을 통해 컴퓨팅 자원(서버, 스토리지, 데이터베이스 등)을 제공하는 서비스

 

 

서버리스 아키텍처

: 개발자가 서버 인프라를 관리하지 않고 코드를 실행할 수 있는 컴퓨팅 모델

 

 

💡 서버리스의 장점
확장성 : 트래픽이 증가하면 자동으로 확장되며, 필요하지 않을 때는 리소스를 줄여 비용 절감 가능
비용 효율성 : 사용한 만큼만 비용을 지불하는 Pay-as-you-go 모델을 사용하여, 리소스를 효율적으로 사용 가능
개발 속도 향상 : 인프라 관리가 필요 없기 때문에 개발자는 비즈니스 로직 구현에 집중이 가능하여 개발 속도 향상 가능

 

 

 

 


미래 웹 기술

Progressive Web Apps(PWAs)

 

PWA

  • 웹 애플리케이션과 모바일 애플리케이션의 장점을 결합하여 사용자가 오프라인에서도 앱을 사용할 수 있게 하고, 모바일 장치에서 네이티브 앱처럼 동작
  • 서비스워커, 웹 애플리케이션 매니페스트, HTTPS를 사용
  • 예시: Twitter Lite, Pinterest

서비스 워커

  • 백그라운드에서 실행되는 스크립트로, 네트워크 요청을 가로채고 캐시하여 오프라인에서의 작업을 지원

웹 애플리케이션 매니페스트

  • 웹 애플리케이션의 메타데이터를 포함한 JSON파일로, 홈 화면에 아이콘을 추가하고 전체 화면 모드와 같은 네이티브 앱 기능을 제공하는 데 사용

HTTPS

  • 보안 강화 및 데이터 전송의 무결성을 보장하기 위해 사용

 

 

 


 📁추가 내용

 

Server Engine (Apache, NGINX)

 


ip주소에게
HTTP 프로토콜 + 메서드 이렇게 합쳐서
http://domain.com/path?query=abc >> 이거를 ur로 보낸다.

 


하나의 페이지에 대한 리소스를 보내주면 되는 것을 정적페이지라고 한다.
리소스는 변화하지 않는다.

 


Server Application(weg application) (python, java, django) 이거를 동적 페이지라고 한다

 


Server Computer

- Web Server Engine

- Web Application

- Database

'특강' 카테고리의 다른 글

프론트엔드 통신 특강  (1) 2024.09.10
웹 기본 이해  (0) 2024.08.12
기술면접_CS, SQL 내용정리  (0) 2024.08.08
CS 특강(소프트웨어 설계)  (0) 2024.07.26
CS 특강(컴퓨터 구조와 운영체계)  (0) 2024.07.25

웹 기본 이해

 

웹과 인터넷 차이

인터넷(Internet)

: 네트워크 인프라 구조. 전 세계의 컴퓨터와 네트워크를 연결하는 시스템의 통합

 

웹(WEB)

: 인터넷 상에서 정보를 제공하거나 접근할 수 있는 서비스 (월드 와이드 웹 : World Wide Web)

인터넷(Internet) 웹(WEB)
컴퓨터가 서로 연결되어 통신을 주고받는
컴퓨터끼리의 네트워크
그 인터넷상에 정보가 얽혀있는
무형의 정보 네트워크

 

 

 

웹의 기본 동작 원리  (중요도 🌟)

클라이언트 - 서버 모델

: 클라이언트(사용자 컴퓨터)와 서버(웹 사이트를 호스팅하는 컴퓨터) 간의 상호작용

클라이언트는 서버에 요청을 보내고, 서버는 요청에 따라 데이터를 응답

 

HTTP 요청 - 응답

: 클라이언트가 웹페이지를 요청하면, 서버는 요청을 처리하고 HTML 문서를 반환, 클라이언트는 이를 해석하여 화면에 표시

 

 

 


브라우저와 서버  (중요도 🌟 🌟🌟)

: 브라우저는 웹 서버로부터 HTML, CSS, JavaScript 파일을 요청하고 응답받아 이를 피싱(해석)하는 단계

 

 

🦄브라우저의 작동원리

HTML 파싱
  • HTML 파일을 받아들인 브라우저는 이를 파싱하여 DOM(Document Object Model) 트리를 구축합
  • DOM 트리는 HTML 문서의 구조를 계층적으로 표현한 객체 모델로, 각 HTML 요소가 하나의 객체로 표현
  • HTML 문서를 위에서 아래로 순차적으로 읽어 내려가며, HTML 태그들을 각각의 DOM 노드로 변환하고, 이 노드들이 부모-자식 관계를 통해 트리 구조로 연결
CSS 파싱
  • CSS 파일을 받아들인 브라우저는 이를 파싱하여 CSSOM(CSS Object Model) 트리를 구축
  • CSSOM 트리는 스타일 규칙들을 객체 모델로 변환한 것으로, 각 규칙이 적용될 HTML 요소와 연결
  • 이 과정에서 CSS 규칙의 상속과 우선순위(계단형) 등이 계산
JavaScript 파싱
  • JavaScript 파일이 포함된 경우, 브라우저는 이를 해석하여 실행
  • JavaScript는 DOM이나 CSSOM 트리에 접근하여 동적으로 HTML 요소를 추가, 제거하거나 스타일을 변경 가능
  • JavaScript는 비동기적으로 실행될 수 있으며, 때로는 DOM이 완전히 로드된 후에 실행

 

 

💡페이지 렌더링
: 모든 과정이 끝난 후, 브라우저는 최종적인 웹 페이지를 사용자에게 화면으로 보여짐
사용자가 페이지와 상호작용하거나, JavaScript에 의해 콘텐츠가 변경되면, 브라우저는 이 과정을 반복하여 화면을 업데이트함

 

 

 

 


프로토콜  (중요도🌟🌟)

  HTTP 프로토콜 HTTPS 프로토콜
개념 - 월드 와이드 웹(WWW)에서 웹 페이지를 주고받기 위해 사용

- 클라이언트(주로 웹 브라우저)가 서버에 요청을 보내면, 서버는 그 요청에 맞는 데이터를 클라이언트에 응답으로 보내주는 방식으로 작동
- HTTP에 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security)라는 암호화 프로토콜을 결합한 것

- HTTPS를 통해 주고받는 데이터는 암호화되어, 중간에 누군가가 데이터를 가로채더라도 내용을 읽을 수 없도록 보호
특징
  • 비암호화된 데이터 전송: HTTP는 데이터를 평문(암호화되지 않은 형태)으로 전송하기 때문에, 중간에 누군가가 네트워크 트래픽을 감청할 경우 데이터가 쉽게 유출될 수 있음

  • 속도: 암호화 과정이 없기 때문에 HTTPS보다 약간 더 빠를 수 있으나 보안이 취약하다는 큰 단점을 가짐

  • 포트: 기본적으로 80번 포트를 사용
  • 데이터 암호화: 모든 데이터가 전송되기 전에 암호화되어, 데이터의 기밀성을 유지
    이로 인해 제 3자가 데이터 내용을 쉽게 볼 수 없으며, 데이터가 안전하게 전송
  • 데이터 무결성: 데이터가 전송되는 도중 변경되거나 손상되지 않았는지를 확인하는 기능을 제공
    이를 통해 클라이언트는 서버로부터 받은 데이터가 원본과 일치하는지 확인 가능
  • 서버 인증: HTTPS는 SSL/TLS 인증서를 사용하여 서버의 신원을 확인
    이는 사용자가 방문하는 웹 사이트가 실제로 그 웹 사이트임을 보장
    이를 위해 신뢰할 수 있는 인증 기관(CA, Certificate Authority)에서 발급한 인증서를 사용
  • 포트: 기본적으로 443번 포트를 사용
예시 http://www.example.com https://www.example.com

 


HTTPS의 중요성   (중요도 🌟 🌟)

💡SSL/TLS의 역할
SSL(Secure Sockets Layer) 및 TLS(Transport Layer Security)는 HTTP 프로토콜 위에서 동작
데이터 전송 시 보안을 강화하고, 데이터 무결성과 서버 인증을 제공

 

암호화와 인증

  • 데이터 무결성: 데이터가 전송되는 동안 변조되지 않았는지를 확인하는 기능을 제공. 이를 통해 수신자는 데이터가 원래 전송된 형태와 일치하는지 확인 가능
  • 서버 인증: 클라이언트(사용자)와 서버 간의 연결을 암호화하기 전에, 서버가 신뢰할 수 있는 인증 기관(CA)에 의해 인증되었음을 보장. 서버 인증은 사용자가 방문하는 웹 사이트가 실제로 신뢰할 수 있는 서버인지 확인하는 과정
  • 데이터 전송 시 보안 강화: SSL/TLS는 데이터가 네트워크를 통해 전송될 때 암호화하여 제 3자가 데이터를 읽거나 변조할 수 없도록 함. 암호화된 데이터는 중간에 있는 누군가가 쉽게 해독할 수 없으며, 이로 인해 데이터가 안전하게 전송

 

 

 


도메인과 IP주소 (중요도🌟🌟)

DNS 서버  (중요도 🌟 🌟)

: 도메인 이름을 IP 주소로 변환하는 시스템

사용자가 웹 브라우저에 도메인 이름을 입력하면, DNS 서버는 해당 도메인 이름에 대응하는 IP 주소를 찾아 반환하여, 사용자는 기억하기 쉬운 도메인 이름을 사용해 웹 사이트에 접근 가능

 

IP 주소

: 네트워크 상에서 장치를 식별하는 고유한 주소

데이터 패킷이 올바른 목적지로 전달될 수 있도록 하는 역할을 가지고, 모든 네트워크 장치(컴퓨터, 스마트폰, 서버 등)는 고유한 IP 주소를 가짐

 

IPv4 IPv6
32비트 주소 체계를 사용 약 43억 개의 고유한 주소 제공 가능.
주소는 4개의 10진수로 구분된 8비트 블록으로 표시
128비트 주소 체계를 사용하여 훨씬 더 많은 주소 제공.
주소는 8개의 128비트 블록으로 구성된 16진수로 표시
192.168.0.1 2001:0db8:85a3:0000:0000:8a2e:0370:7334

 

 

 


URL 구성요소

 

프로토콜(Protocol)
URL의 시작 부분에 위치하며, 웹 페이지와 서버 간의 통신 방식을 정의. 일반적으로 http 또는 https가 사용

도메인(Domain)
URL 중앙 부분에 위치하며, 웹 사이트의 고유한 주소를 나타냄. 도메인은 DNS를 통해 IP 주소로 변환됨

경로(Path)
도메인 뒤에 위치하며, 웹 사이트 내의 특정 리소스나 페이지를 식별 가능하고 서버 내에서 리소스의 위치를 지정

쿼리 문자열(Query)
URL의 마지막 부분에 위치하고, 웹 페이지에 전달할 추가 정보를 포함하며 ?로 시작하며, 매개변수와 값을 &로 구분

 

 

 


웹 페이지 구성 요소  (중요도 🌟🌟 🌟)

🌟HTML 역할 및 기본

HTML(Hyper Text Markup Language)
  • 웹 페이지의 구조를 정의하는 마크업 언어
  • HTML을 사용하여 웹 페이지의 내용과 구조를 정의
  • 텍스트, 이미지, 링크, 폼 등 다양한 요소를 포함
  • 웹 브라우저가 웹 페이지를 표시하는데 필요한 정보를 제공
태그(Tag)
  • HTML 문서는 태그로 구성
  • 열기 태그와 닫기 태그로 구성 <열기 태그></닫기 태그>
  • 웹 페이지의 콘텐츠를 구조화하는 데 사용
속성(Attribute)
  • HTML 태그추가적인 정보를 제공하기 위해 속성을 가짐
  • 태그의 기능을 조절하거나 내용을 수정하는데 사용

 

 


 

🌟CSS 역할 및 기본

CSS(Cascading Style Sheets)

  • 웹 페이지의 스타일을 정의하는 언어
  • CSS를 사용해 웹 페이지의 레이아웃, 색상, 폰트, 간격 등을 설정
  • HTML의 구조와 내용을 시각적으로 꾸미는 데 사용
인라인 스타일
  • HTML 요소 내에서 직접 스타일을 정의하는 방법
  • style 속성을 이용해 요소에 직접 CSS 스타일 적용

 

내부 스타일 시트
  • HTML 문서의 <head> 섹션 내에 <style> 태그를 이용해 정의된 스타일

 

외부 스타일 시트
  • 별도의 CSS 파일을 생성하여 웹 페이지에 링크하는 방법
  • 여러 HTML 문서에서 동일한 스타일을 적용할 때 사용

 

 

💡HTML, CSS 로는 정적 웹페이지 구현
JavaScript 로는 동적 웹페이지 구현 가능

 


 

🌟JavaScript 역할 및 기본

JavaScript란 .js

  • 웹 페이지의 동적 동작을 제어하는 프로그래밍 언어
  • 페이지의 내용이나 구조를 동적으로 변경하거나 사용자와의 상호작용을 처리

 

기본 문법

  • 변수 선언, 함수 정의, 조건문, 반복문 등
  • 변수는 let, const를 이용해 선언
  • 함수는 function 키워드를 사용

<script> 태그
  • JavaScript 코드를 HTML 문서에 포함시키기 위해 <script> 태그를 사용
  • <script> 태그는 HTML 문서의 <head> 태그 내부나 <body>태그 내부에 배치 가능
  • 외부 JavaScript 파일을 링크하는 것도 가능
내부 스크립트
외부 스크립트

 

 

JavaScript를 선언하는 script 태그의 위치로 적절한 곳은?
==> 문서의 <body> 태그 끝에 위치

🔸이유
빠른 페이지 로딩
: HTML 콘텐츠가 먼저 로드되므로 페이지가 빠르게 보임 JavaScript는 콘텐츠가 모두 로드된 후에 실행되므로 렌더링이 차단되지 않음

최적의 사용자 경험
: 페이지 콘텐츠가 먼저 보이기 때문에 사용자에게 빠르게 콘텐츠를 제공 가능

'특강' 카테고리의 다른 글

프론트엔드 통신 특강  (1) 2024.09.10
웹 심화 이해  (0) 2024.08.14
기술면접_CS, SQL 내용정리  (0) 2024.08.08
CS 특강(소프트웨어 설계)  (0) 2024.07.26
CS 특강(컴퓨터 구조와 운영체계)  (0) 2024.07.25

 

객체지향 4가지 특징: 추상화, 상속, 다형성, 캡슐화

상속을 왜 사용하는가 : 

 

만약 상속을 사용하지 않는다면, 비슷한 기능을 구현할 때마다 동일한 코드를 작성해야 하기 때문에, 
상속을 사용해서 클래스의 기능을 재사용하고, 확장할 수 있습니다.

🐬Feedback
다형성과 캡슐화에 대한 설명이 조금 부족함. 이 부분은 추가적인 공부가 필요함.
객체지향에 대해 설명할 때, 절차지향과 비교하면서 설명해도 좋음.
캡슐화는 금융관련 코딩에만 쓰이지 않기 때문에 한정적인 표현은 좋지 않음. 어디에 사용하는 것이 적합하다고 설명하는 게 좋음.

HTTP / HTTPS 차이

 

HTTP(80)
서버랑 클라이언트가 웹상에서 정보를 주고 받을 수 있도록 해주는 프로토콜을 의미, http는 암호화를 하지 않는 프로토콜, http는 평문으로 되어있어서 탈취의 가능성이 있음


HTTPS(443)
- 보안성이 취약한 문제를 극복하기 위해 암호화를 하는 http프로토콜
HTTP 요청과 응답을 암호화하고 해당 요청과 응답에 디지털 서명을 한다

 

🐬Feedback
어떤 용어를 말할 때, 정확한 약자가 생각나지 않을 경우 면접에선 그 용어를 사용하지 않는 것이 좋음.

 


UDP / TCP 차이

UDP(UserDatagramProtocol)
- 비연결형 데이터그램 방식의 프로토콜로 신뢰성을 보장하지 않음
- TCP에 비해 구조가 단순하고 빠름
ex)스트리밍, 게임 같은것에 주로 사용, 데이터가 손실되더라도 속도가 더 중요한 경우 udp를 사용함

TCP(TransmissionControl Protocol)
- 연결형 가상회선 방식의 프로토콜로 신뢰성을 보장함
- UDP에 비해 구조가 복잡하고 느려요.
ex)보안이 필요할 때 사용(공인인증같은), 파일 전송/이메일 전송 일반적인 데이터는 손실이 안돼서 tcp를 사용함



 


OSI 7계층

1계층_물리 : 물리적 접속(허브, 리피터) (비트(bit) 단위)
2계층_데이터링크 : 링크의 접속(스위치, 브릿지, 랜카드) : 주소 할당 (MAC주소) (프레임(frame) 단위)
3계층_네트워크 : 데이터 교환(라우터, IP주소) (패킷 단위) 
4계층_전송 : 정확한 정보 교환(오류 검출 및 수정) (TCP, UDP, 포트번호) (TCP : segment 단위, UDP : Datagram 단위)

5계층_세션 : 응용 프로그램 간의 연결 관리(연결 및 연결 복구)
6계층_표현 : 데이터 번역(서로 다른 데이터 표현 방식 간 번역) (암호화, 복호화)
7계층_응용 : 응용프로그램 서비스 제공(각종 응용 프로그램) (HTTP, FTP, SMTP, DNS)

🐬Feedback

슬랙을 OSI계층으로 표현하라는 질문. (Case : 슬랙 메시지를 보내는 상황)


1계층_물리 :
메시지를 발송하기 위해 인터넷이 필요함. 무선 통신 매체를 통신해서 데이터를 전송하기 위한 신호로 바꿈.

2계층_데이터링크 :
물리 계층에서 어플리케이션(추상화)계층까지 가기 위한 계

3계층_네트워크 :
전송된 메시지를 패킷으로 쪼개어 패킷에 담아 전송한다. 또, 패킷의 송신지와 수신지 주소들을 포함하는 필드를 가진다. 최적의 데이터 경로를 설정해준다.
(ex. 내배캠 민준 튜터님, 최고 ==>  내배캠 / 민준 / 튜터님, / 최고)

4계층_전송 :
TCP/UDP 중 어떤 것으로 보낼지 설정. 패킷의 전송이 유효한지, 전송에 실패된 패킷을 재전송 하는 등 신뢰성 있는 통신을 보장함. 메시지를 전송하여 도착함.

5계층_세션 :
슬랙은 켰지만, 로그인이 안 돼있거나 화면을 켜지 않으면 메시지를 볼 수 없음. 즉 메시지를 보기 위해 어떠한 세션을 연결해줌.

6계층_표현 :
암호화인지, 아닌지 구분함.

7계층_응용 :
슬랙(어플리케이션) 그 자체

 

 


배열(Array)과 연결리스트(Linked list) 차이

배열이랑 연결리스트  공통점 : 선형구조(1차원적)

 


배열은 정적자료구조연속된 메모리 주소를 할당받기 때문에 인덱스를 가지게 됨. 인덱스를 가지고 있기 때문에 접근과 탐색에 용이함. 수정이 어려움


연결리스트는 동적자료구조, 연속된 메모리 주소를 할당 받지 않고, 노드 안에 다음 노드의 주소를 가지고 있음.데이터 추가/삭제가 자유로움

🐬Feedback
어렵다라는 표현이 조금 애매할 수 있음. (왜 어렵나요? 라는 역질문 받을 수 있음) 다른 거에 비해 속도가 더 빠르다, 용이하다
데이터 추가/삭제_시간복잡도: 배열이 O(n), 연결리스트 O(1) 
일반적으로 시간복잡도는 배열 O(1), 연결리스트 O(n)

 


SQL과 NoSQL 차이

SQL: DBMS를 조작하기 위한 프로그래밍 언어
(DDL, DML, DCL, TCL)
스키마 :  DB의 구조와 제약 조건에 관한 전반적인 명세를 정의한 메타데이터의 집합

 

SQL 데이터베이스 관계형 데이터베이스,  NoSQL 데이터베이스는 비관계형 데이터베이스


SQL 

: 행과 테이블과 같은 구조화된 데이터를 관리할 수 있도록 하는 기존 접근 방식의 프로그래밍 언어


NoSQL(Not Only SQL) 

: 유연한 비관계형 접근 방식을 제공하여 구조화되지 않은 데이터 또는 동적 데이터를 처리

🐬Feedback

SQL , NoSQL 둘다 채팅서비스를 구현할 수 있음. 근데 어떤 걸로 만들 것인지 본인이 설득하는 게 필요함.

 

 


조인과 서브쿼리 차이

조인은 두 개 이상의 테이블을 결합하는 데 사용서브쿼리는 쿼리 내에서 다른 쿼리를 실행하는 데 사용. 

 

조인

: 일반적으로 더 효율적이며 데이터를 조회하는 더 직관적인 방법. 

 

서브쿼리 

: 복잡한 쿼리를 작성하는 데 사용할 수 있지만 성능이 저하될 수 있음.

 

 


자료구조

 

스택은 LIFO, 큐는 FIFO

 

스택

: 재귀함수를 구현할 수 있고, DFS탐색에 사용됨. 


: BFS탐색에 사용되어 작업이 순차적으로 진행될 때 사용됨.


트리와 그래프

 

트리

: 그래프 중 하나이지만 특수한 목적이 있는 자료구조. 사이클이 없고 루트노드 혹은 부모-자식 관계가 존재함. (계층이 존재함)

 

그래프

:노드와 노드 간을 연결하여 방향 혹은 무방향 그래프가 있고, 사이클이 존재할 수 있음. (네트워크로 존재함)


소프트웨어 개발 표준문서

 

SRS(Software Requiremetns Standards)

: 소프트웨어가 만족해야하는 요구사항을 상세하게 명세한 문서,

 

SDS(Software Design Standards)

: 소프트웨어의 전반적인 설계에 대해 상세하게 명세한 문서

 

SCS(Software Code Standards)

: 소프트웨어를 코딩하기 위해 사용되는 프로그래밍 언어, 방법, 룰, 그리고 툴을 정의한 문서

 


📁추가 내용

 

✨Keyword
클라이언트, 서버, RESTful, OSI 7계층, TCP/IP 4계층별 설명, 보안, DBMS(데이터베이스 관리 시스템)
클러스터링, 병렬컴퓨팅, 프로토콜, HTTP, HTTPS, HTML

 

 

클라이언트-서버

클라이언트

: 네트워크를 통해 서버에 요청을 하고 서비스를 제공받는 주체

(ex. 모바일에서 음식 배달 서비스 요청, 데스크탑에서 게임 웹사이트에서 게임 다운로드 버튼 클릭)

 

서버

: 네트워크를 통해 클라이언트의 요청을 받고 서비스를 제공하는 주체는 모두 서버


서버 종류:

- 클라우드 서버

- 웹 서버

- 데이터베이스 서버

- 어플리케이션 서버

- 프록시 서버


클러스터링-병렬컴퓨팅

 

클러스터링

: 네트워크에 접속된 다수의 컴퓨터들을 통합하여 하나의 거대한 병렬 컴퓨팅 환경을 구축하는 기법

(꼭 하나의 작업만을 위한 것은 아님)

 

병렬 컴퓨팅 

: 하나의 큰 문제를 여러 컴퓨터가 나누어 해결하는 방법, 2개 이상의 CPU가 각자 맡은 역할을 수행하는 개념

(꼭 같은 시스템을 사용하는 것은 아님)

 


Domain-DNS

 

Domain(도메인)

: 네트워크 상에서 호스트를 가리키는 이름

(ex. www.google.com,  www.naver.com)

 

DNS(Domain Name System)

: 컴퓨터가 읽기 편한 구조인 IP주소를 도메인 이름으로 바꿔주는 시스템을 의미

(원래 192.xxx.xxx.xxx ==> www.naver.com, www.google.com 이런 도메인 이름으로 바꿔주는 시스템)

 


RESTful

: HTTP와 URI 기반으로 자원에 접근할 수 있도록 제공하는 아키텍처를 지향하는 웹서비스

 

'특강' 카테고리의 다른 글

웹 심화 이해  (0) 2024.08.14
웹 기본 이해  (0) 2024.08.12
CS 특강(소프트웨어 설계)  (0) 2024.07.26
CS 특강(컴퓨터 구조와 운영체계)  (0) 2024.07.25
Git 기초_git 초기 설정  (0) 2024.07.12

 

📌프로그래밍 기본

🔸컴파일러
고급 프로그래밍 언어로 작성된 소스코드를 기계어로 번역 및 실행하기 위한 프로그램
🥕 특징: 소스 코드 전체를 분석하고 그 다음 기계어로 번역 후 실행함

🔸인터프리터
컴파일러와 마찬가지로 고급 프로그래밍 언어로 작성된 소스코드를 기계어로 번역 및 실행하기 위한 프로그램
🥕 컴파일러와 차이점: 한 문장씩 소스코드를 번역하고 실행한다는

🔸메모리 영역
작업을 효율적으로 하기 위해 다양한 영역으로 나뉨 (이러한 영역들은 운영체제에 의해 관리)
코드 영역 : 프로그램을 실행하기 위해 명령어들이 저장되는 공간

데이터 영역 : static(정적) 변수, 전역 변수와 같은 데이터들이 이곳에 저장, 프로그램 시작과 함께 할당되고 프로그램이 종료될 때 소멸

Heap 힙 영역 : 동적 메모리 할당을 위한 곳으로 프로그래머가 직접 사용 및 관리해야하는 메모리 영역 (큐와 같은 자료구조가 여기서 생성됨)

Stack 스택 영역 : 정적 메모리 할당을 위한 곳으로 함수, 지역변수, 매개변수 등을 사용하기 위한 공간 (재귀함수를 사용할 떄 이곳을 사용함)

 

📌OOP (Object-Oriented Programming, 객체지향 프로그래밍) (중요도🌟)

🔸객체 지향
추상화하고자 하는 객체의 모습을 가상의 공간에 구체화하며 설계해나가는 것

🔸객체
현실세계에 있는 어떤 대상을 추상화한 것을 의미

🔸클래스
객체를 생성하기 위해 어떤 속성과 방법의 집합을 추상화하여 표현한 것을 의미
클래스 안에는 함수, 변수, 클래스 안에 또 클래스 만들 수 있음
클래스 안에 있는 멤버함수와 변수에 접근하기 위해서는 반드시 객체를 이용해야 함


🌟반드시 알아야 되는 개념🌟
🥕상속
다른 클래스의 기능을 사용하고 싶다면 상속을 받아서 부모클래스와 자식클래스의 관계를 만들어주면 됨
🥕오버라이딩(덮어쓴다, 재정의한다)
상속받은 클래스에서 어떤 기능을 재정의하는 것을 의미
부모클래스에서 'get()'이라는 함수가 있는데 이름을 똑같이 자식 클래스에서 'get()'이라는 함수를 만들고 그 기능을 다시 정의
🥕오버로딩(덮어서 불러온다)
연산자 오버로딩, 메소드 오버로딩, 함수 오버로딩 등 다양하게 있지만 일단 파이썬에서는 함수오버로딩은 없다고 생각하면 됨
일반적으로 오버로딩이라고 하면 함수의 이름은 같으나 매개변수를 다르게 설정하여 사용 목적에 따라 다르게 불러오는 것을 의미

 

 

📌소프트웨어 개발 방법론

🔸폭포수 방법론
하향식 방법으로 가장 오래된 개발 방법   ’계획 → 설계 → 개발 → 시험 → 유지보수’
순차적으로 진행하며 SDLC(소프트웨어 개발 생명 주기)가 굉장히 김
단점: 매우 큰 규모의 프로젝트에 적합하며 이미 진행된 작업에 대해서는 변경 및 수정이 어려움


🔸애자일 방법론
반복적이고 점진적으로 개발하는 방법    '계획 - 설계 - 개발 - 시험 -유지보수'
이해관계자의 피드백을 빠르게 반영할 수 있지만 개발 계획을 세우기 어려움
🥕 변화가 빠른 산업군에서는 효과적
🥕 절차와 도구보다 고객과의 소통에 초점을 맞춤


💡 개발에서는 ’계획 → 설계 → 개발 → 시험 → 유지보수’ 중 계획이 중요함

 

 

📌디자인 패턴

🔸 디자인 패턴
소프트웨어를 설계 및 구현할 때 어떠한 공통된 구조를 띄는 형태

🔸 MTV
python기반의 웹 구현을 위한 프레임워크인 Django(장고)가 MTV 디자인 패턴을 지향
(백엔드를 이 패턴으로 구현하게 됨)
M : model(모델)을 의미하며 DB에 데이터를 적재하고 테이블 정의를 담당
T : Template(템플릿)을 의미하며 사용자에게 보여지는 화면을 의미
V : View(뷰)를 의미하며 요청에 따라 필요한 로직을 수행하는 역할을 담당


💡 아키텍처, 소프트웨어 패턴도 있음

 

 

📌형상관리

🔸 형상관리
소프트웨어의 변경사항을 추적하고 통제하기위한 작업을 의미

🔸 형상관리를 위한 툴
- git : github, gitlab

 

 

📌V&V (Verification & Validation) 검증과 확인

🔸 V&V
소프트웨어의 완성도 및 신뢰도를 검증 및 확인하는 작업
소프트웨어를 개발하면 우리의 의도대로 동작하는지 또는 충분한 성능을 나타내는지, 보안 이슈는 없는지 등 다양한 방면에서 소프트웨어의 완성도를 검증하는 작업

🥕 Verification (검증)
개발자 중심에서 제품이 ‘요구사항’에 만족하게 구현되었는지에 대해 검증하는 작업
🥕 Validation (확인)
사용자 중심에서 제품이 ‘사용감’에 만족하게 구현되었는지에 대해 확인하는 작업
🥕 Test (시험)

☘️[Test 단위]☘️

단위 - 통합 - 시스템 - 인수 테스트를 순차적으로 실행
- Unit Test(단위 시험): 가장 작은 단위의 test로 함수, 모듈 등 제일 작은 단위의 기능을 test
- Integration Test(통합 시험): 함수간, 클래스간, 모듈 간 등 어떤 기능이 합쳐져서 잘 동작하는지 test
- System Test(시스템 시험): 실제 적용하려는 하드웨어나 어떤 시스템에 개발한 소프트웨어를 탑재한 뒤 test
- Acceptance Test(인수 시험): 출시 및 배포전 최종 test

☘️[Test 종류]☘️
정적 Test : 소프트웨어를 구동하지 않고 test 하는 방법
- 동료 검토
- 코드 리뷰
- 기술 검토

동적 Test : 소프트웨어를 구동하며 test 하는 방법
- Black Box Test (블랙박스테스트) : 소프트웨어의 작동 원리를 모르는 상태에서 진행하는 test 결과물이 요구사항과 일치하는지 알아보기 위한 test
- White Box Test(화이트박스테스트) : 소프트웨어의 작동 원리를 보며 진행하는 test 소프트웨어가 의도한대로 동작하는지 알아보기 위한 test

 

 

 


💡추가내용💡

 

📌 자료구조

🔸 스택
선입후출 방식의 자료구조, 선입후출이란 먼저 들어온 데이터가 나중에 처리되는 것을 의미
히스토리 기능을 구현할 때 유용하고 DFS(깊이우선탐색), 후위연산, 백트래킹, 유효성 검사 등 다양한 곳에 사용됨

🔸
선입선출 방식의 자료구조
작업스케줄링 기능을 구현하거나 캐시, BFS(넓이우선탐색), 티켓 시스템 등 다양한 곳에서 사용


🔸 비선형 구조
자료들 간에 관계가 1:N로 나열되어 있는 것을 의미
그래프
노드와 간선으로 이루어진 자료 구조를 의미
트리
그래프의 한 종류이며 나무의 가지나 뿌리가 뻗어나는 모양과 비슷

트리인데 자식이 2개만 있다? 이진 트리
🥕완전이진트리: 이진트리에서 거의 모든 노드가 채워져 있으며, 가능한 한 제일 왼쪽부터 채워져 있는 이진트리 구조

🥕트리의 특징으로는 일반 그래프와는 다르게 사이클이 존재하지 않으며 부모노드와 자식노드를 통해 구조를 표현

'특강' 카테고리의 다른 글

웹 심화 이해  (0) 2024.08.14
웹 기본 이해  (0) 2024.08.12
기술면접_CS, SQL 내용정리  (0) 2024.08.08
CS 특강(컴퓨터 구조와 운영체계)  (0) 2024.07.25
Git 기초_git 초기 설정  (0) 2024.07.12

 

📌 하드웨어 기본 

메인보드: 컴퓨터의 부품 및 장치들을 설치하여 연동할 수 있게끔하는 부분. 즉, 컴퓨터의 수많은 부품들을 하나로 연결해줌

🌟CPU(중앙처리장치): 컴퓨터의 두뇌, 명령어 해석하여 연산을 수행하는 역할을 하며 컴퓨터의 성능에 가장 크게 관여 (동시에 실행 못함)
- 클럭: CPU의 처리 속도를 나타내는 단위
- 오버클럭: 컴퓨터의 속도를 강제로 빠르게 하는 기술 (클럭의 잠재성을 끌어내기 위해 사용자가 임의로 끌어올리는 것)

🌟GPU(그래픽처리장치): 그래픽 연산을 하기 위해 병렬처리를 할 수 있도록 설계. 하나의 코어는 하나의 연산을 수행할 수 있는데, 이 수천 개의 코어가 동시에 연산작업을 하는 것이 병렬처리임. 연산이 어렵진 않지만 많은 양의 연산을 수행해야하기 때문에 적합함
(디지털 신호를 영상 신호로 바꾸어 모니터로 전송하는 장치 (근데 CPU도 가능하나 매우 느림) )

RAM(주기억장치): 컴퓨터의 수치, 자료, 명령 등을 기억하며 프로그램 및 운영체제가 실행되기 위해 위치되는 곳. (보조기억장치에서 업무를 적재하는 용도로 사용, 컴퓨터의 성능과 관련된 건 CPU)

HDD, SSD(보조기억장치):
- HDD: 비휘발성, 순차접근이 가능한 컴퓨터의 보조기억장치.
- SSD: 플래시 메모리로 구성됨. SSD는 HDD에 비해 데이터 입/출력 속도가 매우 빠름.

가상메모리: 주기억장치의 용량이 부족할 경우 보조기억장치를 주기억장치의 일부인 것처럼 사용 가능

입력장치: 사용자가 컴퓨터를 조작할 수 있게 해주는 모든 장치(키보드, 마이크)
출력장치: (모니터, 스피커, 프린터, 조명)

OS(운영체제): 사용자가 컴퓨터를 조작 및 제어하고 작업의 편의성을 제공하기 위한 '시스템 소프트웨어'

 

 

 


 

 

📌 반드시 알아야 되는 개념 (중요도 🌟🌟🌟)

프로세스: 실행중인 프로그램 의미 (실행하지 않은 건 그냥 프로그램이라고 부름)

프로세싱: 프로그램이 실행중인 것을 프로세싱중이라고 말함

🌟멀티테스킹: 하나의 시스템 또는 CPU가 여러 작업을 수행하는 것. 단, 동시에 처리가 되는 것은 아니고 시분할 방식을 통해 동시에 처리되는 것처럼 보이게 함 (하나의 CPU가 여러 작업을 빨리빨리 번갈아 가면서 수행함)
다수의 작업을 운영체제의 스케줄링에 의해 번갈아 가며 수행되도록 해주는 것을 의미
즉, 운영체제가 다수의 작업을 스케줄링하여 우리가 느끼지 못하는 시간마다 작업을 번갈아가며 수행하여 우리 눈에는 동시에 수행되는 것처럼 보이게 함.
멀티 태스킹의 스캐줄링 방식
- 멀티 프로그래밍 방식
- 시분할 방식
- 실시간 시스템 방식

🌟멀티프로세싱: 두 개 이상의 프로세서가 동시에 실행되는 것(여러개의 CPU가 여러 작업을 동시에 수행함)
프로세서와 프로세스의 개념
프로세서는 CPU나 Microprocessor라는 하드웨어를 의미
프로세스는 실제 메모리에 적재되어 프로세서에 의해 실행되고 있는 프로그램을 의미
보통 하나의 프로세서(CPU)가 하나의 작업을 맡지만 멀티 프로세싱은 다수의 프로세서가 다수의 작업을 함께 처리


🌟멀티스레드: 하나의 프로세스가 여러 작업 단위를 가지며 작업을 수행하는 것
(크롬 브라우저 하나 켜놓고 여러 개의 사이트를 틀어놓는 것)
프로세스와 스레드 비교
프로세스를 생성하는 비용보다 스레드를 생성하는 비용이 더 저렴하기 때문에 프로세스에 다수의 스레드를 생성하여 병렬처리하는 것
+) 프로세스는 데이터, 힙, 스택 영역을 서로 공유하지 않지만 스레드는 스택 영역을 제외한 데이터, 힙 영역을 서로 공유하기 때문에 메모리 부분에서도 훨씬 효율적임.

🌟스케줄링: 작업에 필요한 자원을 언제 누가 어떻게 사용할지 결정해주는 것

커널: 하드웨어와 응용 프로그램 사이에서 인터페이스 역할 수행하기 위한 핵심 부분

터미널: 사용자와 컴퓨터 간에 상호작용을 제공하는 인터페이스

CUI: 사용자가 문자를 통해 명령을 수행하는 것을 의미

GUI: 사용자가 그래픽을 통해 명령을 수행하는 것을 의미

'특강' 카테고리의 다른 글

웹 심화 이해  (0) 2024.08.14
웹 기본 이해  (0) 2024.08.12
기술면접_CS, SQL 내용정리  (0) 2024.08.08
CS 특강(소프트웨어 설계)  (0) 2024.07.26
Git 기초_git 초기 설정  (0) 2024.07.12

+ Recent posts