728x90
반응형

1. 트랜젝션에 대해 설명해주세요.

트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미합니다.

트랜잭션의 주요 목적은 데이터의 무결성과 일관성을 보장하는 것입니다. 여러 작업을 단일 트랜잭션으로 그룹화하여 트랜잭션 내의 모든 작업이 성공적으로 실행되거나 아무 것도 실행되지 않도록 할 수 있습니다.

트랜잭션은 신뢰할 수 있고 일관된 데이터 처리를 보장하는 ACID속성을 따릅니다.

 

트랜잭션은 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)의 4가지 특징을 가집니다.

원자성은 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다는 것을 의미합니다.

일관성은 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것을 의미합니다.

독립성은 둘 이상 트랜잭션이 동시 실행시 어떤 트랜젝션이라도 다른 트랜잭션 연산에 끼어들 수 없다는 점을 의미합니다.

지속성은 트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 한다는 점입니다.

 

2. 인덱스란 무엇인가요?

인덱스이터베이스에서 검색 속도를 높이기 위해 사용되는 자료구조입니다. 인덱스를 생성하면 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장됩니다.

인덱스의 장점은 검색 속도를 향상시키는 것입니다. 하지만 인덱스 생성에 따른 추가적인 저장 공간이 필요하며, 삽입, 삭제, 수정 작업 시에도 인덱스를 업데이트해야 하므로 성능 저하가 발생할 수 있습니다. 

728x90
반응형
728x90
반응형

1. RDBMS와 NoSQL의 특징 및 차이

RDBMS와 NoSQL은 데이터 저장 방식이 다릅니다.

RDBMS는 관계형 데이터베이스로 데이터를 저장하고, 스키마가 정적입니다.

반면에 NoSQL유연한 스키마 구조를 갖습니다.

RDBMS수직 확장이 용이하고, NoSQL수평 확장이 용이합니다.

 


RDBMS의 장점으로는 데이터의 분류, 정렬, 탐색 속도가 비교적 빠르며,

SQL이라는 구조화된 질의를 통해 데이터를 다룰 수 있습니다. 작업의 완전성을 보장하며, 데이터의 UPDATE가 빠릅니다.

단점으로는 반드시 스키마 규격에 맞춰서 데이터를 다뤄야 하며데이터 처리에 대한 부하 발생시 처리가 어렵습니다.

NoSQL의 장점으로는 데이터간의 관계를 정의하지 않아 테이블간의 관계 (join)가 불필요하며, RDBMS보다 복잡도가 떨어져 대용량의 데이터를 저장·관리 할 수 있습니다. 테이블에 스키마가 정해져 있지 않아 데이터 저장이 비교적 자유롭습니다. 단점으로는 key값에 대한 입·출력만 지원되며, 스키마가 정해져 있지 않아 데이터에 대한 규격화가 되어있지 않습니다. DATA를 UPDATE하는데 비교적 느립니다.

 

<수직확장 vs 수평확장>

더보기

수직 확장(Scale-up)은 하드웨어의 성능을 향상시키는 것을 의미합니다. 예를 들어, CPU나 메모리를 추가하는 것이 수직 확장에 해당합니다. 이 방법은 간단하지만 하드웨어의 물리적 한계가 존재하며, 서버의 자원을 확장하는 것에 비용이 많이 들 수 있습니다.(RDBMS 장점 - 단일서버 성능 향상, 스케일업)

수평 확장(Scale-out)은 서버의 수를 늘리고 동작하는 애플리케이션의 복제본을 실행해 이중화, 삼중화를 하는 방식으로 부하를 분산시켜주는 방식입니다. 이 방법은 이론상으로 무한한 확장이 가능하며, 쿠버네티스와 같은 오케스트레이션 툴을 사용해 간단하게 수평 확장할 수 있습니다. 하지만 일반적으로 네트워크로 연결되므로 네트워크 환경이 좋지 않으면 확장이 불가능하거나, 원하는 성능을 얻지 못할 수 있습니다. (NoSQL 장점 - 여러개의 서버를 사용, 스케일아웃)

 

