Microsoft MVP성태의 닷넷 이야기
글쓴 사람
부탁드립니다
홈페이지
첨부 파일
 

/*참고로 제가 개인적인 이메일은 안받는다는 글을 이제봐서 이메일도 보냈습니다 죄송합니다
 *그래서 여기에 다시 썻습니다
 */
저는 현재 학생이고 아직 확실히 어떤분야의 개발자가 될지 정하지 못하였습니다

개발경험이라곤 자바 웹 어플리케이션 한개와 Win32API를 이용한 파일 암,복호화프로그램을 만든 경험 밖에없습니다

우연히 C++/CLI 와 WPF 관련 정보를 찾던중 선배님의 웹사이트를 발견하게 되어 몇가지 제가 윈도우계열 데스크탑
어플리케이션 제작시 가젔던 의문을 글을씁니다

1. 핵심로직이 순수 C11 표준에 맞추어 작성되었을경우(물리엔진 이나 DB엔진이라 가정) 이걸 GUI만 WPF나 forms같은 닷넬 계열 기술로 개발해서 서로 결합시키는게 가능한가요?(핵심 로직 그대로 타 플랫폼에 GUI만 OS별로 입히는게 가능한지)

-이부분은 여러곳에 대부분 순수 C++코드를 DLL로 만들어 GUI프로젝트에서 외부 호출을 통해 처리하라 하더라구요 선배님도 그렇게 생각하시는지...

2. 보안 관련 모듈 개발시 시스템콜을 많이 사용해야 할경우에도 C#으로 충분히 개발이 가능한가요??(ex: 화면 캡처방지,인쇄 방지, 파일 다른 디바이스에 R/W 방지 메모리값 변조 방지등..)

-C#언어 특성상 자바 처럼 C언어보다 윗레벨의 언어 같기에 메모리 값 변조 방지 같은 모듈을 만들때 C#으로 충분히 구현가능한지....

원래는 윈도우 계열은 Visual C++ 만 하려고했지만
GUI라던가 개발 편리성, 최신기술 같은 이유로 닷넷책을 구매하여 공부해보려하는데 위 4가지 의문이 인터넷에 질문을 올려도 풀어지지가 않더라구요

선배님의 사이트를 보니 경험이 풍부하신거 같아 질문을 드립니다








[최초 등록일: ]
[최종 수정일: 9/15/2014]


비밀번호

댓글 작성자
 



2014-09-15 04시42분
1. C11 표준으로 작성한 경우 DLL(리눅스의 경우 so)파일로 잘 작성한다면 GUI만 WPF/WinForms 닷넷으로 개발하는 것이 가능합니다. 참고로, 리눅스를 위한 모노의 경우 WPF를 지원하지 않으므로 WinForms만이 가능합니다. C++/CLI를 경유하는 경우에는 C++/CLI가 모노 쪽에는 아직 없으므로 그것 역시 윈도우만 가능합니다.

주의할 것은, 가능하다는 것과 완벽하다는 차이점을 혼동하시면 안됩니다. 충분히 프로토타입을 만들어보면서 정말 자신이 원하는 레벨로 잘 되는지 꼭 확인하고 결정하는 것이 중요합니다. (HTML5 같은 수준조차도 웹 브라우저끼리 약간의 차이를 보이는 것을 감안할 때 아무리 C언어와 Mono가 다중 플랫폼을 지원한다고 해도 역시 조금 씩의 차이점이 존재하는 것은 감수해야 합니다.)

2. 시스템콜을 사용하는 정도는 C#으로 개발이 가능하지만, 보안 모듈의 핵심 모듈인 NT Legacy driver같은 경우에는 C#으로 만들 수 없습니다. driver를 이용하는 클라이언트 수준의 프로그램은 가능합니다. API 후킹의 경우에도 C#으로는 대부분 불가능에 가까울 것이므로 그 부분은 C/C++ 언어로 만드는 것이 권장됩니다.

