Node.js

  • --node.js란--구글의 V8이라는 JS 엔진으로 만들어져 있고 싱글 스레드가 기반이다. / 논 블로킹
  • Tomcat, JBoss 등과 같은 일반적 웹서버는 멀티 스레드가 기반이다.
  • JS를 활용하여 고성능의 비동기 IO을 지원하는 네트워크 어플리케이션 개발 플랫폼
  • --논 블로킹 IO--호출된 함수에서 I/O 작업 등을 요청 했을 경우 처리여부와 관계없이 바로 다음 작업이 가능하다.
  • 직접 제어할 수 없는 작업이 완료되기 전에 제어권을 넘겨주는 경우
  • --Node.js 구조--바인딩 (socket, http, etc)
    사진 출처 - https://sjh836.tistory.com/149
  • V8 Engine / libuv (이벤트 루프, 논 블로킹 모델은 전부 여기서)
  • 내장 라이브러리
  • --Node.js--protocol://host(domain):port/path?query string 형식
  • query string을 바꿔서 전달하면 페이지를 동적으로 가져올 수 있다.
  • ${} 사용가능

접근 제어자

Public - 모든 패키지에서 접근이 가능하다.

Private - 자신을 포함한 패키지에서만 접근이 가능하다, 정의된 해당 클래스에서만 접근이 가능하도록 접근 범위를 제한한다.

protected - 클래스가 정의되어 있는 해당 패키지 내 그리고 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근이 가능하다.

오버라이딩 vs 오버로딩

오버라이딩 : 상위 클래스의 메소드를 재정의 하는 것

오버로딩 : 같은 클래스 내에서 동일한 메소드 이름을 가지지만 매게변수 타입, 갯수가 다르게 구현할 수 있는 것

MVC1 vs MVC2

MVC1 : Jsp가 controller, view의 가능을 모두 담당한다.

MVC2 : 웹 브라우저 요청을 컨트롤러에서 처리하고 요청 로직을 모델로 보내서 결과를 view가 응답한다.

RDBMS vs NoSQL

RDBMS : 릴레이션을 통해 데이터를 저장하여 데이터 구조를 보장하고 중복을 피한다.

NoSQL : 자유로운 형태의 데이터를 저장한다. 수평적 확장, 분산처리지원

equals() vs ==

equals()는 대상의 내용 자체를 비교

== 은 주소값을 비교

String vs StringBuilder, StringBuffer

String : 불변

StringBuilder : 가변 타입 / Thread-safe X

StringBuffer : 가변 타입 / Thread-safe O / 멀티 스레드 환경

Thread-safe : 어떠한 동작이 여러 스레드로부터 동시에 이루어져도 프로그램 실행에 문제없음

Spring MVC 동작원리

1. 클라이언트의 요청을 DistpatcjerServler에 전달

2. 요청한 url에 맞는 controller 검색하여 HandlerMapping에 전달

3. HandlerMapping에서 해당 controller에 처리 요청

4. controller에서 처리 결과를 HandlerAdapter에서 ModelAndView 객체로 변환하여 DispatcherServlet에 전달

5. DispatcherServlet에서 전달받은 ModelAndView 객체를 이용하여 매핑되는 View를 검색

6. viewResolver에서 처리 결과를 view에 전달

7. 처리결과가 포함된 view를 DispatcherServlet에 전달

8. DispatcherServlet에서 최종 응답 결과를 클라이언트에게 출력

사진 출처 - https://gngsn.tistory.com/83

가비지 컬렉션

메모리 관리 기법중 하나로 Java, Go, Python 등에 들어가있다.

메모리 부족이나 누수로 인해 메모리가 부족해지면 자동으로 사용되는 것으로

동적으로 할당한 메모리 영역 중 필요 없게 된 영역을 제거함으로써 메모리 관리를 해준다.

- 프로그래머가 할당한 메모리 영역 전체를 완벽하게 관리하지 않아도 된다.
- 어떤 메모리를 해제해야하는지 결정할 때 사용되는 알고리즘에 의한 비용 필요

OSI 7계층

물리 계층

전기적, 기계적 신호를 주고받는 역할을 하는 계층
통신 케이블, 허브, 리피터

데이터 링크 계층

전송을 보장하기 위한 계층이다 CRC 오류제어
스위치, 브릿지, MAC

네트워크 계층

IP 주소를 제공하는 계층으로 라우팅을 해준다.
A, B, C, D 클래스 ex) A = 0 ~ 127
라우터, L3 스위치, IP 공유기 등

전송 계층

사용자들이 데이터를 주고 받을 수 있게하는 계층
TCP, UDP

세션 계층

양 끝단의 응용 프로세스가 통신을 관리하는 방법을 제공하는 계층
전이중 통신, 반이중 통신
RPC, socket

표현 계층

코드 간 번역을 담당하는 계층
응용프로그램 형식 ↔ 네트워크 형식
인코딩, 암호화 등 이 데이터가 Text인지 gif인지 jpg인지 구분하는 일도 한다.

응용 프로그램 계층

응용 프로세스와 직접적인 관계로 일반적인 응용 서비스를 수행한다.
사용자에게 직접적으로 보이는 부분이다
HTTP, FTP 등등

Sping, Spring Boot 차이점

Spring은 프로그래머가 환경설정하는 부분에 어려움이 있지만
Spring Boot는 이러한 부분을 자동적으로 해결해주었다.

Call by value

C언어에는 call by value만 존재한다.

함수 호출 시에 '값'을 넘겨준다.

Call by reference

메서드 호출 시에 사용되는 인자가 '값'이 아니고 주소를 넘겨줌으로 주소를 참조하여 데이터를 변경한다.

