개발팀장이 되면서 겪게된 점들 1

이미지
                                                         <팀원을 모집하기 위해 고군분투하는 모습이다. > 첫 한달  개발팀장을 맡다 2021년 5월 , 기존에 있던 CTO분이 휴직(개인사)을 하게 되면서    개발에 대한 모든 권한을 내게 일임하였다.   개발에 대한 모든 의사결정을 전부 내게 맡긴 것으로 ,   어느 정도 규모가 있는 회사의 의사결정권한을 갖게 된 것은 그만큼 내게 큰 신뢰가 있었음을   알수 있게해주는 대목이었다. 그러나 전혀 예측하지 않았던 상황이기에 준비가 되어있지 않았던만큼 처음에는 삐걱거렸다. 가장 첫번째로 어려움을 겪었던 것은 업무의 배분이었다.   관리자가 되니까 해야할일은 업무를 만들고 또 그것을 팀원들에게 분배하고 잘 되고있는지 취합하고 관리감독을 하는것이었다.   군 시절 장교로 복무하면서 겪어봤던 일이긴 했지만, 군복무 당시에도 그닥 잘 하지는 않았던 것 같다.   그럼에도 어쨌든 전반적인 시스템을 이해하고 있었고, 어떻게 구현해야할지에 대해서는 어느정도 경험이 쌓여있었기때문에 큰 문제가 없을 줄 알았다.   실무자로 일을 할 때에도 항상 업무를 받아서 하지는 않았다. 스스로 돌이켜보건대, 나는 주어진 업무가 없으면 스스로 만들어서 제안하고 기획하여 업무를 진행했다.  조그마한 스타트업이었던 첫 회사에서부터  내가 할일은 내가 만들어서 곧 잘했다. 어떤 큰 방향만 정해져있다면 그건 큰 어려움은 아니었다. 나에게 일은 항상 있었다.   매니저가되면서 달라진게있다면 내가 할일만 만드는 것은 아니라는 점이다 . 남이 할 일도 만들어줘야했다.  다행히 팀원들에 대한 면담을 실시한 결과,(팀원을 맡게되자마자 했던 부분)   마이크로 매니징을 원하지는 않았기때문에 큰 그림을 그리는 정도만 준비하면 됐었다.   문제는 내 실무를 동시에 진행하면서 팀원들의 업무 방향도 설정해야했기때문에 시간이 배로 들게 되었다는 점이다. 물론 두배로 일하지는 않았다. 대신에 내 실무시간을 줄였고

[Angular2 with TypeScript] 2. 서버 실행과정









npm start 명령어를 실행해서 서버를 가동시킬때 어떠한 과정을 거쳐 실행 되는것일까?

이제 막 6개월차 프로그래밍 공부를 하고 있는 나로서는 구체적인 동작은 설명할 수는 없으나 개략적으로 

어떤 파일이 어떻게 사용되어지는지 알아보겠다.


src 디렉토리 내부에있는 파일들이 실제 가동할때 쓰이는 것들인데 서버가 가동되기 시작하면 가장 먼저 바라보는 것이 main.ts 파일이다. 
비쥬얼 스튜디오 코드를 통해 해당 파일 내부를 들여다 본다.



이것이 타입스크립트를 적용된 가장 첫번째로 살펴본 파일이다.
문법에 대해 설명하자면 

import {} from '' ; 는 외부 라이브러리로 부터 중괄호 안에 있는 이름의 
엘리먼트를 가져오겠다는 의미이다. 

12번째 줄을 보면 platformBrowserDynamic().bootstrapModule(AppModule); 이 있다.
가장 먼저 실행되는 모듈로서 AppModule 이라는 것을 임포트해와서 부팅하겠다는 의미이다.

AppModule은 위 임포트 구문에서보면 어디로부터 온것인지 알 수 있다. app/app.module
app 디렉토리에 안에 app.module 이라는 이름의 파일로부터 가져온것을 알수가 있다. 모듈을 살펴보자.



원래 파일의 이름은 확장자가 ts인 app.module.ts 이다. 타입스크립트에서 임포트 구문에 쓸때는 확장자는 무시해도 상관없다고 한다. 
1~4 : 아직은 알수 없지만 어떤 모듈들을 임포트 하고있다.
6: 실제 우리가 실행한 컴포넌트인 AppComponent를 가져온다. 컴포넌트에 대해서는 따로 설명할테니 지금은 그냥 넘어간다.

8~19: @NgModule() 은 이 파일이 모듈임을 명시적으로 알리고 그안에 설정할 메타데이터를 기록할 수 있는 곳이다. Json의 형태로 설정값들을 넣어주는데 마지막 속성으로 bootstrap이 있고, AppComponent 를 넣어주었다. 우리가 앞서 보았던 Main.ts와 비슷한 환경이다. 컴포넌트는 여러개 부팅시킬수 있다.

