• 카테고리
    • 전체 글

    • 카테고리1
    • 카테고리2
    • 카테고리3
    • 카테고리4
  • 태그
  • 방명록

'분류 전체보기'에 해당되는 글 1249건

  • 2014.09.26 개발팀 내 암적인 프로그래머
  • 2014.09.23 C# Winform(WebBrowser Control) <--> Javascript 연동 3
  • 2014.09.15 [판매완료] k램 팝니다.
  • 2014.09.09 [판매완료] XBox 360 판매합니다.
  • 2014.09.08 [판매완료] 이번에는 PSP를 팝니다. 6
  • 2014.09.06 [판매완료] 스트라이다 팝니다.
  • 2014.08.30 Windows 8 Clickonce 문제
  • 2014.08.27 Esxi 에서 RAID 1으로 잡힌 HDD Rebuild 상태 확인하기

개발팀 내 암적인 프로그래머

기술자료 2014. 9. 26. 14:40

예전 개발자들의 대부분의 성향은 자신이 개발하는 것에 대한 책임감이 무척 강해서, 자신이 만든 소스들이 자신의 자식인양 애지중지 한적이 많았다. 그래서 자신의 코드 부분에서 버그가 발생되면 누구보다 앞장서서 수정하고, 전반적인 책임을 가지고 진행을 하는 모습을 많이 보아왔다.

그런데, 당시에는 Unix내 모듈단위 개발이라, 실제 컴파일하기 위한 Object 파일은 많아도 50개 내외였다. 물론 코드 라인 수는 많아서, 복잡하게 보이기는 했지만, 역할이나, 기능은 요즘 통합 시스템 로직에 비하면 매무 심플한 구조였다. 요즘은 하나의 시스템 내에서 동작되는 규칙은 매우 복잡해지고, 다양한 기능을 수행하다보니, 예전 처럼 1인 프로그래머로 개발하기에는 버거운 구조를 갖추게 되었다. 최소한 2~3인이 팀이 여러 개의 팀으로 구성되어 하나의 시스템을 구축하곤 한다. 그러다 보니, 점점 자신의 코드라는 개념은 서서히 사라지고, 버그는 모두 함께 해결해야 하는 로직적 버그가 많아지기 시작했다. 혼자 해결하기는 점점 어려워지고, 같이 협업해서 없애려고 노력한다.

그런데, 간혹 구세대 프로그래머처럼 자신이 손댄 코드들은 모두 자기 것이라고 판단하고 공유하지 않은 채 혼자만 안고 가는 프로그래머들이 종종 눈에 띈다. 이해는 할 수 있다. 이 코드들은 자신이 이해해서 구성/수정하면서 구축해왔고, 자신 밖에 모르기 때문에, 자신의 자리보전을 위한 중요한 무기가 될 수 있다고 생각하는지도 모르겠다. 점점 노쇠해가는 자신의 능력 대비 서서히 줄어가는 자신의 업무를 바라보면서 말이다.

개인을 바라보면 이해는 하지만, 이것이 팀 그리고 회사의 입장에서 보면, 매우 암적인 존재라는 사실이다. 들어가면 나오지 않는 블랙홀 같은 소스 저수지가 되어가고, 그 만큼 그 사람에게 의존은 하는데, 원하는 퀄리티는 나오지 않아, 매번 회사는 고객에게 욕을 먹는다. 퀄리티가 좋아도, 기한을 맞추지 못하는 괴이한 상황에 빠진다. 그렇다고, 인원을 충원해도 방법이 없다. 블랙홀에서 나오지 않는 코드와 기술은 후임자에게 전달되지 않으니까. 결국 남는 것은 자신에게만 쌓이는 일거리들 ( 유지보수, 개선 사업 등등 )이고, 빠르게 해소되지 않는 병목의 주요한 원인이 되버리는 것이다. 프로젝트는 이 개인에 집중하게 되고, 해결, 개선은 보이지 않게 되는 것이다.

냉정하게 바라보자. 결과적으로도 문제지만, 애초의 시작자체가 잘못되었다는 것을 확인할 수 있다. 마치 자신이 손댄 코드나, 자신의 기여한 코드는 자신의 코드이므로, 이 제품자체의 소유가 자신의 것이 되었다고 생각하는 그 자체를 말이다.