728x90
반응형
728x90
반응형

1. 웹 서버 (Web Server)와 웹 어플리케이션 서버 (Web Application Server)의 차이점은 무엇인가요? 

웹 서버는 정적 데이터를 처리하고, 웹 어플리케이션 서버는 동적 데이터를 처리합니다. 이 특징으로, 실무에서는 이 둘을 연동하여 사용하는데, WAS는 동적 처리에 최적화 되어 있는 서비스이기 때문에 처리 속도를 위해, 정적처리는 웹서버에서 처리를 하고, 동적 컨텐츠는 WAS에서 처리합니다

 

2. 프로그래밍 언어 (Programming Language)와 스크립트 언어 (Scripting Language)의 차이점은 무엇인가요?

스크립트 언어는 일반적으로 스크립트를 지원하는 프로그래밍 언어 유형입니다. 스크립트는 다른 프로그램을 제어하기 위해 작성된 프로그램입니다. 스크립트 언어는 주로 웹 개발, 네트워크 자동화, 데이터 처리 등 간단한 작업을 수행하는 데 사용됩니다. 반면 프로그래밍 언어는 보다 복잡한 소프트웨어 시스템을 구축하는 데 사용됩니다.

728x90
반응형
728x90
반응형

1. 정규 표현식에 대해 설명해보세요.

정규 표현식(Regular Expression)은 문자열에서 특정한 패턴을 찾거나 대체하는데 사용되는 문자열 처리 기법입니다. 

정규 표현식은 특수한 문자와 규칙을 사용하여 문자열의 패턴을 정의하고, 이 패턴을 사용하여 문자열에서 원하는 부분을 찾거나 대체할 수 있습니다.

 

2. 자바스크립트의 호이스팅이란 무엇인가요?

호이스팅(Hoisting)은 자바스크립트에서 변수와 함수 선언이 코드의 최상단으로 이동하는 것처럼 동작하는 현상입니다. 

이 현상은 자바스크립트 엔진이 코드를 실행하기 전에 코드를 스캔하면서 변수와 함수 선언을 찾아내고 이들을 메모리에 저장하는 과정에서 발생합니다.

728x90
반응형
728x90
반응형

1. 클라우드 컴퓨팅에 대해 설명해보세요.

클라우드 컴퓨팅은 사용자의 직접적인 활발한 관리 없이 특히, 데이터 스토리지 (클라우드 스토리지)와 컴퓨팅 파워와 같은 컴퓨터 시스템 리소스를 필요 시 바로 제공 (on-demand availability)하는 것을 말합니다. 일반적으로는 인터넷 기반 컴퓨팅의 일종으로 정보를 자신의 컴퓨터가 아닌 클라우드에 연결된 다른 컴퓨터로 처리하는 기술을 의미합니다.

 

2. 멀티스레드와 멀티프로세스의 차이점은?

멀티스레딩 (Multithreading)하나의 프로세스 안에서 여러 개의 실행 흐름 (스레드)을 두는 방식으로 여러 실행을 동시에 실행하도록 하나의 프로세스를 운영하는 방식입니다. 멀티 프로세싱 (Multiprocessing)다수의 프로세서로 다수의 "프로세스"를 협력적으로 동시에 처리하는 것입니다.

멀티스레딩은 프로세스 내에서 데이터, 힙, 코드 영역을 공유하기 때문에 자원의 관점과 문맥 교환 관점에서 멀티프로세싱 방법보다 효율적입니다. 멀티 프로세싱은 프로세스를 여러 개 실행할 수 있는 환경을 제공하는 것입니다.

 

멀티프로세스의 장점
- 안정성: 하나의 프로세스가 죽어도 다른 프로세스에 영향을 미치지 않습니다.
- 보안: 각 프로세스는 자신의 메모리 공간을 가지고 있어 다른 프로세스의 메모리에 접근할 수 없습니다.

 

