본문 바로가기

전체 글

(177)
[230329] Docker로 nodeJS 서버 띄우기 (feat. npm code 127, bcrypt 에러) 도커를 이해하기 위해서 우선 진행 중인 개인 프로젝트 서버를 띄워보기로 했다. nestJS로 작업 중인 간단한 API 서버를 도커 컨테이너로 띄워보기로 했다. 대략적인 플로우는 이렇다. 1. 앱서버 이미지를 빌드 (DockerFile, Dockerignore) 2. 빌드된 이미지를 사용해서 컨테이너 띄우기 (명령어 명령어...) 3. 앱서버 외에 DB서버도 컨테이너 등 여러 컨테이너 한 번에 관리하기 (Docker-compose.yml) 내 미니 프로젝트에서는 AWS RDS를 사용하고 있기 때문에, DB 컨테이너는 따로 필요가 없었다. (redis 서버도 보통 elasticache나 redis cloud를 사용한다...) 도커 컨테이너를 띄우며 만났던 질문들 1. RUN npm ci 했을 때, npm c..
[기술면접 스터디] [230303] 병렬 프로그래밍이란? Q1. 병렬 프로그래밍에 대해 설명해주세요. 멀티 코어, 멀티 스레드 cpu 시대가 오면서, 병렬 프로그래밍이 가능해졌습니다. 하나의 프로그램을 동작하는 프로세스에서 멀티 스레드를 활용하여 여러 동작을 병렬적으로 처리하는 프로그래밍을 병렬 프로그래밍이라고 합니다. 싱글 스레드만을 사용하는 경우, 하나의 작업을 처리하고 다음 작업을 순차적으로 밖에 처리 할 수 없어 전체 작업 처리 속도가 느립니다. 하지만, 멀티 스레드의 경우 작업을 작은 여러개의 단위로 나누어 병렬적으로 실행하므로 처리 속도가 빨라집니다. 하지만 병렬 프로그래밍은 어렵습니다. 멀티 코어 환경에서는 cpu의 스케줄링을 완벽하게 재현하기 어렵기 때문에 버그가 발생했을 때 재현이 매우 어렵습니다. 이런 대표적인 버그로 데이터 레이스(data ..
[기술면접 스터디] [230302] 다형성, 관계형 vs NoSQL Q1. 오버로딩과 오버라이딩의 차이점은 무엇인가요? 오버로딩은 같은 이름을 둔 메서드를 메서드의 타입, 매개변수의 유형, 개수 등으로 여러개를 두는 것을 말합니다. 오버로딩은 컴파일 중 발생하는 정적 다형성입니다. 자바스크립트에는 매개변수의 타입이나 개수, 리턴 값이 유연하기 때문에 없는 개념이지만, 분기처리를 통해 구현할 수 있습니다. 오버라이딩은 상위 클래스로부터 상속받은 메서드를 하위 클래스에서 재정의하는 것을 의미합니다. 오버라이딩은 런타임 중 발생하는 동적 다형성입니다. Q2. RDB와 NoSQL은 무엇인가요? 차이점 또는 장단점 위주로 설명해주세요. RDBMS는 테이블의 형태의 정형화된 데이트를 저장하는데 주로 사용되고, SQL 언어로 조작합니다. 관계형 DB에는 MySQL, PostgreSQ..
[기술면접 스터디] [230301] 프로그래밍 패러다임, 시간복잡도 & 공간복잡도 Q1. 절차지향 / 객체지향 / 함수형 프로그래밍이란 무엇이고 차이점은 무엇인가? 절차지향 프로그래밍은 로직이 수행되어야 할 연속적인 계산과정으로 이루어져있습니다. 로직이 진행되는 방식으로 코드를 구현하면 되므로 코드의 가독성이 좋으며 실행 속도가 빠릅니다. 때문에, 많은 계산 작업이 필요한 프로그래밍에 적합한 패러다임입니다. 예를 들어, 포트란(fortran)을 이용한 대기 과학 관련 연산 작업, 머신 러닝의 배치 작업 등에 쓰입니다. 하지만, 이러한 특성 때문에, 모듈화가 어렵고 유지보수성이 떨어진다는 단점이 있습니다. 객체지향 프로그래밍은 객체들의 집합으로 프로그램의 상호작용을 객체로 표현하며, 데이터를 객체로 취급하여 객체 내부에 선언된 메소드를 활용하는 방식을 말합니다. 설계에 많은 시간이 걸리..
[기술면접 스터디] [230228] WS & WAS, 자료구조 (stack, queue, array, linked list) Q1. 웹서버와 WAS의 차이에 대해 말씀해주세요. 웹서버는 HTTP 기반에서 클라이언트의 요청을 서비스하는 기능을 담당합니다. 주로 정적인 컨텐츠의 경우 WAS를 거치지 않고 바로 자원을 제공하기도 하고, 동적인 컨텐츠 제공을 위해 WAS에 요청을 전달하는 역할을 담당하기도 합니다. WAS 앞에 WS로 reverse proxy를 하는 이유는 크게 세가지로 분류할 수 있습니다. 첫째, WAS의 포트나 민감 정보를 감추거나 특정 사용자의 요청에만 응답하고, SSL 인증서를 적용하여 보안을 강화 할 수 있습니다. 둘째, 캐시 서버로 사용이 가능하여, 정적 리소스를 요청하는 경우, WAS를 거치지 않고 바로 응답을 할 수 있습니다. 마지막으로 여러대의 WAS 앞에 두고 로드 밸런싱이 가능합니다. 무중단 배포시..
[기술면접 스터디] [230227] 트랜잭션, TCP & UDP Q1. 트랜잭션이 무엇인지 설명해주세요. 트랜잭션은 DB에서 하나의 논리 기능을 수행하기 위한 쿼리 묶음입니다. 트랜잭션의 특징으로는 원자성, 일관성, 격리성, 지속성의 ACID가 있습니다. 원자성이란, "all or nothing"을 의미하며, 커밋과 롤백으로 이를 보장합니다. 일관성은 "허용된 방식"으로만 데이터를 변경하는 것을 의미합니다. 예를 들어, 계좌 잔고가 0원이라면 5만원을 타 계좌로 입금할 수 없습니다. 격리성이란 트랜잭션 중 서로 끼어들지 못하는 것을 의미합니다. 격리 수준에는 SERIALIZABLE, REPEATABLE_READ, READ_COMMITED, READ_UNCOMMITED의 격리 수준이 존재하고, 격리 수준에 따라 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결..
[기술면접 스터디] [230224] parameter vs argument, process vs thread Q1. parameter와 argument의 차이에 대해 설명해주세요. parameter는 함수 등에 사용되는 매개변수고, argument는 어떤 연산을 위해 전달 받는 인자 값입니다. 예를 들어, 배열의 특정 인덱스의 값을 찾아주는 findValue 함수가 있습니다. 이때, 함수를 선언하면서 parameter로 array와 index를 선언합니다. 이후, findValue 함수를 호출하며 argument로 [1, 2, 3]을 순서대로 갖는 배열과 찾고자 하는 인덱스 2를 입력하여 3이라는 값을 리턴 받을 수 있습니다. function findValue(array, index) {// array와 index가 parameter return array[index] } findValue([1,2,3], 2)..
[기술면접 스터디] [230223] MAS / generics / List, Set, Map, HashTable Q1. MSA (Microservice Atchitecture)란? MSA는 작은 레고 블럭 여러개를 쌓아 큰 구조물을 만들 듯, 하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍쳐라고 할 수 있습니다. 각각의 서비스는 크기가 작은 모노리틱 아키텍처와 유사한 구조를 가지고, 독립적으로 배포가 가능합니다. 또, 다른 서비스에 대한 의존성이 최소화 되어 독립적 운영이 가능합니다. 마지막으로 개별 프로세스로 구동 되며, REST와 같은 가벼운 방식으로 통신되어야 합니다. MSA의 장점으로는 서비스 별 배포가 가능하므로, 전체 서비스의 중단 없이 개별 서비스를 배포할 수 있으며, 확장이 쉽고, 클라우드 사용에 적합한 아키텍처입니다. 장애의 관점에서 부분적 장애가..