728x90

개발자의 컴퓨터는 항상 좋은 퍼포먼스를 내는 장비여야 합니다. 개발 도구도 나날이 무거워지고 언어나 런타임시에 사용하는 가상환경도 많은 리소스를 요구하기 때문입니다. 다만 좋은 장비를 새로 지급받거나 구매해서 쓰게되면 손에 착착~ 감기게 맞추어둔 개발 환경을 동일하게 맞추는 스트레스가 발생하기 마련입니다.

제가 주력 개발도구로 사용하고 있는 것은 비주얼 스튜디오 코드 Visual Studio Code 입니다. 상용 개발도구가 아닌 부문에서는 이미 압도적인 사용 점유율을 보이고 있는데요, 워낙 이사람, 저사람, 이 글, 저 글을 통해 얻은 정보들로 환경을 셋업해둔 탓에 새로 받은 장비에 설치하기가 겁나더군요.

하지만, 우리의 사랑 마이크로소프트는 비주얼 스튜디오 코드의 개발 환경을 동일하게 맞추어주는 도구를 내장해 두었습니다. 이름하여 <Setting Sync> 기능입니다. 이 기능은 원격지에 비주얼 스튜디오 코드의 환경 정보를 저장하고, 동일한 계정으로 로그인하는 비주얼 스튜디오 코드들에 대하여 환경 정보를 동기화 하도록 합니다.


1단계 - 원본 컴퓨터에서의 작업

당연하겠지만 우리가 제일 먼저 해야 할일은 원본 컴퓨터 혹은 환경 셋업이 되어 있는 컴퓨터에서 개발 환경 정보를 <Setting Sync> 기능을 통해 원격지에 저장하는 것입니다. 비주얼 스튜디오 코드를 실행하고 아래의 단계를 따라하면 손쉽게 설정할 수 있습니다. 

<Settings Sync> 기능 활성화하기

우선 <Settings Sync> 기능을 활성화 해보겠습니다. 비주얼 스튜디오 코드의 좌측 하단의 프로필 이미지를 누르면 <Turn on Settings Sync...> 메뉴가 있습니다. 선택해보겠습니다.

잘 동작하는 기능입니다만 아직 프리뷰 Preview 단계이기 때문에 간단한 동의 절차를 거쳐야 합니다. 문서를 읽어 보시거나 <Turn On> 버튼을 눌러 동기화 기능을 활성화 합니다. 

<Turn On> 을 누르면 <Settings Sync> 커맨드 팝업이 뜹니다. 동기화할 항목을 선택할 수 있으며 저는 완전히 동일한 환경을 만들기 위해 모든 항목을 선택된 상태 그대로 두었습니다. 로그인 되어 있지 않기 때문에 <Sign in & Turn on>를 눌러 로그인을 하고 동기화 기능을 활성화 하겠습니다. 

사용할 수 있는 로그인 방법은 두가지 입니다. 마이크로소프트 계정이나 깃헙 계정을 이용할 수 있습니다. 개발자라면 깃헙 계정을 대부분 가지고 계실테니 저도 깃헙 계정으로 해보겠습니다. 깃헙에서 종종 보셨을 권한 승인 절차를 거치면 연동이 완료됩니다. 

깃헙에서 Continue 를 눌러 주시고...
다시 비주얼 스튜디오로 돌아가도록 팝업 승인을 하거나 토큰 창의 URL 을 브라우저에 붙여넣고...
비주얼 스튜디오 코드에서 Open 을 눌러줍니다.

승인 절차가 완료되면 비주얼 스튜디오 코드는 선택된 환경 설정에 대한 동기화 작업을 시작합니다. 동기화가 완료되면 비주얼 스튜디오 코드 우측 하단에 알림이 표시되며 <Show log> 링크를 눌러 상세한 동기화 내용을 확인할 수 있습니다. 

열심히 동기화를 잘 했군요. 굿좁!

최초 한번은 이렇게 동기화가 되고 이후 동기화에 대한 설정을 하려면 Mac 기준으로 <shift>+<command>+<p>를 눌러 커맨드 팔레트를 열어 <Settings Sync> 기능을 열어야 합니다. 아래 화면에서 <Show Settings>를 눌러보겠습니다. 

사이드바가 열리며 현재 동기화 된 설정의 내용을 확인할 수 있습니다. 이제 원래의 컴퓨터에서 해야 하는 작업은 마무리가 되었습니다. 항상 동기화가 되기 때문에 언제든 원래 컴퓨터에서 환경 설정을 바꾸면 원격지에 동기화되어 다른 컴퓨터에도 변경된 내용이 반영되게 됩니다. 

 

