Angular-styleguide: ๊ตฌ์„ฑ ์š”์†Œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค

์— ๋งŒ๋“  2016๋…„ 02์›” 24์ผ  ยท  12์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: johnpapa/angular-styleguide

Angular 1.5์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๊ตฌ์„ฑ ์š”์†Œ ๋„์šฐ๋ฏธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑ ์š”์†Œ ํŠธ๋ฆฌ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ œ๋Š” ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ „์—ญ์ ์œผ๋กœ ๋“ฑ๋ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ข‹์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ œ์•ˆํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ํ˜„์žฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋กœ ์  ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋‚œ
.module('app.account.details', [])
.component('app.account.details.edit', NameComponent);

Angular 1 question

๋ชจ๋“  12 ๋Œ“๊ธ€

๊ตฌ์„ฑ ์š”์†Œ๋Š” ์ปดํŒŒ์ผ์ด๋‚˜ ๋งํฌ ๊ธฐ๋Šฅ์ด ์—†๋Š” ์ง€์‹œ๋ฌธ ๋ž˜ํผ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ง€์‹œ๋ฌธ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋“ค์€ ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด. ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒฉ๋ฆฌ๋œ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งํฌ ๊ธฐ๋Šฅ์„ ๋Œ€์ฒดํ•˜๊ณ  bindToController๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ true์ž…๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์€ ๋””๋ ‰ํ‹ฐ๋ธŒ๋กœ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์กด์žฌํ•˜๋Š” ์ด์œ ๋Š” Angular 2๋กœ ์‰ฝ๊ฒŒ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. http://www.codelord.net/2015/12/17/angulars-component-what-is-it-good-for/

๊ทธ๋Ÿผ ์ด๊ฒŒ ์ถ”๊ฐ€๋˜๋‚˜์š”?

์ด์— ๋Œ€ํ•œ ์ œ์•ˆ์ด๋‚˜ ํžŒํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์  ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” @samithaf ๋Š” CSS ์„ ํƒ๊ธฐ์™€ ๊ด€๋ จํ•˜์—ฌ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

์ ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ œํ•œ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ(์˜ˆ: CSS ์„ ํƒ๊ธฐ์—์„œ ์ ์„ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ) ๋ฒˆ๊ฑฐ๋กญ๊ณ  ๊ด€์Šต์— ์–ฝ๋งค์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์€ ์ˆ˜๋…„ ๋™์•ˆ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ตฌ์„ฑ ์š”์†Œ์— - ๋ฅผ ์‚ฌ์šฉํ•ด ์™”์œผ๋ฉฐ ๋‹ค๋ฅธ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@mackelito @blowsie @gkalpak ์ €๋Š” ๋Œ€๊ทœ๋ชจ ๊ธˆ์œต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(100K + LOC)์—์„œ ๋‹ค์Œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ง€๊ธˆ๊นŒ์ง€๋Š” ๋ชจ๋“  ๊ฒƒ์ด

const loginModule = angular.module('app.core.login', [])
.component('app.core.login', loginComponent)
.service('app.core.login.loginService', loginService);

@samithaf ์ปจํŠธ๋กค๋Ÿฌ์— ์„œ๋น„์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์ฃผ์ž…ํ•ฉ๋‹ˆ๊นŒ? ['app.core.login.loginService' , function(loginService) {}] ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

@blowsie ๋กœ๊ทธ์ธ ์„œ๋น„์Šค ์ƒ˜ํ”Œ ์‚ฌ์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

class LoginController {
  constructor($q, loginService) {
    this.loginService = loginService;
  }

  /**
   * <strong i="7">@method</strong> $onInit
   * This lifecycle hook will be executed when all controllers on an element have been constructed and after their bindings are initialized
   */
  $onInit() {
    this.loginService.invalidateSession();
  }

}

LoginController.$inject = ['$q', 'nw.core.login.loginService'];

export default LoginController;

