Categories
일상과 생각

솔직함에 대하여 – 고든 리빙스턴

어쩌면 사람들은 늘 하고싶은 이야기를
마음 속 장바구니나 위시리스트에
수북하게 담아 놓고 있는지도 모른다.
솔직하고 싶어서 솔직히 말하면
부담스럽다며 도망가는 사람이 생긴다.
눈을 보며 거짓말을 할 수가 없어 사실을 털어 놓으면,
처음부터 그럴 줄 알았다며 뒤통수에 대고
수근거리는 사람도 생긴다.
그런 일을 몇번 겪고 나면 안전을 최우선으로 두게 된다.
입을 다 물어 버리는 것은 물론이고 스스로도 생각을 멈추게 된다
자기 일기장을 누가 훔쳐 봤다는 사실을 알게된 아이는
그 후로 대외용 일기만을 쓰게 되듯
모든 것을 말할 수 있고
진지하면서도 험학하지 않은 분위기로 대화를 나눌 수 있는 상대를
일생에 몇명이나 만날 수 있을까
– 너무 일찍 나이들어버린 너무 늦게 깨달아버린 / 고든 리빙스턴

(‘솔직함에 대하여’라는 블로그 제목은 내가 마음대로 붙인 것. 자주 가는 커뮤니티에서 누가 소개해 준 글을 가져왔다.)

Categories
일상과 생각

할 거 많아서 즐거운 인생

적어도 주 3회 헬스장 가기. 주말 축구도 틈틈히. 내년엔 수영도 시작해야지.
밀린 블로그 글 읽기(계속 쌓이는 중!).
구매한 책 읽기.

  • 생각이 나서 / 황경신
  • 바람이 분다. 당신이 좋다. / 이병률

위에거 다 읽고 읽어볼 책들(계속 늘어나는 중!!)

  • 엘러건트 유니버스 / 브라이언 그린
  • 나를 부르는 숲 / 빌 브라이슨
  • 거의 모든 것의 역사 / 빌 브라이슨
  • 관찰의 힘 / 얀 칩체이스

브레이킹 배드 마저 다 보기(현재 시즌 3 보는 중).
하스스톤 플레이(& 리뷰).
매주 금요일 마녀사냥 챙겨보기.
좋은 사람들 계속 만나고, 좋은 생각만 하기.

Categories
사진

2013 낙산공원 나들이

석양과 함께 오로라가 펼쳐졌다
석양과 함께 오로라가 펼쳐졌다

IMG_3734 IMG_3736 IMG_3738 IMG_3740

Categories
사진

2013 창경궁 나들이

IMG_3680
이름 모를 아저씨와 카메라를 통해 서로 교감하고 있다…

IMG_3685 IMG_3688 IMG_3698 IMG_3708 IMG_3709

IMG_3712
서양식으로 꾸며진 온실과 정원이 있어서 놀랐다

IMG_3718 IMG_3720 IMG_3721IMG_3723

Categories
문화생활(Culture) 영화(Movies)

[영화] 500일의 썸머

500-days-of-summer
출처: 봉명동안방극장님 블로그

500일의 썸머를 다시 찾아 보았다. 톰과 썸머는 왜 헤어져야 했을까에 대해 좀 더 곰곰히 생각해보고, 리뷰도 찾아보았다. 그래서 정리한 결론.
연애를 할 때, 서로 상대방이 내가 원하는 사람이길 바란다. 톰의 경우는 썸머가 자신이 그려오던 사람이길 바랬다. 지금 시점에서의 썸머는 다른 것을 믿고 있더라도 함께 시간을 보내면서 자신이 원하는대로 바뀔 것으로 기대했다. 썸머가 그동안 숨던 벽이 허물어져 간다고 생각했을 때, 톰은 더욱 확신을 하게 되었다.
썸머도 마찬가지였던 것 같다. 진정한 사랑보다는 가벼운 관계를 지속하며 상처 받지 않고 싶었고, 톰에게도 그것을 바랬다. 하지만 톰이 썸머가 원했던 모습이 아닌, 톰 자신이 원하는 모습을 계속 썸머에게 바랬을 때, 헤어질 결심을 했던 건 아니었을까.
결국 연애를 하면서 자신이 원하는 나, 자신이 원하는 상대방만을 생각하며, 상대방이 원하는 나, 상대방이 원하는 그 스스로의 모습을 잠시 망각하면서 문제가 발생하는 것이 아닐까 싶다.
시간이 지나고, 썸머는 톰이 말해오던 것들을 갑자기 깨닫는다. 톰이 믿던 것들을 같이 믿게 된 썸머. 어쩌면 그것을 알려준 고마움에 마지막에 톰을 찾아왔던 건 아니었을까. 물론 그 덕에 국민 나쁜년 칭호를 얻게 됐겠지만.
톰은 반대로 썸머가 말해오던 것들을 믿게 된다. 한 쪽 끝에서 다른 쪽 끝으로의 극단적인 믿음의 변화. 그러다 마지막 순간 어텀을 만나면서 깨달았던 것 같다. 운명을 만나는 것도 중요하지만, 그것을 유지하고 발전시키기 위해서는 서로가 기대하는 것을 채워줄 필요도 있다고. 그래서 뒤돌아 데이트 신청을 했던 게 아니었을까. 마지막에 그녀의 이름을 듣는 순간 그것을 확신했을 것 같다.
A_500.Days.Of.Summer.2009.DVDRip.XviD.AC3-SkyDvD(001350)12-18-39
출처: 산수재혜랑님 블로그