진짜 자신이 손댄, 기여한 코드는 자신의 것인가? 이 질문을 던지는 원인은 바로 그 소스코드들이 생긴 흐름 전체를 바라볼 때 생각을 해보도록 하자는 것이다. 먼저 그 소스코드를 만들 때, 자신의 돈과, 시간이 전부 들었는가? 부터 시작할 수 있다. 애초에 자신이 가진 돈을 가지고 자신을 고용하고, 자신의 개인적인 시간을 투자하여 개발했냐는 것이다. 대부분 회사 내 소속된, 팀에 소속된 경우에는 애초에 이 부분에 해당되지 않는다. 돈은 고객에서부터 나와 회사에서 지급된다. 그리고 온전히 자신만의 소스라고 말하기 어려운 것은, 소규모 1인 프로젝트와 같은 것이 아닌 이상, 1인 개발로 처음부터 끝까지 하는 프로젝트는 거의 없다는 사실이다. 대부분 선임자, 혹은 후임자가 함께 설계하고, 코딩을 하고, 같이 고민해서 해결하게 된다. 물론 일부 로직은 전부 자신이 짜기도 하지만, 제품 단위로 볼 때, 과연 제품 전체 자신만의 코드들로 가득 차 있냐는 것이다.  결국 당위성을 말하기 어렵다는 것이다.

혼자 문제 수정 및 개선 작업을 했으니 이제 내 제품이 되었다고 반론하고 싶은가? 그렇다면, 무엇을 근거로 수정하고, 개선 작업을 했다는 것인가? 만일 그렇다면, 해당 소스 코드 없이, 완전히 빈 프로젝트(솔루션)을 열어 지금 자신이 수정/개선하는 프로젝트를 비슷하게라도 만들어 낼 수 있을까? 애초에 이런 것이 불가능하다면, 온전히 자신의 소스라고 말할 수 없다는 것이다.

개발작업이나 개선작업은 쭉 수행해온 부분에 대해서 존중 받아야 되며, 그 기술에 대해서 인정해주어야 한다. 하지만, 그 소스와 기술은 홀로 안지 말고, 회사 구성원, 팀 구성원과 공유해야 한다. 자신의 기술을 뺏기는 것이 아니고 나눈다고 생각하도록 한다. 평생 그 프로젝트만 하면서 노닥거릴 생각이라면 모르겠지만, 자신의 직위와 급여가 오르고, 다양한 경험을 요구 받는 입장이면, 이제 과거에 만들었던, 개선, 수정 했던 프로젝트들은 같은 구성원에게 건네 주고, 새로운 업무에 뛰어들어 더 발전된 모습을 보여주어야 한다. (그냥 무턱되고, 왜 내 급여는 왜 안 오르냐고 따지지 말고 말이다. )

이번에 사내에 프로젝트 관리 솔루션을 하나 작게 구축했다. 개인적으로 사용하던 프로젝트 관리 솔루션을 통해 얻은 경험들을 기반으로 이번에 무료 솔루션 중, 이질감이나 관리의 편의성이 좋은 제품을 도입해봤다. 구축해보고, 테스트해보고, 내가 담당한 프로젝트를 등록해봤다. 사실 프로젝트의 성공적인 수행을 위한 관리라는 포커스 보다, 프로젝트 이력 관리라는 측면을 강조한 구축이라고나 할까…
구두로 형식적인 인수인계가 아닌 실질적인 히스토리를 공유할 수 있는 그런 공간 말이다.

제발 이제 이런 암적인 존재인 프로그래머들이 이런 솔루션 속에 녹아내리면서 암적인 유전자 변이가 좀 제 정신을 차릴 수 있도록 할 예정이다..(뭐 말기면 쳐내야 겠지만 )

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

C# Winform(WebBrowser Control) <--> Javascript 연동

카테고리 없음 2014. 9. 23. 16:07

출처 : http://tarotcrd.tistory.com/154

