{{packageMeta.displayName}}의 로고

Angular

ver 19.0.0 ∙ 2024.11.19 업데이트됨

개요

Angular, 구글에서 개발한 TypeScript 웹 프레임워크. 확장가능한 컴포넌트 구조로 웹 애플리케이션을 만들 수 있음. 라우팅, 폼 관리, 클라이언트-서버 통신 등 웹 개발에 필요한 라이브러리를 통합한 모음집. 애플리케이션 개발, 빌드, 테스트, 수정에 필요한 개발자 도구를 제공

관련 게시물

모두 보기

React 면접 전 살펴보기 위한 Q&A 40가지 (2024년 ver)

  1. React란 무엇인가요?

    React는 사용자 인터페이스를 구축하기 위한 JavaScript 라이브러리입니다.

    재사용 가능한 UI 컴포넌트를 생성하는 데 사용됩니다. 페이스북에서 개발하고 관리합니다.


  2. React를 사용하는 이유는 무엇인가요?

  • 동적 애플리케이션 쉽게 만들 수 있음: React를 사용하면 적은 코딩으로 더 많은 기능을 제공하여 동적 웹 애플리케이션을 쉽게 만들 수 있습니다.

  • 성능 향상: React는 가상 DOM을 사용하여 웹 애플리케이션의 성능을 높입니다.

  • 재사용 가능한 컴포넌트: 컴포넌트는 React 애플리케이션의 구성 요소로, 애플리케이션 전체에서 재사용할 수 있어 개발 시간을 크게 단축할 수 있습니다.

  • 단방향 데이터 흐름: React는 단방향 데이터 흐름을 따르므로 디버깅이 쉽고 애플리케이션의 오류 위치를 파악할 수 있습니다.

  • 쉬운 디버깅: 페이스북이 발표한 크롬 확장 프로그램을 사용하여 React 애플리케이션을 디버깅할 수 있어 프로세스가 빠르고 쉬워집니다.


  1. React의 동작 방식은 어떻게 되나요?

    React는 컴포넌트 기반으로 동작합니다. 컴포넌트는 애플리케이션의 독립적이고 재사용 가능한 코드 조각입니다. 각 컴포넌트는 자체 state와 props를 가지고 있습니다. React는 가상 DOM을 사용하여 변경된 부분만 실제 DOM에 반영합니다. 이를 통해 빠른 렌더링 속도를 보장합니다.


  2. React의 주요 기능은 무엇인가요?

  • JSX: JSX는 JavaScript 문법 확장으로 React와 함께 사용되어 사용자 인터페이스의 모양을 설명합니다.

  • 컴포넌트: 컴포넌트는 React 애플리케이션의 구성 요소이며, 사용자 인터페이스를 독립적이고 재사용 가능한 부분으로 분할합니다.

  • 가상 DOM: React는 메모리에 실제 DOM의 경량화된 표현인 가상 DOM을 유지 관리합니다. 객체의 상태가 변경되면 가상 DOM은 실제 DOM에서 해당 객체만 변경합니다.

  • 단방향 데이터 바인딩: React의 단방향 데이터 바인딩은 모든 것을 모듈화하고 빠르게 유지합니다.

  • 높은 성능: React는 변경된 컴포넌트만 업데이트하므로 매우 빠른 웹 애플리케이션을 만들 수 있습니다.


  1. JSX란 무엇인가요?
    JSX는 JavaScript의 구문 확장입니다. React에서 사용자 인터페이스의 모양을 설명하는 데 사용됩니다. JSX를 사용하면 JavaScript 코드가 포함된 동일한 파일에서 HTML 구조를 작성할 수 있습니다.


  1. 웹 브라우저가 JSX를 직접 읽을 수 있나요?

    웹 브라우저는 JSX를 직접 읽을 수 없습니다. 웹 브라우저는 일반 JS 객체만 읽도록 구축되었기 때문에 JSX는 일반 JavaScript 객체가 아닙니다. 웹 브라우저가 JSX 파일을 읽으려면 Babel을 사용하여 일반 JavaScript 객체로 변환해야 합니다.


  2. 가상 DOM이란 무엇인가요?

    DOM은 Document Object Model을 나타냅니다. DOM은 HTML 문서를 논리 트리 구조로 표현합니다. 트리의 각 분기는 노드로 끝나고 각 노드에는 객체가 포함됩니다. React는 메모리에 실제 DOM의 경량화된 표현을 유지하는데, 이를 가상 DOM이라고 합니다. 객체의 상태가 변경되면 가상 DOM은 실제 DOM에서 해당 객체만 변경합니다.


  3. Angular와 같은 다른 프레임워크 대신 React를 사용하는 이유는 무엇인가요?

  • 동적 애플리케이션을 쉽게 만들 수 있음

  • 가상 DOM을 사용하여 성능 향상

  • 재사용 가능한 컴포넌트로 개발 시간 단축

  • 단방향 데이터 흐름으로 디버깅이 쉬움

  • 전용 도구로 쉽게 디버깅할 수 있음


  1. ES6 표준과 ES5 표준의 차이점은 무엇인가요?

    exports vs export, require vs import 등 ES6 구문이 ES5 구문과 다른 몇 가지 사례가 있습니다.


  2. React 앱을 어떻게 만드나요?

  • NodeJS를 컴퓨터에 설치합니다. React 라이브러리를 포함한 많은 JavaScript 라이브러리가 포함된 npm이 필요하기 때문입니다.

  • 명령 프롬프트나 터미널을 사용하여 create-react-app 패키지를 설치합니다.

  • VS Code나 Sublime Text 같은 원하는 텍스트 편집기를 설치합니다.


  1. React에서 이벤트란 무엇인가요?

    이벤트는 키 누름, 마우스 클릭 등 사용자나 시스템이 트리거할 수 있는 동작입니다. React 이벤트는 HTML에서는 소문자 대신 camelCase를 사용하여 이름이 지정됩니다. JSX에서는 HTML에서 문자열 대신 함수를 이벤트 핸들러로 전달합니다.


  2. React에서 이벤트는 어떻게 생성하나요?

    간단하게는 JSX에서 이벤트 핸들러 지정하여 생성할 수 있습니다. 컴포넌트의 JSX 엘리먼트에 이벤트 핸들러를 지정하며, 핸들러 함수는 중괄호({})로 감싸줍니다. 직접 이벤트 핸들러 함수 정의할 수도 있는데, 컴포넌트 내부에 이벤트 핸들러 함수를 정의하고, 함수는 일반적으로 arrow function 또는 메서드로 정의됩니다. 이때, 이벤트 핸들러 함수는 이벤트 객체를 매개변수로 받습니다. 이벤트 객체를 통해 이벤트에 대한 추가 정보(예: 타겟 엘리먼트, 마우스 좌표 등)에 접근할 수 있습니다.


  3. React에서 합성 이벤트(synthetic events)란 무엇인가요?

    합성 이벤트는 서로 다른 브라우저의 네이티브 이벤트에 대한 응답을 하나의 API로 결합하여 이벤트가 브라우저 간에 일관되도록 합니다. 이를 통해 애플리케이션이 실행 중인 브라우저에 관계없이 일관된 동작을 보장합니다. 여기서 preventDefault는 합성 이벤트입니다.


  4. React에서 리스트가 어떻게 동작하는지 설명해주세요.

    React에서는 일반 JavaScript에서와 마찬가지로 리스트를 생성합니다. 리스트는 데이터를 순서대로 표시하며, map() 함수를 사용하여 리스트를 순회합니다.


  5. 리스트에서 키(keys)를 사용해야 하는 이유는 무엇인가요?

    키는 리스트에서 매우 중요한데 그 이유는 다음과 같습니다:

    • 키는 고유 식별자로 리스트에서 어떤 항목이 변경, 추가 또는 제거되었는지 식별하는 데 사용됩니다.

    • 또한 어떤 컴포넌트가 재렌더링되어야 하는지 결정하는 데 도움이 되므로, 매번 모든 컴포넌트를 렌더링하는 대신 업데이트된 컴포넌트만 재렌더링하여 성능을 높일 수 있습니다.


  1. React에서 코멘트는 어떻게 작성하나요?

    React에서 코멘트를 작성하는 방법은 두 가지가 있습니다:

  • 한 줄 주석: // 로 시작

  • 여러 줄 주석: /* 로 시작해서 */ 로 끝냄


  1. React에서 화살표 함수란 무엇이고 어떻게 사용되나요?

    화살표 함수는 React에 함수를 작성하는 간단한 방법입니다. 화살표 함수를 사용할 때는 생성자 내부에서 'this'를 바인딩할 필요가 없습니다. 이는 React 콜백에서 'this' 사용으로 인한 버그를 방지합니다.


  2. React와 React Native의 차이점은 무엇인가요?

