Korea Evangelist

Developer & Platform Evangelism, Microsoft Korea

  • Korea Evangelist

    테크데이즈 미니 토요세미나 발표자이신 송원석님을 미리 만나 보았습니다

    • 0 Comments

    안녕하십니까? 오늘은 최근 WebAPI 관련 문서를 한글화 하여 공개해 주신 송원석님을 모시고 이야기를 나누어 보았습니다.

    김명신: 근황에 대해서 이야기 해주실 수 있을런지요?

    송원석 (3)송원석: 현재는 프로젝트에 투입되어 공통 모듈 개발 업무를 진행하고 있습니다. 최근들어 특히 정부 기관이나 관공서들을 중심으로 ActiveX의 사용을 자재하고 순수 HTML/JavaScript 기반의 브라우저 플랫폼을 요구하는 곳이 많이 있습니다. 이 과정에서 필요한 기술 자문과 더불어 공통 모듈 개발을 수행하고 있습니다. 어플리케이션에 대한 설계를 담당하시는 분들이 개발 환경이나 운영환경에 대한 이해도가 떨어지는 경우가 꽤나 있는데, 이 때 다양한 개발/운영 환경의 영향성을 파악해서 자문의 역할을 수행하고, 다양한 개발자들의 이해관계를 조율하고 업무적으로 재사용성이 있는 모듈들을 개발하여 실무 개발자들이 좀 더 빠르고 편하게 개발할 수 있도록 돕는 역할을 한다고 보시면 맞을 것 같습니다. 현재 진행 중인 업무는 대략 2년 남짓의 기간 동안 진행 중에 있습니다. 이 일을 본격적으로 시작하기 전에는 상당 기간 동안 전자조달 업무를 진행하기도 하였고, 싱가폴에서 개발업무를 진행한 경험도 있습니다. 사회에 발을 처음 디디고 국내에 정보통신 업계의 하도급 문화와 관행에 문화적인 충격을 느껴서 해외로 나갔던 것인데요, 싱가폴에 근무하던 회사도 한국계 회사이다 보니 큰 차이점을 느낄 수가 없었습니다. 결국 어디서 일하느냐 보다 누구와 일하느냐가 가장 중요하다고 느끼고 마음 편히 일하고 싶어서 한국으로 돌아 왔습니다.

    김명신: 국내 SI는 정보통신의 꽃이라는 긍정적인 평가와 더불어 올바르지 않은 관행과 하도급 문화에 대한 지적도 있는 것이 사실입니다. 실제 상당기간 동안 국내에서 SI 관련 개발을 진행하시면 이에 대하여 이야기 해주실 부분이 있을까요?

    송원석: 네, 실제로 제 경력에서 2년 정도를 제외하면 SI 개발을 해왔습니다. .NET 개발관련 업무도 많이 했었고 Java를 이용하여 개발도 많이 했습니다. 10여년간의 시간동안 정보통신 관련 기술들은 비약적으로 발전했음에도 SI 비즈니스는 고착화된 업무 관행과 추진 방식 등은 거의 변화되질 않았습니다. 가끔 듣는 외국의 사례와는 너무나 동떨어진 한국식 SI 비즈니스가 깊이 뿌리내리고 있다 보니 상대적으로 변화가 매우 더딘 것이 사실입니다. 이쪽 일을 하시는 분들은 누구나 공감하시겠지만, 하도급 계약으로 인한 폐해는 심각한 수준이고요. 합리적이지 못한 일정 수립과 저가 입찰, 개발자들의 자질 또한 큰 문제라고 하지 않을 수 없습니다. 일정이 다급하고 개발 비용이 빠듯하니 개발이 완료되었다고는 하나 테스트가 올바로 수행되지 않고 시스템을 오픈하거나 핵심 기능에 문제가 생기는 경우가 비일비재 합니다. 그렇다 보니 실제로 프로젝트는 개발인력이 철수한 그 순간부터 본격 시작이라는 말도 있습니다. 시스템을 오픈하면 이미 다른 프로젝트에 투입되어 있는 개발자에게 전화가 빗발치는 이유도 그러합니다. 국내의 경우 특별히 대규모 프로젝트가 수년에 걸쳐 한번씩 크게 진행되는 경우가 있는데, 이는 실제로 시스템이 개발된 이후로 수년간 변화되는 업무환경을 시스템이 따라가지 못하기 때문에 완전히 새롭게 시스템을 재구축하는 과정들을 반복하는 것이지요. 하지만 이러한 개발 문화가 실상은 상당히 한국적이라는 사실을 아시는 분은 많지 않으신 것 같습니다. 안타깝게도 현업에 종사하는 개발자로서 이런 구조가 쉽게 바뀔 것 같지 않고, 너무나도 한국적으로 토착화 되어 버린 것은 아닐까 하는 아쉬움이 있습니다.

    김명신: 실제로 외국의 경우는 대규모 재개발 프로젝트 보다는, 프로젝트 완료 이후에 운영 과정에서도 지속적으로 개발을 하는 것으로 알고 있습니다. 우리나라에서 운영이라 하면, 주로 SE(System Engineering)나 operation을 중심으로 하고 있지만 실제로 해외 사례들을 살펴보면, 유지/보수 업무라는 것이 변화되는 업무와 시스템 사이의 간극을 메우기 위한 개발의 관점으로 유지/보수 업무를 진행하는 것으로 알려져 있습니다. 최근 들어 많은 분들께서 이야기 하시는 DevOps라는 트렌드가 자연스럽게 현업에 적용되고 있는 것이라고 보여집니다. 이렇게 지속적으로 유지/보수가 되다 보니 대규모 재개발이라는 것이 필요한 경우가 적지 않을까 생각합니다.

    송원석: 실제로 개발 당시에는 객체지향의 장점을 최대한 활용하여, 유지/보수의 편의성이나 재활용성을 극대화 하기 위한 설계와 개발방법 등을 적용합니다. DI(Dependency Injection)이나 IOC(Invasion of Control) 컨테이너도 그러한 맥락에서 필수처럼 여기지는 경우를 많아 보았습니다. 그런데 실상은 프로젝트 완료로부터 차기 프로젝트가 진행될까지 관련 소스가 변경되는 경우는 거의 없어요. 단순 운영의 관점에서 소스를 건드린다는 것은 해서는 안 되는 불문율처럼 되어 있어요. 그래서 이 소스는 영원히 변경될 가능성이 전혀 없고 차기 프로젝트에서 참고만 해줘도 다행이라고 이야기 하시는 개발자들도 있습니다. 결국 변경될 가능성이 거의 없는 소스에 대해서 유지/보수의 편의성을 도모하여 개발한다는 것입니다. 문제는 이런 점을 고려하여 개발하는 것이 절대 공짜가 아니라는 점입니다. 설계나 구조도 복잡해지고 개발 시에도 공수가 더 많이 들어갈 뿐 아니라 수행 성능에도 긍정적인 영향을 주지 못합니다. 다시 한번 생각해 보아야 할 부분이 아닌가 합니다.

    김명신: 수년간 IIS MVP로 활동을 하신 것으로 알고 있습니다. 새로운 버전이 나올 때 마다 새로운 기능이 추가되거나 구조가 변경된 경우도 꽤나 있었고 최근에 8.5가 출시되기도 했는데요, 매 버전이 출시될 때 마다 기술적으로 성숙되어 가는 웹서버의 모습들을 관심 있게 지켜보셨으리라 생각됩니다.

    송원석: 실제로 IIS 4.x에서 5.x으로 넘어갈 당시에 공유 풀 모델이 추가되었는데, 저는 그 당시만 해도 새로운 기능으로 넣을 것이 많지 않아서 추가했나 싶을 정도의 의구심을 가졌었습니다. 그런데 6.x로 가면서 응용 프로그래밍 풀 모델이 나오고, 메모리를 공유할 수 있는 모델이 추가되더니 그 이후로 상당한 유용성을 가진 리사이클링이나, 웹가든, 웹팜등 다양한 모델이 기존의 변화의 연장선에서 기능 추가가 이루어지는 것을 보고, 오랜 기간 동안 장기적인 안목을 가진 개발자와 개발팀이 지속적으로 개선과 발전을 이루고 있구나 하는 느낌을 받았습니다. 이처럼 중장기적인 방향성을 가지고 제품을 발전시킬 수 있다는 것이 놀랍기도 하고 부럽기도 하더군요. 아무래도 제가 개발자이다 보니 IIS MVP로 활동하던 시기에 개발의 관점으로 IIS를 접근하였는데, 사실은 IIS를 대규모로 사용하시는 분들은 대부분은 운영자인 경우가 많더라고요. 당시에 그런 관점을 조금 더 이해하고 있었더라면 좀 더 좋은 활동들을 많이 할 수 있지 않았을까 생각이 듭니다.

    김명신: 초중급 개발자분들이 저에게 간혹 물어보시는 질문 중에 닷넷을 해야 하나요? 자바를 해야 하나요? 혹은 저는 지금 닷넷 개발자인데 자바를 해야 하나요? 와 같은 질문을 하시는 분이 있습니다. 혹시 이런 질문을 받으신다면 어떤 답변을 해주실 수 있을까요?

    송원석: 분야별로 차이가 많이 있으리라 생각합니다만. 웹 개발자의 관점으로 이야기 드린다면 어떤 언어나 플랫폼을 사용하더라도 일단은 하나의 언어와 플랫폼에 깊이 있는 내공을 쌓으라고 말씀 드리고 싶습니다. 그것이 자바이냐 닷넷이냐가 중요하다기 보다는 근간이 되는 기술에 대하여 깊이 있게 이해하는 것이 우선이라고 생각합니다. 웹 기반 기술은 결국 http와 같은 프로토콜을 근간으로 하는 모형입니다. 어느 회사가 만드는 솔루션이라도 이 범주를 넘어설 수 없지요. 그런 본질과 이론을 이해한다면, 무엇으로 구현하고 어떤 제품을 사용할 것인지는 차선의 문제일 수 있습니다. 실제로 현업에서 요구하는 기술 요건이 그렇게 높지 않은 경우라 하더라도 꾸준히 자기계발을 하다보면 동일한 일이라 하더라도 좀 더 효율적이고 성능이 좋은 코드를 개발하실 수 있으리라 생각합니다. 그리고 그런 분들이 더 많아졌으면 하는 바램이 있습니다. 10만 인력 양성의 이야기는 초급 개발자 10만을 양성하는 것을 목표로 삼는 것은 아닌 것으로 알고 있습니다. 이처럼 현업에서 경험과 숙련도를 가진 개발자가 많아지려면 그들이 일할 수 있고 활동할 수 있는 분야가 많이 많이 만들어져야 한다고 생각하고 있습니다.

    김명신: 최근에 웹사이트 (http://www.egocube.pe.kr/)를 재오픈하신 것으로 알고 있어요. 저도 그 사이트를 통해서 WebAPI와 관련된 번역 문서를 접하였습니다. 번역문서 외에도 공을 드려 작성하신 문서들이 상당히 많던데, 웹사이트 폐쇄하셨다가 다시 오픈하신 이유가 있을지요?

    송원석: 이 웹사이트는 2002년 정도에 처음으로 개발하여 오픈하였습니다. 그 당시에는 개발자라면 홈페이지 하나 정도는 있어야 하지 않을까 하는 생각에 시작을 했습니다. 처음에는 정말 열심히 강좌도 많이 썼습니다. 그런데 어느 순간부터 사이트를 통해서 들어오는 질문의 수준이 너무 높아서 제가 답변을 드릴 수가 없더라고요. 그렇다 보니 불성실한 답변만 하고 그랬습니다. 그러다가 웹사이트를 폐쇄하였었습니다. 그런데 최근에 사이트를 다시 오픈한 이유는 이렇습니다. 먼저 간혹 예전에 제가 사이트에 올려두었던 글이나 기사들을 찾으시는 분들이 계시더라고요. 그런분들께 여기를 보시면 내용이 있습니다 라고 말할 수 있는 공간이 없어져서 조금 답답했습니다. 그리고 간혹 해외 토픽 같은 걸 보면 1500년대에 누가 쓴 편지가 발견 되었는데, 거기에 이러저러한 내용이 있었다 라는 뉴스가 나오기도 하잖아요. 게다가 저희도 저희 선배로부터 그 시대의 고민꺼리와 이야기꺼리들을 술자리를 통해서만 듣곤 하잖아요. 저는 제 사이트의 내용이 설사 나중에 아무런 기술적인 가치가 없어진다 하더라고 그것이 하나의 기록문화이며 유산이 될 수 있다라고 생각했습니다. 노력해서 좋은 글을 올리려고 하였지만 그 중 일부는 아마도 잘못된 부분이 있을지도 모르겠습니다. 하지만 그 조차도 충분히 이야기거리가 될 수 있으리라 봅니다. 그래서 사이트를 다시 오픈하였고, 최근에는 주로 주요 기술에 대한 원문을 한글로 옮겨서 올리고 있고, 간혹 제 경험과 기술에 대한 내용도 포스팅을 할 생각입니다.

    김명신: 최근에 개발관련 커뮤니티 활동들이 예전에 비해서 상당히 적어졌을 뿐더러, 그 명맥을 유지하고 있는 커뮤니티들도 많지 않은 것 같습니다. 혹시 개발 관련 커뮤니티가 이전처럼 성공적으로 활성화 될 수 있는 방법을 없을까요?

    송원석: 예전에 커뮤니티 활동이 활발 했던 이유는 지식을 공유하거나, 묻고 답할 수 있는 채널로커뮤니티가 상당히 좋은 장소이었기 때문이라고 생각합니다. 그런데 최근에는 구글이 그 자리를 거의 대체하고 있다는 느낌이 들어요. 체계적이지는 않을지 모르나 구글과 같은 검색엔진이 마치 사전과 같은 역할을 하기 때문에 커뮤니티의 활용도나 가치가 그 만큼 하락한 것으로 생각하고 있습니다. 이런 이유로 개발관련 커뮤니티가 많이 사라지기도 하고 활동이 저조할 수 밖에 없는 것 같습니다. 커뮤니티가 유지되려면 단순한 질문/답변 창구가 아닌 그 이상의 가치를 가지도록 재편되어야 할 겁니다. 실제로 오픈 커뮤니티 채널보다 그들만의 감성을 공유할 수 있는 폐쇄형 커뮤니티 채널들이 각광을 받는 이유도 그 같은 이유가 아닐까 생각이 듭니다. 실제로 제가 운영진으로 있던 http://taeyo.net 과 같은 커뮤니티도 전성기에 비해서는 활동이 많이 줄어든 것은 사실입니다. 하지만 이러한 변화에 대응하기 위해서 수년전부터 루키 프로그램 등을2500_7824_clip_image004_thumb_55AC0446_thumb_1BE29F68 만들어서 수개월간의 전문 교육/개발 과정을 진행하고 있습니다. 커뮤니티의 이러한 변화는 어쩌면 당연하고 또 반드시 변화하여야만 유지될 수 있다고 생각합니다.

    김명신: 장시간 인터뷰에 응해 주셔서 대단히 감사합니다. 이번 3월15일(토) 테크데이즈 미니 토요 세미나에 발표하실 “재사용 가능한 ASP.NET View 구성 요소 개발”에 많은 기대를 가지고 있습니다.

    송원석: 네, 기존에 웹폼에서 사용하던 서버측 컨트롤의 높은 재사용성을 MVC에서도 그대로 유지할 수 있는 다양한 기법에 대해서 소개드리고자 합니다. 이 방법을 통해서 많은 분들이 재사용 가능한 구성요소들을 만드시는데 도움이 되었으면 합니다.

    김명신: 감사합니다.

    테크데이즈 미니 토요세미나 안내

  • Korea Evangelist

    Windows Azure 의 계정마다 구독을 제공하고 계정과 구독을 통합 관리 하는 방법! - EA Portal

    • 0 Comments

    안녕하세요. 김대우입니다. 이번에 소개해 드릴 내용은 IT 부서의 고민이죠.

    여러개의 Windows Azure 계정(Account)들과 구독(Subscription)들을 통합 관리하는 방법입니다.

     

    최근 모바일 게임 퍼블리셔사와 5개의 팀으로 된 개발 스튜디오 기술책임자 분들과 미팅을 진행했습니다.

    퍼블리셔 : 모바일 게임 개발사에 Windows Azure 계정을 주고 이 계정에 구독을 생성해 주는 방법

    퍼블리셔사가 사용하는 Windows Azure 관리자 계정을 대여해 줄수도 없는 노릇.

     

    Windows Azure 도입과 적용을 확대해 나가면서 자주 받는 질문이기도 하지요.

     

    image

    예를 들면, 회사의 팀이나 부서 단위로 Azure를 사용하게 하고, 구독들을 통합 관리하고 싶을 경우이지요.

    이럴 때 사용하면 편리한 기능이 바로 Windows Azure EA Portal 입니다.

    EA Portal 링크 : https://ea.windowsazure.com/  (EA가입자만 접근 가능합니다.)

     

    EA Portal이 제공하는 기능들

    - Windows Azure 계정들 관리

    - 계정들에 대한 구독들 관리

    - EA 계약에 따라 할인 받은 금액의 가격표

    - Windows Azure 사용량 체크

    - 과다 사용시 알림(Overage Notification) 기능

    - 주기적(Periodic Usage Notifications) 사용량 알림

    등의 정보를 보실 수 있어요.

    만약, AWS에 익숙하시다면, Consolidated Billing 과 유사합니다.

     

    Windows Azure EA 가입에 대한 추가 정보

    EA(Enterprise Agreement)로 Azure를 사용하시면(지불 계약) Windows Azure EA Portal을 사용 가능하고, 이 EA Portal에서 위의 관리를 할 수 있습니다.

    EA 계약은 적은 금액부터 선택 가능하고, 금액에 따라 종량제나 선불제보다 훨씬 더 많은 할인을 받을 수 있다고 하네요.

    Windows Azure EA 계약 관련 금액 문의는 마이크로소프트 영업 담당자나 Microsoft 총판, 리셀러에 연락 하라고 합니다.

    많은 도움 되시길 바랍니다. 감사합니다.

     

    엔터프라이즈에 대한 Windows Azure 라이선스

  • Korea Evangelist

    고가용성을 위한 Windows Azure 데이터베이스 미러링 0312

    • 0 Comments

     

    이 내용은 기본적으로 고가용성에 대한 충분한 이해가 있으며, Windows Azure와 SQL서버의 여러 고가용성 기능들에 대해서 역시 이해도가 있는 개발자나 IT전문가임을 고려해 상세한 설명 없이 진행.
    미러링에 대해 기본적인 사항이 필요할 경우 향상된 가용성 기능 (미러링) – SQLER 강성욱 제작. SQL서버 미러링 기능 이해에 좋을 듯.

    Windows Azure의 끝판왕 - 고가용성 및 부하 분산 기술인 AlwaysOn에 대한 내용은 추후 제공 예정

    Tutorial: AlwaysOn Availability Groups in Windows Azure (PowerShell)

     

    SQL 서버 고가용성 미러링에 대한 첨언

    미러링은 구성 및 운영, 장애 상황에 대한 절차 등을 충분히 미리 검토하고 전체 절차를 숙지해 두어야 한다.

    특히, 장애 상황시 역할 전환이나 스냅샷 DB 활용시 데이터 생성 시점과 동기화 등 기본적인 내용을 충분히 고려하길 권장.

    Microsoft Technet 데이터베이스 미러링(SQL Server)

     

    이 내용에서는 Windows Azure에서 구축 가능한 모니터링서버(Witness Server) 및 인증서를 사용해 각 서버에 접근하는 방식을 다룬다.

    SQL서버의 미러링 기능 등에 대해서 궁금한 사항이 있을 경우 SQLER.com의 SQL 질문과 답변 게시판을 이용하면 좋음.

     

    미러링 튜토리얼  원본문서 : Tutorial: Database Mirroring for High Availability in Windows Azure

    원문이 변경될 수 있으며, 원문에 충실히 따르길 권장.

     

    파워쉘은 쉘 스크립트 기반으로 마이크로소프트의 여러 다양한 제품들을 제어하기 위한 기술임.

    Windows Azure 도 파워쉘로 빠른 관리 가능하고, 파워쉘에서 Azure를 사용하기 위해서는 파워쉘 cmdlets을 설치해야 한다. SDK 링크에서 설치 가능

    Windows Azure PowerShell cmdlets.

    command-line tool의 Windows PowerShell – install 을 선택하면 설치 가능

    image_thumb.png

    웹 플랫폼 설치 관리자(WPI)가 설치 안되었다면 설치하고, 계속 진행한다.

    WPI는 여러 종속성(dependency)가 있는 SDK나 플러그인 등의 다운로드를 자동으로 조절해 주는 편리한 설치 관리자이다.

     

     

     

    파워쉘 관련자료 참고링크

    SQLER의 Windows Server 게시판 김재훈의 파워쉘 강좌 

     

    파워쉘 실행

    Windows Azure의 고가용성 - 미러링작업은 절차가 복잡하기 때문에 GUI로 하길 권장하지 않는다.

    파워쉘과 SQL쿼리에 이해가 있다면, 아래 내용을 따라해 10분 이내에 미러링 배포도 가능하다.

     

    powershell 명령을 실행창(윈도우키+R) 또는 프로그램에서 선택해 실행

    그러면, 아래와 유사한 화면이 시작된다.


     

     image10_thumb.png

     

    파워쉘 SDK 가져오기(import) 수행 – Azure 관련 파워쉘 명령을 실행 할 수 있다.

    Import-Module "C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure\Azure.psd1"

     

    Azure 출판설정파일(PublishSetting)은 Windows Azure의 구독 정보가 기록된 파일이다.

    파워쉘의 현재 세션이 나의 Windows Azure 구독에 접근해 여러 작업을 가능하도록 하는 인증서라고 보면 된다.

    구독 파일 - publishSettings 다운로드 방법은 https://manage.windowsazure.com/publishsettings/index?client=powershell 바로 다운로드 시작 되고 저장 가능하다.

    또는 파워쉘에서 아래 명령 수행 하면 브라우저가 열리면서 설정 파일을 바로 다운로드 가능

    Get-AzurePublishSettingsFile

     

    다운로드 받은 설정 파일을 먹여 준다.  나의 경우는 위의 이미지처럼, c:\temp 폴더에 저장했고 수행했다.

     

    Import-AzurePublishSettingsFile "c:\설정파일저장폴더\설정파일"
     

     

    빠른 Windows Azure 설정을 위해 파워쉘에 변수값 지정

    현재는 일본 서부 데이터센터이고, 위치 및 선호도 그룹 이름을 ContosoAG 으로 설정했다. 가용성집합 이름은 SQLHADR 이다.  현재 VM은 SQL2012 Enterprise이고 4코어를 쓰는 Large 인스턴스이며 과금 여부에 주의한다.

    이후 VM이 생성된 후 VM에 RDP로 접근 가능한 아이디 정보는 AzureAdmin / Contoso!000 이다. – 꼭 바꿔서 수행한다.

    $location = "Japan West"
    $affinityGroupName = "ContosoAG"
    $affinityGroupDescription = "Contoso SQL HADR Affinity Group"
    $affinityGroupLabel = "IaaS BI Affinity Group"
    $workingDir = "C:\script\"
    $networkConfigPath = $workingDir + "NetworkConfig.xml"
    $virtualNetworkName = "ContosoNET"
    $storageAccountName = "<고유값으로 생성>"
    $storageAccountLabel = "Contoso SQL HADR Storage Account"
    $storageAccountContainer = "https://" + $storageAccountName + ".blob.core.windows.net/vhds/"
    $serviceName = "<고유값으로 생성>"
    $sqlImageName = (Get-AzureVMImage | where {$_.Label -like "SQL Server 2012 SP1 Enterprise*"} | sort PublishedDate -Descending)[0].ImageName
    $availabilitySetName = "SQLHADR"
    $subnetName = "Back"
    $domainUser = "Administrator"
    $sql1ServerName = "SQL1"
    $sql2ServerName = "SQL2"
    $sql3ServerName = "SQL3"
    $dataDiskSize = 100
    $vmAdminUser = "AzureAdmin"
    $vmAdminPassword = "Contoso!000"

     

    $storageAccountName 과 $serviceName은 식별 DNS로 사용되니 고유해야 한다. 아울러, DNS명이기 때문에 소문자와 숫자만 사용 가능하다.

    참고로, help azure 명령을 수행하면 Azure 파워쉘 명령 리스트 도움말을 볼수 있고, 명령들이 직관적이라 쉽게 파악 가능하다.

     

    위치/선호도 그룹(affinity group) 생성

    위치/선호도 그룹(affinity group)을 파워쉘에서 수행해 생성한다.

    New-AzureAffinityGroup `
        -Name $affinityGroupName `
        -Location $location `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel

     

    문제 없이 실행되면 이런 결과를 파워쉘에서 볼 수 있다.(이하 생략)

    OperationDescription                    OperationId                             OperationStatus 
    --------------------                    -----------                             --------------- 
    New-AzureAffinityGroup                  7a01991c-75f5-7fdb-a32b-0f224307ad64    Succeeded

    파워쉘에서 Success 라고 안 나오면 뻘건 오류 화면이 나온다. 오류를 읽어보면 대부분 쉽게 스크립트 문제를 해결 가능하다.

     

    구성 파일을 가져와 virtual network  생성

    c:\script 폴더 내에 NetworkConfig.xml 파일로 아래 파일이 위치 해야함. 아래 XML 파일을 저장하고 위에서 설정한 c:\script\ 폴더에 둔다.

    <NetworkConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:xsd="http://www.w3.org/2001/XMLSchema"

    xmlns="http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">
      <VirtualNetworkConfiguration>
        <Dns />
        <VirtualNetworkSites>
          <VirtualNetworkSite name="ContosoNET" AffinityGroup="ContosoAG">
            <AddressSpace>
              <AddressPrefix>10.10.0.0/16</AddressPrefix>
            </AddressSpace>
            <Subnets>
              <Subnet name="Front">
                <AddressPrefix>10.10.1.0/24</AddressPrefix>
              </Subnet>
              <Subnet name="Back">
                <AddressPrefix>10.10.2.0/24</AddressPrefix>
              </Subnet>
            </Subnets>
          </VirtualNetworkSite>
        </VirtualNetworkSites>
      </VirtualNetworkConfiguration>
    </NetworkConfiguration>

     

    파워쉘 명령으로 설정을 적용한다.

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath

     

    저장소(Storage) 생성

    파워쉘 명령으로 저장소를 생성한다.

    Set-AzureSubscription `
        -SubscriptionName (Get-AzureSubscription).SubscriptionName `
        -CurrentStorageAccount $storageAccountName

     

    이어서, 저장소를 구독(Subscription)에 연결한다.,

    Set-AzureSubscription `
        -SubscriptionName (Get-AzureSubscription).SubscriptionName `
        -CurrentStorageAccount $storageAccountName

     

    VM 생성 진행 - 첫 VM인 SQL1을 생성

    # Create SQL1...
    New-AzureVMConfig `
        -Name $sql1ServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer$sql1ServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" |
        Add-AzureProvisioningConfig `
            -Windows `
            -DisableAutomaticUpdates `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                Add-AzureEndpoint `
                    -Name "SQL" `
                    -Protocol "tcp" `
                    -PublicPort 1 `
                    -LocalPort 1433 |
                    New-AzureVM `
                        -ServiceName $serviceName `
                        –AffinityGroup $affinityGroupName `
                        -VNetName $virtualNetworkName

     

    VM2 생성

    # Create SQL2...
    New-AzureVMConfig `
        -Name $sql2ServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer$sql2ServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" |
        Add-AzureProvisioningConfig `
            -Windows `
            -DisableAutomaticUpdates `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                Add-AzureEndpoint `
                    -Name "SQL" `
                    -Protocol "tcp" `
                    -PublicPort 2 `
                    -LocalPort 1433 |
                    New-AzureVM `
                        -ServiceName $serviceName

     

    VM3 생성

    # Create SQL3...
    New-AzureVMConfig `
        -Name $sql3ServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer$sql3ServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" |
        Add-AzureProvisioningConfig `
            -Windows `
            -DisableAutomaticUpdates `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                New-AzureVM `
                    -ServiceName $serviceName

     

    VM이 모두 올라오는 것을 대기하고 이후 작업을 진행한다.

     

    RDP 파일 다운로드

    Foreach ($VM in $VMs = Get-AzureVM -ServiceName $serviceName)
    {
        write-host "Waiting for " $VM.Name "..."

        # loop until the VM status is "ReadyRole"
        While ($VM.InstanceStatus -ne "ReadyRole")
        {
            write-host "  Current Status = " $VM.InstanceStatus
            Start-Sleep -Seconds 15
            $VM = Get-AzureVM -ServiceName $VM.ServiceName -Name $VM.InstanceName
        }

        write-host "  Current Status = " $VM.InstanceStatus

        # Download remote desktop file
        Get-AzureRemoteDesktopFile -ServiceName $VM.ServiceName -Name $VM.InstanceName -LocalPath "$workingDir$($VM.InstanceName).rdp"
    }

    위 스크립트는 15초에 한번씩 서버별로 VM이 올라온지 확인해 올라 왔으면 RDP 파일을 편한 원격 관리 목적으로 다운로드 하는 스크립트다.

    위에서 구성한 기본 작업 폴더(c:\script)에 보면 rdp 파일을 확인 가능하다.

     

    RDP를 이용해 3대의 SQL서버에 각각 접근하고 파워쉘을 실행

    다운로드 받은 RDP를 실행해 각 서버에 AzureAdmin and password Contoso!000 계정으로 로그인한다.(ID 암호를 위에서 변경했다면 다르게 로그인을 해야 한다.)

     image_thumb_3.png

     

    3대의 서버 모두에서 파워쉘을 “관리자 모드”로 실행하고, 아래 명령을 수행해 SQL서버에 원격 접속이 가능하도록 방화벽을 열어 준다.

     

    netsh advfirewall firewall add rule name='SQL Server (TCP-In)' program='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\sqlservr.exe' dir=in action=allow protocol=TCP

     

     

    인증서를 사용하는 데이터베이스 미러링 구성 시작

    SQL1에서 미러링에 이용할 서버 인증서를 생성하고 백업한다. 참고로, SQLCMD는 SQL명령을 명령프롬프트에서 실행하도록 하는 쿼리 실행기이다.

    인증서 암호는 원하는 형태로 지정 가능하다. 실행은 마찬가지로, 파워쉘 창에서 실행하면 된다

    SQLCMD -S SQL1
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong_Password_#1>';
    GO

    CREATE CERTIFICATE SQL1_cert WITH SUBJECT = 'SQL1 certificate';
    GO

    CREATE ENDPOINT Endpoint_Mirroring
       STATE = STARTED
       AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
       FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE SQL1_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
    GO

    BACKUP CERTIFICATE SQL1_cert TO FILE = 'SQL1_cert.cer';
    GO

     

    SQL2에서도 미러링에 이용할 서버 인증서를 생성하고 백업한다.

    SQLCMD -S SQL2
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong_Password_#2>';
    GO

    CREATE CERTIFICATE SQL2_cert WITH SUBJECT = 'SQL2 certificate for database mirroring';
    GO

    CREATE ENDPOINT Endpoint_Mirroring
       STATE = STARTED
       AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
       FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE SQL2_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
    GO

    BACKUP CERTIFICATE SQL2_cert TO FILE = 'SQL2_cert.cer';
    GO


    SQL3에서도 미러링에 이용할 서버 인증서를 생성하고 백업한다.

    SQLCMD -S SQL3
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong_Password_#3>';
    GO

    CREATE CERTIFICATE SQL3_cert WITH SUBJECT = 'SQL3 certificate for database mirroring';
    GO

    CREATE ENDPOINT Endpoint_Mirroring
       STATE = STARTED
       AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
       FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE SQL3_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
    GO

    BACKUP CERTIFICATE SQL3_cert TO FILE = 'SQL3_cert.cer';
    GO

     

    위에서 생성한 인증서는 모두 각 서버의 C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA 폴더에 있다.

    각 서버가 나머지 2개의 서버 인증서를 모두 가지고 있도록 인증서를 복사한다. 예를 들면, SQL1은 SQL2와 SQL3의 인증서를 가지도록 복사한다. SQL2와 SQL3도 마찬가지.

     

    SQL1에서 SQL2와 SQL3의 인증서로 로그인을 허용하는 퍼미션을 구성한다.

    CREATE LOGIN DBMirroringLogin WITH PASSWORD = 'Contoso!000';
    GO

    CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
    GO

    CREATE CERTIFICATE SQL2_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQL2_cert.cer'
    GO

    CREATE CERTIFICATE SQL3_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQL3_cert.cer'
    GO

    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
    GO


    SQL2에서 SQL1와 SQL3의 인증서로 로그인을 허용하는 퍼미션을 구성한다.

    CREATE LOGIN DBMirroringLogin WITH PASSWORD = 'Contoso!000';
    GO

    CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
    GO

    CREATE CERTIFICATE SQL1_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQL1_cert.cer'
    GO

    CREATE CERTIFICATE SQL3_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQL3_cert.cer'
    GO

    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
    GO

     

    SQL3에서 SQL1와 SQL2의 인증서로 로그인을 허용하는 퍼미션을 구성한다.

    CREATE LOGIN DBMirroringLogin WITH PASSWORD = 'Contoso!000';
    GO

    CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
    GO

    CREATE CERTIFICATE SQL1_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQL1_cert.cer'
    GO

    CREATE CERTIFICATE SQL2_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQL2_cert.cer'
    GO

    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
    GO

    작업을 수행할 DB는 MyDB1 이다. DB를 생성하고, SQL1에서 풀 백업과 로그 백업을 수행한다.

     

    CREATE database MyDB1
    GO

    BACKUP DATABASE MyDB1 TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.bak';
    GO

    BACKUP LOG MyDB1 TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.log';
    GO


    생성된 백업 파일들(풀백업 - BAK 파일과 로그 백업 - LOG 파일)을 SQL2의

    C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP

    폴더로 복사한다.

     

    SQL2에서 미러링으로 사용 되도록 WITH NORECOVERY 모드로 복구하고, SQL1을 미러링 파트너로 구성한다.

    RESTORE DATABASE MyDB1 FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.bak' WITH NORECOVERY;
    GO

    RESTORE LOG MyDB1 FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.log' WITH NORECOVERY;
    GO

    ALTER DATABASE MyDB1 SET PARTNER = 'TCP://SQL1:5022';
    GO

     

    SQL1에서 SQL2를 미러링 파트너로, SQL3을 모니터링(Witness)  서버로 구성한다.

    ALTER DATABASE MyDB1 SET PARTNER = 'TCP://SQL2:5022';
    GO

    ALTER DATABASE MyDB1 SET WITNESS = 'TCP://SQL3:5022';
    GO

     

    자 이렇게 해서 미러링 구성은 모두 끝났다. 이제 동작 여부를 테스트 한다.

     

    미러링 테스트 수행

    --SQL1에서 수행한다. 테이블을 만들고 데이터를 삽입/조회한다.
    use MyDB1
    go

    create table sqler01(
        sqlerNumber int
    ,    mystring varchar(10)
    )
    go

    insert into sqler01(sqlerNumber, mystring) values(1, 'SQLER')
    insert into sqler01(sqlerNumber, mystring) values(2, 'Mirror')
    go

    select * from sqler01
    go

     

    주서버(Primary)인 SQL1에서 처리하고 이제 미러링 서버인 SQL2에서 아래 내용을 수행해 미러링을 확인한다.

    --SQL2에서 수행
    use MyDB1
    go

    --미러링, Recovery 상태라 접근 불가
    select * from sqler01
    go


    --읽기 전용 스냅샷 DB를 생성한다. DB명은 snapshot_MyDB1
    -- 이 스냅샷 DB는 Recovery 상태인 DB의 상태를 새 DB로 복사하는것이며, 이 DB를 수정해도 SQL1이나 다른 곳으로 데이터가 동기화 되지 않는 DB이다. 추후 AlwaysOn에서 상세히 다룬다.create database snapshot_MyDB1
    on (name = MyDB1, filename='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\snapshot_MyDB1.mdf')
    as snapshot of MyDB1
    go

    -- 복사한 스냅샷 DB에서 데이터 조회
    use snapshot_MyDB1
    go

    select * from sqler01
    go

     

    이제 장애 상황을 가정해 SQL1을 중지시킨다.

    --SQL1 에서 SQL서버 중지 명령 실행
    shutdown

     

    SQL1의 이벤트 로그를 확인해 보면 서버가 중지된 것을 확인 가능하고, 모니터링 서버인 SQL3에 이벤트가 바로 발생한 것을 볼수 있다.

    1초 이내에 Failover되어 SQL2가 Recovery 모드에서 Principle DB로 역할이 변경되고 서비스가 지속된다.

     

    참고자료

    향상된 가용성 기능 (미러링) – SQLER 강성욱 제작. SQL서버 미러링 기능 이해에 좋다.

    Tutorial: Database Mirroring for High Availability in Windows Azure

    SQLER의 Windows Server 게시판 김재훈의 파워쉘 강좌 

    Tutorial: AlwaysOn Availability Groups in Windows Azure (PowerShell)

    SQLER.com의 SQL 질문과 답변 게시판을
  • Korea Evangelist

    공용 클라우드와 On-premise를 잇는 전용도로 - Windows Azure ExpressRoute

    • 0 Comments

    안녕하세요, 김대우입니다.

    이번에 소개해 드릴 내용은 Windows Azure ExpressRoute 에 대한 내용이에요.

    국내에는 크게 이슈화 되지 않았지만, 해외 커뮤니티에서는 좋은 반응을 얻고 있는 내용이라 공유합니다.

    공식발표 내용 Announcing Windows Azure ExpressRoute, new partnership with Level 3 and exciting updates to other Azure Services

    ExpressRoute는 이미 작년, 2013년 9월 AT&T와 Microsoft의 공식발표로 어느 정도 예상되었던 내용입니다.

    Windows Azure ExpressRoute는 무엇인가

    ExpressRoute는 한마디로, Windows Azure 데이터센터와 인프라를 On-premise에 사설 커넥션(Private Connection)을 제공 가능한 서비스 입니다.

    마이크로소프트의 하이브리드 클라우드 전략과 Cloud OS 비전의 초석이 되는 인프라로, 높은 보안성은 물론 안정적이고 빠른 응답속도로 제공되는 사설 네트워크를 통해 On-premise와 클라우드 환경의 통합을 제공하는 서비스 입니다.

    4555.ExpressRoute.png

    여러 사용 시나리오를 고려해 볼 수 있을 것 같은데요.

    소개된 것처럼,

    - 클라우드의 무한대 리소스를 On-premise의 저장소나 백업, 복구를 위해 사용 가능한 시나리오

    - On-premise의 데이터센터를 안전한 사설망으로 확장

    - 인터넷망을 거치지 않는 보안성 높은 하이브리드 클라우드 어플리케이션 서비스 제작

    등의 여러 시나리오를 생각해 볼 수 있을거에요.

    Windows Azure ExpressRoute 공식 소개 사이트

    Windows Azure ExpressRoute FAQ

    Windows Azure: Government cloud computing

    2014년 3월 현재 워싱턴 D.C.와 실리콘 밸리를 대상으로 프리뷰 서비스가 제공되고 있습니다.

    프리뷰 서비스 지역인 워싱턴 D.C. 에서 느껴지시는 것처럼, 극도의 보안과 안정성을 요구하는 공공서비스가 주요한 대상이 될 수 있을 듯 합니다.

    image

    Windows Azure에서 구성하는 화면

    필요할 때마다 늘려서 사용하는 On-premise의 서비스!

    물론, 기존 On-premise와 터널링으로 제공되는 Windows Azure Virtual Networking – site-to-site connectivity와 함께 여러 비즈니스와 다양하게 결합 가능할 것입니다.

    혹시 아나요, 국내에도 AT&T 처럼 캐리어가 생겨서 Windows Azure ExpressRoute를 국내에서도 바로 제공하게 될지요.

    참고링크

    Announcing Windows Azure ExpressRoute, new partnership with Level 3 and exciting updates to other Azure Services

    Windows Azure ExpressRoute 공식 소개 사이트

    Windows Azure ExpressRoute FAQ

    Windows Azure: Government cloud computing

    Windows Azure ExpressRoute 프리뷰 서비스 신청

    클라우드 보안 무엇이 이슈인가? - 클라우드와 보안 (1/3)

    인프라 보안이 플랫폼 보안과 어플리케이션 보안으로 변화 - 클라우드와 보안 (2/3)

    Azure가 제공하는 클라우드 서비스 보안 인프라 - 클라우드와 보안 (3/3)

    Azure Connect - Azure를 회사망의 일부처럼 사용하는 하이브리드 클라우드(hybrid cloud) 구축  (Azure Connect는 Windows Azure Virtual Network 으로 포함됨)

    Windows Azure Virtual Networking

  • Korea Evangelist

    Windows Azure를 무료/저렴하게 사용하는 방법 - MSDN 구독, Bizspark, MPN, 30일 무료 평가판

    • 0 Comments

    안녕하세요. 김대우입니다.

    이번에 소개해 드릴 내용은 제목처럼 Windows Azure를 무료/저렴하게 사용하는 방법입니다.

    특히, 스타트업이나 소규모 개발사에게 대단히 큰 혜택인 Bizspark은 큰 도움 되실거에요.

    바로 내용을 시작해 보도록 할게요.

    Windows Azure 30일 무료 평가판

    30일간 24만원 상당의 크레딧을 받아 무료로 체험이 가능해요.

    http://www.windowsazure.com/ko-kr/pricing/free-trial/

    전화번호 인증 절차나 본인 인증을 위한 신용카드 인증이 있지만, 서비스는 모두 무료로 제공받은 크레딧으로만 사용되며 절대 과금되지 않습니다.

    Windows Azure 회원 제안

    http://www.windowsazure.com/ko-kr/pricing/member-offers/

    1) Bizspark 가입자

    Bizspark은소규모 모바일 게임사나 스타트업 분들께, 유용한 프로그램이에요. 다른 클라우스 서비스 사업자와 차별화 할 수 있는 부분이기도 하며, 제가 만나 뵙는 많은 개발사 분들께서 선호하는 프로모션이기도 합니다.

    Bizspark 가입 조건은,

    - 소프트웨어나 앱을 개발하는 회사

    - 설립된지 5년 미만(사업자 등록 기준)

    - 연간 10억 미만의 매출

    이라는 조건에 충족되면 가입 하실 수 있고 Windows Azure 무료 제공은 물론 다양한 혜택도 받으실 수 있어요.

    http://www.microsoft.com/bizspark/default.aspx

    BizSpark 회원은 Visual Studio Ultimate with MSDN 구독을 통해 MSDN 구독은 기본, 추가로 Windows Azure 혜택을 받게 됩니다

    특히, Bizspark은 첫 달에 24만원의 크레딧을 받을 수 있고, 첫 달 이후에는 매달 18만원의 크레딧을 받을 수 있습니다.

    http://www.windowsazure.com/ko-kr/offers/ms-azr-0057p/

    주변에 클라우드 서비스 도입을 고민하고 계신  소규모 게임사나 스타트업이 있다면 적극 Bizspark를 홍보해 주세요.

     

    만약, 해당 월에 크레딧 사용량을 넘게 되면?

    크레딧으로 제공되는 Windows Azure 구독(Subscription)은 자동으로 유료화 되지 않고 중지됩니다. 만약 계속 서비스를 받고 싶으실 경우 “지출 한도 해제”를 직접 하시거나, 다음 달이 되어 다시 크레딧을 받을 때까지 기다려야 합니다.

    2) MSDN  구독자

    연단위로 MSDN을 구독 받고 계시다면 무료 Windows Azure 크레딧을 받으실 수 있습니다.

    http://www.windowsazure.com/ko-kr/pricing/member-offers/msdn-benefits/

    MSDN 구독 링크

    특히, 최상의 MSDN 구독인 “VISUAL STUDIO ULTIMATE WITH MSDN”  구독자일 경우 월간 18만원 상당의 크레딧을 받아 무료로 Windows Azure를 사용할 수 있습니다.

    http://www.windowsazure.com/ko-kr/pricing/member-offers/msdn-benefits-details/

    MSDN 구독을 하고 계시다면, 무료로 얻을 수 있는 기회! 참고로, 저도 이 MSDN 구독으로 Windows Azure를 신나게 사용하고 있습니다.

    3) MPN(Microsoft Partner Network) 회원사

    MSN은 마이크로소프트 파트너사로 등록해 Microsoft 플랫폼을 대상으로 솔루션 및 서비스를 개발 하는 회사를 의미합니다.

    Microsoft Partner Network Cloud Essentials 에 가입하면 무료로 Windows Azure를 사용 가능한 크레딧을 받을 수 있습니다.

    첫 달 24만원의 크레딧을 받으실 수 있고, 매달 12만원의 크레딧이 제공됩니다.

    http://www.windowsazure.com/ko-kr/offers/ms-azr-0051p/

    만약, 해당 월에 크레딧 사용량을 넘게 되면?

    크레딧으로 제공되는 Windows Azure 구독(Subscription)은 자동으로 유료화 되지 않고 중지됩니다. 만약 계속 서비스를 받고 싶으실 경우 “지출 한도 해제”를 직접 하시거나, 다음 달이 되어 다시 크레딧을 받을 때까지 기다려야 합니다. 

    무료 구독(Subscription)을 다른 구독으로 이전할 경우

    무료로 사용하던 Windows Azure 구독을 다른 구독으로(유료 종량제 구독 등) 옮길 경우에는 무료로 제공되는 기술지원을 통해 구독을 이전 받을 수 있습니다.

    Windows Azure 기술지원 사이트 에서 신청하면 무료로 처리됩니다.

    많은 도움 되시길 바랍니다.

    참고링크 : 

    예전 포스팅 - Azure를 개발자가 무료로 테스트 하는 방법

    Windows Azure 지출 Windows Azure 한도 해제

Page 3 of 119 (593 items) 12345»