멀티프로세스의 단점
- 시스템 자원 소모: 각 프로세스는 자신만의 메모리 공간을 가지므로, 메모리를 많이 소모합니다.
- IPC(Inter-Process Communication)가 필요합니다.

 

멀티스레드의 장점
- 시스템 자원 소모가 적습니다.
- IPC가 필요하지 않습니다.

 

멀티스레드의 단점
안정성: 하나의 스레드가 죽으면 전체 프로세스가 영향을 받습니다.
보안: 각 스레드는 자신이 속한 프로세스의 메모리 공간을 공유하므로, 다른 스레드가 메모리에 접근할 수 있습니다.

 

크롬(멀티프로세스) VS IE(멀티스레드)

 

728x90
반응형
728x90
반응형

1. 모듈이란 무엇인가요? Node.js에서 모듈을 사용하는 방법은 무엇인가요?

모듈이란 관련 코드를 단일 코드 단위로 캡슐화하는 것입니다. 
Node.js에서 모듈을 사용하는 방법은 require() 함수를 사용하여 모듈을 가져오는 것입니다. 
require() 함수를 사용하여 다른 파일의 exports 객체를 가져와서 사용할 수 있습니다.

 

2. 테스트에 대해 어떤 것을 알고 있나요?

테스트는 소프트웨어 개발의 중요한 부분입니다. 프로그래머가 알아야 할 테스트의 종류로는 단위 테스트(Unit Test), 통합 테스트(Integration Test), 시스템 테스트(System Test), 인수 테스트(Acceptance Test) 등이 있습니다.

단위 테스트는 응용 프로그램에서 테스트 가능한 가장 작은 소프트웨어를 실행하여 예상대로 동작하는지 확인하는 테스트입니다. 일반적으로 클래스 또는 메소드 수준으로 정해집니다.

통합 테스트는 단위 테스트보다 더 큰 동작을 달성하기 위해 여러 모듈들을 모아 이들이 의도대로 협력하는지 확인하는 테스트입니다. 통합 테스트는 단위 테스트와 달리 개발자가 변경할 수 없는 부분 (ex. 외부 라이브러리)까지 묶어 검증할 때 사용합니다.

시스템 테스트는 전체 시스템이 요구사항을 충족하는지 확인하는 테스트입니다. 시스템의 기능, 성능, 안정성 등을 검증합니다.

인수 테스트는 사용자 스토리 (시나리오)에 맞춰 수행하는 테스트입니다. 앞선 두 테스트들과 달리 비즈니스 쪽에 초점을 둡니다. 프로젝트에 참여하는 사람들 (ex. 기획자, 클라이언트 대표, 개발자 등)이 토의해서 시나리오를 만들고, 개발자는 이에 의거해서 코드를 작성합니다.

728x90
반응형
728x90
반응형

1. 프로미스(Promise)와 async/await에 대해 설명해보세요.

프로미스(Promise)비동기 처리를 위한 것이고 async/await프로미스를 좀 더 간결하게 사용되기 위한 문법입니다. async 키워드는 함수 앞에 붙는 키워드로, 해당 함수가 비동기 함수임을 의미합니다. async함수는 항상 Promise를 리턴하죠. await 키워드는 async 함수 내부에서만 사용 할 수 있으며, Promise가 resolved 또는 reject될 때까지 기다립니다.

에러핸들링의 차이점으로 프로미스를 활용할 때는 .catch ()문을 통해 에러를 핸들링 하지만 async await는 에러핸들링을 따로 하지 않고 try-catch문을 활용해야 합니다. 코드의 가독성 차이도 있습니다. 프로미스는 콜백지옥은 벗어났지만 .then의 지옥에 빠지는 가능성이 있습니다. 또한 코드가 길어질수록 async/await를 활용한 코드가 가독성이 좋습니다. async/await는 비동기 코드를 동기처럼 읽히게 해줍니다.