React:

  • 출시일: 2013년

  • 플랫폼: 웹

  • HTML 사용: 가능

  • CSS 사용: 가능

  • 사전 지식: JavaScript, HTML, CSS

React Native:

  • 출시일: 2015년

  • 플랫폼: 모바일(안드로이드, iOS)

  • HTML 사용: 불가능

  • CSS 사용: 불가능

  • 사전 지식: React.js


  1. React 컴포넌트란 무엇인가요?

    컴포넌트는 React 애플리케이션의 구성 요소이며, 하나의 앱은 일반적으로 여러 컴포넌트로 구성됩니다. 컴포넌트는 기본적으로 사용자 인터페이스의 일부입니다. 사용자 인터페이스를 독립적이고 재사용 가능한 부분으로 나눠서 별도로 처리할 수 있습니다.

React에는 두 가지 유형의 컴포넌트가 있습니다:

  • 함수형 컴포넌트: 자체 state가 없고 렌더 메서드만 포함하므로 stateless 컴포넌트라고도 합니다. props를 다른 컴포넌트에서 데이터로 전달받을 수 있습니다.

  • 클래스 컴포넌트: 자체 state를 보유하고 관리할 수 있으며, JSX를 반환하는 별도의 렌더 메서드가 있습니다. state를 가질 수 있으므로 Stateful 컴포넌트라고도 합니다.


  1. React에서 render()의 용도는 무엇인가요?

    각 컴포넌트에는 render() 함수가 필요합니다. 이 함수는 컴포넌트에 표시할 HTML을 반환합니다. 둘 이상의 요소를 렌더링해야 하는 경우 모든 요소를 <div>, <form>과 같은 하나의 부모 태그 안에 넣어야 합니다.


  1. React에서 state란 무엇인가요?

    state는 컴포넌트의 데이터나 정보를 포함하는 React의 내장 객체입니다. 컴포넌트의 state는 시간이 지남에 따라 변경될 수 있으며, 변경될 때마다 컴포넌트가 다시 렌더링됩니다. state 변경은 사용자 작업이나 시스템 생성 이벤트에 대한 응답으로 발생할 수 있습니다. 컴포넌트의 동작과 렌더링 방식을 결정합니다.


  2. React에서 state는 어떻게 구현하나요?

    React에서 state는 컴포넌트 내부에서 관리되는 상태 값으로, 시간에 따라 변할 수 있는 동적인 데이터를 저장하고 관리하는 데 사용됩니다.

    React 16.8 버전부터 도입된 Hooks API 중 하나인 useState 훅을 사용하여 함수형 컴포넌트에서 state를 구현할 수 있습니다. useState 훅은 state 변수와 해당 변수를 업데이트하는 setter 함수를 반환합니다.

    state 값을 업데이트하려면 setter 함수를 호출해야 하며, React는 자동으로 컴포넌트를 다시 렌더링하여 업데이트된 state 값을 반영합니다.

    state는 컴포넌트 내에서 필요한 데이터를 저장하고 조작하는 데 사용되며, 사용자 인터랙션, 서버 데이터, 타이머 등 다양한 요인에 의해 변경될 수 있습니다.

    React에서 state를 적절히 사용하면 동적이고 인터랙티브한 사용자 인터페이스를 구현할 수 있습니다. 컴포넌트 간에 state는 공유되지 않고 각 컴포넌트 내부에서 독립적으로 관리되므로, 필요한 최소한의 데이터만 state로 관리하는 것이 좋습니다.


  3. 컴포넌트의 state는 어떻게 업데이트하나요?

    내장된 'setState()' 메서드를 사용하여 컴포넌트의 state를 업데이트할 수 있습니다.


  4. React에서 props란 무엇인가요?

    Props는 Properties의 약어입니다. 속성 값을 저장하고 HTML 속성과 유사하게 작동하는 React 내장 객체입니다. Props는 한 컴포넌트에서 다른 컴포넌트로 데이터를 전달하는 방법을 제공합니다. Props는 함수에 인수가 전달되는 것과 동일한 방식으로 컴포넌트에 전달됩니다.


  5. 컴포넌트 간에 props는 어떻게 전달하나요?

    부모 컴포넌트에서 자식 컴포넌트로 props를 전달할 때는 JSX 내에서 속성(attribute)의 형태로 전달합니다. 자식 컴포넌트에서는 함수의 매개변수를 통해 전달받은 props에 접근할 수 있습니다. 전달받은 props는 자식 컴포넌트 내에서 읽기 전용입니다. 자식 컴포넌트는 props를 직접 수정할 수 없고, 변경이 필요한 경우 부모 컴포넌트에서 state를 변경하고 새로운 props를 전달해야 합니다.


  1. state와 props의 차이점은 무엇인가요?