2단계 - 새로운 컴퓨터에서의 작업

새로운 컴퓨터에서의 작업도 크게 다르지 않습니다. 비주얼 스튜디오 코드를 실행하고 깃헙 계정으로 로그인하여 동기화된 환경 설정을 가져오도록 해보겠습니다. 원본 컴퓨터에서 했던 작업과 마찬가지로 프로필 이미지를 눌러 <Turn on Settings Sync...> 메뉴를 실행합니다.

꼼꼼하고 친절한 마이크로소프트는 이번에도 기능이 프리뷰라는 것을 알려주고 정말로 켤 것인지를 한 번 더 확인하게 합니다. 우리는 과감하게 <Turn On>을 눌러 동기화 작업을 하겠습니다. 네, 모든 것이 완전히 동일하니 따로 설명하지 않고 스크린 샷으로 대치하겠습니다. 

<Turn On> 을 누르고...
<Sign in & Turn On> 을 누르고...
원본 컴퓨터에서 쓴 것과 동일한 계정을 선택하고...
여기까지 왔는데 승인 안하면 안되니 <Continue>를 누릅니다.
스샷이 하나 빠졌는데... 여튼 확인하고 <Open>합니다.
동기화가 빠르게 완료되었네요!

계정으로 로그인 하고 동기화가 완료되면 원본 컴퓨터에서와 마찬가지로 <shift>+<command>+<p>를 눌러 <Settings Sync> 기능을 열어봅니다. 재미있는 것은 커맨드 팔레트에서 사용했던 히스토리까지 넘어와 있는게 보입니다. 바로 설치한 비주얼 스튜디오 코드인데도 말이죠!

<Settings Sync> 내용을 보면 각 항목이 여러개 나와 있는 것이 보입니다. 같은 항목에 대하여 여러번 동기화가 된 경우 히스토리 성으로 그 내역이 동기화 되고 리스트화 되어 보이는 것으로 추정됩니다 -_-;; (네, 프리뷰입니다 여러분! 오류일수도 있지만 저는 마이크로소프트를 믿습니다!!) 

왼쪽 하단의 <Synced Machines> 목록을 보면 원래의 컴퓨터와 새로운 컴퓨터가 목록에 보입니다. 알아보기 힘드니 눈에 익숙하도록 이름을 바꾸어 두었습니다. 

 


이렇게 새로운 장비에 비주얼 스튜디오 코드를 설치하고 기존의 개발 환경을 그대로 옮겨와 봤습니다. 생각보다 쉬운 절차이고 앞으로도 유용하게 사용할 수 있을 것 같은 느낌입니다. 어렵게 한 땀, 한 땀 환경 설정을 옮기지 마시고 쉽게 동기화해서 셋업 시간을 아껴보시기 바랍니다! 보다 자세한 내용은 아래의 공식 문서를 참고하세요!

code.visualstudio.com/docs/editor/settings-sync

 

Settings Sync in Visual Studio Code

Synchronize your user settings across all your Visual Studio Code instances.

code.visualstudio.com

 

728x90
728x90
Visual Studio 2010 Express 가 아닌 정식 버전을 사용하는 경우에도 윈도폰7용 개발도구를 설치하는 방법은 동일합니다. 필요는 없지만 Visual Studio 2010 Express 도 설치가 되어야 하고 조금 지저분해지는 감이 없진 않습니다만 아직까지 별도로 Express 의 설치를 회피할 수 있는 방법은 공식적으로 없는 상태입니다.

문제는 간헐적으로 이런 설치를 진행한 다음에도 Visual Studio 2010 Express 에서 보이듯이 윈도폰7 개발을 위한 프로젝트 템플릿이 안보이는 경우입니다. 결론을 먼저 이야기하면 개발도구는 정상적으로 되었지만 템플릿이 Visual Studio 2010 정식 버전쪽으로 등록이 되지 않아 발생하는 문제입니다. 



NoPD의 Visual Studio 2010 Professional 버전의 화면입니다. XNA Game Studio 4.0 이 추가되어 있는 것으로 보아 윈도폰7 개발도구가 정상적으로 설치된 상태라는 것을 추정할 수 있습니다. 실제로 XNA Game Studio 4.0 템플릿 메뉴에 들어가면 윈도폰7용 게임 개발 프로젝트 양식은 정상적으로 등록이 되어 있는 걸 볼 수 있습니다. 이제부터 이 사태(?)를 처리하는 방법을 알려드리겠습니다. 삭제후 재설치하는 것은 의미가 없습니다. 재설치를 해도 안번 설치가 잘 안되기 시작한 환경에서는 죽어도 설치가 안되니까요 ^^;;;


