본문 바로가기

CS13

[백엔드 기술 면접] #3 Server (1) #3 Server (1) Q. 리버스 프록시와 포워드 프록시 차이는 무엇인가?A. 리버스 프록시는 클라이언트 요청을 받아 여러 서버로 전달하여 로드 밸런싱, 캐싱, 보안, SSL 암호화 등을 제공하며 주로 서버 측에서 사용되고, 예로는 Nginx, HAProxy가 있으며, 포워드 프록시는 클라이언트가 인터넷에 접근할 때 프록시 서버를 통해 접속하여 IP 숨기기, 콘텐츠 필터링, 캐싱 등을 제공하며 주로 클라이언트 측에서 사용됩니다. Q. WS와 WAS의 차이는 무엇인가?A. WS(Web Server)는 정적 콘텐츠(HTML, CSS, JS)를 제공하고 주로 HTTP 요청을 처리하며 예로는 Apache, Nginx가 있고, WAS(Web Application Server)는 동적 콘텐츠를 처리하고 비즈니스.. 2024. 11. 11.
[백엔드 기술 면접] #2 Reactive Programming #2 Reactive ProgrammingQ. Flux와 Mono의 차이에 대해서 설명해보아라.A. Mono는 오직 ‘0개 또는 하나의 데이터항목 생성하고 이 결과가 생성되고 나면 스트림이 종료되면 결과 생성을 종료합니다. Mono를 사용하여 비동기적으로 결과를 반환하면 해당 결과를 구독하는 클라이언트는 결과가 생성될 때까지 블로킹하지 않고 다른 작업을 수행할 수 있습니다. Mono의 연산자들은 버퍼 중복, 값비싼 동기화 작업 등이 생략되어 Flux보다 가볍습니다. 반면에 Flux는 여러 개의 데이터 항목를 생성하고 스트림이 종료되면 결과 생성을 종료합니다. Q. 블로킹 vs 논블로킹과 동기 vs 비동기의 차이에 대해서 설명해보아라.비동기 프로그래밍에서 발생할 수 있는 문제점은 무엇이 있을까?A. 블로킹.. 2024. 11. 6.
[백엔드 기술 면접] #1 DB와 Docker #1 DB와 DockerQ. NoSQL DB와 SQL DB의 차이점은? 각각 어느 상황에서 사용할 수 있을까? 그래프 종류별(그래프, key-value, 관계형 등)로 예시를 들어 설명해보아라.A. SQL DB는 스키마 기반의 테이블 구조를 가지고 있으며 ACID 특성을 보장하며, 금융 시스템과 같이 데이터 무결성과 트랜잭션 관리가 중요한 경우 사용됩니다. 예로는 MySQL, PostgreSQL, Oracle이 있습니다. NoSQL DB는 스키마가 유연하고 대규모 데이터 분산 저장 및 처리에 최적화되어 있으며, BASE 특성을 가집니다. 키-값 저장소는 Redis, DynamoDB가 있으며, 캐싱과 세션 관리에 사용됩니다. 도큐먼트 저장소는 MongoDB, CouchDB가 있으며, 유연한 스키마가 필요한.. 2024. 11. 6.
[소프트웨어공학] Chapter 3 - System Engineering 시스템이란?시스템은 목적을 달성하기 위해 서로 상호작용하는 구성요소로 구성된다. 크거나 작을 수 있고, 복잡하거나 간단할 수 있고, 실제로 존재하거나 컨셉츄얼하게 존재할 수 있다. 개미들, 우주와 같은 자연적인 시스템도 존재하고, 인간이 만든 시스템 역시 많이 존재한다. 인간이 만든 시스템은 실제로 존재하거나 개념적으로만 존재할 수 있다.Computer-based 시스템은 소프트웨어가 하위 시스템으로 포함된 인간이 만든 시스템이다. telecommunication 시스템, 이메일 시스템 등이 포함되어 있다. 몇몇 시스템은 software-only system이고, 몇몇 시스템은 소프트웨어와 하드웨어, 인간의 하위 시스템으로 구성된다.모든 시스템은 다음의 특성들을 공유한다.각 시스템은 상호관련되거나 상호작.. 2024. 3. 31.
[소프트웨어공학] Chapter 2 - Software Process and Methodology 시스템 개발의 어려움 학부에서 소프트웨어 개발하는 것과 현업에서 개발하는 것은 큰 차이를 가지고 있음. 어떤 차이가 있어야 소프트웨어 프로세스와 방법론이 필요한지 이해할 수 있음. 많은 프로젝트들은 1년에서 몇년까지 아주 긴 개발 기간을 지니고 있음. 그렇기 때문에 향후 몇년간 어떤일이 일어날 것이고, 이를 어떻게 대비할 것인지 계획해야 함. 많은 프로젝트들은 다른 부서 또는 팀과 협업을 통해 개발이 이루어지는 경우가 많음. 따라서, 어떻게 상호 의존적인 부분으로 팀에게 할당하고, 이를 원활하게 합칠 수 있을까 생각해야됨. 예를 들어, 어떤 시스템을 개발한다 치면 백엔드 부서와 프론트 엔드 부사가 각각 나누어 개발하고, 이를 나중에 합쳐서 하나의 서비스로 운용해야됨. 부서 또는 팀들이 각기 다른 개발 프.. 2024. 3. 18.
[소프트웨어공학] Chapter 1 - Introduction 소프트웨어 공학이란? 소프트웨어의 개발, 운용, 유지보수 등 생명 주기 전반을 체계적이고 서술적으로 다루는 학문. 즉, 공학을 소프트웨어에 적용하여 소프트웨어의 생산성과 질을 높이고, 비용과 시간을 절약하고자 한다. 소프트웨어 공학이 중요한 이유 소프트웨어는 우리 사회의 모든 부분으로 확장되고 있음. 소프트웨어 공학은 큰 시스템 개발 과정에서 팀워크 향상에 도움이 됨 큰 시스템은 디자인하고, 구현하고, 테스트하는데 상당한 노력이 듬 개발자들은 코드를 분석, 디자인, 구현, 통합 그리고 테스트하는데 많은 시간을 소모함 따라서 소프트웨어공학을 통해서 효율적으로 협업을 진행할 수 있게됨 소프트웨어 개발 라이프사이클 소프트웨어 개발 라이프 사이클이 필요한 이유? : 팀에서 여럿이서 개발할 때 보다 효율적이고 체.. 2024. 3. 12.