state:

  • 용도: 컴포넌트에 대한 정보 보유

  • 변경 가능성: 변경 가능

  • 읽기 전용: 변경될 수 있음

  • 하위 컴포넌트: 하위 컴포넌트가 액세스할 수 없음

  • Stateless 컴포넌트: state를 가질 수 없음

props:

  • 용도: 다른 컴포넌트에 데이터를 전달하는 것을 허용

  • 변경 가능성: 변경 불가능

  • 읽기 전용: 읽기 전용

  • 하위 컴포넌트: 하위 컴포넌트가 액세스할 수 있음

  • Stateless 컴포넌트: props를 가질 수 있음


  1. React에서 higher-order 컴포넌트란 무엇인가요?

    higher-order 컴포넌트는 다른 컴포넌트의 컨테이너 역할을 합니다. 이를 통해 컴포넌트를 단순하게 유지하고 재사용성을 높일 수 있습니다. 일반적으로 여러 컴포넌트가 공통 로직을 사용해야 할 때 사용됩니다.


  2. 두 개 이상의 컴포넌트를 하나로 어떻게 임베드할 수 있나요?

    React에서 두 개 이상의 컴포넌트를 하나로 임베드하는 방법은 크게 두 가지가 있습니다.

    첫 번째는 부모 컴포넌트 안에 자식 컴포넌트들을 배치하는 것입니다. 부모 컴포넌트의 JSX 안에 자식 컴포넌트들을 적절히 배치하면 됩니다. 이때 자식 컴포넌트들은 props를 통해 부모로부터 필요한 데이터를 전달받을 수 있습니다.

    두 번째 방법은 합성 컴포넌트(Composite Component)를 사용하는 것입니다. 합성 컴포넌트는 여러 개의 컴포넌트를 조합하여 하나의 새로운 컴포넌트를 만드는 것을 말합니다. 이때 합성 컴포넌트 내부에서 자식 컴포넌트들을 적절히 배치하고, 필요한 props를 전달해주면 됩니다.

    이렇게 함으로써 코드의 재사용성을 높이고, 컴포넌트 간의 결합도를 낮출 수 있습니다. 또한 UI의 일관성을 유지하면서도 유연하게 구조를 변경할 수 있게 됩니다.


  3. 클래스 컴포넌트와 함수형 컴포넌트의 차이점은 무엇인가요?

클래스 컴포넌트:

  • state를 보유하고 관리할 수 있음

  • stateless 컴포넌트에 비해 복잡함

  • 모든 생명주기 메서드로 작업할 수 있음

  • 재사용할 수 있음

