1일 1CS(Computer Science) 114

응집도와 결합도에 대해서 설명해주세요.

🏗️ 응집도와 결합도: 좋은 코드의 핵심 원리안녕하세요! 오늘은 백엔드 개발에서 꼭 알아야 할 응집도와 결합도에 대해 알아보겠습니다 😊🤝 응집도(Cohesion)란?응집도는 하나의 모듈 안에서 구성요소들이 얼마나 밀접하게 관련되어 있는지를 나타냅니다.일상생활 예시 🏠높은 응집도: 화장실에는 변기, 세면대, 샤워기 등 모두 '위생'과 관련된 것들만 있음낮은 응집도: 화장실에 냉장고, TV, 책상이 함께 있다면? 🤔Node.js 코드 예시// ❌ 낮은 응집도 - 사용자 관련 기능이 뒤섞여 있음class UserManager { validateEmail(email) { /* ... */ } sendEmail(to, subject) { /* ... */ } calculateTax(amount) {..

CAP 정리에 대해서 알고 계신가요?

CAP 정리에 대해서 알고 계신가요?백엔드와 관련된 질문이에요.CAP 정리는 분산 데이터베이스 시스템이 CAP 중 2개의 속성만을 제공할 수 있다는 이론입니다. CAP 정리에 따르자면, 일관성(Consistency), 가용성(Availability), 분할 내성(Partition Tolerance) 등 3가지 속성을 모두 만족하는 분산 데이터베이스 시스템은 존재하지 않습니다.각 속성에 대해서 설명해주시겠어요? 🤔일관성(Consistency) 은 모든 클라이언트 요청은 어느 노드에 연결되어도 같은 데이터를 볼 수 있음을 의미합니다.가용성(Availability) 은 노드 일부에 문제가 발생하여도 시스템은 클라이언트의 모든 요청에 유효한 응답을 전해줄 수 있어야 함을 의미합니다.분할 내성(Partition..

타입스크립트를 사용하는 이유를 설명해주세요.

타입스크립트를 사용하는 이유를 설명해주세요.프론트엔드와 관련된 질문이에요.타입스크립트를 사용하는 주요 이유로 크게 세 가지를 들 수 있습니다.첫째, 정적 타이핑을 통해 코드의 안정성을 크게 향상시킬 수 있습니다. 개발 시 타입 오류를 런타임으로 실행하기 이전에 발견할 수 있어 런타임 에러를 줄이고, 코드의 품질을 개선할 수 있습니다. 이러한 장점은 특히 대규모 프로젝트에서 두드러집니다.둘째, 개발자의 생산성을 높여줍니다. IDE의 자동완성 기능과 인텔리센스가 더 많은 정보를 제공할 수 있게 되기 때문에 코드 작성 속도가 빨라지고, 리팩토링이 쉬워집니다. 또한 명시적인 타입 정의가 마치 문서화의 역할을 하여 코드의 가독성과 이해도가 높아집니다.셋째, 객체지향 프로그래밍의 일부 기능을 자바스크립트에 추가합니..

시스템 간 비동기 연동 방식에는 무엇이 있나요?

🔄 비동기 연동이란? 서로 다른 시스템끼리 즉시 응답을 기다리지 않고 데이터를 주고받는 방식이에요. 즉, 한 시스템이 데이터를 보내면, 다른 시스템은 시간이 지나서 받아서 처리할 수 있죠! 🛠️ 대표적인 비동기 방식 3가지 1️⃣ 메시징 시스템 활용 🚀 - 이메일을 보내고 답장을 기다리는 것과 비슷해요! - A 시스템이 메시지 큐(Kafka, RabbitMQ 등)에 메시지를 저장하면, B 시스템이 나중에 읽어서 처리하는 방식이에요. - 장점: 많은 데이터를 빠르게 처리 가능! - 주의할 점: 메시지가 손실되지 않게 해야 하고, 데이터베이스 저장과 메시지 전송이 동시에 이뤄지도록 고민해야 해요. 2️⃣ 데이터베이스 활용 🗄️ - 메모를 남..

리액트에서 컴포넌트란 무엇인가요?

📌 컴포넌트란? 컴포넌트는 리액트에서 UI를 구성하는 작은 조각이에요. 쉽게 말해, 우리가 웹사이트를 만들 때 버튼, 입력 창, 카드 같은 것들을 각각 하나의 컴포넌트로 만들 수 있어요. 이렇게 쪼개서 만들면 관리가 쉽고, 원하는 곳에서 재사용할 수도 있죠! ✨ 컴포넌트의 종류 리액트에서는 클래스형 컴포넌트와 함수형 컴포넌트가 있어요. 요즘은 함수형 컴포넌트가 많이 쓰이는데, 더 간결하고 이해하기 쉬운 코드 작성을 도와줘요. 🔥 컴포넌트 설계할 때 중요한 것들 1️⃣ 하나의 컴포넌트가 너무 많은 일을 하면 안 돼요! - 예를 들어, 버튼을 만들면서 로그인 로직까지 다 넣으면 유지보수가 어려워져요. 버튼은 버튼 역할만, 로그인은 로그인 역할만 하도록 분리하는 게 좋아요! ..

이벤트 버블링과 캡처링에 대해 설명해주세요.

이벤트 버블링과 캡처링에 대해 설명해주세요.프론트엔드와 관련된 질문이에요.이벤트 버블링은 이벤트가 발생했을 때 가장 안쪽의 타겟 요소에서 시작하여 부모 요소로 전파되는 방식입니다. 예를 들어, 버튼을 클릭했을 때 버튼 자체에서 이벤트가 발생한 후 이 이벤트가 상위 요소인 div, body, document, window로 전파되는 과정을 거치게 됩니다. 기본적으로 브라우저는 이벤트 전파를 버블링 단계에서 처리하도록 설계되어 있습니다.반면, 이벤트 캡처링은 이와 반대 방향으로 진행됩니다. 즉, 이벤트가 최상위 부모 요소에서부터 시작해 점점 타겟 요소로 내려오면서 전파됩니다. 예를 들어, window에서 이벤트가 시작되어 document, body, div를 거쳐 버튼에 도달하게 되는 방식입니다. 기본적으로..

캐시 스탬피드 현상에 대하여 설명해주세요.

캐시 스탬피드 현상에 대하여 설명해주세요.백엔드와 관련된 질문이에요.대규모 트래픽 환경에서 캐시를 운용하는데, Cache Aside(캐시 미스 발생 시 적재) 전략을 사용한다고 가정하겠습니다. 이때, 수많은 요청들이 동시에 캐시 미스를 확인하고 원본 저장소에서 데이터를 가져와 캐시에 적재하는 상황이 발생할 수 있는데요. 이를 캐시 스탬피드 현상 혹은 Thundering Herd 문제라고 표현합니다. 캐시 스탬피드 현상은 원본 데이터베이스와 캐시의 성능을 저하할 수도 있습니다.이 문제는 어떻게 풀어볼 수 있을까요? 🤓해당 방식은 크게 잠금, 외부 재계산, 확률적 조기 재계산 방식으로 풀어볼 수 있습니다.잠금(Locking) 방식 은 한 요청 처리 스레드가 해당 캐시 키에 대한 잠금을 획득합니다. 이로인해..

webpack, rollup과 같은 번들러는 왜 필요한지 설명해주세요.

webpack, rollup과 같은 번들러는 왜 필요한지 설명해주세요.프론트엔드와 관련된 질문이에요.번들러는 다양한 파일과 모듈을 하나의 배포 가능한 번들로 묶는 역할을 합니다. 번들러가 필요한 주요 이유는 다음과 같습니다.첫째, 네트워크 요청 성능을 개선하기 위해서입니다. 다수의 개별 파일에 대해 모두 네트워크 요청을 수행할 경우, 성능에 부정적인 영향이 있을 수 있습니다. 번들러는 다수의 파일을 하나 또는 소수의 파일로 묶어 네트워크 요청을 최적화합니다. 예를 들어, 애플리케이션이 수백 개의 JavaScript, CSS, 이미지 파일을 사용한다면, HTTP 요청 수가 증가해 로딩 속도가 느려질 수 있습니다. 이때 번들러는 이들을 효율적으로 묶어 소수의 파일로 만듦으로써 네트워크 요청 수를 줄여줍니다...

관계형 데이터베이스와 비 관계형 데이터베이스의 차이점은 무엇인가요?

관계형 vs 비관계형 데이터베이스🏗️ 관계형 데이터베이스 (RDBMS)📋 특징고정된 스키마: 테이블 구조가 미리 정의됨SQL 사용: 표준화된 쿼리 언어ACID 속성: 트랜잭션의 안전성 보장정규화: 데이터 중복 최소화🏢 실제 예시: 직원 관리 시스템-- 직원 테이블CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(100), department_id INT, FOREIGN KEY (department_id) REFERENCES departments(id));-- 부서 테이블과 관계 설정SELECT e.name, d.department_name FROM employees e JOIN departments d ON e.department_id =..

Tanstack Query를 사용하는 이유를 설명해 주세요.

Tanstack Query를 사용하는 이유를 설명해 주세요.프론트엔드와 관련된 질문이에요.TanStack Query는 서버 상태 관리의 복잡성을 극복하기 위해 사용하는 라이브러리입니다. 여기서 서버 상태란 서버에서 제공하는 데이터로, 클라이언트에서 직접 수정할 수 없고 네트워크 요청과 같은 비동기 작업을 통해 가져오거나 갱신해야 하는 데이터를 의미합니다.TanStack Query를 사용하는 주요 이유는 다음과 같습니다.첫째, 효율적인 캐싱 처리 기능을 제공합니다. 이를 통해 동일한 데이터를 반복적으로 요청하지 않아 네트워크 비용을 절감하고, 캐싱된 데이터를 즉시 제공해 더 나은 사용자 경험을 제공할 수 있습니다.둘째, 비동기 데이터 관리의 복잡성을 줄여줍니다. TanStack Query는 데이터의 가져오..