이제 나를 돌아본다. 나는 솔직하게 털어놓는 나를, 그것을 받아줄 그녀만을 생각했다. 사실 그녀는 순수한 나와 그런 사람을 만나는 그녀를 그려왔는데.
무엇이 더 중요했을까? 보다 더 나다운 것? 보다 더 그녀가 바라는 모습이 되는 것? 사실 잘 모르겠다. 다만 이런 경험들을 통해 우리는 더 성숙해지고, 다른 이들의 바램을 서로 채워줄 수 있는 사람이 되어 가는 것이 아닐까 싶다.
500 days of summer
출처: @cine_bot

Categories
문화생활(Culture) 영화(Movies)

[영화] 우리 선희

our sunhee
추석연휴를 앞두고 회사 업무시간이 일찍 끝이 났다. 마침 코엑스에서의 상영시간이 맞아 <우리 선희>를 보러 갔다. 그녀가 보고 싶다고 했던 영화였는데, 눈에 계속 밟혀서 얼른 보는게 낫다고 생각했다.
홍상수 감독의 영화는 처음이었는데, 색다른 구성과 유머코드가 인상 깊었다.
문수(이선균)의 술 취해서 헛소리 하는 연기 최고 ㅋㅋㅋㅋ
그녀랑 같이 봤으면 이런 대화를 하지 않았을까 혼자 상상하며 보는 재미… 지금 내가 처한 상황에서 보니 절절한 장면들도 있었다.
재형(정재영)의 말이 귓가에 맴돈다.
“여자는 다 옳아. 남자는 여자가 결정하면 거기에 따르기만 하면 되는거야.”
날 좋은 가을날, 창경궁이나 가봐야겠다는 생각이 들었던 장면들.
영화 속 학교 배경이 건대여서 반가웠다.
추천하는 리뷰는 이쪽.

Categories
개발(Development)

[.NET] 2-way SSL 환경에서 WebService 호출하기

2-way SSL이란, 일반적으로 Server 쪽 인증서만으로 SSL 연결을 하는 것과는 달리, Client 쪽에서도 인증서를 보내 서로 인증을 하는 환경을 말한다. 때문에 서로 데이터를 주고 받기 위해서는 Server 인증서, Client 인증서 두 개가 각각 필요하다.

2-way SSL
2-way SSL (출처: codeproject)

이 글에서는 일단 Client 인증서를 사용해서 Server 쪽에 Web Service API를 호출하는 것까지, 사용했던 방식을 정리해보고자 한다.

1. 인증서 설정