함수형 컴포넌트:

  • state를 보유하거나 관리할 수 없음

  • 이해하기 쉬움

  • 생명주기 메서드로 작동하지 않음

  • 재사용할 수 없음


  1. 컴포넌트의 생명주기 메서드를 설명해주세요.

  • getInitialState(): 컴포넌트가 생성되기 전에 실행됩니다.

  • componentDidMount(): 컴포넌트가 렌더링되어 DOM에 배치될 때 실행됩니다.

  • shouldComponentUpdate(): 컴포넌트가 DOM에 대한 변경 사항을 결정할 때 호출되며 특정 조건에 따라 "true" 또는 "false" 값을 반환합니다.

  • componentDidUpdate(): 렌더링 직후에 호출됩니다.

  • componentWillUnmount(): 컴포넌트가 영구적으로 파괴되고 마운트 해제되기 직전에 호출됩니다.


  1. Redux란 무엇인가요?

    Redux는 애플리케이션 상태를 관리하는 데 사용되는 오픈 소스 JavaScript 라이브러리입니다. React는 사용자 인터페이스를 구축하기 위해 Redux를 사용합니다. Redux는 JavaScript 애플리케이션을 위한 예측 가능한 상태 컨테이너로, 전체 애플리케이션의 상태 관리에 사용됩니다.


  2. Redux의 구성 요소는 무엇인가요?

  • Store: 애플리케이션의 상태를 보유합니다.

  • Action: 저장소에 대한 정보의 출처입니다.

  • Reducer: 저장소로 전송된 액션에 대한 응답으로 애플리케이션의 상태가 어떻게 변경되는지 지정합니다.


  1. Flux란 무엇인가요?

    Flux는 Facebook이 웹 애플리케이션을 구축하기 위해 사용하는 애플리케이션 아키텍처입니다. 클라이언트 측 애플리케이션 내에서 복잡한 데이터를 처리하는 방법이며 React 애플리케이션에서 데이터 흐름을 관리합니다. 데이터의 단일 출처(저장소)가 있으며 특정 작업을 트리거하는 것이 저장소를 업데이트하는 유일한 방법입니다. 작업은 디스패처를 호출한 다음 저장소가 트리거되고 자체 데이터에 따라 업데이트됩니다. 디스패치가 트리거되고 저장소가 업데이트되면 변경 이벤트를 내보내 뷰가 그에 따라 다시 렌더링될 수 있습니다.


  2. Redux는 Flux와 어떻게 다른가요?

Redux:

  • Redux는 애플리케이션 상태를 관리하는 데 사용되는 오픈 소스 JavaScript 라이브러리

  • 저장소의 상태는 불변

  • 단일 저장소만 가질 수 있음

  • Reducer 개념 사용

Flux:

  • Flux는 아키텍처이며 프레임워크나 라이브러리가 아님

  • 저장소의 상태는 변경 가능

  • 여러 저장소를 가질 수 있음

  • 디스패처 개념 사용


  1. React Router란 무엇인가요?

    React Router는 React 위에 구축된 라우팅 라이브러리로, React 애플리케이션에서 경로를 생성하는 데 사용됩니다. 이는 가장 자주 묻는 React 인터뷰 질문 중 하나입니다.


  1. React Router가 필요한 이유는 무엇인가요?

  • 일관된 구조와 동작을 유지하고 단일 페이지 웹 애플리케이션을 개발하는 데 사용됩니다.

  • React 애플리케이션에 여러 경로를 정의하여 단일 애플리케이션에서 여러 뷰를 구현할 수 있습니다.


  1. React 라우팅은 기존 라우팅과 어떻게 다른가요?

React 라우팅:

  • 단일 HTML 페이지

  • 사용자는 동일한 파일에서 여러 뷰를 탐색함

  • 단일 파일이므로 페이지가 새로 고쳐지지 않음

  • 성능 향상

기존 라우팅:

  • 각 뷰는 새로운 HTML 페이지

  • 사용자는 각 뷰에 대해 여러 파일을 탐색함

  • 사용자가 탐색할 때마다 페이지가 새로 고쳐짐

  • 성능이 느림


  1. React 라우팅은 어떻게 구현하나요?

    React에서 라우팅을 구현하기 위해 일반적으로 react-router-dom 라이브러리를 사용합니다. 주요 과정은 다음과 같습니다.

    1. react-router-dom 설치: npm이나 yarn을 통해 라이브러리를 설치합니다.

    2. index.js에서 BrowserRouter로 App 컴포넌트 감싸기: BrowserRouter는 HTML5의 History API를 사용하여 UI를 URL과 동기화합니다.

    3. App.js에서 Route 컴포넌트를 사용하여 경로 설정: Route 컴포넌트의 path prop에 경로를, component prop에는 렌더링할 컴포넌트를 지정합니다.

    4. Link 컴포넌트를 사용하여 다른 경로로 이동할 수 있는 링크 생성: Link 컴포넌트의 to prop에 이동할 경로를 설정합니다.

    5. 필요한 경우 파라미터나 쿼리 문자열을 사용하여 동적 라우팅 구현: URL 파라미터는 Route 경로에 콜론(:)을 사용하여 설정하고, useParams 훅으로 접근합니다. 쿼리 문자열은 location 객체의 search 속성을 통해 접근할 수 있습니다.


  2. React에서 CSS 모듈을 사용하는 방법을 설명해주세요.

  • CSS 모듈 파일은 .module.css 확장자로 생성됩니다.

  • 모듈 파일 내부의 CSS는 해당 모듈을 가져온 컴포넌트에서만 사용할 수 있으므로, 컴포넌트 스타일링 시 이름 충돌이 발생하지 않습니다.


  1. React 컴포넌트는 어떻게 스타일링하나요?

    React 컴포넌트를 스타일링하는 몇 가지 방법이 있습니다:

  • 인라인 스타일링

  • JavaScript 객체

  • CSS 스타일시트