비주얼 스튜디오가 설치된 경로의 위의 경로로 찾아가시기 바랍니다. CSharp 하위에 Silverlight for Windows Phone 이 있습니다만 템플릿이 뜨지 않는 경우에는 1033 폴더만 존재하고 1042 폴더는 없을 겁니다. 혹시나 Visual Studio 2010 의 버전에 따라 숫자는 차이가 있을 수 있으니 CSharp 하위의 다른 폴더의 구조를 참고하시기 바랍니다. 

일단 NoPD가 사용하는 Professional 버전에서는 1042 폴더를 사용합니다. 1033 폴더를 통째로 복사해서 1042 폴더 이름으로 변경을 해 줍니다. 이 때 관리자 권한이 필요하다고 에러가 뜨지만 무시하시고 그냥 진행하시면 됩니다.


이제 비주얼 스튜디오 명령 프롬프트를 열어 위의 스크린에 나온 경로로 찾아갑니다. 해당 경로에서 devenv.exe /InstallVSTemplates 라고 명령을 내리면 비주얼 스튜디오가 템플릿을 검색하여 등록 작업을 시작합니다. 이 명령어 역시 관리자 권한으로 실행 되어야만 구동 가능하니 비주얼 스튜디오 명령 프롬프트를 관리자 권한으로 실행해 주시기 바랍니다.


이제 비주얼 스튜디오를 다시 실행해 보면 위와 같이 Silverlight for Windows Phone 이 등록된 모습을 볼 수 있습니다. 지금까지 세대의 PC 환경에 윈도폰7 개발도구를 설치해 봤는데 딱 한군대 에서만 정상적으로 설치가 되었고 나머지 두대에서는 위와 같은 현상이 발생했습니다. 검색을 해봐도 별다른 해답은 안나오는데 혹시나 비슷한 난감함을 겪는 분들을 위하여 내용 공유합니다.

- NoPD -
728x90
728x90
간만에 본진을 떠나서 이곳에 글을 올립니다. 최근 넷북에 OS X 를 올리고 Xcode 를 슬슬 만져보고 있습니다. 그래봐야 실제로 Xcode 로 프로젝트 만들어서 테스트 해본건 열손가락 남짓하네요. 아무래도 화면이나 키보드가 불편한 넷북에서 체험한 것이라 여러해 동안 Xcode 를 이용하여 Mac 용 혹은 iPhone 용 어플리케이션을 개발해 오신 분들이 " 잘 모르면서 그런소리 하지마라 " 할지도 모르겠습니다.

여러해 동안 Visual Studio 만을 가지고 (Eclipse도 쓰지 않고!) 웹 / 어플리케이션 개발 업무를 진행하다 보니 너무 손에 익은 IDE 가 되버린것 같습니다. Xcode 로 iPhone 이나 Mac 어플리케이션 개발을 시작하시려는 분들이 아주 작으나마 문화적(?) 충격을 최소화 하시라고 간단히 느낀점을 적어봅니다.

인텔리센스(Intellisense), 정말 고마운 녀석이었다

Visual Studio 의 가장 강력한 기능중 하나가 인텔리센스입니다. 오죽했으면 Eclipse 에서도 인텔리센스 기능을 구현했겠습니까. 워낙에 방대해져 버린 클래스 라이브러리나 API 들을 개발자들이 다 외울 수 없기에, 인텔리센스는 기억의 끈을 더듬을 수 있는 중요한 단서를 제공해 주곤 합니다.

Xcode 역시 간단한 인텔리센스 기능은 제공하고 있습니다. Objective-C 자체가 코드를 만들어 나가는 방식이 VS의 C 계열 언어들과 조금 달라서 보여지는 방식은 다릅니다만, 주요한 메소드, 프라퍼티를 노출시켜 주는 것은 동일하다고 하겠습니다.

그러나 Visual Studio 에서 우리가 점(.)을 찍으면 Drop-Down List 로 출력되던 메소드, 속성등의 리스트에 익숙해진 상태라 Xcode 의 그것은 불편하기 그지 없었습니다. 해당 객체가 제공하는 모든 메소드가 무엇인지 알기가 힘들어 그때 마다 도움말을 찾아가며 메소드를 찾곤 했습니다. 연습삼아 받아둔 예제들에서 사용한 메소드 외의 것들을 찾아보기가 여간 어려운게 아니더군요

개발자 Eco-System의 중축, MSDN

