1일 1CS(Computer Science) 91

로드 밸런싱에 대해서 설명해주세요.

초보자를 위한 로드 밸런싱 알고리즘 완벽 가이드 💻안녕하세요! 오늘은 백엔드 개발에서 핵심적인 개념인 로드 밸런싱에 대해 알아보겠습니다. 데이터센터나 대규모 웹 서비스를 운영한다면 반드시 알아야 할 개념이죠! 😊로드 밸런싱이란? 🤔로드 밸런싱은 들어오는 네트워크 트래픽(요청)을 여러 서버에 균등하게 분산하는 기술입니다. 로드 밸런서는 서버 앞에 위치해 클라이언트 요청을 적절히 분배합니다.🚦 한줄 요약: 트래픽을 여러 서버에 똑똑하게 나눠주는 교통 경찰!로드 밸런싱 알고리즘 종류 📋1. 라운드 로빈 (Round Robin) 🔄서버에 순서대로 요청을 배분하는 가장 단순한 방식입니다.작동 방식:서버 A, B, C가 있다면 → A → B → C → A → B → C 순으로 요청 분배모든 서버가 동등한..

Promise의 resolve()와 fulfilled에 대해서 설명해주세요.

Promise의 resolve()와 fulfilled에 대해서 설명해주세요.프론트엔드와 관련된 질문이에요.resolve()와 fulfilled는 Promise에서 비동기 처리시 사용되는 값들이지만, 차이점이 존재합니다. 간단히 말씀드리면, resolve()는 Promise를 완료시키는 함수이고, fulfilled는 해당 Promise가 완료된 상태를 뜻합니다.resolve()는 Promise가 성공적으로 끝났을 때 결과 값을 넘겨주는 함수입니다. 예를 들어 어떤 비동기 작업이 잘 끝났을 때, resolve()를 호출해서 "이 작업이 끝났고 결과는 이것이다"라고 전달하게 됩니다. 이렇게 resolve()가 호출되면, Promise의 상태는 '이행됨' 상태로 바뀌는데, 이를 fulfilled라고 부릅니다.예..

함수 선언식과 함수 표현식의 차이점에 대해서 설명해주세요.

함수 선언식과 함수 표현식의 차이점에 대해서 설명해주세요.프론트엔드와 관련된 질문이에요.함수 선언식과 함수 표현식은 자바스크립트에서 함수를 정의하는 두 가지 방법으로, 이 둘의 주요 차이점은 호이스팅에 있습니다.함수 선언식은 이름이 있는 함수입니다. 함수 선언식은 자바스크립트 엔진이 코드를 실행하기 전에 메모리에 로드하기 때문에 호이스팅이 발생합니다. 즉, 함수 선언식으로 정의된 함수는 코드 내 어디서든 호출할 수 있습니다.console.log(add(2, 3)); // 5function add(a, b) { return a + b;}여기서 add 함수는 선언된 위치보다 앞에서 호출해도 정상 작동합니다. 이는 자바스크립트 엔진이 실행 전에 함수 선언을 미리 메모리에 로드했기 때문입니다. 그에 반해 ..

다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우 발생할 수 있는 문제점은 무엇인가요?

다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우 발생할 수 있는 문제점은 무엇인가요?백엔드와 관련된 질문이에요.다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우에는 세션 불일치 문제가 발생할 수 있습니다. 만약 서버 A, B를 관리하고 있을 때, 로드밸런서는 사용자의 요청을 상황에 맞게 A, B 중 한 곳으로 전달합니다. 유효한 로그인 요청이 A 서버로 처음 도착하면 사용자에 대한 세션 정보는 A 서버에 저장됩니다. 이후에 해당 사용자의 또 다른 요청이 로드 밸런서에 도착했을 때, B 서버로 도착하게 되면 사용자의 세션 데이터가 존재하지 않기 때문에 요청이 제대로 처리되지 않습니다. 이를 세션 불일치 문제라고 합니다. 세션 불일치 문제는 어떻게 해결할 수 있나요? 🤔세션 불일치 문제는 ..

ES6에 대해서 아는 대로 설명해 주세요.

