datatables.js 에서 다음과 같은 방법으로 로딩된 데이터를 csv 로 내보낼 수 있다.

(참조:https://datatables.net/extensions/buttons/examples/html5/simple.html)



<table id="example">


$(document).ready(function() {
    $('#example').DataTable( {
        dom: 'Bfrtip',
        buttons: [
            'copyHtml5',
            'excelHtml5',
            'csvHtml5',
            'pdfHtml5'
        ]
    } );
} );


posted by Sungyoup Han matrim

뭔 말이 필요하겠냐만서도
12,000원 주고 판교 케이머그에서 구입
회사-집 하면서 들고다녀야 하는 맥북프로와 벽돌같이 무거운 아답터가 하나 더 있었으면 했는데, 아는 동생이 우리집에 있는 화이트 맥북을 기억하고 그 아답터를 이용해 보라고 의견이 와서 구입한 뒤 사용했는데 너무 잘 됩니다 ^^ 60W 아답터를 85W 아닺터 사용하는 맥북프로 15인치에 츙전을 할 서 있게 해주는 컨버터 성능 좋아요!!

posted by Sungyoup Han matrim

오랜만에 iOS 업데이트 관련 내용을 공유 합니다.

아래 내용 보시고 업데이트 시 참고 하세요.




iOS 12 업데이트는 iPhone 및 iPad의 성능을 개선하고 멋진 새 기능을 추가합니다. 사진 앱은 보관함의 사진을 재발견하고 공유할 수 있는 새로운 기능을 제공합니다. 애니모티콘 중에서도 좀 더 사용자화할 수 있는 새로운 미모티콘으로 메시지를 좀 더 표현력있고 재미있게 바꿀 수 있으며, 스크린 타임을 사용하여 사용자와 가족 구성원들이 기기를 사용하는 시간을 파악하여 최대한 활용할 수 있게 하고, Siri로 동작하는 앱의 기능을 Siri 단축어를 통해 좀 더 빠르게 수행하며, 증강 현실을 통해 개발자들이 좀 더 손쉽게 공유 AR 경험을 구현할 수 있도록 하며, 새로운 개인 정보 보호 기능으로 사용자가 웹에서 추적되지 않도록 보호받을 수 있습니다. 이 업데이트는 다음과 같은 새로운 기능 및 개선사항을 포함합니다.

성능

  • 더 빨라진 iOS의 속도 및 시스템 간의 반응성
  • iPhone 5s 및 iPad Air를 포함하여 지원되는 모든 기기의 성능이 향상됨
  • 카메라가 최대 70% 빠르게 실행되며 키보드가 최대 50% 빠르게 표시되고 입력 반응 속도도 향상됨*
  • 기기에서 많은 작업을 수행하고 있을 때도 앱이 최대 두 배 빠르게 실행됨*

사진

  • 추천 사진, 효과 제안 등으로 사용자의 보관함에서 멋진 사진을 발견할 수 있는 새로운 For You 탭
  • 사진 속의 사람들에게 사진을 공유할 수 있도록 주도적으로 추천해주는 공유 제안
  • 지능적인 제안과 여러 가지 키워드가 지원되어 사진을 좀 더 손쉽게 찾을 수 있는 검색 개선사항
  • 사용자가 있던 장소, 상호명, 이벤트 및 촬영한 시간을 기반으로 사진 검색 가능
  • 더 빨라진 카메라 가져오기 및 새로운 미리보기 크게 보기 모드
  • 이미지 편집을 위한 RAW 지원

카메라

  • 인물 사진 모드가 향상되어 무대 조명 및 무대 조명 모노 효과를 사용할 때 물체와 배경 간에 정교한 디테일 보존 가능
  • 카메라 프레임이 하이라이트되어 스캔하기 더 쉬워진 QR 코드

메시지

  • 애니모티콘 중에서도 좀 더 사용자화할 수 있고 다양하고 재미있게 개인에게 맞춤화된 캐릭터로 메시지를 좀 더 표현력 있게 바꿀 수 있는 미모티콘
  • 애니모티콘에 티라노사우루스, 유령, 코알라, 호랑이 포함
  • 이제 미모티콘 및 애니모티콘으로 윙크와 혀 내밀기 가능
  • 애니모티콘, 필터, 텍스트 효과, iMessage 스티커 팩, 도형을 메시지에서 찍은 사진 및 비디오로 가져올 수 있는 새로운 카메라 효과
  • 최대 30초까지 촬영할 수 있는 애니모티콘

스크린 타임

  • 사용자와 가족 구성원들이 앱과 웹 사이트 이용 시간의 올바른 균형을 유지할 수 있도록 자세한 정보 및 도구를 제공하는 스크린 타임
  • 앱을 사용하는 시간, 앱 카테고리별 사용 내용, 알림 받는 횟수, 기기를 들어올리는 횟수 보기
  • 사용자나 사용자의 자녀가 앱 및 웹 사이트를 이용하는 시간을 제한할 수 있는 앱 시간 제한
  • 자녀용 스크린 타임을 통해 부모의 iOS 기기에서 자녀가 iPhone 및 iPad를 사용하는 시간을 관리할 수 있음

방해금지 모드

  • 설정한 시간, 위치 또는 캘린더 이벤트 이후 방해금지 모드 끄기
  • 취침 시간 동안 방해금지 모드를 설정하면 잠자기 상태에 있는 동안 잠금 화면에서 모든 알림 가려짐

알림

  • 동일한 앱에서 울리는 알림이 자동으로 그룹화되어 알림을 관리하기 쉬워짐
  • 잠금 화면에서 바로 알림 설정을 제어할 수 있는 인스턴트 튜닝
  • 사용자를 방해하지 않고 알림 센터에 직접 알림을 조용히 전달하는 새로운 ‘조용히 전달’ 옵션

Siri

  • Siri로 동작하는 앱의 기능을 빠르게 수행할 수 있는 Siri 단축어
  • 지원되는 앱에서 ‘Siri에 추가’ 버튼을 사용하거나 설정 > Siri 및 검색에서 단축어 추가
  • 잠금 화면 및 검색에서 Siri가 단축어 제안
  • 포뮬러 1, Nascar, Indy 500 및 MotoGP의 모터스포츠 결과, 일정, 통계 및 순위 정보 얻기
  • 사진 앱에서 시간, 장소, 사람, 주제 또는 최근 여행별로 사진을 검색하여 관련 사진 및 추억 찾기
  • 더 많은 언어 구문 번역, 40개 이상의 언어 지원
  • 유명 인사의 출생지 같은 정보 확인 및 칼로리, 영양소 정보 등의 음식 관련 질문
  • 손전등 켜기 또는 끄기
  • 아일랜드 영어, 남아프리카 영어, 덴마크어, 노르웨이어, 광둥어, 북경어(대만)에 대해 더욱 자연스럽고 표현력 좋은 음성 지원

증강 현실(Augmented Reality)

  • ARKit 2에서 공유된 경험을 바탕으로 친구들과 함께 즐길 수 있는 혁신적인 AR 앱을 개발자들이 구현 가능
  • 지속성을 통해 개발자들이 사용자가 멈춘 곳에서 바로 저장하고 다시 로드할 수 있도록 활성화
  • 개발자들이 현실 물체를 인식하고 공간을 이동하면서 이미지를 추적할 수 있도록 하는 물체 감지 및 이미지 추적
  • AR 훑어보기를 통해 iOS 주변에 AR을 펼쳐 사용자가 News, Safari, 파일과 같은 내장 앱으로 AR 대상체를 보고 iMessage 및 Mail로 친구들과 공유 가능

측정

  • 물체 및 공간을 측정할 수 있는 새로운 증강 현실 앱
  • 표면이나 비어있는 공간을 따라 선을 그어 측정하고, 선의 레이블을 탭하여 추가 정보 확인
  • 직사각형 물체를 자동으로 측정
  • 측정한 화면을 캡처, 공유 및 마크업

개인 정보 보호 및 보안

  • Safari에서 강화된 지능형 추적 방지를 통해 내장된 콘텐츠 및 소셜 미디어 버튼이 사용자의 승인 없이는 사이트 간 브라우징 추적을 하지 않도록 방지
  • 광고업체가 iOS 기기를 고유하게 식별하는 능력을 억제해 광고 목표 변경을 방지
  • 대부분의 앱 및 Safari에서 계정을 생성하거나 암호를 변경할 때 강력하고 고유한 암호를 자동으로 제안
  • 재사용된 암호는 설정 > 암호 및 계정에 깃발 표시
  • QuickType 막대에서 제안으로 SMS를 통해 전송한 일회성 코드를 보안 코드 자동 완성에 표시
  • 설정의 ‘암호 및 계정’에서 AirDrop을 사용하여 연락처에 등록된 사람과 간편하게 암호 공유
  • Siri가 인증된 기기에서 빠르게 암호 탐색 지원

Apple Books

  • 책과 오디오북을 더욱 쉽고 재미있게 찾고 즐길 수 있도록 완전히 새로워진 디자인의 도서 앱
  • 현재 읽고 있는 책으로 간단히 돌아가거나 다음에 읽을만한 책을 추천받을 수 있는 ‘읽고 있는 책’
  • 새 기능인 ‘읽고 싶은 책’ 모음에 책을 추가하여 다음에 읽고 싶은 책 파악 가능
  • 사용자를 위해 엄선된 Apple Books 에디터 및 추천에서 신규 및 인기 모음 중 사용자가 다음에 읽고 싶어할 책을 쉽게 찾을 수 있는 북스토어
  • 좋아하는 저자, 배우 및 유명 인사가 내래이션한 몰입형 스토리 및 유익한 논픽션을 제공하는 새로운 오디오북 스토어

Apple Music

  • 가사 검색이 지원되어 단어만으로도 노래 검색 가능
  • 아티스트 음악으로 구성된 맞춤형 스테이션과 함께 디자인되어 탐색하기 쉬워진 아티스트 페이지
  • 친구가 듣고 있는 노래 중 사용자가 좋아할 만한 노래로 만든 새로운 플레이리스트, ‘친구가 즐기는 음악 믹스’
  • 세계 각국에 걸쳐 오늘의 인기 100곡을 보여주는 새로운 차트

주식

  • iPhone 및 iPad에서 주식 시세, 대화식 차트 및 주요 뉴스를 쉽게 볼 수 있도록 완전히 새로워진 디자인
  • 색상으로 구분된 스파크라인이 있어 일일 차트를 한눈에 볼 수 있는 관심 종목
  • 종목 코드를 표시하는 대화식 차트 및 장외 시간 가격, 거래량 등이 표시된 핵심 정보 보기

음성 메모

  • 사용성을 향상하여 완전히 새로워진 디자인
  • 사용자의 녹음 및 편집사항이 사용자의 모든 기기와 동기화되어 iCloud에 유지
  • iPad에서 가로 화면 방향 및 세로 화면 방향 모두 지원

Apple Podcasts

  • 여러 개의 장이 포함된 프로그램의 장 지원
  • 차량이나 헤드폰에 있는 앞으로 및 뒤로 버튼으로 30초 또는 다음 장으로 건너뛰기
  • 지금 듣기 화면에서 새로운 에피소드 알림을 쉽게 관리 가능

손쉬운 사용

  • 이제 ‘실시간 듣기’를 AirPods에서 지원하여 더 선명하게 들을 수 있음
  • AT&T의 경우 RTT 전화 통화 가능
  • 선택 항목 말하기에서 이제 Siri 음성을 사용하여 선택한 텍스트 말하기 지원

기타 기능 및 향상

  • 현실 모습을 변환시킬 수 있는 FaceTime의 카메라 효과
  • CarPlay에서 타사 내비게이션 앱 지원
  • 지원되는 캠퍼스에서 Wallet에 저장된 비접촉식 학생 ID 카드를 사용하여 건물에 출입하고 Apple Pay 결제 가능
  • 설정 > Safari에서 웹 사이트 아이콘을 활성화하여 iPad 탭에 표시 가능
  • 지원되는 지역의 경우 날씨 앱에 대기질 지수 표시
  • iPad 하단에서 빠르게 쓸어올리면 홈으로 이동
  • iPad의 오른쪽 상단에서 쓸어내리면 제어 센터에 접근
  • 마크업에 색상이 추가된 팔레트 및 각 도구의 선 너비와 불투명도를 변경할 수 있는 옵션 추가
  • 설정에 배터리 사용량 차트가 추가되어 24시간 또는 10일 동안 사용한 내역을 보고 막대를 탭하여 해당 기간에 사용한 앱 보기 가능
  • 3D Touch가 지원되지 않는 기기에서 스페이스 바를 길게 터치하여 키보드를 트랙패드로 전환 가능
  • 중국의 경우 실내에 있을 때 지도 앱에서 공항 및 쇼핑몰의 실내 지도 지원
  • 새로운 히브리어 정의 사전, 아랍어-영어 사전 및 힌디어-영어 사전
  • 새로운 영어 유의어 사전
  • 소프트웨어 업데이트가 밤사이에 자동으로 iOS 업데이트 설치 허용

* 본 테스트는 2018년 5월, Apple에서 일반적인 최고 성능, iOS 11.4 체험판 및 iOS 12 체험판을 지원하는 iPhone 6 Plus에서 진행되었습니다. 키보드는 Safari를 사용하여 테스트되었으며 카메라는 잠금 화면에서 쓸어넘겨 테스트되었습니다. 성능은 특정 구성, 콘텐츠, 배터리 성능 상태, 사용 내용, 소프트웨어 버전 및 기타 요인에 따라 달라질 수 있습니다.

일부 기능은 일부 국가 또는 지역에서만 사용할 수 있습니다. 자세한 정보는 다음 웹 사이트를 참조하십시오. https://www.apple.com/kr/ios/feature-availability및 https://www.apple.com/kr/ios/whats-new

이 업데이트의 보안 콘텐츠에 관한 자세한 정보는 다음 웹 사이트를 참조하십시오. 

https://support.apple.com/kb/HT201222

posted by Sungyoup Han matrim
  • 2018.10.09 14:12

    비밀댓글입니다

  • BlogIcon 소액결제현금 2018.10.16 11:12

    관리자의 승인을 기다리고 있는 댓글입니다



[참조]; https://msdn.microsoft.com/en-us/library/ms178473.aspx?f=255&MSPPError=-2147217396


ASP.NET 의 라이프 사이클 관련 MSDN 설명입니다. 위 내용에 들어가 있는 ASP.NET 의 Life Cycle 그림입니다. 





'초짜 IT보이 서바이벌 스토리 > ASP.Net' 카테고리의 다른 글

#ASP.NET 의 #LifeCyle  (0) 2018.08.16
c#.Net Transaction Scope 사용하기  (0) 2010.04.27
ASP.NET MVC 패턴 소개 (C#)  (0) 2009.11.05
ASP.NET MVC 1.0  (0) 2009.04.20
ViewState 와 Session 의 장단점  (0) 2008.08.25
ASP.NET 공부시작~  (1) 2008.07.14

posted by Sungyoup Han matrim

Visual Studio 2010 에 NuGet Extension 을 설치하려고 하다보니 SP1 이 이미 설치되어 있어서 오류가 납니다.

해결방법은 Hotfix 적용입니다.


링크 : https://support.microsoft.com/ko-kr/hotfix/kbhotfix?kbnum=2581019&kbln=en-us


한국어로는 없고 모든 플랫폼 및 언어를 위한 핫픽스 보기를 누르면 리스트에 픽스가 보이고 선택 후 전자메일을 적으면 링크가 날아옵니다.

메일의 링크를 누르면 파일이 다운되고, 설치 파일 확인 후 설치가 진행 됩니다.


설치가 끝난 후 필요한 Extension 을 설치해 봤습니다.



Extension 이 잘 설치 되었네요. HOTFIX 필요하시면 꼭 다운받으세요

posted by Sungyoup Han matrim


Windows10 환경에서 visualStudio 2010 에 SpringFramework 닷넷 버전 1.3.2 의 Schema 설치를 위한 수정된 NAnt 스크립트 공유합니다.

바뀐 부분

SOFTWARE\Microsoft\VisualStudio\10.0_Config\InstallDir"

spring-database-1.3.xsd


<?xml version="1.0" ?>
<project name="Spring.NET-Schema" default="deploy-schema">

<target name="locations"
   descriptions="Shows directories where .xsd files will be copied">

  
  <property name="vsXXXX.version" value="VS.NET 2010"/>
<property name="vsXXXX.xml.schemas.install.dir" value="SOFTWARE\Microsoft\VisualStudio\10.0_Config\InstallDir"/>
<property name="vsXXXX.relative.dir" value="..\..\Xml\Schemas"/>
<!-- retrieve location of VS.NET 2010 schema store -->
<readregistry property="vs2010.xml.schemas" key="${vsXXXX.xml.schemas.install.dir}" hive="CurrentUser"
failonerror="false"/>
<echo message="VS.NET 2010 xsd install directory = ${vs2010.xml.schemas}${vsXXXX.relative.dir}"/> 

<property name="vsXXXX.version" value="VS.NET 2008"/>
<property name="vsXXXX.xml.schemas.install.dir" value="SOFTWARE\Microsoft\VisualStudio\9.0\InstallDir"/>
<property name="vsXXXX.relative.dir" value="..\..\Xml\Schemas"/>
<!-- retrieve location of VS.NET 2008 schema store -->
<readregistry property="vs2008.xml.schemas" key="${vsXXXX.xml.schemas.install.dir}" hive="LocalMachine"
failonerror="false"/>
<echo message="VS.NET 2008 xsd install directory = ${vs2008.xml.schemas}${vsXXXX.relative.dir}"/>

<property name="vsXXXX.version" value="VS.NET 2005"/>
<property name="vsXXXX.xml.schemas.install.dir" value="SOFTWARE\Microsoft\VisualStudio\8.0\InstallDir"/>
<property name="vsXXXX.relative.dir" value="..\..\Xml\Schemas"/>
<!-- retrieve location of VS.NET 2005 schema store -->
<readregistry property="vs2005.xml.schemas" key="${vsXXXX.xml.schemas.install.dir}" hive="LocalMachine"
failonerror="false"/>
<echo message="VS.NET 2005 xsd install directory = ${vs2005.xml.schemas}${vsXXXX.relative.dir}"/>

<property name="vsXXXX.version" value="VS.NET 2003"/>
<property name="vsXXXX.xml.schemas.install.dir" value="SOFTWARE\Microsoft\VisualStudio\7.1\InstallDir"/>
<property name="vsXXXX.relative.dir" value="..\Packages\schemas\xml"/>
<!-- retrieve location of VS.NET 2003 schema store -->
<readregistry property="vs2003.xml.schemas" key="${vsXXXX.xml.schemas.install.dir}" hive="LocalMachine"
failonerror="false"/>
<echo message="VS.NET 2003 xsd install directory = ${vs2003.xml.schemas}${vsXXXX.relative.dir}"/>
</target>


<target name="deploy-schema"
description="Deploys the Schema to VS.Net schemas dirs. Copies VS 7.0, 7.1, 8.0, 9.0">

<!-- deploy spring schema to the VS.NET 2010 schema store -->
<property name="vsXXXX.version" value="VS.NET 2010"/>
<property name="vsXXXX.xml.schemas.install.dir" value="SOFTWARE\Microsoft\VisualStudio\10.0_Config\InstallDir"/>
<property name="vsXXXX.relative.dir" value="..\..\Xml\Schemas"/>
<!-- retrieve location of VS.NET 2010 schema store -->
<readregistry property="vs2010.xml.schemas" key="${vsXXXX.xml.schemas.install.dir}" hive="CurrentUser"
failonerror="false"/>
<property name="vsXXXX.xml.schemas.notinstalled" value="true"/>
<if test="${property::exists('vs2010.xml.schemas')}">
<property name="vsXXXX.xml.schemas" value="${vs2010.xml.schemas}"/>
<call target="_deploy-schema"/>
</if>
<if test="${vsXXXX.xml.schemas.notinstalled}">
<echo message=""/>
<echo message="Failed installing schema files for VS.NET 2010."/>
<echo message=""/>
</if>    
    
<!-- deploy spring schema to the VS.NET 2008 schema store -->
<property name="vsXXXX.version" value="VS.NET 2008"/>
<property name="vsXXXX.xml.schemas.install.dir" value="SOFTWARE\Microsoft\VisualStudio\9.0\InstallDir"/>
<property name="vsXXXX.relative.dir" value="..\..\Xml\Schemas"/>
<!-- retrieve location of VS.NET 2005 schema store -->
<readregistry property="vs2008.xml.schemas" key="${vsXXXX.xml.schemas.install.dir}" hive="LocalMachine"
failonerror="false"/>
<property name="vsXXXX.xml.schemas.notinstalled" value="true"/>
<if test="${property::exists('vs2008.xml.schemas')}">
<property name="vsXXXX.xml.schemas" value="${vs2008.xml.schemas}"/>
<call target="_deploy-schema"/>
</if>
<if test="${vsXXXX.xml.schemas.notinstalled}">
<echo message=""/>
<echo message="Failed installing schema files for VS.NET 2008."/>
<echo message=""/>
</if>

<!-- deploy spring schema to the VS.NET 2005 schema store -->
<property name="vsXXXX.version" value="VS.NET 2005"/>
<property name="vsXXXX.xml.schemas.install.dir" value="SOFTWARE\Microsoft\VisualStudio\8.0\InstallDir"/>
<property name="vsXXXX.relative.dir" value="..\..\Xml\Schemas"/>
<!-- retrieve location of VS.NET 2005 schema store -->
<readregistry property="vs2005.xml.schemas" key="${vsXXXX.xml.schemas.install.dir}" hive="LocalMachine"
failonerror="false"/>
<property name="vsXXXX.xml.schemas.notinstalled" value="true"/>
<if test="${property::exists('vs2005.xml.schemas')}">
<property name="vsXXXX.xml.schemas" value="${vs2005.xml.schemas}"/>
<call target="_deploy-schema"/>
</if>
<if test="${vsXXXX.xml.schemas.notinstalled}">
<echo message=""/>
<echo message="Failed installing schema files for VS.NET 2005."/>
<echo message=""/>
</if>


<!-- deploy spring schema to the VS.NET 2003 schema store -->
<property name="vsXXXX.version" value="VS.NET 2003"/>
<property name="vsXXXX.xml.schemas.install.dir" value="SOFTWARE\Microsoft\VisualStudio\7.1\InstallDir"/>
<property name="vsXXXX.relative.dir" value="..\Packages\schemas\xml"/>
<!-- retrieve location of VS.NET 2003 schema store -->
<readregistry property="vs2003.xml.schemas" key="${vsXXXX.xml.schemas.install.dir}" hive="LocalMachine"
failonerror="false"/>
<property name="vsXXXX.xml.schemas.notinstalled" value="true"/>
<if test="${property::exists('vs2003.xml.schemas')}">
<property name="vsXXXX.xml.schemas" value="${vs2003.xml.schemas}"/>
<call target="_deploy-schema"/>
</if>
<if test="${vsXXXX.xml.schemas.notinstalled}">
<echo message=""/>
<echo message="Failed installing schema files for VS.NET 2003."/>
<echo message=""/>
</if>


<!-- deploy spring schema to the VS.NET 2002 schema store -->
<property name="vsXXXX.version" value="VS.NET 2002"/>
<property name="vsXXXX.xml.schemas.install.dir" value="SOFTWARE\Microsoft\VisualStudio\7.0\InstallDir"/>
<property name="vsXXXX.relative.dir" value="..\Packages\schemas\xml"/>
<!-- retrieve location of VS.NET 2003 schema store -->
<readregistry property="vs2002.xml.schemas" key="${vsXXXX.xml.schemas.install.dir}" hive="LocalMachine"
failonerror="false"/>
<property name="vsXXXX.xml.schemas.notinstalled" value="true"/>
<if test="${property::exists('vs2002.xml.schemas')}">
<property name="vsXXXX.xml.schemas" value="${vs2002.xml.schemas}"/>
<call target="_deploy-schema"/>
</if>
<if test="${vsXXXX.xml.schemas.notinstalled}">
<echo message=""/>
<echo message="Failed installing schema files for VS.NET 2003."/>
<echo message=""/>
</if>
</target>

<!-- 'private' scoped parameterised version of the 'deploy-schema' target -->


<target name="_deploy-schema" depends="_clean">

<!-- deploy schema to VS.NET XXXX schema store -->
<echo message="-------------------------------------------------------"/>
<echo message="Copying spring-objects-1.3.xsd to ${vsXXXX.version} installation."/>
<echo message="-------------------------------------------------------"/>
<echo message=""/>
<copy file="spring-objects-1.3.xsd" todir="${vsXXXX.xml.schemas}${vsXXXX.relative.dir}"
verbose="true"
overwrite="true"/>

<echo message="-------------------------------------------------------"/>
<echo message="Copying spring-tool-1.1.xsd to ${vsXXXX.version} installation."/>
<echo message="-------------------------------------------------------"/>
<echo message=""/>
<copy file="spring-tool-1.1.xsd" todir="${vsXXXX.xml.schemas}${vsXXXX.relative.dir}"
verbose="true"
   overwrite="true"/>

<echo message="----------------------------------------------------------"/>
<echo message="Copying spring-validation-1.3.xsd to ${vsXXXX.version} installation."/>
<echo message="----------------------------------------------------------"/>
<echo message=""/>
<copy file="spring-validation-1.3.xsd" todir="${vsXXXX.xml.schemas}${vsXXXX.relative.dir}"
verbose="true"
overwrite="true"/>

<echo message="----------------------------------------------------------"/>
<echo message="Copying spring-aop-1.1.xsd to ${vsXXXX.version} installation."/>
<echo message="----------------------------------------------------------"/>
<echo message=""/>
<copy file="spring-aop-1.1.xsd" todir="${vsXXXX.xml.schemas}${vsXXXX.relative.dir}"
verbose="true"
overwrite="true"/>

<echo message="----------------------------------------------------------"/>
<echo message="Copying spring-remoting-1.1.xsd to ${vsXXXX.version} installation."/>
<echo message="----------------------------------------------------------"/>
<echo message=""/>
<copy file="spring-remoting-1.1.xsd" todir="${vsXXXX.xml.schemas}${vsXXXX.relative.dir}"
verbose="true"
overwrite="true"/>

<echo message="----------------------------------------------------------"/>
<echo message="Copying spring-database.xsd to ${vsXXXX.version} installation."/>
<echo message="----------------------------------------------------------"/>
<echo message=""/>
<copy file="spring-database-1.3.xsd" todir="${vsXXXX.xml.schemas}${vsXXXX.relative.dir}"
verbose="true"
overwrite="true"/>

<echo message="----------------------------------------------------------"/>
<echo message="Copying spring-tx-1.1.xsd to ${vsXXXX.version} installation."/>
<echo message="----------------------------------------------------------"/>
<echo message=""/>
<copy file="spring-tx-1.1.xsd" todir="${vsXXXX.xml.schemas}${vsXXXX.relative.dir}"
verbose="true"
overwrite="true"/>

<echo message="----------------------------------------------------------"/>
<echo message="Copying spring-nms-1.3.xsd to ${vsXXXX.version} installation."/>
<echo message="----------------------------------------------------------"/>
<echo message=""/>
<copy file="spring-nms-1.3.xsd" todir="${vsXXXX.xml.schemas}${vsXXXX.relative.dir}"
verbose="true"
overwrite="true"/>

<echo message="----------------------------------------------------------"/>
<echo message="Copying spring-ems-1.3.xsd to ${vsXXXX.version} installation."/>
<echo message="----------------------------------------------------------"/>
<echo message=""/>
<copy file="spring-ems-1.3.xsd" todir="${vsXXXX.xml.schemas}${vsXXXX.relative.dir}"
verbose="true"
overwrite="true"/>

<echo message="----------------------------------------------------------"/>
<echo message="Copying spring-nvelocity-1.3.xsd to ${vsXXXX.version} installation."/>
<echo message="----------------------------------------------------------"/>
<echo message=""/>
<copy file="spring-nvelocity-1.3.xsd" todir="${vsXXXX.xml.schemas}${vsXXXX.relative.dir}"
verbose="true"
overwrite="true"/>

<property name="vsXXXX.xml.schemas.notinstalled" value="false"/>
</target>

  <target name="_clean">
<echo message="-------------------------------------------------"/>
<echo message="Removing previously installed spring schema files"/>
<echo message="from ${vsXXXX.version} installation."/>
<echo message="-------------------------------------------------"/>
<echo message=""/>
    <delete failonerror="false">
      <fileset basedir="${vsXXXX.xml.schemas}${vsXXXX.relative.dir}">
        <include name="spring-*.xsd"/>
      </fileset>
    </delete>
  </target>
</project>


posted by Sungyoup Han matrim

posted by Sungyoup Han matrim

안녕하세요, 이전 글에서는 애자일 개발 방법론 (Agile Software Development ) 과 관련하여 숫자들을 통해 현재 트렌드 (Trend) 를  알아보았습니다.


< PIC from SiteReq >


이번글에서는 2018년 IT 내 개발 트렌드에 대해 알아보겠습니다. "6 Software Development Trends in 2018: Developers Needed" 라는 글이 2017, 11월에 Ben Butano 에 의해 올라왔는데요. 뭐 이 글이 모든 개발 트렌드를 대표 한다기 보다는, 제가 상세히 이야기 하고 싶은 내용이 포함되어 있기도 하고 다른 글에서도 많이 중복되는 내용이 들어 있어서, 인용을 하게 되었습니다. 

다음이 2018 년의 6가지 개발 트랜드 입니다. 

  1. 블록체인 개발 (Blockchain Development) 수요 증가
  2. IoT (Internet of Things) 과 Edge Computing - BizDevOps 
  3. 사이버보안 (Cyber-Security)의 변화
  4. 더이상 새롭지 않은 CD (Continuous Delivery)
  5. AI (Artificial Intelligence) 의 필요
  6. VR (Virtual Reality) 의 히트 예감

위의 내용을 이야기 하면서, 개발자들에게는 이와 관련된 내용을 알고, 기술을 습득해야 한다라는 내용의 글입니다. 

간략하게 내용을 살펴보면, 블록체인 개발의 수요는 폭팔적으로 증가할 것이라고 예상하고 있으며, IoT 기술은 정보를 받아드리는 네트워크의 가장 끝 부분에서 부터 체집한 정보를 분석 프로세싱 하는 Edge Computing 과 접목하여 데이터 프로세스 시간을 단축시키고, 리얼 타임분석 데이터 제공의 현실화를 가능하게 했다고 합니다. 이에 BizDevOps 를 받아들이는 비지니스 분야들이 많아 질 것으로 예상이 되며 이  BizDevOps 에 대해 좀더 알아볼 예정입니다. 

< PIC from Blueprintsys >


사이버 보안의 변화도 있을 예정인데, 정부, 기관, 회사 등 보안의 필요성에 대해서는 뼈저리게 알고 있으며, 이에 2018년에는 외부적인 보안 만이 아닌 소프트웨어 안의 내부적인 보안을 시작 한다고 합니다.  DevOps 팀에서는 보안 검사 자동화 (Automating Security Testing) 를 개발 방법론의 LifeCycle 에 추가하여 개발 진행 중에도 보안이 되도록 준비 해야 할 것입니다. 이 부분에서 DevOps 와 보안 검사 자동화 에 대해 좀 더 알아볼 예정입니다.

CD (Continuous Delivery) 가 더 이상 새롭지 않은 이유는, 당연히 모든 회사에서 받아들였고, 현재 시행 되고 있기 때문이라고 합니다. 참고로 CD 란, 개발자가 코드 작성을 완료 하고 나서, 코드 통합, 테스트, 빌드, 그리고 구성 설정까지 완료 하여, 마지막 배포준비완료 단계 까지의 과정을 지속적으로 반복하는 것입니다. Amazon 같은 큰 회사에서는 한번의 CD 가 11.7 초가 걸린다고 하네요. 아예 Continuous Deployment 까지 시행 하는 회사들도 있지만, 그 보다 바로 이전 단계인 CD 는 당연히 받아들여 시행 하는 회사들이 아주 많아졌다는 이야기 입니다. CD 를 위해선 코드 통합을 지속적으로 해주는 Continuous Integration 서버와 CD 전체를 모티터링하는 관리 툴 그리고 코드 관리 플랫폼 등, 자동화를 위한 툴 (Tool) 들이 몇가지 필요합니다. 애자일 개발 방법론에 의해 개발되어 CD 이기 때문에 당연히 Continuous Delivery 에 대해서도 좀더 알아볼 예정이네요.

2017년까지, AI 는 빅데이터 (Big Data) 와 모바일 등과 접목하여 큰 성과를 냈으며 앞으로도 데이터 사이언티스트 등의 수요를 꽤 오랫동안 높여 줄 기술이라고 예상합니다. VR 은 게임과 접목하여 상당한 첫인상을 사용자들에게 심어줬으며 2018년에는 시장 확장을 위해 Oculus, 나 Galaxy 기어 등 하드웨어의 가격이 내려갈 것으로 예상하고 있습니다. 

이렇게 2018년, 소프트웨어 개발의 트렌드를 살펴보았습니다. 이 글에서 언급되었듯이, 다음 내용들은 좀더 자세하게 다뤄볼 예정입니다.

  1. Continuous Delivery
  2. DevOps 와 보안 검사의 자동화 (Automating Security Testing)
  3. BizDevOps





posted by Sungyoup Han matrim

안녕하세요 오랜만에 개발 관련 글을 적게 됩니다. 몇 안되지만, 그동안 애자일 개발 프로세스를 사용했던 프로젝트 참여 경험과 호주 유학 시절 접했던 소프트웨어 개발 교육 내용을 토대로 적어 내려가며 최근 자료로 업데이트도 하고, 정리도 하며 공유 해 보려고 합니다. 

2018년 현재, 국내에서 Agile (이하 애자일) 개발 프로세스 를 처음 듣는 개발자나 관리자는 거의 없을 것이라 생각됩니다. (경험하지않은 분들은 당연히 있을것입니다.) 꽤 오랬동안 Hot 한 방법론(프로세스) 이였고, 여러 방법으로 이 프로세스를 개발 문화로 안착 시키려고 상당히 많은 분들이 노력 해 오셨습니다. 그래서 많은, 성공설도, 실패설도 있습니다. 

개발 방법은 전통적인 방법인 워터폴도 있고, 스파이럴 혹은 프로토타이핑 방법 등이 있는데 왜 애자일 개발 방법론을 선택하여 개발 해야 할까요? 10년전 필드에서는 벌써 전통적인 워터폴의 문제점들을 보안하고 변형시킨, 애자일 혹은 DevOps (이하 데브옵스) 등의 단어들을 사용하지 않더라도, 오랜 경험을 바탕으로 필요에 의해 내부적으로 개발 프로세스를 애자일 식으로 자연스레 변경한 팀 (Team) 들이 있었습니다. 하지만 대부분 워터폴 방법으로 개발 했고, 윗단계에서 발생한 문제점들은, 폭포수가 단계적으로 내려오며 마지막에 엄청난 량의 물이 떨어지듯, 엄청난 량의 문제점들과 이를 수습하기 위한 엄청난 비용, 노력, 밤샘 등의 반복이 있었습니다. 

때문에, [12 Annual State of Agile Report] 조사에 의하면 2017년엔 조사한 대상 회사 중, 97% 나 되는 회사에서 애자일 개발 방법론을 채택 했을 정도로 많이 확산되어 있습니다. 참고로 조사 대상 중 80% 이상이 미국과 유럽내 있는 회사들입니다. 그리고 이 방법론이 더욱 효과적으로 사용 하기 위해 지속적인 변형이 일어나고 있습니다. Scrum [56%] 방법이 가장 많이 선택되고 실행 되고 있지만, 필요에 따라 Scrum/XP 하이브리드 [6%], 나 ScrumBan [8%], 등 현재 소개된 애자일 개발 방법론들의 하이브리드 형태로 받아들여지고 있습니다. 

그 어떤 형태로든 애자일 개발 방법을 선택하여 진행된 프로젝트 중 성공 비율은 [12 Annual State of Agile Report] 조사 대상 중 98% 회사에서 애자일 개발 방법을 선택한 프로젝트의 성공 경험이 있다고 답변을 했습니다. 그리고 이 중 74% 는 반 이상의 애자일 프로젝트가 성공적으로 끝났다고 합니다. 

프로젝트 성공의 잣대는 역시나 주어진 시간 내, 계획을 잘 세워, 예상한 비용 만큼만 사용하여 모든 Scope 을 완료 하였다 일까요? 애자일에서는 이터레이션 번다운이 이를 설명하는 가장 근사치의 요소일 텐데요. 2016년만 하더라고 51%의 답변으로 가장 중요한 요소를 차지 했었습니다.  하지만, 올해엔 27%로 중요도가 떨어졌습니다. 

그 이유는 애자일 프로젝트가 성공적이라고 결정하는 가장 큰 요소가 2017년엔, 첫번째는 고객 만족도 이고, 비지니스의 가치 전달, 그리고 개발 후 마켓으로의 속도 순으로 바뀌었기 때문입니다. 여기서 고객 만족도는 2016년만 해도 28% 정도의 순위였는데 2017년에는 46%로 가장 중요한 요소가 되었습니다.

경험상, 어떤 고객(사용자)이든, 작게 나마 완성되어 돌아가는 프로그램을 지속적으로 보여주면서, 피드백을 받아주는 개발팀을 싫어하는 고객은 없었습니다. 결과물들을 더 자주 보기 위해 1 week Sprint (스프린트) 를 돌렸던 프로젝트도 있었던 것처럼 고객은 결과물을 자주 보고 피드백을 주며 그 피드백들이 대부분 적용되었으면 합니다. 여기서 개발팀은 Scope 이 늘어나기 때문에 초기 요청사항에서 동떨어진 피드백을 받기를 당연히 원하지 않습니다. 하지만 이를 위해 스프린트 (이터레이션) 마다 Story Card 의 우선순위를 바꾸는 회의가 진행됩니다. 고객(사용자)은 비지니스와 불필요한 Needs 에 대해 고집을 부리지 않습니다. 물론 같은 비용으로 더 많은 부분이 완료 되었으면 하지만, 불필요한 부분으로 인하여 정말 주요기능들이 빠지는 것을 원하지 않습니다. 우선순위 회의의 결과를 공유하여 문제 파악과 해결점을 함께 찾아야 합니다. 

여하튼, 요구사항이 바뀌는 것을 최소화 하기 위해 애자일에서는 Product Owner (PO) 가 늘 함께 해야 한다..는 실제로 불가능한 이론을 이야기 합니다. 분명 PO 의 참여도가 떨어진다라는 요소가 2016년 까지는 큰 장벽 요소 중 하나였지만, 2017년엔 31%로 큰 장벽의 요소에서는 제외 되었습니다. 아마도, 스프린트 끝의 회의 때마다 PO 에게 사용해 보게 한 뒤, 피드백을 받아, 점진적으로 고객의 Needs 에 대등한 완성도 높은 제품으로 변해가는 과정을 함께 경험/공유 하다 보면, PO 는 매 회의 때를 고대하게 되지 않을까 싶네요.

이렇게 많은 회사에서 사용중이라고 발표도 하고, 고객의 만족도가 높은 결과물을 낼 수 있는, 그리고 또 꽤 높은 성공률을 자랑하는 애자일 개발 방법론..

과연, 개발 팀원들은 (PO/개발/UI/BA/테스터) 한번 애자일을 경험한 후에 이 프로세스에 만족하며 이후에도 프로젝트를 위해 또 애자일 프로세스를 선택하게 될지 궁금합니다. 개인적으로는 무척 좋아했습니다. 짧은 스토리 카드 하나하나 완료 시키는 재미도 있고, 고객의 피드백이 늘 추가 요구사항이나 변경으로 이어지는것이 아니라, 후반으로 갈 수록 높은 만족도로 이어지는 경우가 대부분이라서 일을 하면서도 뿌듯했습니다.  

그렇다면 애자일 경험이 없는, 현재 개발 프로세스의 체계가 잘 잡혀 있지 않은 상태에서는 어떤 선택이 가장 좋을까요?

============

4년전, 2014년, 호주에서는 애자일 개발 프로세스를 소프트웨어 개발 방법론으로 채택한, 많은 프로젝트 들이 진행 되고 있었는데요. 당시 런칭 했던 많은 서비스들 중 Pizza Mogul 이라는 재미난 서비스가 있었습니다. Domino Pizza 를 통해, 소비자들이 피자를 디자인(도우,토핑 등) 할 수 있으며, 디자인된 피자가 다른 소비자들에게 판매가 되면, 그 이익금의 일부를 피자를 만든 소비자가 가지고 가는 서비스 입니다. 

Project Management 수업을 들을 때, Pizza Mogul 의 개발 아웃소싱 시 프로젝트 메니저가 선택한 개발 방법론은 Agile 개발 방법론이였으며 관련하여 수업에서 Agile 개발 경험을 공유해 주었습니다. 유학을 위해 호주 가기 전에 참여했던 Agile 개발 방법론을 채택했던 프로젝트들과 그리 다르진 않아서 조금 다행스럽기도 했습니다. 

흥미로웠던 점은 프레젠테이션이 끝나고, 질문 시간에, 제가 "워터폴이나 다른 여러 개발 방법론이 있는데 구지 Agile 을 택한 이유가 있나요?" 라는 질문에 "회사를 들어갔을 때 부터 개발 문화가 Agile 이여서 채택? 했을 뿐이다. 다른 개발 방법론은 경험해 보지 않아서 모르겠다." 라고 답변을 들었습니다. 실은 제가 초기에 개발 방법론을 이해 하며 개발 했던것이 아니였기 때문에 좋고 나쁘다를 판단 할 수 있는 데이터가 모자라 물어본 질문이였는데 의외로 그냥 사내 개발 문화로 자연스럽게 받아들였다는 대답을 들어 "당연한 것을" 물어봤나 하는 생각도 들었네요.

또한 "요구사항이 바뀌거나 늘어났을 텐데, 그에 대해서 고객과 어떤 조율이 이루어 졌나요?" 라는 질문에 대해서는 "매번 우선순위를 정했고, 고객과 공유하여 서비스를 위해 꼭 필요한 기능들에 우선순위를 정하였고, 변경을 수용했다. Scope 이 늘어나면 시간과 비용이 추가적으로 발생하는 점에 대해서 먼저 고객과 상호 이해가 되어야 한다... (생략)" 

============



<to be Continued...>


posted by Sungyoup Han matrim


2017 의 봄을 준비하며 구입한 자전거 의자 교체가 완료 되었습니다. 무척 편하게 타고 다니고 있으며, 장거리 여행 시에도 남자들만 아는 뻐근함이 많이 해소되어 너무 좋습니다.

LGE | Nexus 5X | 1/58sec | F/2.0 | ISO-483

LGE | Nexus 5X | 1/14sec | F/2.0 | ISO-1725

자이언트 의자보다 SMP 의자 뒷쪽이 통통해서 엉치뼈가 조금은 더 편하?네요 :)

LGE | Nexus 5X | 1/21sec | F/2.0 | ISO-1195

LGE | Nexus 5X | 1/23sec | F/2.0 | ISO-1107

손집이 쪽도 손을 봐줘야 하는데 언제나 할지 궁금하네요. 교체는 2017년 봄에 하고, 리뷰는 2018년 봄에 쓰고 있는데말입니다. 이것 참. 

'Life' 카테고리의 다른 글

봄 준비 자전거 2탄 의자 교체  (0) 2018.03.18
#이케아 #부엌놀이 #ikea #kitchen #toy  (1) 2017.12.23
더 지저분해지는 사무실 책상  (0) 2017.07.16
봄 준비 자전거 용품  (0) 2017.03.12
#이케아 #주말 #weekend  (0) 2016.12.25
멈춰버린 블로깅  (0) 2016.06.29

posted by Sungyoup Han matrim



티스토리 툴바