출처 : https://www.simplilearn.com/tutorials/reactjs-tutorial/reactjs-interview-questions

Top 40 ReactJS Interview Questions and Answers in 2024 | Simplilearn

Simplilearn.com

Top 40 ReactJS Interview Questions and Answers in 2024 | Simplilearn

[위시캣]2023년 회고와 2024년 웹 개발 트렌드 전망

웹개발자 관점의 2023년 회고와 2024년 웹 개발 트렌드 전망 글입니다. 어디까지나 개인 의견의 글이므로 참고만 하시면 좋을거 같습니다. 자세한 내용은 원문을 참고해주세요~ ^^


  1. 2023년 웹 개발 회고

1) 인공지능 혁신의 시대

  • 2023년도는 생성형 AI의 한해로 소프트웨어 개발 전 과정에 걸쳐 영향을 주고 있으며, 웹 개발 방식도 바꾸고 있음

    • 분석 및 설계 단계(ChatGPT)-문서작성

    • 개발 및 테스트 단계(Copilot)- 소스 코드와 테스트 코드 작성

2) 웹 프레임워크 & 기술

  • 프로그래밍 언어

    • Python(28%) > Java(16%) > Javascript(9%) > C/C++ > C# > PHP > R > TypeScript > Swift > Objective-C > Rust

  • 웹프레임워크 및 기술: 스택오버플로어 설문조사 결과

    • Node.js(42.65%) > React(40.58%) > jQuery(22%) > Express(19%) > Angular(17%) > Next.js > ASP.NET core > Vue.js > WordPress > ASP.NET

  • 프로그레시브 웹 앱과 웹 어셈블리

    • 프로그레시브 웹 앱((Progressive Web Apps, PWA): 전통적인 웹 앱과 네이티브 앱의 장점을 가진 진보된 형태의 앱

    • 웹 어셈블리(WebAssembly, WASM): C나 C++, Rust 같은 컴파일 언어의 빠른 성능을 웹에 적용하는 기술로 웹 브라우저 외에도 서버를 비롯한 다양한 디바이스에도 웹 어셈블리가 적용되고 있음.웹 애플리케이션 개발에 주로 사용


  1. 2024년 웹 개발 트렌드 전망

1) 인공지능/머신러닝과 웹의 통합

  • 2024년에는 오픈AI나 엔트로픽 같은 인공지능 기업에서 제공하는 API를 활용한 웹 개발 프로젝트가 크게 증가 예상

  • 웹 개발은 AI와 ML을 활용하여, 웹 사이트 내 검색 기능을 개선하고 사용자에게 개인화된 경험을 제공하는 방향으로 나아갈 것으로 예상

  • 웹 사이트와 웹 애플리케이션에 통합된 챗봇(Chatbot)을 통해 사용자 참여를 높이고 궁극적으로 더 많은 전환을 유도

2) 클라우드와 서버리스 아키텍처

  • 라우드 서버를 구축하고 관리하는 역할까지 클라우드 업체에 맡기는 서버리스 아키텍처(Serverless Architecture)가 점차 늘어날 것으로 예상

3) 웹 보안 동향 및 전망

  • 2024년에는 AI를 활용한 소셜 엔지니어링 기반 해킹을 비롯하여 다양한 해킹 수법이 종횡할 것으로 예측됨에 따라 웹 개발 프로젝트에서 각종 보안 위협에 대한 대처와 데이터 유출 방지가 더욱 중요해졌고, 웹 개발자들은 더더욱 OWASP Top 10과 같은 보안 가이드라인을 엄격히 준수 필요


  1. 웹 개발자의 미래와 커리어 전략

1) 인공지능 및 머신러닝 학습

  • 웹과 인공지능 서비스 및 머신러닝 기능을 통합하는 형태의 포트폴리오와 커리어 패스 고민 필요

2) 웹 개발자의 커리어 성장 전략

  • 기존의 프로그래밍과 시스템 디자인에 관한 이해를 바탕으로, 인공지능과 머신러닝에 대한 내용을 학습하고, 이를 웹과 통합하여 여러 가지 문제를 해결할 수 있는 비즈니스 감각을 갖춰야 될 것으로 예상.

2023년 회고와 2024년 웹 개발 트렌드 전망 | 요즘IT

요즘IT

2023년 회고와 2024년 웹 개발 트렌드 전망 | 요즘IT

🥾 내가 지금까지 경험한 프론트엔드 UI 도구들

- jQuery, AngularJS, Vue를 거쳐 React에 이르기까지의 경험을 공유합니다.


---


오늘은 어떤 주제로 글을 쓸까 고민을 하다가, 예전에 생각해두었던 주제인 저의 기술 스택의 변화에 대해 이야기해보려고 합니다.


