New World

[개념 정리 #12] 나중에 다시 정리할 것들 본문

Self-Study/Study

[개념 정리 #12] 나중에 다시 정리할 것들

hyeovi 2022. 10. 27. 23:02
728x90
반응형

패스워드 암호화 방법

- 단순 텍스트
- 단방향 해시함수의 다이제스트
- 솔팅
- 키 스트레칭

 

대칭키와 비대칭키 차이

대칭키 암호화 비대칭키 암호화
비밀키 암호 공개키 암호
양측이 동일한 키를 가지고 있으며, 암호화와 해제에 동일한 키를 사용하는 방식 공개키는 외부에 공개되어있고, 비밀키는 내부적으로 가지고 있고 서로 각각의 키로 암호화하거나 해제할 수 있는 방식
비밀키가 노출되며 연산성능은 덜 필요해 상대적으로 빠르다.
비교적 안전하며, 대신 연산 성능이 떨어지는 편

 

web server와 was차이

web server

HTTP 프로토콜을 기반으로 하여 웹브라우저의 요청을 서비스하는 기능

ex. apach server, Nginx

was

DB조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 어플리케이션 서버

ex. 톰캣, jeus

 

? Connection Pool의 최대치가 1000개, WAS가 5개라고 해보자. 각 WAS는 200개씩의 Connection을 가지는지? 그렇다면 6번째 WAS가 추가된다면 6번째에는 아무런 Connection도 할당되지 않는지?

 

? Web Server와 WAS의 차이점, 각각 설명해주세요.

 

Express란?

Node JS 웹 어플리케이션 프레임워크로 Rest API를 만들기에 유용한 여러 도구들이 포함

 

Node JS란?

자바스크립트를 백엔드에서도 사용할 수 있도록 해주는 실행환경(구글에서 개발한 v8 엔진활용)

싱글스레드 비동기 기반이라 성능이 좋으며 소켓 I/O가 좋으며 쉽게 코딩할 수 있다.

 

CDN 이란?

대용량 또는 사용자의 잦은 요청이 있는 컨텐츠를 Cache 서버에 분산 배치하여 컨텐츠의 전송 중 발생하는 트래픽 집중과 병목현상 및 데이터 손실을 해결하기 위해 등장한 컨텐츠 전송기술

작동원리
 - 웹 브라우저가 실행되는 PC나 모바일 기기의 사용자 에이전트가 특정 주소에 접근하여 HTML, 이미지, CSS, JS 파일 등 렌더링하는데 필요한 컨텐츠를 서버로부터 요청
 - DNS는 컨텐츠에 대한 각 요청이 발생하면 End User와 가장 가까운 위치에 최적으로 배치된 CDN 서버에 End User가 맵핑되고, 해당 서버는 요청된 파일의 캐싱된 버전으로 응답
 - 서버가 파일을 찾는데 실패하는 경우 CDN 플랫폼의 다른 서버에서 콘텐츠를 찾은 다음 End User에게 응답하며 향후 요청에 응답할 수 있도록 patch에 새로운 콘텐츠를 저장

 

HTTP 1.1, 2방식 차이

HTTP 1.1 HTTP 2
Connection 당 하나의 요청을 처리하도록 설계 HTTP가 유선상에서 표현방법을 대처하는 것
동시 전송 불가능하고 요청과 응답이 순차적으로 이뤄짐 성능에 초점
HTTP문서안에 포함된 다수의 리소스를 처리하려면 요청할 리소스 개수에 비례해서 대기시간이 길어짐 최종 사용자 대기시간, 네트워크 및 서버 리소스 활용 인식
하나는 브라우저에서 웹 사이트로의 단일 연결을 허용

 

람다식이란 무엇인가?

식별자 없이 실행이 가능한 함수, 함수를 따로 만들지 않고 코드한줄에 함수를 써서 호출하는 방식이다. 자바 8부터 지원하고 코드가 간결해 가독성이 좋다는 것이 장점입니다. 그러나 람다식으로 만든 함수는 재사용이 불가하고 디버깅이 까다롭다는 단점이 있습니다.

자바 8부터 지원하는 것 : 람다식, Optional, Stream

 

? Java에서 람다가 무엇인지 말씀해주세요.


자바스크립트란? 스크립트언어란?

스크립트 언어

  • 소스코드를 컴파일 하지 않고도 실행할 수 있는 프로그래밍 언어
  • C와 자바는 개발자가 작성한 코드를 컴파일러를 통해 기계어로 변경해야하지만 스크립트 언어는 컴파일 과정 없이 내장된 번역기에 의해 실행된다.


자바스크립트

  • 웹 브라우저에서 실행하는 스크립트 언어를 기술하며 작고 빠르기 때문에 동적인 웹 문서를 꾸밀 때 널리 사용
  • 객체 기반의 언어, 상속과 클래스 개념은 없고 HTML에 연산제어 등 프로그래밍적 요소가 추가

 

스크립트 언어와 컴파일 언어를 나열하고 차이점

스크립트 언어 컴파일 언어
PHP, Javascript, Python C, C++, Swift, Go
인터프리터라는 방식으로 한 라인 한 라인 기계어로 번역 컴파일 과정을 거쳐 기계어 코드로 번역
컴파일 에러라고 부르는 문법 오류를 사전에 방지하지 못하기 때문에 주의 사전에 검증, 최적화할 수 있다

 

? JQurey란? 특징은?

 

JQurey 셀렉터

$( ) 모양을 사용합니다.
 - # : 아이다
 - . : 클래스
 - [] : 속성
 - > : 자식, 후손

 

노드란?

크롬의 자바스크립트 실행환경에 기반을 둔 빠르고 확장성 있는 네트워크 어플리케이션을 만들기 위한 플랫폼. 이벤트 주도 방식과 논블럭킹 I/O방식을 사용하는데 가볍고 효율적이며 분산환경에서 실행되는 데이터 집약적인 실시간 어플리케이션에 적합하다

 

노드 특징

노드는 싱글스레드기반이고 I/O가 많은 작업에 유리하다는 특징이 있다. 멀티스레드 방식보다 쉽고 I/O작업이 많은 서버에 적합하다. 웹 서버가 내장되어 있고 JSON형식과 호환이 쉬운 것이 장점입니다. 싱글스레드라 CPU코어 하나만 사용하고 CPU작업이 많은 서버로는 부적절하다. 하나의 스레드가 멈추지 못하게 해야하는 단점이 있다.

 

Ajax란?

자바스크립트 라이브러리 중 하나입니다. 브라우저가 가지고 있는 XMLhttpRequest객체를 이용해서 전체 페이지를 고치지 않고도 일부만을 위한 데이터를 로드하는 기법입니다. 한마디로 자바스크립트를 사용한 비동기 통신으로 클라이언트와 서버간에 XML데이터를 주고 받는 기술입니다.

 

콜백 함수란?

무엇인가 일을 다른 객체에게 시키고 그일이 끝나는 것을 기다리는 것이 아니라 그 객체가 나를 다시 부를 때까지 내 할일을 하고 있는 것 입니다.

 

RDBMS와 NOSQL 차이

NoSQL의 차별화된 특징은 RDBMS와 다르게 최초 테이블 생성 시 데이터간의 관계를 정의하지 않는다. RDBMS가 가지고 있던 복잡도와 용량의 한계를 극복하며 페타바이트 이상 급의 데이터를 저장한다. NoSQL은 Scale out을 통한 노드 확장을 지원한다. 하나의 고성능 머신이 데이터 서버가 되어 처리하는 scale up방식의 RDBMS와 달리 여러개의 일반 서버를 연결하여 데이터를 분산하고 저장하게 된다. 이를 통해 안정성이 확보되는 장점이 있다.

 

? RDBMS vs NOSQL에 대해서 설명해주세요.

RDBMS는 데이터베이스를 이루는 객체들의 릴레이션을 통해서 데이터를 저장하는 데이터베이스이다. SQL을 사용해 데이터의 저장, 질의, 수정, 삭제를 할 수 있으며 데이터를 효율적으로 보관하는 것을 목적으로 하고 구조화가 굉장히 중요하다.

장점으로는 명확한 데이터 구조를 보장하고, 중복을 피할 수 있다.

NOSQL은 RDBMS에 비해 자유로운 형태로 데이터를 저장한다. 수평확장을 할 수 있고 분산처리를 지원한다. 다양한 형태의 NOSQL 데이터베이스가 있고, 대표적으로 key-value store, bigtable, dynamo, document db, graph db 등이 있다.

둘은 대체될 수 있는 것이 아니고, 각각 필요한 시점에 적절히 선택해서 사용해야 한다. 둘 다 같이쓰는 상호보완적인 존재가 될 수도 있다.


URI, URL, URN이란?

URI => URN, URN이 포함되어 있다
URI : 인터넷 상의 자원을 식별하기 위한 문자열 구성
URL : 인터넷 상의 자원의 위치를 나타냄
URN : 위치와 상관없이 리소스의 이름값을 이용해 접근하는 방식


try-with-resource란?

자동으로 자원을 해제해주는 기능으로 try에서 선언된 객체가 AutoCloseable을 구현하였다면 Java는 try구문이 종료될 때 객체의 close() 메소드를 호출해준다.

 

자바 버전7에 도입된 문법으로 이전 버전에서 하나 이상의 리소스를 사용할 경우 개발자가 임의로 finally 문에서 ~~.close()를 사용하여 자원 해제를 시켜줘야 했다. 만약 자원을 해제하지 않으면 프로그램이 오작동하여 소스 코드의 가독성을 해친다. try() 안에 사용할 리소스 객체를 명시적으로 선언하여 사용하면, try 블록 안에서 로직이 정상적으로 완료되었는지, 갑작스럽게 완료되었는지 여부와 관계 없이 JVM에서 자동으로 자원을 반납해주는 기능을 하도록 도입하였다.

 

추가로, 자바 9 버전에서는 try() 문 안에 명시적으로 객체 선언을 하기 보다는 try 문 바깥에서 객체 선언을 하고 생성된 인스턴스의 변수를 넣어줄 수 있도록 바뀌었다.

Java 7 : try(BufferedReader br = new BufferedReader())
Java 9 : try(br)

 

Synchronized(동기화)란?

여러 개의 쓰레드가 하나의 자원에 접근하려 할 때 주어진 순간에는 단 하나의 쓰레드만이 접근 가능하다. 둘 이상의 쓰레드가 공동의 자원(파일이나 메모리 블록)을 공유하는 경우, 순서를 잘 맞추어 다른 쓰레드가 자원을 사용하고 있는 동안 한 쓰레드가 절대 자원을 변경할 수 없도록 하는 방법이 쓰레드에 대한 동기화(synchronization)를 하는 것이다.


Synchronized(동기화)를 하기 위한 방법

  • synchronized 함수(메서드)를 만들어 사용합니다.
  • synchronized 블록(block) 사용합니다.

 

자바의 메모리 영역

  • 메서드 영역
    • static 변수, 전역 변수, 코드에서 사용되는 Class 정보 등이 할당
  • 스택(Stack)
    • 지역 변수, 함수(메서드) 등이 할당되는 LIFO(Last In First Out) 방식의 메모리
  • 힙(Heap)
    • new 연산자를 통한 동작할당된 객체들이 저장되며 가비지 컬렉션에 의해 메모리가 관리된다

 

데이터베이스(DataBase)

DCL, DDL, DML 이란?

  • DCL(Data Control Language) 데이터 제어어
    • 데이터베이스에 접근하거나 객체에 권한을 주는등의 역할을 하는 언어
    • (GRANT, REVOKE, COMMIT, ROLLBACK)
  • DDL(Data Definition Language) 데이터 정의어
    • 데이터베이스를 정의하는 언어
    • 데이터를 생성, 수정, 삭제하는 등의 데이터의 전체의 골격을 결정하는 역할을 하는 언어
    • (CREATE, ALTER, DROP, TRUNCATE)
  • DML(Data Manipulation Language) 데이터 조작어
    • 정의된 데이터베이스에 입력된 레코드를 조회하거나 수정하거나 삭제하는 등의 역할
    • (SELECT, INSERT, UPDATE, DELETE)

 

컨텍스트 스위칭에 대해 설명해보세요.

  • 한 Task가 끝날 때까지 기다리는 것이 아니라 여러 작업을 번갈아가며 실행해서 동시에 처리될 수 있도록 하는 방법
  • 인터럽트가 발생하면 현재 프로세스의 상태를 PCB에 저장하고 새로운 프로세스의 상태를 레지스터에 저장하는 방식으로 동작합니다. 이 때, CPU는 아무런 일을 하지 않으므로 잦은 컨텍스트 스위칭은 성능저하를 일으킬 수 있습니다.
  • 스레드와 프로세스의 동작방식이 약간 상이한데, 스레드는 캐시메모리나 PCB에 저장해야하는 내용이 적고, 비워야 하는 내용도 적기때문에 상대적으로 더 빠른 컨텍스트 스위칭이 일어날 수 있습니다.

 

멀티스레드 프로그래밍에 대해 설명해보세요.

하나의 프로세스에서 여러개의 스레드를 만들어 자원의 생성과 관리의 중복을 최소화하는 것

 

장점

  • 멀티 프로세스에 비해 메모리 자원소모가 줄어듭니다.
  • 힙 영역을 통해서 스레드간 통신이 가능해서 프로세스간 통신보다 간단합니다.
  • 스레드의 컨텍스트 스위칭은 프로세스의 컨텍스트 스위칭보다 빠릅니다.

단점

  • 힙 영역에 있는 자원을 사용할 때는 동기화를 해야합니다.
  • 동기화를 위해서 락을 과도하게 사용하면 성능이 저하될 수 있습니다.
  • 하나의 스레드가 비정상적으로 동작하면 다른 스레드도 종료될 수 있습니다.

 

교착상태와 기아상태의 해결방법

  교착상태(Deadlock) 기아상태(Starvation)
정의 서로 다른 프로세스가 서로 점유하고 있는 자원의 반납을 대기하고 있는 상태 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때, 특정 프로세스가 영원히 자원 할당이 되지 않는 경우입니다.
우선순위를 변경합니다.
발생조건
  • 상호 배제: 한 번에 한 프로세스만 해당 자원을 사용
  • 점유 대기: 할당된 자원을 가진 상태에서 다른 자원을 기다립니다.
  • 비선점: 다른 프로세스가 자원의 사용을 끝낼 때 까지 자원을 뺏을 수 없습니다.
  • 순환대기: 각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있습니다.
 
해결 방안
  • 예방: 4가지 조건 중 하나라도 만족되지 않도록 합니다.
  • 회피: 알고리즘을 데드락이 발생하지 않도록 합니다.
  • 회복: 교착상태가 발생할 때, 해결합니다.
  • 무시: 회복과정의 성능저하가 심하다면 그냥 무시합니다.
우선순위를 수시로 변경하거나, 오래 기다린 프로세스의 우선순위를 높여주거나, Queue를 사용

 

캐시의 지역성에 대해 설명해보세요.

시간 지역성은 최근에 접근한 데이터에 다시 접근하는 경향을 의미

공간 지역성은 최근 접근한 데이터의 주변 공간에 다시 접근하는 경향을 의미

 

프로세스 관련 용어를 설명해보세요.

PCB: 프로세스 제어 블록, 프로세스에 대한 중요한 정보를 저장

PC: 프로그램 카운터, 프로세스 실행을 위한 다음 명령의 주소를 표시

캐시메모리: 자주 사용되는 데이터가 저장되는 공간으로 CPU의 레지스터와 메모리 사이에서 병목 현상을 완화하는 장치

 

 

 

  • 데이터베이스 옵티마이저에 대해 설명해주세요
  • 풀스캔(FULL SCAN)에 대해 설명해주세요
  • JWT에 대해 설명해주세요, 사용하면 장점과 단점?
  • MSA란 무엇인가요? 장점과 단점을 말씀해주세요
  • 자바 reflection에 대해 설명해주세요

 

 

 

[참고]

https://haejun0317.tistory.com/m/238

https://junjangsee.github.io/2019/05/15/interview/interview/

https://velog.io/@juveloper/3%EB%85%84%EC%B0%A8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EC%9D%98-%EC%B2%AB-%EC%9D%B4%EC%A7%81-%ED%9B%84%EA%B8%B0

https://github.com/ksundong/backend-interview-question

https://github.com/JaeYeopHan/Interview_Question_for_Beginner

https://smjeon.dev/etc/interview-question/

반응형
Comments