2. 스코프와 클로저란 무엇인가요?

 

스코프

스코프변수에 접근하거나 참조할 수 있는 위치를 의미합니다.

자바스크립트에서는 전역스포크와 지역스코프가 있습니다.

엘라의 Scope & Closure - 우아한 테크톡

 

엘라의 Scope & Closure - 우아한 테크톡

 


클로저

클로저함수 안에 또 다른 함수가 있을 때, 안쪽의 함수가 바깥쪽의 함수의 변수에 접근할 수 있도록 해주는 기능입니다. 이를 통해 안쪽의 함수는 바깥쪽의 함수가 끝나고 사라진 후에도 그 변수를 계속 사용할 수 있습니다.

이렇게 클로저를 사용하면 변수를 보호하거나 데이터를 숨기는 등의 기능을 구현할 수 있습니다. 

클로저에 의해 참조된 변수를 자유변수라고 합니다. 

<클로저 예제>

const x = 1;

function outer() {
  const x = 10;
  const inner = function () {
    console.log(x);
  };
  
  return inner;
}

const ella = outer();
ella(); //10

ella라는 함수에 outer를 집어넣으면서 실행 컨텍스트 스택에서 x = 10;은 사라진 것으로 보입니다.

그러나 실행결과를 보면 x = 10으로 나옵니다.

이유는 아우터 실행 컨텍스트는 종료되었지만, ella함수에서 outer함수를 참조하고,

그 안에 있는 변수까지 참조하고 있기 때문에 자유변수로써 참조하여 사용할 수 있습니다.

이런 현상을 클로저라고 합니다.

 

728x90
반응형
728x90
반응형

1. 보안 (Security)과 관련된 문제들은 어떤 것이 있나요?

인증 및 권한 부여: 사용자 인증 및 권한 부여를 통해 민감한 데이터에 대한 접근을 제어해야 합니다. 이를 위해 일반적으로 사용자 이름과 비밀번호를 사용하여 사용자를 인증하고, 권한 부여 시스템을 통해 사용자의 권한을 관리합니다.

데이터 암호화: 전송 중이거나 저장된 데이터를 암호화하여 데이터 유출을 방지해야 합니다. 이를 위해 SSL/TLS와 같은 프로토콜을 사용하여 데이터를 전송하고, AES와 같은 암호화 알고리즘을 사용하여 데이터를 저장합니다.

SQL 인젝션: 악의적인 SQL 쿼리가 실행되지 않도록 쿼리를 검증하고 필터링해야 합니다. 이를 위해 Prepared Statement와 같은 기술을 사용하여 쿼리를 안전하게 생성하고 실행합니다.

더보기

SQL 인젝션 공격을 방지하기 위해서는 다음과 같은 방법들이 있습니다:
Prepared Statement: Prepared Statement를 사용하여 쿼리를 생성하고 실행합니다. 

Prepared Statement는 쿼리 템플릿과 변수값을 분리하여 처리하므로, SQL 인젝션 공격이 불가능합니다.
입력값 검증: 사용자로부터 입력받은 값에 대해 검증 및 필터링을 수행합니다. 

정규식 등의 기술을 사용하여 입력값이 유효한지 확인하고, 유효하지 않은 경우 에러 메시지를 반환합니다.

 

XSS (Cross-Site Scripting): 악의적인 스크립트가 실행되지 않도록 입력값을 검증하고 필터링해야 합니다. 이를 위해 입력값을 검증하는 정규식과 같은 기술을 사용하여 입력값을 필터링하고, 출력 시에는 HTML 인코딩과 같은 기술을 사용하여 스크립트가 실행되지 않도록 합니다.

더보기

XSS 공격을 방지하기 위해서는 다음과 같은 방법들이 있습니다:
출력값 인코딩: 사용자로부터 입력받은 값을 출력할 때 HTML 인코딩을 수행합니다. 