우선 Client 인증서가 필요하고, 해당 인증서를 Server 쪽에 등록하여 인증에 사용할 수 있도록 구성해야한다. 이 부분은 Server쪽 업체쪽에서 Client 인증서도 만들어 보내줬기 때문에 자세한 설명은 힘들다. 어쨌든 Client 인증서를 컴퓨터에 설치한 뒤, 브라우저를 열어 해당 서버에 잘 접속이 되는지를 확인해본다. 아마도 접속시 어떤 인증서를 사용할 것인지 물어보는 확인창이 열릴 것이고, 인증서 선택 후 페이지가 제대로 나오면 인증서에는 문제가 없는 것이다.
이제부터는 API 에서 사용하기 위해 설정하는 방법이다.

  1. [시작]-[실행]-mmc 를 입력하여 Microsoft Management Console 실행
  2. [파일]-[스냅인 추가/제거] 선택
  3. [인증서]를 선택하고 [추가] 버튼을 누른 뒤, [컴퓨터 계정]-[로컬 컴퓨터]를 선택한다.
    mmc_certificates
  4. [개인용]에서 오른쪽 클릭 후 [모든 작업]-[가져오기] 선택
  5. 찾아보기를 누른 후 파일형식을 [개인정보교환(*.pfx, *.p12)]로 바꾼 뒤, 위에서 설치했던 인증서 경로를 지정한다. (필자의 경우 client 인증에 사용되는 인증서 형식이 p12였다)
  6. 비밀번호를 물어본다면 입력해주고, 기본 설정대로 [다음]을 눌러 [마침]이 나올 때까지 완료해 준다.
  7. 인증서가 추가되었다면, 이제 IIS에서 접근할 수 있도록 권한을 열어주어야 한다. 추가된 인증서를 오른쪽 클릭하고 [모든 작업]-[개인 키 관리]를 선택한다.
  8. [그룹 또는 사용자 이름]에서 [추가]를 클릭
  9. 찾을 위치에서 범위를 컴퓨터 전체로 지정하고, 선택할 개체 이름에는 “IIS AppPool\DefaultAppPool”을 넣어 추가해준다. 이름 확인을 눌러주었을 때 DefaultAppPool 로 바뀐다면 제대로 된 것이다.(*IIS에서 인증서가 필요한 응용 프로그램 풀 이름을 확인하자. 여기서는 DefaultAppPool에 서비스가 올라가 있었다.)
  10. 이로써 MMC에서 설정은 끝났다.

2. 2-way SSL 환경에서 서비스 중인 WebService의 WSDL 등록

서버쪽 업체에서는 .NET 2.0 SOAP Web Service를 통해 API를 제공하고 있었다. 웹 참조 추가를 통해 WSDL을 등록해주면 해당 서비스가 제공하는 API를 이용할 수 있다. 일반적인 웹 참조 추가는 아래와 같은 순서로 이루어진다.

  1. 솔루션 탐색기의 [참조]에서 오른쪽 클릭하여 [서비스 참조 추가]를 선택(VS2010 기준)
  2. 왼쪽 아래의 [고급] 버튼을 누르고, 다음 화면에서 [웹 참조 추가]를 누른다.
  3. URL에 WebService의 주소를 넣어주면, 자동으로 ‘이 URL에서 찾은 웹 서비스’에 해당 서비스 이름이 노출된다.
  4. 사용하려는 이름을 지정하고 [참조 추가]를 누른다.

그런데 2-way SSL 환경에서 서비스 중인 URL을 입력하였더니, 웹 서비스의 metadata를 불러올 수 없는 오류가 발생하였다.

‘https://xxx.xxx.com/aaa.asmx’을(를) 다운로드하는 동안 오류가 발생했습니다.
HTTP 상태 403: Forbidden(으)로 인해 요청하지 못했습니다.
‘https://xxx.xxx.com/aaa.asmx/$metadata’을(를) 다운로드하는 동안 오류가 발생했습니다.
요청이 실패했습니다(HTTP 상태 403).

이때 아래와 같이 해결할 수 있다.
– 해결방법 1 – WSDL 로컬에 저장하여 참조하기

  1. 브라우저에서 웹 서비스의 WSDL 주소로 접근하여 정보를 확인한다.
  2. [파일]-[다른 이름으로 저장]을 통해 wsdl 파일을 로컬에 저장한다.
  3. VS에서 웹 참조 추가를 통해 URL을 입력하는 화면까지 진행한다.
  4. URL 입력 창에 아래처럼 경로를 넣어준다.
    file://c:\temp\aaa.wsdl
  5. 서비스 이름을 확인한 뒤, 웹 참조 이름을 지정하고 [참조 추가]를 누른다.

