λ€μν JavaScript νλ μμν¬μμ μΉ μ»΄ν¬λνΈλ₯Ό ν΅ν©νμ¬ νμ₯ κ°λ₯νκ³ μ μ§ κ΄λ¦¬ κ°λ₯ν μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ μ λ΅μ μ΄ν΄λ³΄μΈμ. μνν μνΈ μ΄μ©μ±μ μν λͺ¨λ² μ¬λ‘λ₯Ό μμ보μΈμ.
μΉ μ»΄ν¬λνΈ μνΈ μ΄μ©μ±: κΈλ‘λ² κ°λ°μ μν νλ μμν¬ ν΅ν© μ λ΅
μΉ μ»΄ν¬λνΈλ μλ‘ λ€λ₯Έ JavaScript νλ μμν¬μμ μλνλ μ¬μ¬μ© κ°λ₯νκ³ μΊ‘μνλ HTML μμλ₯Ό μμ±νλ κ°λ ₯ν λ°©λ²μ μ 곡ν©λλ€. μ΄λ¬ν μνΈ μ΄μ©μ±μ λ€μν νκ³Ό κΈ°μ μ΄ μ’ μ’ μλ ΄νλ κΈλ‘λ² κ°λ° νκ²½μμ νΉν νμ₯ κ°λ₯νκ³ μ μ§ κ΄λ¦¬ κ°λ₯ν μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ λ° μ€μν©λλ€. μ΄ λΈλ‘κ·Έ κ²μλ¬Όμμλ React, Angular, Vue.js λ±κ³Ό κ°μ μΈκΈ° μλ JavaScript νλ μμν¬μ μΉ μ»΄ν¬λνΈλ₯Ό ν΅ν©νκΈ° μν λ€μν μ λ΅μ νμνμ¬ μ μΈκ³ κ°λ°μμκ² μ€μ©μ μΈ μμ ν΅μ°°λ ₯μ μ 곡ν©λλ€.
μΉ μ»΄ν¬λνΈλ 무μμΈκ°μ?
μΉ μ»΄ν¬λνΈλ μΊ‘μνλ μ€νμΌλ§κ³Ό λμμ μ¬μ©νμ¬ μ¬μ©μ μ μλ μ¬μ¬μ© κ°λ₯ν HTML μμλ₯Ό μμ±ν μ μλ μΉ νμ€ μ§ν©μ λλ€. λ€μ μΈ κ°μ§ μ£Όμ κΈ°μ λ‘ κ΅¬μ±λ©λλ€.
- μ¬μ©μ μ μ μμ: μ체 HTML νκ·Έμ κ΄λ ¨ λμμ μ μν μ μμ΅λλ€.
- μλ DOM: μ»΄ν¬λνΈμ λν λ³λμ DOM νΈλ¦¬λ₯Ό μμ±νμ¬ μΊ‘μνλ₯Ό μ 곡νμ¬ μ€νμΌλ§κ³Ό μ€ν¬λ¦½ν μ λ¬Έμμ λλ¨Έμ§ λΆλΆμΌλ‘λΆν° 보νΈν©λλ€.
- HTML ν νλ¦Ώ: DOMμ 볡μ νμ¬ μ½μ ν μ μλ μ¬μ¬μ© κ°λ₯ν HTML μ€λν«μ μ μνλ λ°©λ²μ μ 곡ν©λλ€.
μ΄λ¬ν κΈ°μ μ ν΅ν΄ κ°λ°μλ κΈ°λ³Έ νλ μμν¬μ κ΄κ³μμ΄ λͺ¨λ μΉ μ ν리μΌμ΄μ μμ μ½κ² 곡μ νκ³ ν΅ν©ν μ μλ λͺ¨λμ μ¬μ¬μ© κ°λ₯ν μ»΄ν¬λνΈλ₯Ό ꡬμΆν μ μμ΅λλ€.
μνΈ μ΄μ©μ±μ νμμ±
μ€λλ μ λ€μν μΉ κ°λ° νκ²½μμλ μ¬λ¬ JavaScript νλ μμν¬λ₯Ό νμ©νκ±°λ ν νλ μμν¬μμ λ€λ₯Έ νλ μμν¬λ‘ λ§μ΄κ·Έλ μ΄μ ν΄μΌ νλ νλ‘μ νΈλ₯Ό μ νλ κ²μ΄ μΌλ°μ μ λλ€. μΉ μ»΄ν¬λνΈλ μ¬μ¬μ© κ°λ₯ν UI μμλ₯Ό ꡬμΆνκΈ° μν νλ μμν¬μ ꡬμ λ°μ§ μλ λ°©λ²μ μ 곡νμ¬ μ΄λ¬ν κ³Όμ μ λν μ루μ μ μ 곡ν©λλ€. μνΈ μ΄μ©μ±μ μ΄λ¬ν μ»΄ν¬λνΈκ° κΈ°μ μ€νμ κ΄κ³μμ΄ λͺ¨λ νλ‘μ νΈμ μννκ² ν΅ν©λ μ μλλ‘ λ³΄μ₯ν©λλ€.
μλ₯Ό λ€μ΄, κΈλ‘λ² μ μ μκ±°λ νλ«νΌμ μκ°ν΄ 보μΈμ. μλ‘ λ€λ₯Έ νμ΄ μΉμ¬μ΄νΈμ μλ‘ λ€λ₯Έ μΉμ μ λ΄λΉν μ μμΌλ©°, κ° νμ μ νΈνλ νλ μμν¬λ₯Ό μ¬μ©ν©λλ€. μΉ μ»΄ν¬λνΈλ₯Ό μ¬μ©νλ©΄ μ ν μΉ΄λ, μ₯λ°κ΅¬λ λλ μ¬μ©μ μΈμ¦ λͺ¨λκ³Ό κ°μ μ¬μ¬μ© κ°λ₯ν μ»΄ν¬λνΈλ₯Ό κΈ°λ³Έ νλ μμν¬μ κ΄κ³μμ΄ λͺ¨λ μΉμ μμ 곡μ ν μ μμ΅λλ€.
νλ μμν¬μ μΉ μ»΄ν¬λνΈ ν΅ν© μ λ΅
JavaScript νλ μμν¬μ μΉ μ»΄ν¬λνΈλ₯Ό ν΅ν©νλ €λ©΄ νλ μμν¬κ° μ¬μ©μ μ μ μμ, λ°μ΄ν° λ°μΈλ© λ° μ΄λ²€νΈ μ²λ¦¬λ₯Ό μ²λ¦¬νλ λ°©μμ μ μ€νκ² κ³ λ €ν΄μΌ ν©λλ€. μνν μνΈ μ΄μ©μ±μ λ¬μ±νκΈ° μν λͺ κ°μ§ μ λ΅μ λ€μκ³Ό κ°μ΅λλ€.
1. μΉ μ»΄ν¬λνΈλ₯Ό κΈ°λ³Έ HTML μμλ‘ μ¬μ©
κ°μ₯ κ°λ¨ν λ°©λ²μ μΉ μ»΄ν¬λνΈλ₯Ό κΈ°λ³Έ HTML μμλ‘ μ·¨κΈνλ κ²μ λλ€. λλΆλΆμ μ΅μ νλ μμν¬λ νΉλ³ν κ΅¬μ± μμ΄ μ¬μ©μ μ μ μμλ₯Ό μΈμνκ³ λ λλ§ν μ μμ΅λλ€. κ·Έλ¬λ λ°μ΄ν° λ°μΈλ© λ° μ΄λ²€νΈ μ²λ¦¬λ₯Ό μλμΌλ‘ μ²λ¦¬ν΄μΌ ν μ μμ΅λλ€.
μ: React
Reactμμλ JSX μ½λμμ μΉ μ»΄ν¬λνΈλ₯Ό μ§μ μ¬μ©ν μ μμ΅λλ€.
function App() {
return (
);
}
κ·Έλ¬λ Reactμ μν κ΄λ¦¬ λ° μ΄λ²€νΈ 리μ€λλ₯Ό μ¬μ©νμ¬ μμ± μ λ°μ΄νΈ λ° μ΄λ²€νΈ μ²λ¦¬λ₯Ό κ΄λ¦¬ν΄μΌ ν©λλ€.
function App() {
const [myData, setMyData] = React.useState('Initial Value');
const handleMyEvent = (event) => {
console.log('Web Componentμμ λ³΄λΈ μ΄λ²€νΈ:', event.detail);
// μ΄λ²€νΈμ λ°λΌ React μν μ
λ°μ΄νΈ
setMyData(event.detail);
};
return (
);
}
μ: Angular
Angularμμλ ν νλ¦Ώμμ μΉ μ»΄ν¬λνΈλ₯Ό μ¬μ©ν μ μμ΅λλ€.
μ¬μ©μ μ μ μμλ₯Ό μΈμνλλ‘ Angularλ₯Ό νμ©νλ €λ©΄ `CUSTOM_ELEMENTS_SCHEMA`λ₯Ό κ°μ ΈμμΌ ν©λλ€.
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
@NgModule({
declarations: [
// κ΅¬μ± μμ
],
imports: [
BrowserModule
],
providers: [],
bootstrap: [],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class AppModule { }
κ·Έλ° λ€μ κ΅¬μ± μμμμ:
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
myData = 'Initial Value';
handleMyEvent(event: any) {
console.log('Web Componentμμ λ³΄λΈ μ΄λ²€νΈ:', event.detail);
this.myData = event.detail;
}
}
μ: Vue.js
Vue.jsμμλ ν νλ¦Ώμμ μΉ μ»΄ν¬λνΈλ₯Ό μ§μ μ¬μ©ν μ μμ΅λλ€.
2. νλ μμν¬λ³ λνΌ μ¬μ©
μΌλΆ νλ μμν¬λ μΉ μ»΄ν¬λνΈμ ν΅ν©μ λ¨μννκΈ° μν΄ νΉμ λνΌ λλ μ νΈλ¦¬ν°λ₯Ό μ 곡ν©λλ€. μ΄λ¬ν λνΌλ λ°μ΄ν° λ°μΈλ©, μ΄λ²€νΈ μ²λ¦¬ λ° μλͺ μ£ΌκΈ° κ΄λ¦¬λ₯Ό λμ± μννκ² μ²λ¦¬ν μ μμ΅λλ€.
μ: `react-web-component-wrapper`λ₯Ό μ¬μ©ν React
`react-web-component-wrapper` λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄ μΉ μ»΄ν¬λνΈλ₯Ό λννλ React μ»΄ν¬λνΈλ₯Ό μμ±νμ¬ λ³΄λ€ μμ°μ€λ¬μ΄ ν΅ν© νκ²½μ μ 곡ν μ μμ΅λλ€.
import React from 'react';
import createReactComponent from 'react-web-component-wrapper';
const MyCustomElement = createReactComponent('my-custom-element');
function App() {
const [myData, setMyData] = React.useState('Initial Value');
const handleMyEvent = (event) => {
console.log('Web Componentμμ λ³΄λΈ μ΄λ²€νΈ:', event.detail);
setMyData(event.detail);
};
return (
);
}
μ΄ μ κ·Ό λ°©μμ λ λμ νμ μμ μ±μ μ 곡νλ©° Reactμ μ»΄ν¬λνΈ μλͺ μ£ΌκΈ° λ©μλλ₯Ό νμ©ν μ μλλ‘ ν©λλ€.
μ: `@angular/elements`λ₯Ό μ¬μ©ν Angular
Angularλ `@angular/elements` ν¨ν€μ§λ₯Ό μ 곡νλ©°, μ΄λ₯Ό ν΅ν΄ Angular μ»΄ν¬λνΈλ₯Ό μΉ μ»΄ν¬λνΈλ‘ ν¨ν€μ§ν μ μμ΅λλ€.
import { createCustomElement } from '@angular/elements';
import { Component, Injector } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
@Component({
selector: 'my-angular-element',
template: `Angular Elementμμ λ³΄λΈ μΈμ¬! κ°: {{ data }}
`,
})
export class MyAngularElement {
data = 'Initial Value';
}
@NgModule({
imports: [ BrowserModule ],
declarations: [ MyAngularElement ],
entryComponents: [ MyAngularElement ]
})
export class AppModule {
constructor(injector: Injector) {
const customElement = createCustomElement(MyAngularElement, { injector });
customElements.define('my-angular-element', customElement);
}
ngDoBootstrap() {}
}
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.error(err));
μ΄λ₯Ό ν΅ν΄ μΉ μ»΄ν¬λνΈλ₯Ό μ§μνλ λͺ¨λ μ ν리μΌμ΄μ μμ Angular μ»΄ν¬λνΈλ₯Ό μ¬μ©ν μ μμ΅λλ€.
3. μΉ μ»΄ν¬λνΈ μ§μμ΄ ν¬ν¨λ μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬ μ¬μ©
LitElement λ° Polymerμ κ°μ μ¬λ¬ μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬κ° μΉ μ»΄ν¬λνΈ κ΅¬μΆμ μν΄ νΉλ³ν μ€κ³λμμ΅λλ€. μ΄λ¬ν λΌμ΄λΈλ¬λ¦¬λ λ°μ΄ν° λ°μΈλ©, ν νλ¦Ώ λ° μλͺ μ£ΌκΈ° κ΄λ¦¬μ κ°μ κΈ°λ₯μ μ 곡νμ¬ λ³΅μ‘νκ³ μ¬μ¬μ© κ°λ₯ν μ»΄ν¬λνΈλ₯Ό λ μ½κ² λ§λ€ μ μμ΅λλ€.
μ: LitElement
LitElementλ μΉ μ»΄ν¬λνΈ μμ±μ λ¨μννλ κ²½λ λΌμ΄λΈλ¬λ¦¬μ λλ€. μ»΄ν¬λνΈ ν νλ¦Ώκ³Ό μμ±μ μ μνλ μ μΈμ λ°©μμ μ 곡ν©λλ€.
import { LitElement, html, css } from 'lit';
import { customElement, property } from 'lit/decorators.js';
@customElement('my-lit-element')
export class MyLitElement extends LitElement {
static styles = css`
p {
color: blue;
}
`;
@property({ type: String })
name = 'World';
render() {
return html`Hello, ${this.name}!
`;
}
}
κ·Έλ° λ€μ μ΄ μ»΄ν¬λνΈλ₯Ό λͺ¨λ νλ μμν¬μμ μ¬μ©ν μ μμ΅λλ€.
4. νλ μμν¬μ ꡬμ λ°μ§ μλ μ»΄ν¬λνΈ μν€ν μ²
νλ μμν¬μ ꡬμ λ°μ§ μλ μ»΄ν¬λνΈ μν€ν μ²λ‘ μ ν리μΌμ΄μ μ μ€κ³νλ©΄ μ»΄ν¬λνΈλ₯Ό λ€μ μμ±νμ§ μκ³ λ νλ μμν¬λ₯Ό μ½κ² μ ννκ±°λ νΌν©ν μ μμ΅λλ€. μ¬κΈ°μλ λ€μμ΄ ν¬ν¨λ©λλ€.
- UI λ Όλ¦¬λ₯Ό νλ μμν¬λ³ μ½λμ λΆλ¦¬: νλ μμν¬μ μ’ μλμ§ μλ μΌλ° JavaScript λͺ¨λμμ ν΅μ¬ λΉμ¦λμ€ λ Όλ¦¬ λ° λ°μ΄ν° μ²λ¦¬λ₯Ό ꡬνν©λλ€.
- UI μμμ μΉ μ»΄ν¬λνΈ μ¬μ©: μλ‘ λ€λ₯Έ νλ μμν¬μμ μ¬μ©ν μ μλλ‘ μΉ μ»΄ν¬λνΈλ₯Ό μ¬μ©νμ¬ μ¬μ¬μ© κ°λ₯ν UI μ»΄ν¬λνΈλ₯Ό ꡬμΆν©λλ€.
- μ΄λν° λ μ΄μ΄ μμ±: νμν κ²½μ° μΉ μ»΄ν¬λνΈμ νΉμ νλ μμν¬μ λ°μ΄ν° λ°μΈλ© λ° μ΄λ²€νΈ μ²λ¦¬ λ©μ»€λμ¦ κ°μ 격차λ₯Ό ν΄μνκΈ° μν΄ μμ μ΄λν° λ μ΄μ΄λ₯Ό μμ±ν©λλ€.
μΉ μ»΄ν¬λνΈ μνΈ μ΄μ©μ±μ μν λͺ¨λ² μ¬λ‘
μΉ μ»΄ν¬λνΈμ JavaScript νλ μμν¬ κ°μ μνν μνΈ μ΄μ©μ±μ 보μ₯νλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄μΈμ.
- νμ€ μΉ μ»΄ν¬λνΈ API μ¬μ©: μ΅λ νΈνμ±μ 보μ₯νκΈ° μν΄ νμ€ Custom Elements, Shadow DOM λ° HTML ν νλ¦Ώ μ¬μμ μ€μν©λλ€.
- μΉ μ»΄ν¬λνΈμμ νλ μμν¬λ³ μ’ μμ± λ°©μ§: νλ μμν¬λ³ λΌμ΄λΈλ¬λ¦¬ λλ APIμ μ§μ μ’ μλμ§ μλλ‘ νμ¬ μΉ μ»΄ν¬λνΈλ₯Ό νλ μμν¬μ ꡬμ λ°μ§ μλλ‘ μ μ§ν©λλ€.
- μ μΈμ λ°μ΄ν° λ°μΈλ© μ¬μ©: LitElement λλ Stencilκ³Ό κ°μ μΉ μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬μμ μ 곡νλ μ μΈμ λ°μ΄ν° λ°μΈλ© λ©μ»€λμ¦μ νμ©νμ¬ μ»΄ν¬λνΈμ νλ μμν¬ κ°μ λ°μ΄ν° λκΈ°νλ₯Ό λ¨μνν©λλ€.
- μ΄λ²€νΈλ₯Ό μΌκ΄λκ² μ²λ¦¬: μΉ μ»΄ν¬λνΈμ νλ μμν¬ κ°μ ν΅μ μ νμ€ DOM μ΄λ²€νΈλ₯Ό μ¬μ©ν©λλ€. μΉ μ»΄ν¬λνΈ λ΄μμ νλ μμν¬λ³ μ΄λ²€νΈ μμ€ν μ μ¬μ©νμ§ λ§μΈμ.
- λ€μν νλ μμν¬μμ μ² μ νκ² ν μ€νΈ: ν¬κ΄μ μΈ λ¨μ λ° ν΅ν© ν μ€νΈλ₯Ό μμ±νμ¬ λͺ¨λ λμ νλ μμν¬μμ μΉ μ»΄ν¬λνΈκ° μ¬λ°λ₯΄κ² μλνλμ§ νμΈν©λλ€.
- μ κ·Όμ±(A11y) κ³ λ €: μ κ·Όμ± μ§μΉ¨μ λ°λ₯΄κ³ 보쑰 κΈ°μ λ‘ ν μ€νΈνμ¬ μ₯μ κ° μλ μ¬μ©μκ° μΉ μ»΄ν¬λνΈμ μ‘μΈμ€ν μ μλμ§ νμΈν©λλ€.
- μ»΄ν¬λνΈλ₯Ό λͺ ννκ² λ¬Έμν: μμμ λͺ¨λ² μ¬λ‘λ₯Ό ν¬ν¨νμ¬ λ€μν νλ μμν¬μμ μΉ μ»΄ν¬λνΈλ₯Ό μ¬μ©νλ λ°©λ²μ λν λͺ νν λ¬Έμλ₯Ό μ 곡ν©λλ€. μ΄λ κΈλ‘λ² νμμμ νμ μ νμμ μ λλ€.
μΌλ°μ μΈ κ³Όμ ν΄κ²°
μΉ μ»΄ν¬λνΈκ° λ§μ μ΄μ μ μ 곡νμ§λ§ JavaScript νλ μμν¬μ ν΅ν©ν λ κ³ λ €ν΄μΌ ν λͺ κ°μ§ κ³Όμ κ° μμ΅λλ€.
- λ°μ΄ν° λ°μΈλ© λΆμΌμΉ: μλ‘ λ€λ₯Έ νλ μμν¬μλ μλ‘ λ€λ₯Έ λ°μ΄ν° λ°μΈλ© λ©μ»€λμ¦μ΄ μμ΅λλ€. λ°μ΄ν° λκΈ°νλ₯Ό 보μ₯νκΈ° μν΄ μ΄λν° λ μ΄μ΄ λλ νλ μμν¬λ³ λνΌλ₯Ό μ¬μ©ν΄μΌ ν μ μμ΅λλ€.
- μ΄λ²€νΈ μ²λ¦¬ μ°¨μ΄: νλ μμν¬λ μ΄λ²€νΈλ₯Ό λ€λ₯΄κ² μ²λ¦¬ν©λλ€. μΌκ΄λ μ΄λ²€νΈ μ²λ¦¬λ₯Ό 보μ₯νκΈ° μν΄ μ΄λ²€νΈλ₯Ό μ κ·ννκ±°λ μ¬μ©μ μ μ μ΄λ²€νΈλ₯Ό μ¬μ©ν΄μΌ ν μ μμ΅λλ€.
- μλ DOM 격리: μλ DOMμ μΊ‘μνλ₯Ό μ 곡νμ§λ§ μ»΄ν¬λνΈ μΈλΆμμ μΉ μ»΄ν¬λνΈμ μ€νμΌμ μ§μ νκΈ° μ΄λ ΅κ² λ§λ€ μλ μμ΅λλ€. μΈλΆ μ€νμΌ μ§μ μ νμ©νλ €λ©΄ CSS λ³μ λλ μ¬μ©μ μ μ μμ±μ μ¬μ©ν΄μΌ ν μ μμ΅λλ€.
- μ±λ₯ κ³ λ € μ¬ν: μΉ μ»΄ν¬λνΈλ₯Ό κ³Όλνκ² μ¬μ©νκ±°λ λΆμ μ νκ² μ¬μ©νλ©΄ μ±λ₯μ μν₯μ λ―ΈμΉ μ μμ΅λλ€. DOM μ‘°μμ μ΅μννκ³ ν¨μ¨μ μΈ λ λλ§ κΈ°μ μ μ¬μ©νμ¬ μ±λ₯μ λ§κ² μΉ μ»΄ν¬λνΈλ₯Ό μ΅μ νν©λλ€.
μ€μ μμ λ° μ¬λ‘ μ°κ΅¬
μ¬λ¬ μ‘°μ§μμ μΉ μ»΄ν¬λνΈλ₯Ό μ±κ³΅μ μΌλ‘ μ±ννμ¬ μλ‘ λ€λ₯Έ νλ μμν¬μμ μ¬μ¬μ© κ°λ₯ν UI μμλ₯Ό ꡬμΆνμ΅λλ€. λͺ κ°μ§ μμλ λ€μκ³Ό κ°μ΅λλ€.
- Salesforce: Salesforceλ Lightning Web Components(LWC) νλ μμν¬μμ μΉ μ»΄ν¬λνΈλ₯Ό κ΄λ²μνκ² μ¬μ©νλ©°, μ΄λ₯Ό ν΅ν΄ κ°λ°μλ Salesforce νλ«νΌ λ° κΈ°ν μΉ μ ν리μΌμ΄μ μμ μ¬μ©ν μ μλ μ¬μ©μ μ μ UI μ»΄ν¬λνΈλ₯Ό ꡬμΆν μ μμ΅λλ€.
- Google: Googleμ Polymer λ° Material Design Components for Web(MDC Web)μ ν¬ν¨ν λ€μν νλ‘μ νΈμμ μΉ μ»΄ν¬λνΈλ₯Ό μ¬μ©νμ¬ μΉ μ ν리μΌμ΄μ ꡬμΆμ μν μ¬μ¬μ© κ°λ₯ν UI μμλ₯Ό μ 곡ν©λλ€.
- SAP: SAPλ Fiori UI νλ μμν¬μμ μΉ μ»΄ν¬λνΈλ₯Ό μ¬μ©νμ¬ κ°λ°μκ° μλ‘ λ€λ₯Έ SAP μ ν리μΌμ΄μ μμ μΌκ΄λκ³ μ¬μ¬μ© κ°λ₯ν UI μ»΄ν¬λνΈλ₯Ό ꡬμΆν μ μλλ‘ ν©λλ€.
μΉ μ»΄ν¬λνΈ μνΈ μ΄μ©μ±μ λ―Έλ
λ λ§μ νλ μμν¬μ λΌμ΄λΈλ¬λ¦¬κ° μΉ μ»΄ν¬λνΈμ λν μ§μμ μ±ννκ³ κ°μ ν¨μ λ°λΌ μΉ μ»΄ν¬λνΈ μνΈ μ΄μ©μ±μ λ―Έλλ μ λ§ν΄ 보μ λλ€. μΉ νμ€μ΄ λ°μ νκ³ μλ‘μ΄ λꡬμ κΈ°μ μ΄ λ±μ₯ν¨μ λ°λΌ μΉ μ»΄ν¬λνΈλ νμ₯ κ°λ₯νκ³ μ μ§ κ΄λ¦¬ κ°λ₯νλ©° μνΈ μ΄μ© κ°λ₯ν μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ λ° μ μ λ μ€μν μν μ κ³μν κ²μ λλ€.
μΉ μ»΄ν¬λνΈ μνΈ μ΄μ©μ±μ μν₯μ λ―ΈμΉ κ°λ₯μ±μ΄ λμ μλ‘μ΄ νΈλ λμ κΈ°μ μ λ€μκ³Ό κ°μ΅λλ€.
- κ°μ λ νλ μμν¬ μ§μ: νλ μμν¬λ μΉ μ»΄ν¬λνΈμ λν μ§μμ μ§μμ μΌλ‘ κ°μ νμ¬ λμ± μνν ν΅ν©κ³Ό ν₯μλ κ°λ°μ κ²½νμ μ 곡ν©λλ€.
- νμ€νλ λ°μ΄ν° λ°μΈλ© λ° μ΄λ²€νΈ μ²λ¦¬: μΉ μ»΄ν¬λνΈμ λν λ°μ΄ν° λ°μΈλ© λ° μ΄λ²€νΈ μ²λ¦¬ λ©μ»€λμ¦μ νμ€ννλ €λ λ Έλ ₯μ ν΅ν©μ λ¨μννκ³ μ΄λν° λ μ΄μ΄μ νμμ±μ μ€μ λλ€.
- κ³ κΈ μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬: μλ‘κ³ κ°μ λ μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬λ μΉ μ»΄ν¬λνΈ κ΅¬μΆμ μν λμ± μ κ΅ν κΈ°λ₯κ³Ό μ±λ₯μ μ 곡νμ¬ λ³΅μ‘νκ³ μ¬μ¬μ© κ°λ₯ν UI μμλ₯Ό λ μ½κ² λ§λ€ μ μμ΅λλ€.
- μΉ μ»΄ν¬λνΈ λꡬ: μΉ μ»΄ν¬λνΈμ© κ°λ° λκ΅¬κ° λμ± μ±μν΄μ Έμ λ λμ λλ²κΉ , ν μ€νΈ λ° μ½λ λΆμ κΈ°λ₯μ μ 곡ν©λλ€.
κ²°λ‘
μΉ μ»΄ν¬λνΈ μνΈ μ΄μ©μ±μ νλ μΉ κ°λ°μ μ€μν μΈ‘λ©΄μΌλ‘, κ°λ°μκ° λ€μν JavaScript νλ μμν¬μ μννκ² ν΅ν©ν μ μλ μ¬μ¬μ© κ°λ₯ν UI μμλ₯Ό ꡬμΆν μ μλλ‘ ν©λλ€. μ΄ λΈλ‘κ·Έ κ²μλ¬Όμ μ€λͺ λ μ λ΅κ³Ό λͺ¨λ² μ¬λ‘λ₯Ό μ΄ν΄ν¨μΌλ‘μ¨ κ°λ°μλ μ€λλ μ λ€μνκ³ μ§ννλ μΉ νκ²½μ μꡬ μ¬νμ μΆ©μ‘±νλ νμ₯ κ°λ₯νκ³ μ μ§ κ΄λ¦¬ κ°λ₯νλ©° μνΈ μ΄μ© κ°λ₯ν μΉ μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€. μμ μΉμ¬μ΄νΈλ₯Ό ꡬμΆνλ λκ·λͺ¨ μν°νλΌμ΄μ¦ μ ν리μΌμ΄μ μ ꡬμΆνλ μΉ μ»΄ν¬λνΈλ κΈλ‘λ² κ°λ° νκ²½μμ νμ κ³Ό νμ μ μ΄μ§νμ¬ λμ± λͺ¨λμ, μ¬μ¬μ© κ°λ₯νκ³ μ μ§ κ΄λ¦¬ κ°λ₯ν μ½λ κΈ°λ°μ ꡬμΆνλ λ° λμμ΄ λ μ μμ΅λλ€.
μλ‘ λ€λ₯Έ νκ³Ό κΈ°μ μ λ°°κ²½μ κ°μ§ κ°λ°μκ° μΉ μ»΄ν¬λνΈλ₯Ό μ¬μ©νκ³ μ μ§ κ΄λ¦¬ν μ μλλ‘ νμ μ κ·Όμ±, μ² μ ν ν μ€νΈ λ° λͺ νν λ¬Έμλ₯Ό μ°μ μ μΌλ‘ κ³ λ €νμμμ€. μΉ μ»΄ν¬λνΈλ₯Ό μ±ννκ³ μνΈ μ΄μ©μ±μ μ§μ€ν¨μΌλ‘μ¨ μ§μ μΌλ‘ λ―Έλ μ§ν₯μ μ΄κ³ λμμμ΄ λ³ννλ μΉ κ°λ° μΈκ³μ μ μν μ μλ μΉ μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€.