혹시 더 궁금하신 것이 있으시면 언제든 덧글 남겨주세요. ^^


정성태
2014-09-16 04시27분
[와클라스쩌시네요] 와ㅋㅋㅋ 여태 많은 국내외 커뮤니티에 질문했었는데 이렇게 명확히 이해되는 답변은 정말 와 감탄이 절로 나오네요ㅋㅋㅋ 와 클라스가 롤모델급이시네요 저 그럼 몇까지 더질문드릴께요

1. 유니티(게임엔진)같은 os별로 배포되는 프로그램들은어떻게 만든건가요? 그러니까 제가듣기론 같은 int나 구조체라도 os마다 실제 차지하는 메모리크기가 다르다는걸로 알거든요...
또흔히 포팅이라는 과정을 거친다는데 이게 코드가 완전 다른건가요? 아니면 전처리기로 분기주어서 컴파일을 배포대상 플랫폼마다 다르게하나요?

2. mysql workbench 같은 gui프로그램은 네트워크통신이니 이해가 가는데 유니티는 제가 또 알기로 네트워크통신이 아닌데
물리엔진, 광원엔진등 핵심로직이랑 gui랑 어떻게 데이터를 주고받는건가요?(os별로 gui랑 엔진이 다배포되는데 이게 아예 각각 os별로 프로젝트를 만든꼴인지 어느정도 코드재사용이 된건지...)

3. 바이너리 파일 입출력시 파일구조(?)는 네트워크 프로토콜 설계하듯하면 되는건가요? 읽는건 그냥 몇바이트씩지정해서 읽는다 하지만 통신까진안할꺼라 객체직렬화안쓰고 메모리에 존재 하는 구조화된 데이터를 파일로 쓰고 싶을땐 어떻게 해야되는지 감이안와서요...

와 진짜 다른글도 보면 볼수록 최최최최최고급 개발자신듯 존경합니다
[guest]
2014-09-17 04시08분
1. 유니티는 개별 게임 플레이어가 OS 별로 배포되고 있기 때문에 가능합니다. 유니티가 지원하는 C#의 경우에는 모노에 얹어 가기 때문에 가능하고. (만약 모노가 없었다면 리눅스 쪽의 유니티 게임 플레이어는 C#을 지원안했을 것입니다. 또는 유니티 쪽에서 모노 비슷한 것을 만들었을 수도 있겠고.) int 같은 자료형은 다중 플랫폼 지원시에 헷갈릴 수 있는데요. 닷넷/모노의 경우에는 int는 32/64비트 플랫폼 상관없이 4바이트입니다. C/C++ 언어처럼 가변적이지 않습니다. 포팅이 되는 경우 플랫폼 의존적인 코드만 없다면 그 외의 코드는 동일합니다. 닷넷/모노는 VM 개념을 도입하고 있기 때문에 중간 언어로 번역되고 JIT 컴파일 시에 대상 기계어로 바뀌는 차이만 있습니다. (물론, 플랫폼 의존적인 코드가 있다면 전처리기 구문을 넣는 것이 그나마 관리면에서 편하겠지요!)

2. 유니티 플레이어는 위에서도 말한 것처럼 각각 OS 별로 만든 것입니다. 제가 게임 쪽은 잘은 모르지만 물리엔진/광원엔진의 핵심로직이 특별하게 플랫폼 의존적이지 않다면 공통 모듈로 재사용하지 않을까 생각됩니다. (제가 알고 있기로는 유니티 플레이어는 모두 C/C++로 제작되었을 것입니다.)

3. 말 그대로 바이너리 파일 입출력을 하시면 될 것 같은데요. 대용량이 아니라면 어느 것을 쓰든 크게 성능에 문제는 없을 것이므로 유연성 높은 구조로 선택하시면 되겠습니다.