포인터?

'기술면접 준비 > CS' 카테고리의 다른 글

기술면접 준비(22.01.14)  (0) 2022.01.14

Get, Post 방식의 차이

  • --Get--길이의 제한이 있고 Post방식보다 상대적으로 전송 속도가 빠르다.무언가를 받아오기만 할 때 사용
  • 보안성이 떨어진다.
  • Client가 Server로 데이터를 전달 할 때 URL 주소 뒤에 "이름"과 "값"이 결합된 String 형태로 전달한다.
  • --Post--서버로 보내기 전 인코딩 후 서버에서 디코딩 작업을 한다.다양한 객체의 값도 전송이 가능하다.
  • Get보다 느리다.
  • 일정 크기 이상의 데이터를 보내야 할 때 사용한다.
  • --Get, Post 방식의 차이점--Post는 웹 브라우저가 웹 서버에 데이터를 '전달'하기 위해 사용Post는 Body안에서 보내진다. 데이터 위치 / Body
  • Get은 URL에 붙여서 보낸다. 데이터 위치 / Header
  • Get은 주로 웹 브라우저가 웹 서버에 데이터를 '요청'할 때 사용

쿠키와 세션

  • --Cookie--쿠키는 사용자가 별도로 요청하지 않아도 브라우저에서 서버로 요청 시에 Request Header에 쿠키 값을 넣어 요청한다.
  • 로컬에 저장되는 Key-Value 형태의 데이터
  • 해당 서버에서 사용자의 컴퓨터에 저장하는 기록 정보 파일
  • --Session--클라이언트마다 session-id를 부여한다.
  • 세션은 서버에 데이터를 저장한다.

웹의 동작 원리

  • --전체적인 동작 구조--Front|Back
    User   Client   WebServer   WAS   DB Server
      입력  Chrome 요청  Apach 데이터 처리 요청  Node.js 데이터 요청  MySQL
       출력 FireFox  반환 Netscape  처리 값 반환 Tomcat  데이터 반환 ORACLE
    1. 사용자가 입력
    2. Web Server에서 WAS로 데이터 처리 요청
    3. WAS에서 DB로 데이터 요청
    4. DB에서 WAS로 데이터 반환
    5. WAS에서 데이터를 처리
    6. WAS에서 Web Server로 데이터 처리 값 반환
    7. Web Server에서 Client로 정적 Page 전달
    8. 사용자에게 보여준다.

Restful API

  • --Restful이란--리소스 상태에 대한 표현을 요청자에게 전송Open API 대부분 Restful API
  • 이 정보 또는 표현은 HTTP, Json, HTML, XLT, XML 또는 일반 텍스트를 통해 전달
  • 자원을 URL로 표기하고 그 자원 상태를 주고받는 아키텍처
  • --Restful API 구성--
    1. 자원(Resource) - URL자원 구별은 HTTP URL
    2. 클라이언트는 URL을 이용해 자원을 지정, 해당 자원의 상태 조작을 Server에 요청
    3. 모든 자원에는 고유한 ID가 존재, 이 자원은 Server에 존재
    4. 행위(Verb) - HTTP METHODGet - Select - 리소스 조회Delete - Delete - 리소스 삭제
    5. Patch - Update - 리소스 '일부'를 수정
    6. Put - Update - 리소스 수정
    7. Post - Create - 리소스 생성
    8. 표현(Representaions) - HTTP Message Pay LoadRest에서 하나의 자원은 Json, XML ,TEXT, RSS 등 여러 형태로 나타날 수 있다.
    9. Json, XML이 일반적
    10. 클라이언트가 조작을 요청하면 Server는 응답
  • --설계 규칙--Method로 자원에 대한 행위를 표현URL 마지막에 / 사용 금지URI 경로에는 소문자 사용
  • 파일 확장자는 URI에 포함하지 않음
  • _ 대신 - 사용
  • / 로 계층 관계를 나타낸다.
  • URL로 자원을 표현한다.
  • --연결--
  • 클라이언트  Restful API / Node.js  Database

SDLC

계획 - 요구분석 - 설계 - 구현 - 테스트 - 유지보수

프로세스 vs 스레드

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위

스레드는 할당 받은 자원을 이용하는 실행의 단위이며 프로세스 내에 여러개 발생가능

교착상태

교착상태란 둘 이상의 프로세스들이 자원을 점유한 상태에서

또 다른 프로세스가 점유하고 있는 자원을 요구하며 기다리는 현상이다

교착상태에 필요한 조건은 상호배제, 점유와 대기, 비선점, 환형대기이다.
  • 교착상태의 해결법발견 - 해당 프로세스 발견무시
  • 회복기법 - 프로세스 종료, 자원 선점
  • 회피기법 - 은행원 알고리즘

뮤텍스(상호 배제)

임계구역을 가진 스레드들의 실행시간이 서로 곂치지 않고 단독으로 실행되게 하는 기술

세마포어

멀티 프로그래밍 환경에서 공유된 자원에 대한 접근을 제한하는 방법 사용하는

스레드, 프로세스 수를 공통 관리 하나의 값을 이용해서 상호배제
 

컨텍스트 스위칭이란?

멀티 프로세스 환경에 CPU가 어떤 하나의 프로세스를 실행하는 상태에서

인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행 되어야 할 때

기존 프로세스의 상태 / 레지스터 값을 저장하고 다음 프로세스를 실행하도록 교체

 

'기술면접 준비 > CS' 카테고리의 다른 글

기술면접 준비(22.01.29)  (0) 2022.01.29

+ Recent posts