๐ŸŒŸ 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 ์‹œ์Šคํ…œ

zerg96

Recent Posts

๋…ธํŠธ๋ถ(์œˆ๋„์šฐ)์—์„œ ์•„์ดํฐ ์œ ์„  ํ…Œ๋”๋ง ํ•˜๊ธฐ

์œˆ๋„์šฐ ์šด์˜์ฒด์ œ์˜ ๋…ธํŠธ๋ถ์—์„œ๋Š” iPhone ์œ ์„  ํ…Œ๋”๋ง์ด ์ž˜ ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต iPhone์˜ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์„ค์น˜๊ฐ€ ์•ˆ๋˜์žˆ์–ด์„œ์ธ…

3์ผ ago

์˜ค๋ผํด ๋ž˜์น˜(Latch)

์˜ค๋ผํด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ์„ ๋…ผํ•  ๋•Œ, ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝํ•ฉ(Contention)์€ ํ”ผํ•  ์ˆ˜ ์—†๋Š” ์ฃผ์ œ๋‹ค. ํŠนํžˆ ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€…

7์ผ ago

์‚ฌ์žฅ๋‹˜๋„ 3ํ‘œ, ๋‚˜๋„ 3ํ‘œ? ‘3%๋ฃฐ’ ์™„์ „ ์ •๋ณต!

์•ˆ๋…•ํ•˜์„ธ์š”, ํ˜น์‹œ ์ด๋Ÿฐ ์ƒ๊ฐํ•ด ๋ณธ ์  ์—†์œผ์‹ ๊ฐ€์š”? "๋‚ด๊ฐ€ ํˆฌ์žํ•œ ํšŒ์‚ฌ๋Š” ๋ˆ„๊ฐ€ ๊ฐ์‹œํ•˜๊ณ , ์–ด๋–ป๊ฒŒ ์šด์˜๋ ๊นŒ?" ์˜ค๋Š˜์€…

3์ฃผ ago

Vector Store(๋ฒกํ„ฐ ์Šคํ† ์–ด)

'๋ฒกํ„ฐ ์Šคํ† ์–ด' ์™„๋ฒฝ ๊ฐ€์ด๋“œ: AI ์‹œ๋Œ€, ๋ฐ์ดํ„ฐ์˜ ์ƒˆ๋กœ์šด ์‹ฌ์žฅ์„ ๋งŒ๋‚˜๋‹ค IT ์—…๊ณ„๋Š” ์ธ๊ณต์ง€๋Šฅ(AI)์ด๋ผ๋Š” ๊ฑฐ๋Œ€ํ•œ ํŒจ๋Ÿฌ๋‹ค์ž„์˜…

3์ฃผ ago

Gemini CLI (์žฌ๋ฏธ๋‚˜์ด CLI)

1. Gemini CLI๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? Gemini CLI๋Š” ํ„ฐ๋ฏธ๋„ ํ™˜๊ฒฝ์—์„œ ์ง์ ‘ Gemini ๋ชจ๋ธ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„…

3์ฃผ ago

๊ณผ์ ํ•ฉ (overfitting)

๊ณผ์ ํ•ฉ์€ ๋จธ์‹ ๋Ÿฌ๋‹์—์„œ ํ•™์Šต์šฉ๋ฐ์ดํ„ฐ๋ฅผ ๊ณผํ•˜๊ฒŒ ํ•™์Šตํ•˜์—ฌ, ์‹ค์ œ๋ฐ์ดํ„ฐ๋ฅผ ์˜ˆ์ธกํ•˜์ง€ ๋ชปํ•˜๋Š” ํ˜„์ƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ธ๊ณต์ง€๋Šฅ(AI)์˜ ํ•™์Šต ๋ฐฉ๋ฒ•์€ ์šฐ๋ฆฌ๊ฐ€ ์‹œํ—˜๊ณต๋ถ€๋ฅผ…

1๊ฐœ์›” ago