CS 14

[CS] 백엔드 기술 면접 질문(Spring 위주)

1. WAS와 WS의 차이 - WAS(Web Application Server): 비즈니스 로직을 넣을 수 있음(Ex-Tomcat, PHP, ASP, .Net 등) - WS(Web Server): 비즈니스 로직을 넣을 수 없음(Ex-Nginx, Apache 등) 2. 많은 트래픽이 발생할 경우 대처하는 방법 - 스케일 업(Scale Up): 서버에 CPU나 RAM 등을 추가하여 서버의 하드웨어 스펙을 향상시키는 방법 - 스케일 아웃(Scale Out): 서버를 여러 대 추가하여 시스템을 증가시키는 방법 3. CORS 란? 도메인이 다른 2개의 사이트가 데이터를 주고 받을 때 발생하는 문제 서버 내에서 요청이 허락된 도메인에만 데이터를 주기 위해서인데, 요청을 허락하기 위해서는 Access-Control-..

CS/공부 2022.03.23

[CS] 개발자 기초 질문 20선

1. 1바이트는 몇 비트? 8 2. 1픽셀은 몇바이트? 1 3. 2^10은 얼마? 1024(컴퓨터는 2진수 사용하므로, 2^10가 10bits, 2를 10번 곱한 값이기 때문에) 4. 스택과 큐의 차이? 스택(LIFO)로 가장 나중에 입력된 데이터가 가장 먼저 출력되는 자료구조 큐(FIFO)로 가장 먼저 입력된 데이터가 가장 먼저 출력되는 자료 구조 5. Binary Tree의 시간 복잡도는? 평균 O(logN), 최악의 경우 O(N) 6. DNS의 역할? 도메인 이름을 호스트의 네트워크 주소(=IP주소)로 바꾸거나 그 반대로 변환 7. HTTPS와 HTTP의 차이는? HTTP가 안전하지 않은 반면, HTTPS는 TLS/SSL 인증서를 사용하여 인증을 보장하는 보안 프로토콜 8. 스마트폰 카메라 해상도는..

CS/공부 2021.12.08

MySQL과 MySQL2의 차이점

MySQL과 MySQL2의 차이점은 바로 promise다. mysql은 콜백 기반이기 때문에 promise를 사용하지 못하고 npm에 있는 promise-mysql 모듈을 따로 설치해서 사용해야 한다. 하지만 mysql2는 promise를 지원하기 때문에 다른 모듈을 설치하지 않고 사용이 가능하다. promise - promise로 구현된 비동기 처리 함수는 콜백을 예측 가능한 패턴으로 사용하도록 도와준다. 순차적이지 않은 비동기함수의 실행순서를 제어할 수 있게 도와주고 콜백 패턴에 비해 가독성이 좋고 반환된 결과물을 사용하기 편하게 도와준다. promise의 세 가지 상태 - pending: new Promise로 Promise가 생성된 직후부터 resolve나 reject가 호출되기 전까지의 순간 -..

DFS와 BFS

DFS는 스택 자료구조를 이용하며 구체적인 동작 과정은 1. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다 3. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다. BFS는 선입선출 방식인 큐 자료구조를 이용하는 것이 정석이며 구체적인 동작 방식은 1. 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다. 2. 큐에서 노드를 꺼내 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문 처리를 한다. 3. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다.

CS/알고리즘 2021.02.26

스택과 큐의 차이점

스택 - 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조로 가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조이다. 스택은 LIFO(Last In First Out - 마지막에 넣은 데이터를 가장 먼저 추출하는 데이터 관리 정책) 방식을 따른다. push(): 데이터를 스택에 넣기 pop(): 데이터를 스택에서 꺼내기 장점 - 구조가 단순해서 구현이 쉽다. - 데이터 저장/읽기 속도가 빠르다. 단점 - 데이터 최대 개수를 미리 정해놔야 한다. -> 저장 공간의 낭비가 발생할 수 있다. -> 미리 최대 개수만큼 저장 공간을 확보해야 한다. 코드로 구현(파이썬) stack_list = [] def push(data): stack_list.append(data) def pop(): data = st..

CS/자료구조 2021.01.24

Ch9. Transaction

