Angular

๐ŸŒŸ Angular๋ž€?

Angular๋Š” Google์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ์ค‘์ธ TypeScript ๊ธฐ๋ฐ˜์˜ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
๋‹จ์ˆœํ•œ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ, ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ์™„์ „ํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น Angular๋Š” AngularJS (v1.x) ์™€ ๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•˜๋ฉฐ,
ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ๋งํ•˜๋Š” Angular๋Š” v2 ์ด์ƒ ๋ฒ„์ „ (2016๋…„ ์ดํ›„) ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… ์š”์•ฝ

๊ฐœ๋…์„ค๋ช…
๐Ÿงฑ Component ๊ธฐ๋ฐ˜ ๊ตฌ์กฐUI๋Š” ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
๐Ÿ›  TypeScript ์‚ฌ์šฉ์ •์  ํƒ€์ž… ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ”๋“œ ์•ˆ์ •์„ฑ ์ฆ๊ฐ€
๐Ÿ”„ ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ๋ทฐ์™€ ๋ชจ๋ธ ๊ฐ„ ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™” ๊ฐ€๋Šฅ
๐Ÿงฉ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์•ฑ์„ ๋…ผ๋ฆฌ์  ๋‹จ์œ„(๋ชจ๋“ˆ)๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌ
๐Ÿ”€ ๊ฐ•๋ ฅํ•œ ๋ผ์šฐํŒ… ์‹œ์Šคํ…œSPA ๊ตฌ์กฐ์—์„œ URL ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ์ œ๊ณต
๐ŸŒ HTTPClient ๋‚ด์žฅ๋ฐฑ์—”๋“œ API ํ˜ธ์ถœ ๋‚ด์žฅ ๋ชจ๋“ˆ๋กœ ๊ฐ€๋Šฅ
๐Ÿ“ฆ RxJS ๊ธฐ๋ฐ˜์˜ ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ œ์–ด ๊ฐ€๋Šฅ
โœ… ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ, ํ™•์žฅ์„ฑ ํ–ฅ์ƒ

๐Ÿ— Angular ์•„ํ‚คํ…์ฒ˜

app/
โ”œโ”€โ”€ app.module.ts โ†’ ๋ฃจํŠธ ๋ชจ๋“ˆ
โ”œโ”€โ”€ app.component.ts โ†’ ์ปดํฌ๋„ŒํŠธ ํด๋ž˜์Šค (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)
โ”œโ”€โ”€ app.component.html โ†’ ํ…œํ”Œ๋ฆฟ (UI ๊ตฌ์กฐ)
โ”œโ”€โ”€ app.component.css โ†’ ์Šคํƒ€์ผ
โ””โ”€โ”€ service/ โ†’ ์„œ๋น„์Šค (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ถ„๋ฆฌ)

๐Ÿ”ง ์„ค์น˜ ๋ฐ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

Angular๋Š” CLI ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ๊ฐ€ ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

npm install -g @angular/cli         # CLI ์„ค์น˜
ng new my-app # ์ƒˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
cd my-app
ng serve # ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰ (localhost:4200)

๐Ÿ’ก ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

๐Ÿ“ ์ปดํฌ๋„ŒํŠธ ์ฝ”๋“œ (app.component.ts)

import { Component } from '@angular/core';

@Component({
selector: 'app-root',
templateUrl: './app.component.html'
})
export class AppComponent {
title = '๋‚˜์˜ ์ฒซ ๋ฒˆ์งธ Angular ์•ฑ';
}

๐Ÿ“ ํ…œํ”Œ๋ฆฟ (app.component.html)

<h1>{{ title }}</h1>
<input [(ngModel)]="title">
<p>์ž…๋ ฅํ•œ ์ œ๋ชฉ: {{ title }}</p>

๐Ÿ“ ๋ชจ๋“ˆ ์„ค์ • (app.module.ts)

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';

import { AppComponent } from './app.component';

@NgModule({
declarations: [ AppComponent ],
imports: [ BrowserModule, FormsModule ],
providers: [],
bootstrap: [ AppComponent ]
})
export class AppModule { }

๐Ÿงช ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์š”์•ฝ

