Sanghyuk's Dev


챕터 3 에서는 Angular 2 의 프로젝트 폴더구조에 대해 알아보겠습니다.

우선 1장에서 설치한 Vscode를 실행해 미리 생성해둔 MY-FIRST-APP 프로젝트를 열어봅시다.



알 수 없는 파일들과 폴더가 많이 있습니다.

차례대로 살펴보겠습니다.


e2e 폴더는 end to end 테스트를 위한 설정 파일이 들어있는 폴더입니다.

프로젝트를 테스트하기 위한 방법으로 단위테스트 와 통합테스트 가 있습니다.

단위테스트는 작성한 코드가 정상적으로 돌아가는지 단위적으로 테스트 하는 것 입니다.

통합테스트는 프로젝트에서 작성한 프로세스 대로 제대로 프로그램이 돌아가는지 테스트 하는 것 입니다.

로그인 - 게시물 작성 - 로그아웃 등의 일련의 행동을 자동화 하여 테스트 하는 방법으로

e2e 폴더는 통합테스트 관련 설정파일이 들어있습니다.


node_modules 폴더는 현재 프로젝트를 실행하고 구성하기 위한 모듈이 들어있는 폴더입니다.


다음으로 src 폴더를 열어보면 app, assets, environments 폴더가 있습니다.

src 폴더는 angular 2 에서 실질적으로 사용할 파일들이 들어있는 폴더입니다.


app 폴더에는 기본적으로 app.component 가 만들어져 있습니다.

이 컴포넌트는 현재 프로젝트에서 가장 먼저만나는 root 컴포넌트 역할을 합니다.

assets 폴더는 보통 정적파일 (이미지 등 고정적으로 사용될 파일들) 들을 저장하는 폴더이고

environments 폴더는 해당 프로젝트를 빌드 할 때 제품용과 개발용 빌드에 관한 옵션을 설정하는 파일들이 들어있습니다.


여기서 src 폴더의 중요한 파일들을 살펴보겠습니다.

index.html 은 최상위 html 파일이며, 이곳으로 컴포넌트들이 조립되어 나타나게 됩니다.

아래 내용은 index.html 의 코드입니다.


<!doctype html>

<html>

<head>

<meta charset="utf-8">

  <title>MyFirstApp</title>

  <base href="/">

<meta name="viewport" content="width=device-width, initial-scale=1">

<link rel="icon" type="image/x-icon" href="favicon.ico">

</head>

<body>

  <app-root>Loading...</app-root>

</body>

</html>


body 태그 안에 <app-root> 태그가 컴포넌트의 selector 를 가져와서 보여주는 부분입니다.

다시 /src/app 폴더 안의 app.component.ts 파일을 보겠습니다.


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


@Component({

  selector: 'app-root',

  templateUrl: './app.component.html',

  styleUrls: ['./app.component.css']

})


export class AppComponent {

  title = 'app works!';

}


selector 에 app-root 라는 문구가 보입니다.

여기까지 설명했다면 어떤 느낌인지 아실겁니다.

selector가 컴포넌트의 이름이라고 생각하고, 해당 이름을 html 에서 태그형식으로 불러오는 방식입니다.


그전에 angular 의 설정파일을 봐야합니다.

app 폴더 내부의 app.module.ts 파일을 살펴보겠습니다.


import { BrowserModule } from '@angular/platform-browser'; 

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

import { FormsModule } from '@angular/forms';

import { HttpModule } from '@angular/http';


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


@NgModule({

    declarations: [

        AppComponent

        ],

    imports: [

        BrowserModule,

        FormsModule,

        HttpModule

    ],

    providers: [],

    bootstrap: [AppComponent]

})

export class AppModule { }


NgModule 은 공통으로 사용 할 Component, Module, Service 를 등록하는 설정파일입니다.

현재 코드의 상단을 보면 AppComponent 를 불러왔고, declaration 에는 AppComponent 가 등록되어 있습니다.

그리고 imports 는 Angular 에서 사용 할 주요 모듈들이 등록되어 있고 

providers 에는 공통으로 사용할 Service 를 등록하는 곳 입니다.

bootstrap 은 최상위 컴포넌트, 즉 프로젝트를 실행 했을 때 가장먼저 실행 할 컴포넌트를 등록합니다.

현재는 AppComponent 가 등록되어 있습니다.


( 이해가 되지 않아도 차근차근 따라가다 보면 알아서 이해가 될 것입니다. )


마지막으로 AppModule 이라는 이름으로 export 시켜서 외부에서 해당 파일을 참조할 수 있도록 했습니다.


다음으로 src 폴더의 main.ts 파일을 보겠습니다.


import './polyfills.ts';


import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

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

import { environment } from './environments/environment';

import { AppModule } from './app/app.module';


if (environment.production) {

  enableProdMode();

}


platformBrowserDynamic().bootstrapModule(AppModule);


여기에서는 app.module.ts 에서 export 한 AppModule 을 import 시키고 platformBrowserDynamic 을 등록시킵니다.

platformBrowserDynamic 은 브라우저에서 Angular 를 사용하기 위해

Angular 의 이런 기능을 사용할 것 이라고 알려주는 것 이라고 생각하시면 됩니다.


Angular 에는 platformBrowser 와 platformBrowserDynamic 의 두 종류가 있는데 

둘의 가장 큰 차이점은 컴파일 방식입니다.

AOT 와 JIT로 나뉘는데 이 부분은 나중에 따로 설명하도록 하겠습니다.


이어서 polyfills.ts 파일은 브라우저에서 es6 문법을 사용하기 위한 모듈들을 모아놓은 파일이고

tsconfig.json 은 Typescript 컴파일 옵션을 정의하는 파일입니다.

현재 건드릴 일이 없으니 이런게 있다 라고만 알고 넘어가겠습니다.


그리고 최상위 폴더에 있는 Karma.conf.js 파일은 jasmine 을 이용한 단위테스트를 위한 설정파일이고 

package.json 은 해당 프로젝트를 위한 모듈 관리 파일입니다.


간단하게 테스트를 해보기 위해 src/app/ 폴더의 app.component.ts 파일로 들어가봅시다.

title='app works!' 이 부분을 원하는 문자로 변경해봅시다.

그리고 cmd를 실행해서 서버를 실행해보면 문자가 바뀌어 있는 것을 확인할 수 있습니다.



해당 title 이 어디로 들어가는지 알고 싶다면 app.component.ts 파일에서 templateUrl 로 지정된 

app.component.html 파일을 봅시다.

간단한 코드가 있는데 그냥 보아도 title 이 어디로 바인딩 되는지 알 수 있습니다.


이것으로 설정파일과 프로젝트 구조에 대한 설명을 마치겠습니다.

다음장으로 넘어가겠습니다!




REFERENCE

http://alexband.tistory.com/