– 해결방법 2 – svcutil.exe 사용하기
해결방법 1로 로컬에서는 문제 없이 서비스호출이 됐지만, 실제 서비스를 올리려고 하면 XmlSerializer 참조 오류가 발생했다. 결국 웹 참조 대신 wsdl -> class 변환 툴을 활용하여 처리하는 방식으로 변경하였다.

  1. Visual Studio 명령 프롬프트 실행(글 작성시는 VS2010 환경)
  2. svcutil.exe <wsdl 파일 경로> /language:<사용할 언어>
    ex) svcutil c:\temp\aaa.wsdl /language:C#
  3. 성공적으로 수행되면 클래스 파일과 output.config 파일이 생성된다.
  4. 클래스 파일을 프로젝트에 추가하고, output.config 파일의 내용은 web.config 파일에 추가하여 준다.
    output.config 에는 웹 서비스 호출에 사용될 endpoint 주소 등이 들어가 있다.
  5. 4에서 붙여넣은 내용 중에, <security> 항목 아래에 <transport clientCredentialType=”None”> 이란 항목이 있다. Client 인증서를 사용할 것이기 때문에, “None”을 “Certificate”로 바꿔준다.

3. 인증서와 함께 서비스 호출

이제는 Client 인증서와 함께 서비스를 호출하는 부분이다. 이 부분은 소스에서 몇 줄만 추가해주면 된다.
– 해결방법 1의 경우

// 웹서비스 객체 생성
MyWebService.Service1 s1 = new MyWebService.Service1();
// 로컬 컴퓨터의 인증서 보관함에 접근한다. 위에서 인증서를 로컬 컴퓨터에 저장했음을 기억하자.
X509Store localStore = new X509Store(StoreLocation.LocalMachine);
localStore.Open(OpenFlags.ReadOnly);
// 로컬 보관함에서 사용할 인증서를 찾는다. 여기서는 이름을 사용했다.
X509Certificate2Collection certs = localStore.Certificates.Find(X509FindType.FindBySubjectName, "MyClientCertName", true);
if( certs.Count > 0 ) {
    X509Certificate2 cert = certs[0];
    s1.ClientCertificates.Add(cert); // 인증서를 웹서비스 객체의 Client 인증서에 추가한다.
}
// 서비스 호출
s1.method1(param1, param2);

– 해결방법 2의 경우

// 웹서비스 객체 생성
MyWebService.Service1 s1 = new MyWebService.Service1();
// 사용할 인증서를 찾아서 객체에 추가해준다.
s1.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, "MyClientCertName");
// 서비스 호출
s1.method1(param1, param2);

이제 실제로 프로그램을 실행해 서비스 호출 결과가 잘 오는지 확인하면 된다.

Categories
일상과 생각

연애의 역설

혼자인 사람은 혼자라서 외롭지만 하나의 완성된 존재다.
연애 중인 사람은 둘이 하나가 되었기 때문에,
떨어지면 더 부족한 존재가 되어버린다.
좋아하는 사람을 더 오래 만나기 위해서는 조금 덜 좋아하는 때도 필요하다.
좋아하니까 덜 좋아해야하는 그런 상황.

Categories
문화생활(Culture) 책(Book)

[책] 여행가이드북 거꾸로 읽기

여행가이드북 거꾸로 읽기(Touriste professionnel)
여행가이드북 거꾸로 읽기(Touriste professionnel) / 이미지 출처: 교보문고

여행을 갈 때 한 번씩은 꼭 보게 되는 여행가이드북. 한 나라의 역사, 문화, 쇼핑, 맛집까지 다양한 내용을 두루 담고 있는 가이드북을 보면, 이 책을 쓰는 작가들은 어떤 사람들인지 궁금해지기 마련이다. 여행을 좋아하는 것만으로도 여행가이드북 작가가 될 수 있는걸까? 여행가이드북 작가의 모든 것을 알려주는 책이 여기 있다. 저자인 뱅상 누아유가 자신이 여행가이드북 작가가 된 과정부터 책을 쓸 때 사용하는 팁과 경험들이 재밌는 문장들로 쓰였다. 읽으면서 몇 번이나 웃었는지 모르겠다.
책을 다 읽고 나면 여행가이드북을 믿을 수 없게 되는건 아닐까? 싶었지만 저자는 나름의 비상구를 마련해 두었다. 가이드북을 쓰기 위해 열심히 노력하는 사람들이 있다는 점을, 그 사람들이 어떤 노력으로 가이드북을 썼는지 자세히 알려줌으로써 독자들에게는 가이드북을 더 잘 읽는 법을, 같은 작가들에게는 응원의 메시지를 보내고 있었으니까.

Categories
사진

세 가지 표정의 하늘

15일 광복절의 하늘은 세 가지 표정을 한 번에 보여주려는 듯한 하늘이었다.

20130816-090021.jpg