티스토리 뷰

Angular

Angular 3 걱정은 이제 그만 하자.

한장현 2016. 11. 27. 20:53

Todd Motto의 [Please stop worrying about Angular 3] 의 번역입니다.

저작자의 허락을 얻은 후 번역했습니다.




 Angular 새버전이 나왔나?? 진짜??

 Angular 2가 이제 나왔는데 Angular 3?? 왜죠???


 결론부터 말하자면 Angular 3에서 대규모 코드 변화는 없다. 이제 Angular 2의 미래와 Angular 3, Angular 4에 대해 이야기 해보자.


Angular 1.x에서 Angular 2로 갔던 이야기

 우선, Angular 1.x과 Angular 2는 엄밀히 다른 프레임워크다. 이렇게 생각하고 Angular 1.x에 대해 먼저 이야기 해보자.


Angular 1.x의 한계

 간단하게 말해서, 구글팀이 Angular 1.x를 맡은 이후, 개발자들이 원하던 최신 기법을 Angular에 도입하려고 하면서 Angular 1.x를 재작성할 수 밖에 없었다. 일부를 살펴보자면,

  • Angular 1.x는 서버렌더링을 할 수 없다.
  • Angular 1.x 코드는 네이티브 코드로 변환할 수 없다.
  • 어떤 환경에서는 잘 동작하지 않기도 한다.
 Angular 1.x의 한계에 대한 이야기에서 DOM을 처리하는 과정이 빠질 수 없다. Angular 는 이미 있는 DOM을 기반으로, 기능을 확장시키는 방식이었기 때문이다.

 Angular 2는 이런 한계를 극복하기 위해 만들어졌다. 기존에 있던 코드를 기반으로 새로운 API를 추가하는 것만으로는 구조적인 한계를 벗어나기 쉽지 않았고, Angular 2를 만들면서 코드의 기본 구조부터 크게 바꾸게 된다.


Angular 2

 Angular 2가 만들어진 것은 위에 있던 이유 이외에 $scope 를 없애려는 것도 있었다. $digest 싸이클을 통한 값 변경 체크 방식은 항상 성능의 약점으로 꼽혔기 때문에, 값 변경 체크 방식을 $digest 싸이클 밖으로 빼내려고 했다. Angular 1.x의 코드 구조는 몇몇 중요한 이슈로 인해 그대로 사용하기 어려웠고 이후 버전을 위해 바뀌게 된다.

 이러한 과정때문에 Angular 2가 등장하게 된다. Angular 2를 사용하면서 우리는 크로스 플랫폼의 렌더링 스케일 확장 문제, 속도, 성능 등 모든 것을 자유롭게 사용할 수 있다. 구글팀에게 큰 감사를 드리고 싶다.


 SemVer와 큰 변화(Breaking Changes)

Angular 1.x

 Angular 1.x의 탄생에 대해 돌아보자. 우리는 Angular 1.x을 몇 년 간 사용해오면서, 수 많은 버전들이 있었고, 그 안에 수많은 큰 변동사항이 있었다. 1.x 변경이력에서 직접 찾아 볼 수 있다.

 우리는 그동안 사용하던 프레임워크는 지금 버전에서만 큰 변동에 대한 내용이 수십 건이 있고, 지난 몇 년 간 수천 건은 아니더라도 수백 건 정도의 큰 변화가 있었다. 솔직히 지금까지 내가 이 내용들을 보지 않았어도 큰 문제는 발생하지 않았을 것이다.


Angular 2와 Angular 3

 아직도 트위터와 레딧 쪽에는 큰 혼란이 있는 것 같다. 진짜다.

 Angular 2는 완전히 새로운 패러다임을 도입하기 위해 만들어졌다. 오프라인 컴파일이나 다른 렌더링 방식, 그 이외에 수많은 개선점들을 위해서 말이다.

 Angular 1.x는 DOM이 로드될 때까지 기다리고, 거기에 뭔가를 붙이는 방식으로 동작한다. Angular 2는 반대인데, 프레임워크로서 템플릿에 대한 온전한 조정 권한을 갖고, 심지어 DOM을 만나지 않더라도 변화 자체를 처리한다.

 이 말이 무슨 뜻인지 설명하는 가장 간단한 예제는 컴포넌트가 DOM에 붙기 전에도 처리되는 클릭 이벤트가 있으며, 최종적으로 만들어진 DOM에서 (click)="fooFn()"과 같은 코드를 볼 수 없는 이유는 Angular 2는 자체적으로 이런 이벤트를 연결하고 처리하기 때문이다. 

 Angular 2 코드의 절반 정도는 내부 컴파일러가 차지하고 있다. 초기 로드 시점의 성능 향상을 위해 지연 로딩 모듈을 사용하면서 "Ahead-of-Time" 이라 불리는 컴파일 방식을 사용하는데, 이 때 사용하는 컴파일러다.

 AoT 컴파일 방식을 사용하지 않고 "Just-in-Time" 컴파일 방식을 사용한다면 브라우저로 넘겨야 하고 이러면 전송되는 코드가 많아질 것이다. AoT 접근 방식은 React의 JSX와도 비슷한 점이 있는데, 결국 전처리의 문제다.