Visual Studio 를 이용하여 개발하는 분들의 필수품이 바로 MSDN 입니다. 온라인으로 이용을 하던 DVD 로 설치해서 이용하던, MSDN 은 다양한 예제코드(물론 제대로 안돌아가는 쓰레기 예제도 많습니다만 ;;;)들은 개발자들이 언제나 쉽게 가져다 쓸 수 있는 천군만마와 같은 역할을 해주고 있습니다.

애플역시 개발자를 위한 라이브러리 구축을 무척 신경쓰고 있다는 느낌입니다. 하지만 아무래도 절대적인 개발자의 수가 적어서인지 아직은 마음에 충족되는 정도의 편리함과 강력함(이건 좀 판단이 애매하네요. Objective-C를 겨우 1주일 접해본지라...) 을 주지는 못한다는 느낌입니다. 이 역시 익숙함의 차이때문은 아닐까 싶기도 합니다만, 여튼 MS가 Eco-System 구축은 참 잘해둔 것 같다는 느낌이 팍 듭니다.

(계속)

- NoPD -

Visual Studio, IDE, Xcode, Objective-C, iPhone, iPMicrosoft, apple, 애플,마이크로소프트odTouch
728x90
728x90

* 이 글은 오라클 기술 네트워크(Oracle Technology Network)에 공개된 Joh Paul Cook 의 영문 아티클을 번역 / 의역한 글입니다. 원문은 링크(http://tinyurl.com/m69mvh)를 통하여 확인하실 수 있습니다.

Visual C# 구문

프로젝트에 참조 추가를 한 다음 using 구문을 이용하여 네임스페이스를 선언해 주어야 합니다. 기술적으로 네임스페이스 선언은 해주지 않아도 관계 없지만, 간결한 코드를 위해서는 꼭 선언해 주는 것이 좋습니다. 일반적인 경우와 마찬가지로 네임스페이스나 클래스 선언이 시작되기 전에 using 문을 추가해 주면 됩니다.

using Oracle.DataAccess.Client
참조가 정상적으로 추가되었다면 using 문으로 네임스페이스를 선언하는 동안 인텔리센스의 도움을 받으실 수 있었을 것입니다.


연결 문자열과 객체

오라클 연결 문자열은 tnsnames.ora 파일에 정의된 내용과 밀접한 관계를 가지고 있습니다. 여러분들의 tnsnames.ora 파일에 아래와 같이 XE 라는 이름으로 오라클 연결 문자열이 정의되어 있다고 가정해 봅시다. (참고로, tnsnames.ora 파일은 오라클 클라이언트가 설치된 경로의 하위에 network/admin 폴더에 저장되어 있습니다. 클라이언트 버전에 따라 위치는 조금씩 상이할 수 있습니다)

XE =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DBSVR)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = XE)
    )
  )
XE 라는 약어는 오라클 클라이언트를 위한 데이터베이스 연결 주소 정보를 정의하고 있습니다. tnsnames.ora 파일에 정의된 위의 약어를 사용하기 위해서 비주얼 스튜디오에서 아래와 같은 연결 문자열 선언을 해야합니다.

string oradb = "Data Source=XE;User ID=scott;Password=tiger;";
물론 tnsnames.ora 파일을 사용하지 않기 위하여 연결 문자열을 아래와 같이 변경할 수도 있습니다. tnsnames.ora 파일에 지정된 내용을 그대로 연결 문자열에 정의하면 됩니다.

string oradb = "Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = DBSVR)(PORT = 1521))) " +
               "(CONNECT_DATA =(SERVICE_NAME = XE)));" +
               "User Id=scott;Password=tiger;";
위에서 볼 수 있는 것처럼, 사용자 이름과 패스워드는 연결 문자열 속에 평문으로 저장되어 있습니다. 이 방법은 연결 문자열을 만드는 가장 간단한 방법이지만 보안의 관점에서 봤을 때는 평문으로 저장된 사용자 이름, 패스워드는 좋은 선택이 아닙니다. 특히, 닷넷 어플리케이션은 DLL, EXE 를 막론하고 디스 어셈블러를 통해서 소스 코드의 복원이 가능하기 때문에 보안에 취약합니다. 이와 관련한 내용은 다른 글에서 보다 자세히 다루도록 하겠습니다.

다음으로, 여러분은 커넥션 클래스를 이용하여 객체를 생성하고 초기화 해야만 합니다. 연결 문자열은 커넥션 객체에 할당 되어야 합니다.

