전체 글 333

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

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

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

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

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

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

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

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

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

자바스크립트의 Promise는 비동기 작업을 관리하고, 해당 작업의 성공 또는 실패 결과를 나중에 사용할 수 있도록 하는 객체입니다. 정리해서 말씀드려보자면, Promise는 비동기 작업의 완료 여부를 약속해주는 개념이라고 할 수 있습니다.자바스크립트는 비동기 처리를 위한 콜백 함수를 많이 사용합니다. 하지만 콜백 함수는 코드가 복잡해짐에 따라 콜백이 중첩되는 "콜백 지옥" 문제를 야기할 수 있습니다. Promise는 이러한 비동기 처리의 가독성을 높이고, 코드의 흐름을 명확하게 관리할 수 있도록 도와주는 방식입니다.Promise는 다음과 같은 3가지 상태를 가지는데요. 첫번째로는 비동기 작업이 아직 완료되지 않은 초기 상태를 나타내는 Pending, 두번째로는 비동기 작업이 성공적으로 완료되어 값을 반..

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

DB Replication은 데이터베이스의 고가용성과 데이터 안정성을 보장하기 위해 널리 활용되는 핵심 기술입니다. 특히, 대규모 애플리케이션 환경에서는 데이터의 지속적인 가용성과 신뢰성이 매우 중요하기 때문에, 원본(Source) 서버와 복제(Replica) 서버 간의 데이터 동기화는 필수입니다. MySQL 기준으로 설명하겠습니다.바이너리 로그(Binary log)를 저장하는 방식은?Replication은 Source 서버에서 발생하는 모든 데이터 변경 사항을 Replica 서버로 복제하여 두 서버 간의 데이터 일관성을 유지하는 메커니즘입니다. 이러한 과정은 주로 Binary log를 기반으로 이루어지며, Binary log는 Source 서버에서 실행된 모든 데이터 변경 쿼리를 기록하는 역할을 합니다..

useEffect가 호출되는 시점에 대해 설명해 주세요. 프론트엔드와 관련된 질문이에요.

React의 useEffect는 컴포넌트의 특정 시점에 자동으로 호출되는 훅으로, 크게 컴포넌트가 마운트, 업데이트, 언마운트되는 시점에 호출됩니다.먼저, useEffect는 컴포넌트가 마운트될 때, 즉, 처음 렌더링되고 나서 호출됩니다. 이때 데이터 초기화나 외부 API 호출, 구독 설정 등의 작업을 실행할 수 있습니다. 이처럼 useEffect는 컴포넌트가 처음 마운트될 때 필요한 초기 작업을 수행할 수 있도록 해줍니다.또한, useEffect는 의존성 배열에 지정된 값이 변경될 때마다 다시 호출됩니다. 이때, useEffect의 return 값으로 지정된 클린업 함수가 이전 props 및 state와 함께 먼저 호출된 후, 본문의 실행 로직이 업데이트된 props 및 state와 함께 실행됩니다.두..

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

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

HTTPS에 대해서 설명해주세요.

HTTP(Hypertext Transfer Protocol) 는 클라이언트와 서버 간 통신을 위한 통신 규약입니다. 하지만, HTTP는 암호화되지 않는 평문 데이터를 전송하기 때문에 제 3자가 정보를 조회할 수 있다는 위험이 있습니다. 이를 해결하기 위해서 HTTPS가 등장했습니다.HTTPS(Hyertext Transfer Protocol Secure) 는 HTTP에 데이터 암호화가 추가되었습니다. 암호화된 데이터를 전송하기 때문에 제 3자가 볼 수 없도록 할 수 있습니다.HTTPS는 어떻게 적용할 수 있나요?HTTPS를 적용하기 위해서는 인증된 기관(Certificate Authority, CA)에게 인증서를 발급받아야 합니다. CA에 인증서를 요청하면 CA 이름, 서버의 공개키, 서버의 정보를 활용하..

undefined와 null의 차이점에 대해서 설명해주세요. 프론트엔드와 관련된 질문이에요.

undefined와 null은 둘 다 '값이 없다'는 의미를 담고 있지만, 그 쓰임새와 의미에는 차이점이 존재합니다. undefined는 자바스크립트에서 자동으로 할당되는 값입니다.변수는 선언했지만, 아직 아무 값도 할당하지 않았을 때, 자바스크립트는 그 변수에 undefined라는 값을 자동으로 부여합니다. 예를 들어 let a;라는 변수를 선언만 하고 값을 넣지 않으면, 자바스크립트가 자동으로 a에 undefined을 할당하게 됩니다.반면에 null은 개발자가 의도적으로 할당하는 값입니다. 특정 변수에 값이 없음을 명확하게 표현하기 위해 개발자가 null을 넣어줄 수 있습니다. 예를 들어 let b = null; 이라고 할 경우, 이는 b라는 변수에 일부러 값이 비어 있다는 의도를 나타내기 위해 nu..