이번 마지막 챕터에서는 트랜잭션에 대해서 배웠다 트랜잭션은 DBMS에서 데이터를 다루는 논리적인 작업의 단위인데 하나의 트랜잭션은 여러 개의 오퍼레이션으로 구성되어 있고 그 오퍼레이션은 하나의 논리적인 작업의 단위가 된다 DBMS에서 트랜잭션을 정의하는 이유는 데이터베이스에서 데이터를 다루는 작업 중 장애가 발생할 때 데이터를 복구하는 작업의 단위로 사용하기 위해서다 트랜잭션은 전체 수행되거나 전체 수행되지 않아야 한다(all or nothing) DBMS에는 동시성 제어와 회복이라는 기능이 있다 동시성 제어 - 동시에 수행되는 트랜잭션들이 데이터베이스에 미치는 영향은 이들을 순차적으로 수행했을 때 데이터베이스에 미치는 영향과 동일해야 하는 것 -> 그래서 다수의 사용자가 데이터베이스에 동시에 접근할 수..

Ch8. Indexing

챕터 8에서는 인덱싱에 관해서 배웠다 인덱싱은 원하는 데이터를 접근하는 속도를 높이기 위해 사용되는데 인덱스가 무엇인지 알기 위해서 서치 키가 무엇인지 알아야 한다(서치 키 - 파일에서 레코드를 찾기 위해 사용되는 속성 또는 집합) 인덱스 파일은 인덱스 엔트리라는 레코드로 구성된다 인덱싱에는 두 가지 종류가 있는데 1. Ordered index - 정렬된 순서로 서치 키를 저장하고 각 서치 키를 그 서치 키를 가지고 있는 레코드와 연결한다 ㅇ primary index(clustering index) - 순차적으로 정렬된 파일의 순서를 정하는 기준이 되는 속성을 서치 키로 사용하는 인덱스 ㅇ secondary index(non-clustering index) - 키의 순서가 레코드 순서와 상관없다 ㅇ de..

Ch7. Normalization

이번 챕터에서는 정규화에 대해서 배웠는데 정규화의 의미, 이상 현상이 무엇인지, 함수 종속이 무엇을 의미하는지, 정규화 과정에 대해서 배웠다 정규화는 하나의 릴레이션에 하나의 의미만 존재할 수 있도록 릴레이션을 분해해가는 과정인데 이 과정에서 데이터 중복이 있을 때 이상 현상이 발생할 수 있다 이런 데이터의 중복을 피하기 위해 우리는 스키마를 분해해서 정규화를 하게 된다 정규화를 하면 자료 저장 공간 최소화, 데이터베이스 내 데이터 불일치 되는 위험 요소 최소화하므로 사용하기 좋은 데이터베이스 스키마 설계가 된다 이상 현상은 릴레이션의 설계가 잘못되어 불필요한 데이터 중복이 발생하고 데이터 중복이 릴레이션을 조작할 때 문제를 발생시키는 것인데 갱신 이상, 삽입 이상, 삭제 이상이 있다 함수 종속은 속성 ..

Ch6. Entity-Relationship Model

챕터 7은 개체-관계 모델(E-R 모델)에 배우는데 첫 번째 강의 개체, 관계, 속성에 대해 배웠다 개체는 다른 객체와 구별되어 존재하는 하나의 객체이고 개체들은 속성을 갖고 있다 개체 집합은 같은 특성을 가지고 있는 같은 타입의 개체들의 집합이고 관계 집합은 관계(각 개체들의 순서쌍)의 집합이다 관계 차수는 관계 집합의 관계에 참여하는 개체 집합의 수이다 속성은 타입이 있는데 단순 속성 - 더 이상 나누어지지 않는 속성 복합 속성 - 더 작은 다른 속성으로 나누어질 수 있다->사용하면 일부만을 참조할 때 좋고 모델링을 명확하게 할 수 있다 단일 값 속성 - 특정 개체에 대해서 하나의 값을 가지는 속성 다중 값 속성 - 여러 개의 값을 가질 수 있는 속성 유도(derived) 속성 - 저장되지 않고 필요..

Ch5. Advanced SQL

챕터5에서는 데이터베이스 프로그래밍 언어를 사용해서 데이터베이스에 접근하는 방법이 필요한지에 대해 알아봤고 JDBC 프로그래밍에 대해 배워봤다 먼저 첫 강의에서는 프로그래밍 언어로 데이터베이스에 접근하는 방법에 대해 공부했는데 범용 프로그래밍 언어로 데이터베이스에 접근하는 이유는 SQL은 데이터를 어떻게 가져오는 지에 대한 기술이 없기 때문이다. SQL로 다 표현할 수 없는 질의를 작성하기 위해 더 강력한 프로그래밍 언어에 SQL을 내장시켜야 한다 데이터베이스 서버에 접근하는 방법은 2가지로 1. Dynamic SQL - 프로그래밍 언어를 직접 사용하기 때문에 직접 JAVA API를 호출할 수 있고 따로 컴파일러가 필요하지 않다 2. Embedded SQL - 데이터베이스 서버와 소통할 수 있는 수단을 ..