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)
4770누구게~...10/15/201611576세도나 [1]
4769spow...10/13/201610393올리시는 게시물에 '좋아요'를 선택할 수 있도록 해주세요 [3]
4768브라운10/11/201612137질문 하나만 드려도 될까요 [4]
4767암호군10/4/201616504c# aes 128 암복호화 관련 문의드립니다. [3]
4766김신철9/29/201611346Visual Studio 2015에서 .net 3.5로 c# 6.0 사용시 문제점에 대해서 궁금합니다. [1]
4765spow...9/23/201610781참조를 통해 속성의 값을 변경하고 싶을 때 우아한 코딩 방법이 있을까요? [2]
4764지현명9/22/201612345Visual Studio 2008 c#에서 추가된 솔류션의 디버깅이 안걸립니다. [2]파일 다운로드1
4763송기태9/20/201611099안녕하세요! 질문이 있어 문의드립니다! [1]파일 다운로드1
4762김신철9/20/201612232Visual Studio 2015 마이그레이션 후 빌드 및 에러 문제.. 도와주세요~ [2]
4761JH9/19/201612638WPF로 Viewbox 사용 시 폰트 크기 일정화 여부 [1]
4760초보9/18/201612573유닉스서버(HP)에서 C# 서버 프로그램 실행 가능 한지요? [1]
4759dev009/16/201613369Queue out of memory [3]
4758임기성9/12/201612944MS오피스 워드 64비트에서 32비트 COM개체 사용방법 문의 [2]
4757조영준9/7/201610998DLL 후킹과 관련해서 질문이 있습니다. [2]
4756Kim ...9/6/201613057drag&drop 관련해서 문의 드립니다. [6]
4755stel...9/4/201611902안녕하세요! 윈도우 창에 관련되서 질문입니다.! [3]
4754초보개발자8/25/201610766UWP 의 적용 범위에 대해서 어떻게 생각하십니까? [1]
4753조호찬8/23/201615656sybase 의 한글 가져오기 문의 [7]
4752타미플루8/19/201611281IIS 로그에서 time-taken이 0이 나올수 있나요? [4]
4751김민석8/16/201611473가변크기의 구조체를 SendMessage로 타 프로세스에 전송하는 방법이 있을까요? [1]
4750강준8/13/201613047ElementHost Memory Leak 현상 (아래내용과 동일 첨부 추가^^) [5]파일 다운로드1
4749강준8/11/201612066ElementHost Memory Leak 현상 [6]
4748Bere...8/3/201610933그냥 생각이 들어서 여기 글 써봅니다. [1]
4746힘찬도약8/2/201611197[asp.net] local에서 cookies값이 읽혀지지 않는 경우 [1]
4747힘찬도약8/3/201611934    답변글 [예제 첨부]: [asp.net] local에서 cookies값이 읽혀지지 않는 경우 [3]파일 다운로드1
4745힘찬도약7/27/201612028.NET 자식창 데이터를 부모창에 전달시 오류 질문드립니다. [4]파일 다운로드1
... 31  32  33  34  35  36  37  38  39  40  41  42  [43]  44  45  ...