이를 통해 <, >, & 등의 문자가 HTML 태그로 해석되지 않도록 합니다.
입력값 검증: 사용자로부터 입력받은 값에 대해 검증 및 필터링을 수행합니다. 

정규식 등의 기술을 사용하여 입력값이 유효한지 확인하고, 유효하지 않은 경우 에러 메시지를 반환합니다.


CSRF (Cross-Site Request Forgery): 사용자가 의도하지 않은 요청이 전송되지 않도록 CSRF 토큰 등의 방법을 사용하여 요청을 검증해야 합니다. 이를 위해 CSRF 토큰을 생성하여 폼에 포함시키고, 요청 시에는 CSRF 토큰 값을 검증하여 유효한 요청인지 확인합니다.

더보기

CSRF 공격을 방지하기 위해서는 다음과 같은 방법들이 있습니다:
CSRF 토큰: CSRF 토큰을 생성하여 폼에 포함시킵니다. 요청 시 CSRF 토큰 값을 검증하여 유효한 요청인지 확인.
Referrer 검증: 요청의 Referer 헤더 값을 검증하여 요청이 유효한 페이지에서 전송되었는지 확인합니다.

 

2. 개발 방법론 (Development Methodology)에 대해 설명해보세요.

개발 방법론(Development Methodology)은 소프트웨어 개발 프로젝트를 수행하는 데 사용되는 일련의 프로세스와 절차를 말합니다. 이는 프로젝트의 일정, 예산, 품질 등을 관리하고 효율적으로 개발을 진행하기 위해 사용됩니다.

개발 방법론에는 여러 종류가 있습니다. 대표적인 예로는 다음과 같습니다:

Waterfall: 전통적인 개발 방법론으로, 각 단계가 순차적으로 진행됩니다. 요구사항 분석, 설계, 구현, 테스트, 유지보수 등의 단계로 구성됩니다.

더보기

장점: 각 단계가 명확하게 구분되어 있어 일정 관리가 용이하고, 문서화가 철저하여 프로젝트의 전체적인 흐름을 파악하기 쉽습니다.
단점: 각 단계가 순차적으로 진행되므로 유연성이 떨어지고, 고객의 요구사항 변화에 대응하기 어렵습니다. 또한 테스트 단계가 마지막에 위치하여 결함이 늦게 발견될 수 있습니다

 

Agile: 유연한 개발 방법론으로, 고객의 요구사항 변화에 빠르게 대응할 수 있도록 개발 프로세스가 짧은 주기로 반복됩니다. Scrum, Kanban 등이 이에 속합니다.

 

더보기

장점: 짧은 주기로 개발 프로세스가 반복되므로 고객의 요구사항 변화에 빠르게 대응할 수 있습니다. 또한 지속적인 테스트와 피드백을 통해 결함을 빠르게 발견하고 수정할 수 있습니다.
단점: 일정 관리가 어렵고, 문서화가 부족할 수 있습니다. 또한 고객과의 지속적인 소통이 필요하므로 고객의 참여가 활발하지 않으면 프로젝트 진행이 어려울 수 있습니다.


DevOps: 개발(Development)과 운영(Operations)의 협업을 강조하는 개발 방법론으로, 지속적인 통합(CI)과 지속적인 배포(CD)를 통해 빠른 배포와 높은 서비스 품질을 달성하는 것을 목표로 합니다.

 

더보기

장점: 개발과 운영의 협업을 강조하여 개발 속도를 높이고 서비스 품질을 개선할 수 있습니다. 지속적인 통합(CI)과 지속적인 배포(CD)를 통해 빠른 배포와 신속한 대응이 가능합니다.
단점: 개발과 운영의 역할 구분이 모호해질 수 있고, 새로운 도구와 기술의 도입이 필요하여 학습 비용이 발생할 수 있습니다.

728x90
반응형

+ Recent posts