위의 출처에서 해당 글의 내용을 보고 참 도움을 많이 받기는 했는데, 가독성이 떨어지는데다, 해당 소스 부분을 직접 긁어 코드화 시킬 수 없어서 여기에 다시 정리해서 올린다.

Winform-WebBrowser Control을 이용하면, 웹의 내용을 그대로 띄울 수 있다.
그래서 WinForm과는 다른 유연하게 제공되는 표(Table)을 표현 할 수 있고, 각종 Form을 구성할 수도 있다.

그런데, 이런 웹 기반의 프로그램을 이런 저런 구성하다가 보면, 웹의 내용을 표출하는 것 뿐만 아니라, 웹에서 입력된 각종 값들을 WinForm에서 활용하고 싶을 때가 있다. 이 경우 Javascript를 통해 웹 상의 정보를 읽는 것은 가능한데, 이 정보를 WinForm에 어떻게 전달할까?

역으로, WinForm에서 특정 작업을 수행했는데, 이 정보를 WebBrowser Control을 통해 웹 상에 전달 하고 싶을 때는 어떻게 할까?

위의 질문에 대한 답을 아래에 제시할 수 있다.

Web(Javascript) –> WinForm(Webbrowser Control)

맨 먼저 할 작업은 웹에서 제공되는 정보를 winform에서 받아서 처리하는 방법이다.

웹에서 먼저 javascript를 구성하도록 한다.

<html>
<head>
	<title>Test Page</title>
	<script type="text/javascript">
		function submitToForm()
		{
			var textboxvalue = document.getElementById('text1').value;
			window.external.CallForm(textboxvalue);
		}
	</script>
</head>
<body>
	<form>
		<input type="text" id="text1" name="text1"></input>
		<input type="button" id="btn1" name="btn1" value="submit" onclick="submitToForm()"></input>
	</form>
</body>
</html>

HTML 소스 중, Javascript만 보면, 다음과 같은 코드가 있다.

window.external.CallForm(textboxvalue);

바로 window.external 부분이 핵심인데, window.external까지 쓰고, 그 뒤에 C# Winform 상에서 실행할 함수 명과, 값을 넘겨줄 때 사용할 파라미터를 건네면 된다.

이제 웹브라우저 컨트롤을 Windows Form에 넣고 다음과 같이 코드를 수정하도록 한다.

TestApp 라는 솔루션 내에 Form1이라는 Winform을 하나 생성한 뒤에, 디자이너 화면에서 webbrowser 컨트롤을 폼에다 넣으면 된다. 자동적으로 webBrowser1 이라는 변수가 생성이 된다.




자 이제 소스 부분을 열도록 한다. 그리고 using을 사용해서 다음 두개의 네임스페이스를 추가한다.

using System.Security.Permissions;
using System.Runtime.InteropServices;

Form1에서 Form Load 이벤트 핸들러를 생성한다. (Form1_Load 함수가 자동으로 생성된다.). 그리고 그 안에 다음과 같은 속성을 설정하도록 한다.

webBrowser1.ObjectForScripting = true;

이제 javascript에서 호출받을 함수를 만든다. 위의 Javascript에서 CallForm 이라고 만들었으므로, 여기서도 CallForm이라는 이름의 함수를 새로 만들어 추가하면 된다.외부에서 노출되어야 되기 때문에, 반드시 public으로 만들어야 하며, 파라미터가 있을 시에는 파라미터 갯수만큼 object로 변수를 만든다.

public void CallForm(object msg)
{
	string sMsg = (string)msg;
	{
		// 받은 msg 값을 가지고 처리하는 로직.
	}
}

사실 Javascript에서는 데이터 형(문자열, 숫자, 날짜 등등)에 관계 없이 무조건 쓸 수 있지만, C#에서는 그 형이 정해져야 한다. 그렇다고, Javascript에서 맞춰줄 수는 없다. 방법은 Javascript에서 파라미터를 받을 때, object로 받아, 그 값의 형에 따라 캐스팅을 하는 방법을 제시한다.

위의 수정 내용을 다 합친 코드는 아래와 같다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Security.Permissions;
using System.Runtime.InteropServices;