20: export는 해당 클래스를 클래스명으로 노출시킨다는 의미이다. 이 과정을 거치지 않으면 타입스크립트에서는 import를 할수가 없다. 실제로 위에 import 되고있는 모듈과 컴포넌트들은 전부 이 과정을 거친 상태이다. 해당 경로를 따라 들어가서 내부를 살펴보면 export로 선언되어 있음을 알 수 있다.

main.ts->AppModule 까지 왔고, 이 모듈은 또다시 AppComponent를 부팅시키고 있다 역시 따라가보자.




1: Component는 나중에 설명할 장식자 중의 하나인데, 3번째 줄의 @와 함께 이것이 컴포넌트임을 명시적으로 알려주고 그에 맞는 메타데이터를 설정할 JSON 객체를 넣을수 있는 공간을 마련한다.

3~7 :컴포넌트에 대해서는 다음 포스트에서 설명하고자 하니 지금은 흐름만 대충 보자.
컴포넌트 설정값중 selector라는 속성이 있는데 'app-root'라는 이름으로 지정해두었다. 이 이름을 잘 기억하고 있도록 한다.

8~10 : 마찬가지로 export를 함으로써 외부에 노출시키고 있다. 
이러한 과정을 통해 실행에 필요한 로딩과정을 알아두었다. 로딩한다는 것은 처음에 클라이언트가 서버에 요청했을때 설정되어있는 값들을 부팅시키는 과정이라고 보면 된다.


우리가 지금까지 본것들은 전부 ts 파일들이었다. 타입스크립트는 결국 자바스크립트로 컴파일 되어지는 언어이기때문에 현재는 자바스크립트 언어만 다룬 셈이다. 
 웹에 어떤 정보를 요청한다는 것은 브라우저가 해석할 html 문서를 요청한다는 것인데 우리가 localhost:4200을 통해 요청해서 받아본 화면은 무엇을 해석한 것일까? 바로 index.html 이다. 



친숙한 html 문서가 열렸다. 
별다를 것 없어보이는데 , 태그하나가 눈에 띈다.

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

우리가 컴포넌트에서 보았던 그 단어이다. 실제로 컴포넌트가 해석단계를 거치고나서 
html 문서상의 지정된 태그에 정보가 표시되어진다. 

결국 우리가 클라이언트에게 보내주는 페이지는 이 index.html 한장이고 그 내부 동작은 앵귤러 프레임워크를 통해 우리가 개발할 수가 있다. 

이런 어플리케이션을 SIngle Page Application, 약자로 SPA라고 하는데 요즈음 웹개발의 트렌드이다. 
단일페이지만 로딩하고 나면 그 후부터는 페이지를 계속해서 갱신하는 것이 아니라 요청이 이뤄질대 해당되는 부분만 데이터를 바꿔줌으로써 동적인 환경을 만들어 준다는 것이다. 

우리가 앞으로 살펴볼 앵귤러 2는 이런 SPA개발에 특화되어 있는 프레임워크이다.

실제 배포가 된다면 어떤 형태로 만들어질까? 빌드를 해보자.


전에는 없던 dist라는 디렉토리가 생겨났다. 그 안에는 .js 와 .map 파일이 가득하다.
inline.bundle.js나 main, style등등을 index.html이 참조하고 있는 구조이다.



빌드되기전과 빌드 후의 index.html 파일의 다른점이 생겨났다. 16~18번째 줄의 <script> 태그들이다.
앞서도 이야기했듯이 우리가 작성하는 것은 동적 환경을 위한 자바스크립트이다.  앵귤러 프레임워크와 타입스크립트 언어를 통해 기존의 자바스크립트를 쓰는 것보다 훨씬 쉽고 생산성있게 개발을 할수 있음을 알수 있다. 컴파일되고 재구성된 .js 파일은 알아보기에 힘들지만 그런 파일들을 직접 작성하는 것보다 다른 선배 개발자들이 만들어놓은 도구를 쓰면서 그 효율성에 감탄을 금치 못하고 있다. 


다음 포스트에서는 좀더 이론적인 부분에서 우리가 태그를 만들어내고 어떤식으로 표현되는지를 알아본다.

댓글

  1. 배포파일은 그냥 웹서버에 올리면 동작하지 않나요? indx.html읽어서 .. 빌드해서 웹서버에 올렸는데.. 동작을안하네요

    답글삭제
  2. 빌드된 결과물들을 전부 한 디렉토리에 올려주셔야해요!

    답글삭제
    답글
    1. base hef="/"> 여기에 현재 index경로 를 써줘야지 돌아가네요 ㅋ;; 같은위치에있는데 안불러오길래 봤더니..

      삭제

댓글 쓰기

이 블로그의 인기 게시물

iframe 보안 문제 우회 및 해결법 1

iframe 보안 문제 우회 및 해결법 2

개발팀장이 되면서 겪게된 점들 1