제 블로그를 초창기부터 살펴보신 분이라면 아시겠지만, 저는 2021년까지는 주로 Vue를 사용하다가 그 이후부터는 React를 사용하고 있습니다. 하지만 그전에는 jQuery와 AngularJS를 사용한 적도 있죠. 이처럼 시간이 흐르면서 사용하는 기술 스택에는 변화가 생기기 마련입니다.


엄밀하게 따지자면 AngularJS와 Vue는 프레임워크, jQuery와 React는 라이브러리라는 차이가 있습니다. 이들을 함께 포괄할 수 있는 단어가 마땅치 않아서 프론트엔드 UI 도구라고 이름을 붙여 보았습니다.


그래서 오늘은 이렇게 제가 4가지의 프론트엔드 UI 도구를 사용하며 겪은 경험에 이야기해보려고 합니다.


https://wormwlrm.github.io/2024/03/18/UI-Tools-History.html

내가 지금까지 경험한 프론트엔드 UI 도구들 - 재그지그의 개발 블로그

재그지그의 개발 블로그

내가 지금까지 경험한 프론트엔드 UI 도구들 - 재그지그의 개발 블로그

웹 컴포넌트 (Web Components)

컴포넌트 기반 UI 개발의 패러다임을 주도한 React가 등장한지도 어느 덧 10년이 넘었네요. 이제 Vue.js, Svelte, Angular 등 어떤 프론트엔드 프레임워크를 사용하든 현대 웹 개발에서 컴포넌트 기반으로 UI 개발하는 것은 거의 당연한 얘기가 되었죠. 그리고 마침내 웹 컴포넌트(Web Components)를 통해서 별다른 프론트엔드 프레임워크가 없어도 UI 컴포넌트를 만들 수 있는 길이 활짝 열렸습니다.


웹 컴포넌트는 웹사이트나 애플리케이션에서 UI를 모듈화하고 재사용할 수도록 해주는 웹 표준 기술입니다. React와 같은 프론트엔드 프레임워크에서 오랫동안 경험해왔던 UI 컴포넌트를 떠올리시면 이해가 쉬우실 것 같습니다.


React 컴포넌트는 React에서만 쓸 수 있고, Vue.js 컴포넌트는 Vue.js에서만 쓸 수 있는 근본적인 한계가 있습니다. 하지만 웹 컴포넌트는 이와 같은 구애를 받지 않고 어떤 프론트엔드 프레임워크와도 함께 쓸 수 있습니다. 왜냐하면 웹 컴포넌트는 브라우저에서 네이티브(native)하게 작동하기 때문입니다.


이러한 웹 컴포넌트의 띄어난 호환성과 이식성, 재사용성 및 생산성 덕분에 최근에는 디자인 시스템(Design System)을 구현하는 최고의 기술로 주목받고 있습니다.


모든 기술이 그러하든 웹 컴포넌트가 장점만 있는 것은 아닙니다. 대표적인 단점으로 API가 직관적이지 않다고 평가받고 있고, 배우기 쉬운 기존 프런트엔드 프레임워크 대비 진입 장벽이 높은 편입니다. 그래서 실제 프로젝트에서는 이러한 단점을 보완한기 위해서 웹 컴포넌트를 직접 작성하기 보다는 Lit나 Stencil과 같은 라이브러리를 많이 사용합니다.


웹 컴포넌트은 크게 다음 세 가지 핵심 기술로 이루어집니다.

  • Custom Elements: 사용자 정의 HTML 요소(element) 또는 태그(tag)를 정의할 수 있습니다.

  • Shadow DOM: DOM 트리의 일부를 캡슐화하여 스타일과 마크업이 외부와 충돌하지 않도록 해줍니다.

  • HTML Templates: 화면에 나타나지 않는 HTML 조각(fragment)을 정의해놓고 재사용할 수 있습니다.

이 웹 표준 기술들은 현재 주요 브라우저에서 모두 지원되고 있습니다.


이번 포스팅에서는 각각의 기반 기술을 하나씩 살펴보면 웹 컴포넌트의 기본 개념을 잡아보도록 하겠습니다.


📝 포스팅: https://www.daleseo.com/web-components/

자바스크립트 라이브러리의 급 나누기 🥇🥈🥉

State of JS 2023 설문 결과에는 매우 흥미로운 데이터가 있습니다. 바로 자바스크립트의 주요 라이브러리들을 리텐션(retention)에 따라 급(tier)을 나눈 건데요. 즉, 퍼센트가 높을수록 해당 라이브러리에 대한 경험이 좋아서 계속해서 쓰길 원하는 응답자가 많다는 뜻입니다 🤗

영광의 S티어는 Vite, Vitest, Playwrite, pnpm, MSW, esbuild, SWC, Testing Library, Astro가 차지했는데요. 아마 큰 이견이 없이 대부분의 자바스립트 개발자들에게 사랑받고 있는 라이브러리일 것입니다. 올해는 Svelte와 Storybook이 A티어로 밀려날 정도로… 요즘 라이브러리 간에 경쟁이 치열하고, 개발자들의 기대치가 참 높아졌구나라는 생각이 들었습니다.

B티어에는 비교적 연식이 쫌 된 굴직한 라이브러리가 주로 포진해 있습니다. 대표적으로 React와 Vue를 들 수 있죠. 그럼에도 불구하고 이 두 라이브러리를 사용한다는 응답자는 작년보다 오히려 증가하였습니다. 아무래도 많이 쓰이는 만큼 불만도 많고 이탈도 많은 게 아닐까요? 시장 점유율이 워낙 높아서 좋든 싫든 프론트엔드 개발자로 먹고 살려면 써야하는 라이브러리가 된 느낌입니다 😂