namespace TestApp
{
    [PermissionSet(SecurityAction.Demand, Name="FullTrust")]
    [ComVisible(true)]
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            webBrowser1.ObjectForScripting = true;
        }

        public void CallForm(object msg)
        {
            string sMsg = (string)msg;
            {
                // 받은 msg 값을 가지고 처리하는 로직.

            }
        }
    }

WinForm –> Web(Javascript)

이제 역으로 WinForm에서 webBrowser 컨트롤 내에 띄워진 Javascript를 실행하는 방법을 제시한다.
이 부분은 앞서 설명한 방법과는 다르게 webControl에게 시키기만 하면 된다.

먼저 Winform에서는 다음과 같은 코드를 작성한다.

private void ExecJavascript(string sValue1, string sValue2)
{
	try
	{
		webBrowser1.Document.InvokeScript("CallScript", new object[] { sValue1, sValue2 });
	}
	catch
	{
        }
}

보면 Javascript를 부를 때, Document.InvokeScript를 사용한다는 것을 쉽게 알 수 있다. 해당 함수의 첫번째 파라미터에는 호출 할 Javascript의 함수 이름을 넣고, 두 번째에는 object 배열로 해서 파라미터를 넘기면 된다. ( c#의 invoke를 사용해 본적이 많으면 쉽다.) 만일 파라미터가 여러 개인 경우에는 갯수에 맞게 개수를 늘려 배열로 생성해주면 된다.

자 이제 javascript 부분을 살펴보자. 다른 HTML 부분은 필요없고, script 섹션 내에 위의 설정한 “CallScript”라는 함수를 생성해주면 된다.

function CallScrript(va1, va2)
{
	alert('Val1 : ' + val1 + " / Val2 : ' + val2);
}

이제 WinForm에서 webbrowser1.Document.InvokeScript를 실행하면, webBrowser 컨트롤 내의 HTML Script가 실행 됩니다.

 

정리

Javascript –> WinForm을 호출하는 방식은 Javascript에서 ActiveX 를 호출하는 것과 비슷하다. 보안적인 이슈만 없다면, HtML 위에 작성된 javscript 호출하는 것 역시 간단하다.사실 webBrowser 컨트롤이 WinForm과 거의 한몸이기 때문에 이런 방식이 가능하다. 

스스로 예제를 작성해서 구성해 보면 좀 더 확실하게 이해 할 수 있을 것이다. 

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

[판매완료] k램 팝니다.

카테고리 없음 2014. 9. 15. 13:10

램 팝니다. 

이번에는 집에 묵혀져 있던 램들을 모두 처분합니다.

노트북용 

PC3-8500S 1G * 2

PC2-6400S 1G

PC2-5300S 1G * 2


데스크톱용

PC2-4200U 512M * 2

PC-3200U 1G

PC-2100U 256M * 2


문제는 램 중에서 노트북 램들은 테스트가 되었는데,

데스크톱 램은 테스트를 전혀 안해서... 사실 그냥 덤에 가까운 램들입니다.













728x90
저작자표시 (새창열림)
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

[판매완료] XBox 360 판매합니다.

카테고리 없음 2014. 9. 9. 11:56

X360을 판매합니다.

아주 오래된 제품입니다.


판매대상은, 

본체(내부 120G 하드 포함) + 아답터

패드 2개 ( 충전기는 달려 있는데, 의미 없습니다.)

VGA 케이블

랜케이블


필요하신 분은 인터넷 공유기(Level One 10/100짜리 유선 공유기)를 같이 드립니다.















728x90
저작자표시 (새창열림)
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

[판매완료] 이번에는 PSP를 팝니다.

카테고리 없음 2014. 9. 8. 18:32

종료!

 

스트라이다 판매 완료되었으므로, 이번에는 PSP를 판다.

역시 클리앙에 판다.

UMD : DJMAX 2, DJMAX Clazziquai, DJMAX Black Squre, 진삼국무쌍(케이스 메뉴얼 없음)

본체

로지텍 암 케이스

아답터

밧데리

4G 메모리

32M 메모리


사설 AS 받은 적있습니다. 아날로그 키가 작동하지 않는 문제가 발생해서, 수리를 했습니다.


>


>>>

>


···






728x90
저작자표시 (새창열림)
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

[판매완료] 스트라이다 팝니다.

카테고리 없음 2014. 9. 6. 13:56

거래완료!


가격은 18만원...

클리앙에서 팝니다.

5.1 버전입니다.

















728x90
저작자표시 (새창열림)
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

Windows 8 Clickonce 문제

기술자료 2014. 8. 30. 23:28

요즘 응용 프로그램을 만들면서, 이런 저런 배포 방법을 고민하다가,
한동안 등한시 했던 ClickOnce를 보았다.
일단 빌드 서버 없이, 웹 서버만 있으면 빌드에서 배포까지 다 되니 생각보다 편하다고 생각했다.

그런데, 오늘 내 태블릿 PC에다 내가 만든 메모 프로그램을 설치해서 사용하려는데, 실행이 안된다.
물론 보안적인 이슈로 인해 MS에서도 더 이상의 기술지원은 없다는 풍문을 듣기는 했지만, 이렇게 단칼에 거부될 줄은… 사실 구글 크롬도 ClickOnce 기술로 배포되고 있다고 알고 있다.

일단 Google과 같은데서는 잘 되는게, 내 쪽에 안되는 이유를 굳이 들자면, 응용프로그램 인증서가 없어서다. 배포자의 이름이 Unknown이니 배포시 악의적인 배포자인지 여부 때문에, 결국 실행이 안되는 문제다.

물론 편법으로 실행가능하게 하는 방법이 있긴 하지만, 이것은 역시 방법이 아닌 것 같다.

(사실 정식 인증서를 만들고 싶어도, 돈이 없어서 –_-;;; 파는 것도 아닌 것에 매년 돈 내가면서 제공할 의무는 없지 않은가?? )

나중에 시간될 때 다시 빌드서버나 구성해서, 자동으로 배포본 까지 만들 수 있도록 해야겠다.

이렇게 날 당황하게 만들 줄은 몰랐다…

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

Esxi 에서 RAID 1으로 잡힌 HDD Rebuild 상태 확인하기

기술자료/ETC 2014. 8. 27. 15:09

지금 Esxi 서버를 돌리고 있다.
그 중, 가장 중요한 데이터들을 담고 있는 NAS VM을 들고 있는 Esxi 서버의 HDD#1이 Fault 상태에 빠졌다.
서버 외관의 HDD에 녹색 불이 아닌, 주황색 불..

비상이라고 생각되어, HDD 교체를 했다.
문제는 HDD 교체 후의 상태인데, Windows 같은 경우 HP에서 제공하는 서버 감시 드라이버 및 응용 프로그램을 통해 Build 상태를 볼 수 있다. ( 디스크 관리자에서도 표시 )

그런데, ESXi 서버가 되니.. 난감.

어디서 확인할 수 있을까 했더니, Health Status에서 볼 수 있다.

물론 조건은 있다.

지금 돌리고 있는 서버가 HP DL360 G6 인데, 바로, HP 에서 커스터마이징한 ESXi 버전을 설치해야 한다.
만일 Dell 서버면 Dell 에서 제공하는 커스터마이징된 ESXi 버전이 설치되어 있어야 이런 확인이 가능하다.

물론 Windows처럼 Progress가 나타나면 좋을 텐데, 그렇지 않은 점은 좀 아쉽다.

Recovery.... 잘 끝나길 비는 수 밖에 없을 듯 싶다.

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

  • «
  • 1
  • ···
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • ···
  • 157
  • »
250x250

블로그 내에 소스 코드 삽입 이사온 기념 스킨도... RSS 전문 기능 비활성화 관련. 스킨 바꾸어 보았습니다. 서버 파일 정리 좀 했습니다.

«   2025/12   »
일 월 화 수 목 금 토
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

것 Azure Buscuit twi2me 협업 me2dayzm 수 인터파크 MOSS 2007 WSS 매뉴얼 moss Visual Studio java me2photo 친구 개발환경 Tutorial 지름신 블로그 SharePoint me2sms 비스킷 windows Google Apps Engine 좀 오류 e-book 2010 불만

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015-2025 Socialdev. All Rights Reserved.

Copyright © 2015-2025 Socialdev. All Rights Reserved.

티스토리툴바