(마지막으로, 닭살 돋는 문장은 조금만 자제해 주시기 바랍니다. ^^ 정말로, 솔직하게 말하자면 저보다 더 뛰어나신 분들이 많습니다.)
정성태
2014-09-17 09시32분
[와겸손까지...] 감탄만 나올뿐입니다
결정했습니다 저 선배님 책살께요ㅋㅋ 책도보니까 닷넷 버전별로 나열되있는게 너무 좋네요
저혹시 시큐어코딩라던가 MS 빌드, 컴파일러 옵션등 에도 해박하신가요??
우연히 ASLR에 대해 알게되서부터 흥미가생겨 관련 자료 검색중이라ㅋㅋ
[guest]
2014-09-17 10시45분
여기서 이러시면 안됩니다. ^^; 저번에도 이와 유사한 덧글이 달린 것을 작성자에게 말씀드리고 하루 정도 있다 덧글을 삭제했습니다.

ASLR의 경우에는 닷넷은 굳이 필요하지 않습니다. 닷넷의 메서드는 JIT 컴파일 시에 메모리의 상황에 따라 임의로 배치되기 때문에 C/C++ Win32 DLL에서 겪는 문제가 발생하지 않습니다. 아마 최근 Visual C/C++의 경우 기본 옵션값으로까지 바뀌었던 것으로 기억합니다. 따라서 그냥 누리시면 되고 크게 신경쓰지 않아도 되는 부분입니다. (그냥 좀 흥미로운 정도라고 해야겠지요.) 저도 예전에 잠깐 테스트 해본 정도입니다.

눈으로 확인해 보는 ASLR 기능
; http://www.sysnet.pe.kr/2/0/545
정성태
2014-09-17 02시47분
[꾸벅(__)] 덕분에 많은걸 배웠습니다
혹시 여기서 배우고 제가 익힌것들 정리해서 제 블로그에 포스팅 해도 되나요?
출처는 꼭 표시하겠습니다

[guest]
2014-09-17 03시10분
물론입니다. ^^
정성태
2014-09-17 05시41분
[나인틴헌드레드] 허락해주셔서 감사합니다
[guest]
2014-09-25 02시08분
[나인틴헌드레드] 선배님 안녕하세요 또 의문이 생기는게 하나 있어 질문드립니다
객체지향에서 멤버변수를 private로 하는게 안전하고 추천하는 방법이라고 흔이 그러는데
멤버변수를 private으로 하면 바로 객체.멤버변수=값으로 대입이안되고 멤버함수로 getter setter 를 만들어 멤버변수를 조작하잖아요??
그러면 치트오매틱같은 메모리 값 직접적인 변조도 해당 변수가 private이기 때문에 바로 값이 조작이 안되나요?

만약 아니라면 개발자가 코드작성할떄만 private이 접근에대해 보안성을 발휘한다는것인데 왜 추천하는것인가요???
[guest]
2014-09-25 04시24분
C#의 프로퍼티는 메모리에 값이 써지기 전/후에 대한 get/set을 지원하는 것이 아닙니다. 그것은 코드이기 때문에 실행해 주어야 하므로 메모리 변조를 막을 수는 없습니다. getter/setter를 만들어 주면 정보은닉에 대한 효과와 함께 해당 내부 변수에 대한 접근을 단일화하기 때문에 유지보수를 좀더 쉽게 할 수 있습니다.
정성태
2014-09-25 08시54분
[나인틴헌드레드] 아그리구 또 property 라는게 getter, setter 멤버 메소드가 정의되있는 멤버변수 또는 필드를 말하는건가요
아니면 getter, setter 멤버 메소드를 말하는건가요??
[guest]
2014-09-25 10시16분
[나인틴헌드레드] 아감사합니다
그런데 그렇게되면 그정보은닉이라는게 개발자대상으로 정보은닉이 되는거 아닌가요? 공격재대상이아니라...
[guest]
2014-09-26 10시23분
C#의 프로퍼티는 getter/setter를 자동 생성해 주는 구문을 말합니다.