๊ธฐ๋Šฅ์„ค๋ช…
@ComponentUI ๋‹จ์œ„ ์„ ์–ธ
@NgModule์•ฑ์˜ ๋ฃจํŠธ ๋ฐ ์„œ๋ธŒ ๋ชจ๋“ˆ ์„ค์ •
@Injectable์„œ๋น„์Šค ํด๋ž˜์Šค ์„ ์–ธ
RouterModule๋ผ์šฐํŒ… ์„ค์ •
HttpClientModuleREST API ํ˜ธ์ถœ ๊ฐ€๋Šฅ
ngModel์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ
*ngFor, *ngIfํ…œํ”Œ๋ฆฟ ๋ฐ˜๋ณต ๋ฐ ์กฐ๊ฑด ์ฒ˜๋ฆฌ

โš–๏ธ Angular์˜ ์žฅ๋‹จ์ 

โœ… ์žฅ์ 

  • ๋Œ€ํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ตœ์ ํ™”๋œ ์•„ํ‚คํ…์ฒ˜
  • ์™„์ „ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ (๋ผ์šฐํŒ…, HTTP, DI, ํผ ๋“ฑ ๋‹ค ๋‚ด์žฅ)
  • ํƒ€์ž… ์•ˆ์ •์„ฑ (TypeScript ๊ธฐ๋ฐ˜)
  • ๊ฐ•๋ ฅํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ Google์˜ ์ง€์›
  • ๊ณต์‹ CLI ํˆด์˜ ๋†’์€ ์ƒ์‚ฐ์„ฑ

โŒ ๋‹จ์ 

  • ์ง„์ž… ์žฅ๋ฒฝ์ด ๋†’์Œ (๋Ÿฌ๋‹ ์ปค๋ธŒ ์žˆ์Œ)
  • ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋А๋ฆด ์ˆ˜ ์žˆ์Œ
  • ์ž‘์€ ํ”„๋กœ์ ํŠธ์—๋Š” ๋‹ค์†Œ ๊ณผ๋„ํ•  ์ˆ˜ ์žˆ์Œ
  • ์ฝ”๋“œ ์–‘์ด ๋งŽ์•„์งˆ ์ˆ˜ ์žˆ์Œ (๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ)

๐Ÿ’ผ Angular๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ ๊ธฐ์—…

  • Google (Gmail, Google Cloud Console)
  • Microsoft Office ์›น๋ฒ„์ „
  • Deutsche Bank
  • Upwork
  • Samsung

๐Ÿง  Angular vs React vs Vue ๊ฐ„๋‹จ ๋น„๊ต

ํ•ญ๋ชฉAngularReactVue
๊ตฌ์กฐ์™„์ „ํ•œ ํ”„๋ ˆ์ž„์›ŒํฌUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ง„์ž…์žฅ๋ฒฝ ๋‚ฎ์€ ํ”„๋ ˆ์ž„์›Œํฌ
์–ธ์–ดTypeScriptJavaScript / TS ๊ฐ€๋ŠฅJavaScript / TS ๊ฐ€๋Šฅ
๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์–‘๋ฐฉํ–ฅ๋‹จ๋ฐฉํ–ฅ์–‘๋ฐฉํ–ฅ
๋Ÿฌ๋‹ ์ปค๋ธŒ๋†’์Œ์ค‘๊ฐ„๋‚ฎ์Œ
๊ธฐ์—… ์‚ฌ์šฉ์ฒ˜Google, ์‚ผ์„ฑ, Microsoft ๋“ฑMeta, Airbnb, Netflix ๋“ฑAlibaba, Xiaomi ๋“ฑ

๐Ÿ“Œ ์ •๋ฆฌ ์š”์•ฝ

ํ•ญ๋ชฉ์„ค๋ช…
ํ”„๋ ˆ์ž„์›Œํฌ๋ช…Angular
์–ธ์–ด ๊ธฐ๋ฐ˜TypeScript
๊ตฌ์กฐ ํŠน์ง•Component + Module ์ค‘์‹ฌ
๋ฐ”์ธ๋”ฉ ๋ฐฉ์‹์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ
๊ณต์‹ ๋„๊ตฌAngular CLI
์ ํ•ฉ ๋Œ€์ƒ๋Œ€ํ˜• SPA, ๋ณต์žกํ•œ B2B/B2C ์‹œ์Šคํ…œ

Leave a Comment