마지막으로 C티어에는 다양한 이유로 인기가 예전같지 않은 라이브러리들이 꽤 보이는데요. 최근에 빌드 도구의 세대 교체가 활발히 일어나면서 Webpack과 Parcel은 점점 설 자리를 잃어가고 있는 것 같습니다. Angular의 하락세는 수년간 지속되어 와서 이제는 그닥 놀랍지도 않네요.

개인적으로 제일 눈에 띄는 부분은 Gatsby의 몰락입니다. C티어 내에서도 최하위권이죠. Gatsby는 몇 년전만 해도 Next.js와 어깨를 나란히 하던 React 기반 정적 사이트 생성기(Static Site Generator)입니다. 잘 나가던 라이브러리도 순식간에 나락갈 수 있다는 것을 잘 보여주는 예라고 할 수 있겠네요 😓

관련 개발자 Q&A

모두 보기

Google Vision API를 활용하는 본문같은 기능 개발 가능할까요?

제가 지금 진행하고 있는 프로젝트에서 사용해야 하는 기능은, Google Vision API를 통해 사진에서 의류에 대한 객체를 감지한 후 각 객체에 대한 색상과 특징(상의면 티셔츠인지 긴팔인지)을 검출해서 분류되어 나온 각 객체에 대한 특징을 스트링으로 포맷화 하는 과정을 거쳐야하는데 가능할까요..? 예를 들어 Google Vision API를 통해 생긴 Boundary box를 통해 색상(코드식으로 #232423), 특징(long sleeve)라는 걸 검출해내고 이를 "노란색 긴팔 티셔츠" 라는 하나의 문장으로 포맷화하는 과정 입니다. 혹시 이게 실현가능한 부분일까요..? 백엔드는 Spring, 프론트엔드는 Angular를 사용중에 있습니다. 현재는 GoogleVisionAPI를 통한 객체 검출까지만 진행된 상태입니다.

의류의 특징을 어느 수준으로 검출하고자 하는지에 따라 다르겠지만 말씀하신 과정 자체는 가능합니다. 직접 API 를 사용해 보셨으면 아시겠지만 Vision API 를 통해서 반환되는 값은 object detection 뿐 아니라 이미지 내 객체들의 특성을 label 로 구분해주고 주 색상 분포와 객체 crop 을 위한 boundary position 등과 같은 다양한 데이터를 추출해 줍니다. 결국 API 응답 데이터들을 parsing 해서 confidence 가 일정 수준 이상인 값들만 조합한다면 하나의 문장으로 이미지의 특성을 설명하는 것은 가능할 듯 합니다. (물론, 영어를 한글로 변환하는 과정은 필요 합니다. feature 들이 한글로 나오지는 않는 걸로 알고 있어서요 ^^) 다만, label로 추출 가능한 단어를 지정할 수 없기 때문에 다양한 이미지로 먼저 테스트 해보시는게 좋을 듯 합니다. 저는 Vision API 안내 웹 페이지의 데모 기능(https://cloud.google.com/vision?hl=ko#section-2)을 이용해서 다양한 이미지를 테스트 해보고 원하는 label이 잘 나오는지 확인 했었습니다. 저도 의류 관련 서비스에서 테스트 했었는데, 이렇게 비슷한 고민을 보니 반갑네요. 꼭 좋은 결과 얻길 바라겠습니다 :)

Node js에서 ejs, pug, handlebar

그냥 개인적인 호기심이 있어 질문드립니다! 최근 nodejs 강의를 듣고 있는데 ejs,pug, hanblebar처럼 동적으로 페이지를 만들 수 있도록 템플릿 엔진들을 다뤄봤었습니다. 이걸 하면서 느낀게 조건부렌더링이나 루프로 htmlelement 생성하는게 리액트에서는 이게 되게 쉬운데 여기서는 나름대로 태그 붙이고 일일이 하나하나 따로따로 쳐줘야되고 이런 것들이 좀 불편하다고 느껴졌습니다. 레이아웃 만들어주는 부분도 차이를 느꼈었습니다. 근데 툴 배포 연도를 보니깐 다 리액트 전에 등장했던 도구들이더라고요. 동적 컨텐츠를 위한 사이트를 만들기 위해서 이전에 사용됐던 도구들(pug, handlebar, ejs)을 더 개발자 경험을 개선한 거를 현대의 spa 프레임워크나 라이브러리들(react, vue, angular)이라고 이해할 수 있을까요?

안녕하세요! 말씀하신 개발자 경험을 개선한 것도 맞지만 SPA가 뜬 주된 이유는 앱들이 기능이 복잡해지고 커지면서 서버에 부담이 많이 되기 시작해서인걸로 알고 있습니다. 공부하신대로 기존에는 서버에서 템플릿 엔진을 포함한 각각의 방식으로 데이터와 뷰를 연산한 페이지를 내려주는 형태가 일반적이었다고 합니다. 기술이 발전하면서 웹사이트에 여러가지 기능들을 더하기 시작하자 이는 서버에 불필요한 부담을 주었고, "서버에서 할 필요없는 연산은 클라이언트 컴퓨팅 파워로 처리하자"가 SPA의 기조였어요. 리액트는 이 SPA를 좀 더 효율적으로 해내고자 VDOM이라는 개념을 탑재해서 나온 라이브러리였구요. 실제로 SPA와 CSR로 위의 문제를 많이 해결했고 서버는 필요한 연산만해서 데이터를 잘 내려주는 본연의 작업만 잘 처리할 수 있게되었죠. 개발자 경험 관점에서 보자면 SPA 프레임워크들이 여럿 나오면서 뷰를 작성하는 코드 방식을 기존 템플릿 엔진과는 다른 각자만의 방식을 채택했어요. 리액트에서 사용하는 JSX도 그중 하나라고 보시면 됩니다. 다만, SPA도 만능은 아니라서 모두가 SPA를 고집하지는 않습니다. 심지어 요즘은 리액트도 서버 쪽에서 미리 리액트 트리 노드를 연산하는 기능을 지원하기 시작해서 개인적으로 약간 과도기지 않나 싶어요. 어느정도 시간이 지나면 어떻게 사용하면 좋을지 감이 잡힐 것 같습니다. 비슷한 글들이 커리어리 내에도 올라왔었던것 같아서 해당 링크랑 그냥 읽어보면 좋을법한 링크 남겨드릴게요! - https://deno.com/blog/the-future-and-past-is-server-side-rendering - https://careerly.co.kr/qnas/2625 - https://www.startupcode.kr/company/blog/archives/11

Angular 개발

최근 Angular 보다 React 가 대세인데요. 업무에서 Angular를 하고 계신 분들이 얼마나 되는지 궁금합니다.

요즘 React가 인기를 얻고 있긴 하지만, Angular도 여전히 많은 개발자들이 사용하고 있는 프레임워크입니다. Angular는 구글이 지원하고 있으며, 대규모 애플리케이션과 엔터프라이즈 수준의 프로젝트에서 강점을 발휘합니다. Angular의 인기를 정확하게 수치화하기는 어렵지만, 여전히 수많은 개발자들이 Angular를 사용하고 있습니다. Angular 커뮤니티는 활발하게 유지되고 있으며, 다양한 기업과 개발자들이 Angular를 통해 웹 애플리케이션을 구축하고 있습니다. 또한, 프레임워크 선택은 개발자의 선호와 프로젝트 요구사항에 따라 다를 수 있습니다. Angular와 React는 각각 장단점이 있기 때문에, 어떤 프레임워크가 더 적합한지는 개별 프로젝트의 목적과 상황에 따라 달라집니다. 결론적으로, React가 인기를 얻고 있지만 Angular를 사용하는 개발자들도 여전히 많이 있습니다. 이들 중 많은 개발자들은 Angular의 특성과 장점을 활용해 성공적인 웹 애플리케이션을 구축하고 있습니다.

Angular 에서 한글로 입력하면 keydown 안먹히는 문제

Angular 에서 한글로 테스트하다 발견했는데 <input type='text'>에서 한글로 입력하면 keydown이 안먹네요...? 혹시 이유를 아시는 분 있으신가요?

angular를 써본적은 없지만, 궁금해서 한번 검색해보니 아래 내용이 있네요 '한글과 같은 조합형 문자의 경우, 일반적으로 글자 입력 후 space나 enter 등을 통하여 문자 입력을 완료한 시점에 compositioned 라는 이벤트가 발생한다. 이 이벤트에 따라 Angular는 양방향 바인딩을 처리한다. 작성중인 문자를 모두 바인딩하기 위해서는 Angular에서 제공되는 COMPOSITION_BUFFER_MODE를 변경해야 한다.' app.module.ts에서 COMPOSITION_BUFFER_MODE를 수정해 줘야한다고 합니다. 참고한 링크입니다. - http://devstory.ibksplatform.com/2017/07/angular2.html - https://gogomalibu.tistory.com/151

두 회사중에 여러분 같으면 어디를 선택하시겠나요?

제 나이는 31살 이고 웹sw, 반도체 sw 개발, 전산실 운영 등 경험이 있습니다. 1. 철강회사 MES 개발 및 운영(경력) -JAVA, spring, angular js, c#, 웹 개발 등 - 연봉 5천 4백(보너스 제외) - 울산 근무( 본가 출퇴근 자차로 30분 ) - 점심, 저녁 미제공 - 분위기 약간 경직 - 대기업 자회사 2. 반도체 장비 및 응용 SW 개발 및 운영(경력) -c++, mfc, c, c#, python 등 - 연봉 5천 2백 (보너스 제외) - 수원 근무( 자취방에서 출퇴근 자차로 20분) - 점심, 저녁 제공 - 분위기 수평 - 대기업 자회사 어디를 선택해야 할까요?? 만약 입사하게 된다면 최소 5년 이상은 근무 할 생각입니다. 차후 이직이나 미래가 밝고 재밌게 일 할 수 있는 곳을 가고 싶은데 고민이네요,,,

저는 2번에 마음이 기울어지네요 사실 일이 힘든것보다 사람힘든게 더 크다고 생각하기 때문에 분위기 좋은곳이 더 괜찮을 것 같아요

공식 홈페이지

github.com

최신 버전 정보

19.0.0

최신 버전 출시일

2024.11.19

연관 라이브러리

라이브러리 로고React라이브러리 로고Vue라이브러리 로고Svelte라이브러리 로고Solid.js

의견 보내기