정보은닉은 객체지향 프로그래밍 레벨에서의 개념일 뿐, 그것이 메모리 레벨의 보호를 의미하는 것은 아닙니다.
정성태
2014-09-26 04시00분
[나인틴헌드레드] 아 그렇군요ㅋㅋㅋ 그냥 쓰던것도 다시 알아가네요 감사합니다
[guest]

... 31  32  33  34  [35]  36  37  38  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
4986익명5/14/201810749비주얼 스튜디오 wpf 프로젝트에서 어떻게 하면 exe파일과 실행에 필요한 파일들을 분리해서 정리해서 디렉토리로 묶을 수 있을까요? [4]
4985대구개발자5/7/20188349새로운 폴더만 "이름 없는 파일" 오류 [1]
4984안중언5/6/20189016교재 143page [1]
4983익명5/4/201818467(wpf) 다른 컴퓨터에서 사용하면 자꾸 ('CefSharp.Core.dll' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다)라고 떠요.ㅠㅠ [5]
4982Soul...4/27/20189421MFC ActiveX 컨트롤 안에 있는 C# ActiveX 컨트롤 포인터 얻기 [4]
4981대전박4/25/20188322WPF IValueConverter 를 구현해서 StaticResource로 사용할때요 [1]
4980대전박4/23/20189453WPF OS버전 따라 Style 적용이 안되는 프로퍼티가 있을수 있나요? [2]
4979초보개발자4/18/201813580C# 프레임워크 버전이 다른 DLL끼리의 사용 [7]파일 다운로드1
4977Soul...4/17/20188752WebBrowser 컨트롤 Script 통신 문제 [3]
4976맹가이버4/14/20189620윈도우 서비스 프로그램에서 응용프로그램 호출하는 법 [1]
4975lemo...4/11/201810437안녕하세요 네이버로그인관련 질문드립니다. [2]
4973홍길동4/6/20188536ebook 출간 계획은 없으신가요? [2]
4978홍길동4/17/20188291    답변글 [답변]: ebook 출간 계획은 없으신가요?
4972dwkim4/3/20189499EasyHook 관련 질문 [4]
4968최홍준3/30/20188244Windows 7 Credential Provider Android와 연동 [1]
4967이대희3/30/20189355비주얼 스튜디오 설치 워크로드 중에 ".NET Core 플랫폼 간 개발" 이건 뭐하는 것인지요. [1]
4965이대희3/30/20188685자마린 설치후 안드로이드 프로젝트 생성시 디자이너가 없다는 에러가 발생합니다. [3]
4969이대희3/31/20189035    답변글 [답변]: 자마린 설치후 안드로이드 프로젝트 생성시 디자이너가 없다는 에러가 발생합니다.파일 다운로드2
4970이대희4/1/20188832        답변글 [답변]: [답변]: 자마린 설치후 안드로이드 프로젝트 생성시 디자이너가 없다는 에러가 발생합니다. [1]
4963이대희3/29/20189367UWP 스터디를 위해 찰스페졸드 저자의 Programming Windows 6판은 어떠한지요? [1]
4962포플러3/26/20189593C# 응용프로그램 (Winform)에서 unhandledexception 발생시 프로그램이 죽는 현상 이외에 재부팅될 수도 있을까요? [2]
4966포플러3/30/20189252    답변글 [답변]: C# 응용프로그램 (Winform)에서 unhandledexception 발생시 프로그램이 죽는 현상 이외에 재부팅될 수도 있을까요? [1]
4961김민욱3/26/201810186레이더 뷰어의 구현 방법(이미지 확대 축소 관련) [2]
4960hurd...3/18/20189955OCX 관련한 질문을 드리고자 합니다. [1]
4959익명3/10/20189001교재 199page 델리게이트와 object를 이용한 범용 정렬 코드 [1]
4957멍멍이2/13/20189601System.Console - WriteLine함수의 제너릭 사용 [1]
... 31  32  33  34  [35]  36  37  38  39  40  41  42  43  44  45  ...