OracleConnection conn = new OracleConnection(XE);
연결 문자열의 할당은 오버로드된 객체의 생성자를 통해서 전달되어 할당이 가능합니다. 생성자의 다른 오버로드는 아래와 같은 구문도 사용 가능하도록 정의되어 있습니다.

OracleConnection conn = new OracleConnection();
conn.ConnectionString = oradb;
연결 문자열의 할당이 끝나면 이제 남은 일은 커넥션 객체의 Open 메소드를 이용하여 오라클 데이터베이스와의 실제 연결을 만드는 작업을 하면 됩니다. 이 과정에서의 에러 핸들링은 다음 포스트에서 소개하도록 하겠습니다.

conn.Open();
Command 객체

Command 객체는 실행 되어야 하는 SQL 문자열이나 저장 프로시저를 SQL 명령의 형태로 지정할 때 사용됩니다. Connection 객체와 마찬가지로 해당 클래스로부터 인스턴스가 만들어져야 합니다. 아래의 예제에서 ODP.NET 은 부서 테이블로부터 부서 번호가 10인 부서 명(DNAME)을 돌려주는 SQL 구문을 수행할 것입니다.

string sql = "SELECT dname FROM dept WHERE deptno = 10";
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.COmmandType = COmmandType.Text;
오버로드된 다른 생성자를 사용하면 구문은 조금 다르게 변할 수 있습니다. Command 객체는 커맨드 텍스트를 실행할 수 있는 메소드를 가지고 있습니다. 이 메소드들은 서로 다른 형태의 SQL 구문에 적절한 메소드 들입니다.

스칼라 값 얻기

실제로 데이터를 데이터베이스로부터 얻기 위해서 OracleDataReader 객체를 생성하고 ExecuteReader 메소드를 사용하면 됩니다. 데이터는 컬럼 이름을 지정하거나 인덱스 번호를 이용하여 엑세스 할 수 있습니다. 결과 값은 닷넷 고유의 데이터 형을 이용하거나 오라클 고유의 데이터 형을 이용하여 엑세스 할 수 있습니다. 닷넷에 포함되어 있는 어떤 언어를 사용하더라도 이같은 특징을이용할 수 있습니다.

OracleDataReader dr = cmd.ExecuteReader();
dr.Read();

label1.Text= dr["dname"].ToString();
label1.Text = dr.ZGetString(0).ToString();
label1.Text = dr.GetOracleString(0).ToString();
위의 예제에서 우리는 DNAME 이라는 문자열 형태의 리턴 값을 가지고 데이터를 핸들링 하고 있습니다. 그러나 DEPTNO (부서번호) 와 같은 문자열이 아닌 데이터를 핸들링 할 떄는 타입 미스매치(Type Mismatch)에 주의해야 합니다. 닷넷 런타임 라이브러리는 암시적으로 적절한 형 변환을 자동으로 시도합니다. 그러나 간혹 데이터 형의 호환성에 문제가 있거나 암시적인 형 변환이 실패하면 예외가 발생하게 됩니다. 암시적인 형 변환이 에러 없이 수행된다 하더라도 필요한 경우에 대하여 명시적으로 형 변환을 하는 것을 권장합니다.

객체 소멸

데이터베이스 엑세스가 모두 끝나고 나면 Connection 객체의 Close 혹은 Dispose 메소드를 반드시 호출해 주어야 합니다. Dispose 메소드는 내부적으로 Close 메소드를 호출하도록 되어 있습니다.

conn.Close();
conn.Dispose();
코드를 만들 때 using 문을 이용하여 로직을 구성한 경우에는 명시적으로 Close 나 Dispose 메소드를 호출할 필요가 없습니다. 아래의 코드는 using 문을 이용하여 데이터베이스를 연결하는 예제 코드입니다.

using (OracleConnection conn = new OracleConnection(oradb))
{
    conn.Open();
    OracleCommand cmd = new OracleCOmmand();
    cmd.Connection = conn;
    cmd.CommandText = "select dname from dept where deptno = 10";
    cmd.COmmandType = COmmandType.Text;
    OracleDataReader dr = cmd.ExecteReader();
    dr.Read();
    label1.Text = dr.GetString(0);
}
추가적으로 OracleCommand 객체는 Dispose 메소드를 포함하고 있고 OracleDataReader 객체는 Close 와 Dispose 메소드를 포함하고 있습니다. 일반적인 경우에는 객체의 생성과 소멸이 큰 영향을 주지 않을 수 있지만 닷넷 환경에서 시스템의 리소스를 해제하고 어플리케이션의 성능 향상을 위해서 반드시 신경써 주어야 할 부분입니다.

- NoPD -
728x90

+ Recent posts