์„œ๋น„์Šค์—๋Š” ๋งค์šฐ ์ข‹์ง€๋งŒ ๊ตฌ์„ฑ ์š”์†Œ์—๋Š” ์ •๋ง ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

<div><app.core.login></app.core.login></div>

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์ฃผ๋ณ€ ์„ธ๊ณ„์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋ชจ๋‘๊ฐ€ @gkalpak์ด ๋งํ–ˆ๋“ฏ์ด - ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค).

@samithaf ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ด๊ฒƒ์œผ๋กœ ํ›Œ๋ฅญ

์—ฌ๊ธฐ์„œ ํ•ต์‹ฌ ๋ฌธ์ œ๋Š” AngularJS ์ธ์ ํ„ฐ๊ฐ€ ํ‰๋ฉด์ด๋ฏ€๋กœ ๋ชจ๋“ˆ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•  ๋•Œ ์ „์—ญ์ ์œผ๋กœ ์ƒ๊ฐํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Angular์—์„œ ์ˆ˜์ •๋œ ์„ค๊ณ„ ๊ฒฐํ•จ์ž…๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜๋Š” ํ•ต์‹ฌ ๊ทœ์น™(์ด๋ฆ„ ๊ณต๊ฐ„์˜ ๊ฒฝ์šฐ - ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ IMHO๋กœ ๊ฐ€๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹™๋‹ˆ๋‹ค.

Angular DI๊ฐ€ ํ‰ํ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ธ๊ธ‰ํ•œ @MarcLoupias๋‹˜ , ์šฐ๋ฆฌ๋Š” ๋งŽ์€ ๊ฒƒ์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์—†์ด ๋ชจ๋“ˆ ์ด๋ฆ„์„ ์ •์˜ํ•˜๋ฉด ์‰ฝ๊ฒŒ ๋ถ€์ž‘์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 10๊ฐœ ์ด์ƒ์˜ ์Šคํฌ๋Ÿผ ํŒ€์ด ์ž‘์—…ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ํŠนํžˆ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ƒ๊ฐํ•ด ๋‚ธ ํ•ด๊ฒฐ์ฑ…์ด ๊ด€์Šต์— ๋งž์ง€ ์•Š๋”๋ผ๋„ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋‹ค๋ฅธ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์ƒ๊ฐ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Angular ํŒ€์ด ์ž๋™์œผ๋กœ ๋ชจ๋“ˆ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ–ˆ๋‹ค๋ฉด ์ข‹์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด angular 1.X์—์„œ ์ผ์–ด๋‚  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ;)

๊ทธ๋Ÿฌ๋‚˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์—†์ด ๋ชจ๋“ˆ ์ด๋ฆ„์„ ์ •์˜ํ•˜๋ฉด ์‰ฝ๊ฒŒ ๋ถ€์ž‘์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ธ์ ํ„ฐ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ ์ธ์ ํ„ฐ ๋™์ž‘์€ ์ธ์ ํ„ฐ์— ์ด๋ฏธ ์„ ์–ธ๋œ ์„œ๋น„์Šค๋ฅผ ๋งˆ์ง€๋ง‰์œผ๋กœ ์„ ์–ธํ•œ ์„œ๋น„์Šค๋กœ ์ž๋™์œผ๋กœ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

10๊ฐœ ์ด์ƒ์˜ ์Šคํฌ๋Ÿผ ํŒ€์ด ์ž‘์—…ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ํŠนํžˆ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

50๋ช… ์ด์ƒ์˜ ๊ฐœ๋ฐœ์ž์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค!

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋‹ค๋ฅธ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์ƒ๊ฐ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ์•ฑ์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ๋ถ„ํ• ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? AngularJS๋Š” ์ด ์ธ์ ํ„ฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์„ค๊ณ„ ๊ฒฐํ•จ์œผ๋กœ ์ธํ•ด ๊ฑฐ๋Œ€ํ•œ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