ES6에 대해서 아는 대로 설명해 주세요.프론트엔드와 관련된 질문이에요. ES6(ECMAScript 2015)는 자바스크립트의 최신 버전으로, 2015년에 공식 발표되었습니다. ES6는 코드의 가독성과 유지보수성을 높이고, 현대 웹 애플리케이션의 요구를 반영하기 위한 여러 기능들을 제공합니다. 주요 변경사항을 몇 가지 설명해 드리겠습니다. 첫째, let과 const 키워드가 추가됐습니다. let은 변수 선언, const는 상수 선언에 사용됩니다. var와 달리 let과 const는 블록 스코프를 가지므로 코드의 안정성이 더 높습니다. 또한, 변수 선언 이전에 접근했을 때 undefined가 할당되지 않고, ReferenceError가 발생한다는 점에서도 차이가 있습니다.둘째, 화살표 함수(Arrow Fu..

SOLID 원칙에 대해서 설명해 주세요.

SOLID 원칙에 대해서 설명해 주세요.백엔드와 관련된 질문이에요.SOLID 원칙은 객체지향 설계 5원칙이라고도 불리며, 각 원칙의 앞 글자를 따서 만들어졌습니다. 객체지향설계의 핵심 중 하나는 의존성을 관리하는 것인데요. 의존성을 잘 관리하기 위해서는 SOLID 원칙을 준수해야 합니다. 단일 책임 원칙(Single Responsibilty Principle) 은 클래스가 오직 하나의 목적이나 이유로만 변경되어야 한다는 것을 강조합니다. 여기서 “책임”이란 단순히 메서드의 개수를 뜻하지 않고, 특정 사용자나 기능 요구사항에 따라 소프트웨어의 변경 요청을 처리하는 역할을 의미합니다.즉, 클래스는 한 가지 변화의 이유만 가져야 하며, 이를 통해 변경이 발생했을 때 다른 기능에 영향을 덜 미치도록 설계됩니다...

DB Replication에 대해서 설명해주세요.

DB Replication이란? 🤔DB Replication은 하나의 데이터베이스(Source)에서 다른 데이터베이스(Replica)로 데이터를 복제하는 기술입니다. 쉽게 말해 원본 데이터의 '백업 친구들'을 만드는 과정이죠! DB Replication이 필요한 이유 🎯고가용성(High Availability) ⚡: 주 서버가 다운되어도 복제 서버가 대신 서비스 제공부하 분산(Load Balancing) 🔄: 읽기 작업을 여러 서버에 분산데이터 백업(Data Backup) 💾: 데이터 손실 방지지리적 분산(Geographic Distribution) 🌍: 전 세계 사용자에게 빠른 서비스 제공Replication 작동 방식 ⚙️MySQL을 예로 들면 복제 과정은 다음과 같습니다:기록(Write) ..

자바스크립트 Promise에 대해서 아는 대로 설명해주세요.

Promise란? 🤔Promise는 비동기 작업의 최종 완료(또는 실패)와 그 결과값을 나타내는 객체입니다. 쉽게 말해 "나중에 완료될 작업"에 대한 약속입니다.// API에서 데이터를 가져오는 Promise 예시const fetchUserData = (userId) => { return new Promise((resolve, reject) => { fetch(`/api/users/${userId}`) .then(response => { if (response.ok) resolve(response.json()); else reject(new Error('사용자 정보를 불러올 수 없습니다')); }) .catch(error => reject(er..

useEffect가 호출되는 시점에 대해 설명해 주세요.

useEffect가 호출되는 시점 이해하기 🚀React의 useEffect 훅은 컴포넌트 생명주기의 특정 시점에 자동으로 호출되는 강력한 도구입니다.마운트 시점 - 컴포넌트가 처음 나타날 때 📥컴포넌트가 화면에 처음 렌더링된 직후에 useEffect가 실행됩니다. 이 시점은 초기 데이터를 가져오거나 외부 API에 연결하기에 완벽한 타이밍입니다.function ServerStatusPanel() { const [servers, setServers] = useState([]); useEffect(() => { // 컴포넌트가 처음 나타날 때 서버 상태 데이터 가져오기 fetchServerStatus().then(data => setServers(data)); }, []); // 빈 배..

Record를 DTO로 사용하는 이유가 뭔가요?

Record를 DTO로 사용하는 이유가 뭔가요? Record는 Java 16에서 정식 출시된 특별한 유형의 클래스로 불변성(Immutable) 을 기본으로 합니다.기존의 클래스와 달리 모든 필드가 final 키워드로 선언되며, 객체 생성 후 변경할 수 없습니다. 또한 필드 선언만으로 자동으로 생성자, getter, equals(), hashCode(), toString() 등 메서드를 자동으로 생성해 주어 보일러 플레이트 코드를 줄일 수 있습니다. 이러한 특성으로 인해 멀티 스레드 환경에서 데이터가 의도치 않게 변경되지 않고 안전하게 전달할 수 있습니다.// 기존 클래스 기반 DTOpublic class MemberDto { private final String name; private final Str..