(역주 : Angular 2의 코드 빌딩 방식은 Ahead-of-Time 방식으로 미리 전부 패키징하는 방식과 Just-in-Time 방식으로 필요할 때 필요한 모듈을 패키징하는 방식이 있습니다. 실제로는 같은 컴파일러를 사용하지만 타이밍과 활용방식에 따라 구분합니다. 클라이언트 입장에서 AoT 방식에서는 전체 코드를 다운 받아 오프라인에서 미리 렌더링하고 화면에 표시할 수 있고, JiT 방식에서는 필요한 라이브러리가 있을 때 해당 모듈을 컴파일해서 사용합니다.)


실제 버저닝

일단, 구글의 버저닝 정책은 이렇다.

Angular 1.x에서는 버저닝 방식이 이랬다.

  • Angular 1.0
  • Angular 1.1 - 1.2 지원을 위한 이전 버전
  • Angular 1.2
  • Angular 1.3 - IE8 지원 중단
  • Angular 1.4
  • Angular 1.5


Angular 2에서는 이렇다.

  • Angular 2
  • Angular 3
  • Angular 4
  • Angular 5
  • Angular 6
  • Angular 7

 실제로 코드가 어떻고, 어떻게 바뀌는 지에 관계없이 Angular 1.x와는 버저닝 전략 자체가 다르다. 구글 팀에서는 이 방식이 좀 더 알아보기 쉽고, 명확하고, 코드 업데이트에 좀 더 나은 가이드를 줄 수 있다고 판단했고, 어떠한 큰 변화가 있더라도 상관없다.


안정된 API와 실험적인 API
이 페이지를 방문해보면, 현재 제공되는 안정된 API가 어떤 것이 있는지 확인할 수 있다. 이 페이지에서는 실험적인 API를 확인할 수 있다. (역주 : 같은 페이지이며 드롭박스로 구별합니다.) 이 구분은 모든 Angular 문서에서도 확인할 수 있다. 예를 들어 FormGroup 는 안정된 API로 구분한다.


 구글은 실험적인 API도 SemVer를 사용하지만 API 관리 정책과는 조금 다릅니다. 실험적인 API를 사용한다면 그 API가 언젠가 변화가 있을 것이라 인지하고 있어야 하고, 어쩌면 실험적인 API로 분류되지 않을 수도 있습니다. 개발자들의 혼란을 막기 위해 이런 부분을 최소화하려고 하고 있고, 모든 API 변화에 대해 문서로 남기려고 합니다.

 이런 내용으로 볼 때, 이후 버전의 업그레이드는 간단할 것이다. 구글은 어떤 기능이 실험적인지 좀 더 확실하게 나타내기 위한 방안도 생각하고 있으며 alpha, beta, RC 버전에서 봤던 내용을 쉽게 없애거나 재작성하지 않을 것이라고 생각해도 좋을 것이다. 구현이 어떻게 되던지 관계없이 API 자체는 안정되었다고 봐도 좋다.


아직 Angular 1.x을 쓴다면?

 Angular 2 코드를 한 번도 건드려 보지 않았고 Angular 1.x를 쓰는 것에 지금 만족하고 있다고 해도, Angular 2를 배우는 것에 두려워 할 필요는 없고 Angular 3는 더 그럴 것이다. Angular 3는 Angular 2이고 좀 더 멋진 기능들이 들어있을 것이니까.

 모든 것은 빨리 변하지만, 좋은 방향으로 흘러간다. 최신 플랫폼을 지원하지 않거나, 개발자에게 좀 더 나은 접근성을 지원하지 않는 프레임워크를 쓸 이유는 어디에도 없으니까.




내용을 번역하다 보니 모호한 내용이 있어 추가합니다.


 Angular 1에서 Angular 2으로 변하면서 코드를 재작성했다고 할 정도로 크게 내용이 바뀝니다. 새로운 개발 언어를 사용하거나 컴포넌트의 구성방식이 바뀌고, 아키텍처, 사용하는 툴도 다르죠.

 하지만 Angular 2에서부터 SemVer를 따르면서 버전을 사용하는 철학이 달라지게 됩니다. Major, Minor, Patch로 구분하는 SemVer에서 Angular 가 2가 됐든 3, 4가 됐든 Major 버전이 바뀔 뿐입니다. 이전과는 호환이 되지 않는 무언가가 바뀌었다는 뜻이겠네요.

 그리고 구글에서는 Major 버전에 대한 업데이트를 6개월마다 진행하겠다고 발표하기도 했습니다. 이 내용대로라면 2017년 초에는 Angular 3 버전을 볼 수 있겠네요.


 코드가 많이 바뀐 것은 맞지만 이후 버전에서 Angular 1에서 2로 넘어가는 정도의 큰 변화가 있지는 않을 것이라는 것이 요점입니다.

 버전 자체에 대해 무서워할 필요는 없겠네요^^


 감사합니다.



내용 추가 (2016. 12. 14)


 최근 Angular 포스팅에서 놀라운 소식이 전해졌습니다. Angular 3 버전을 뛰어 넘고 Angular 4가 나온다고 하네요.. ㅎㅎㅎㅎㅎㅎ

 잠깐 살펴보면... 지금 Angular 패키지 중 @angular/router 가 3.3.0 버전을 달고 있는데... 이 패키지가 3을 넘어가 버리면서 Angular도 3 버전을 넘어간 것으로 보입니다.

 SemVer와 함께 도입한 계획적인 릴리즈 일정으로 보면, 2017년 3월 1일에 4.0.0 버전이 나올 것 같네요.


 정말 Angular 3을 걱정하지 않아도 되겠습니다.... 아하하....

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함