CHAPTER 11. Services

Intro

Angular 2๋Š” ์„œ๋น„์Šค ๊ฐœ๋…์„ ํฌํ•จํ•œ๋‹ค. ์ฆ‰, ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์ฃผ์ž… ํ•  ์ˆ˜์žˆ๋Š” ํด๋ž˜์Šค์ด๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์„œ๋น„์Šค๋Š” ํ”„๋ ˆ์ž„ ์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๊ณ  ์ผ๋ถ€๋Š” ๊ณตํ†ต ๋ชจ๋“ˆ๋กœ ์ œ๊ณตํ•˜๊ณ  ๋‹ค๋ฅธ ์„œ๋น„์Šค๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ—Œ์‹ ์ ์ธ ์žฅ์—์„œ ๊ณตํ†ต ๋ชจ๋“ˆ์— ์˜ํ•ด ์ œ๊ณต๋˜๋Š” ๋ชจ๋“ˆ์„ ๋ณผ ๊ฒƒ์ด๋‹ค. ๋ฐ”๋กœ ์ง€๊ธˆ, ํ•ต์‹ฌ ์š”์†Œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์šฐ๋ฆฌ๋ฅผ ๊ตฌ์ถ• ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„ ๋ณด์ž.

Title service

์ฝ”์–ด ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” ๊ทนํžˆ ๋ช‡๊ฐœ์˜ ์„œ๋น„์Šค ๋ฐ–์— ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋“œ๋ฌผ๋‹ค. ์‹ค์ œ๋กœ ํ˜„์žฌ ํ•˜๋‚˜ ๋ฐ–์— ์—†๋‹ค :). ์ž์ฃผ ์–ธ๊ธ‰ ๋˜๋Š” ์งˆ๋ฌธ ์ค‘ ํ•˜๋‚˜๋Š” ํŽ˜์ด์ง€์˜ ์ œ๋ชฉ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์‰ฝ๊ฒŒ! ๋‹น์‹ ์ด ์ฃผ์ž… ํ•  ์ˆ˜์žˆ๋Š” Title ์„œ๋น„์Šค๊ฐ€ ์žˆ๊ณ  getter์™€ setter ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

import { Component } from '@angular/core';
import { Title } from '@angular/platform-browser';
@Component({
  selector: 'ponyracer-app',
  viewProviders: [Title],
  template: `<h1>PonyRacer</h1>`
})
export class PonyRacerAppComponent {
  constructor(title: Title) {
   title.setTitle('PonyRacer - Bet on ponies');
  }
}

์ด ์„œ๋น„์Šค๋Š” ํ•„์š”ํ•œ ์ œ๋ชฉ์— ์ž๋™์œผ๋กœ title ์š”์†Œ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐ’์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•œ๋‹ค.

Making your own service

export class RacesService {
  list() {
   return [{ name: 'London' }];
  }
}

AngularJS 1.x์ฒ˜๋Ÿผ, ์„œ๋น„์Šค๋Š” ์‹ฑ๊ธ€ ํ†ค์ด๋ฏ€๋กœ, ๊ฐ™์€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์‚ฌ๋ฐฉ์— ์ฃผ์ž…๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋น„์Šค๋Š” ๋ฌด๊ด€ ํ•œ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ„์— ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•œ ํ›„๋ณด์ด๋‹ค. ์„œ๋น„์Šค์— ์ข…์†์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ทธ ์œ„์— @Injectable () ์žฅ์‹์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค. ์ด ์žฅ์‹์ด ์—†์œผ๋ฉด ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์šฐ๋ฆฌ์˜ RacesService๋Š” ๋งค๋ฒˆ ๊ฐ™์€ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ REST API์—์„œ ๋ ˆ์ด์Šค๋ฅผ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. HTTP ์š”์ฒญ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” Http ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์šฐ๋ฆฌ์˜ ์„œ๋น„์Šค๋Š” Http์— ์˜์กดํ•˜์—ฌ race๋ฅผ ๊ฐ€์ ธ ์˜ค๋ฏ€๋กœ, Http ์„œ๋น„์Šค๋ฅผ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํด๋ž˜์Šค์— @Injectable () ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
@Injectable()
export class RacesServiceWithHttp {
  constructor(private http: Http) {
  }
  list() {
   return this.http.get('/api/races');
  }
}

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๋ฅผ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ณต๊ธ‰์ž ์†์„ฑ์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณด๋‹ค ํ˜„์‹ค์ ์œผ๋กœ ๋ฃจํŠธ ๋ชจ๋“ˆ์˜ ๊ณต๊ธ‰์ž์— ์ถ”๊ฐ€ ํ•ด์•ผํ•œ๋‹ค.

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

์ด์ œ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค!

Reference URL

Last updated