C# WPF 프로젝트 구조 및 개발에 대한 멘토링, 코드리뷰에 대한 고민

안녕하세요, C# FA쪽에서 WPF를 통해 SI를 진행하고 있는 1년차 개발자입니다.

프로젝트를 하며 사수가 정해져 있지는 않고 다른 동료 및 선배님께 프로그램의 구조나 Thread로직 등에 대해 물어보며 진행하고 있는 상황입니다.

새로운 프로젝트를 진행하며 다음과 같은 고민이 있습니다.

  1. 유지보수와 프로그램 안정성을 위해 개발 문화 및 프로젝트 구조가 올바른 방향으로 잡혀나가고 있는지?
  2. 전체적으로 코드리뷰를 받아본다면 어떤 점을 더 채워 나갈 수 있는지 알거같은 느낌이지만 비용, 멘토링을 찾지못함
  3. WPF를 사용함으로 윈도우 프로그래밍에 대한 부분을 더 깊게 봐야 하는 건지?

JAVA, Python, JS 등 웹에 관련된 멘토링은 검색해도 바로 나오고 점점 늘어나는 추세지만 C#은 그런 멘토링을 찾아볼 수 조차 없더라구요, 있어봤자 유니티? 혹시 이와 관련된 고민이 있을 때 어떻게 해결하셨는지 아니면 좋은 멘토링 사이트나 강의가 있는지 여쭤보고 싶습니다.

멘트링을 찾아본거로는 다음과 같습니다.

  • F-lab : C# 없음
  • 인프런 : 프로그램의 구조보다는 C#기초만 다룸
  • 패스트캠퍼스 : 유니티만 있음
  • 숨고 : 다양한 고수를 추천해준다곤 하는데 아직 해보진 않음
9개의 좋아요

저는 사수나 팀원들의 도움을 받을 수 없는 환경에서 닷넷을 시작했는데, 구글링으로 그 때 그 때 필요한 코드만을 찾다가 MVVM 패턴에 대해 다루는 블로그 아티클을 통해 MVVM 패턴을 알게 되면서 이후로는 좀 더 거시적인 프로그래밍 방법론으로 분야를 넓혀 공부하고 있습니다.

1의 경우 각자 처한 환경이 다르고, 회사의 개발 문화가 다르며, 프로그램의 구조가 다르기 때문에 정답이 없는 문제라고 봅니다. 가령 다형성을 염두에 두고 설계를 한다면 코드 결합성을 낮추고 유연한 개발을 돕는다고 하지만, 그 다형성을 구현하는 방법만 놓고 보더라도 개발자별로, 프로그램의 목적별로 다를 수밖에 없습니다. 사실 괄호를 어떻게 열고 닫느냐만 가지고도 사람마다 취향이 갈리니 당연한 문제라고 봐야겠죠.

따라서 기본적인 프로그래밍 방법론을 토대로 많은 코드나 아티클을 찾아보면서 본인이 스스로 잡아나가는 게 좋다고 생각합니다.

MVVM 패턴을 예시로 들면 뷰와 뷰모델, 모델을 분리한다는 원칙은 동일하지만 어떤 방식으로 놓고 분리할 것인지만 해도 사람들마다 차이가 있습니다. 또, 결합성을 낮추기 위해 프로젝트 구성 요소를 별도의 어셈블리로 철저히 분리하는 사람이 있는 반면, 동일한 어셈블리 내에서 분리하거나 경우에 따라서는 효율적인 프로그래밍을 위해 오히려 결합성을 본인만의 적정선까지 올리는 경우도 있습니다.

아티클도 코드만 복붙해 단순히 어느 기능을 하는 코드만 알려주는 아티클이 있는 반면, 코드 자체보다는 좀 더 방법론적인 목적으로 접근하거나 코드에 작성자 본인의 코멘트를 정성스럽게 곁들인 아티클도 있습니다. 이런 아티클에는 그 사람의 생각이 담겨 있습니다. MVVM 패턴에 관한 아티클이 있다고 치면, 기본적인 샘플 코드와 MVVM 패턴에 대한 본인의 생각이 첨부된 아티클은 이 사람은 MVVM 패턴을 어떤 식으로 접근하고 있는지에 대해 많은 영감을 줍니다. 커뮤니티에서 질문을 작성하거나 토론에 참여해 보는 것도 다른 사람들이 어떻게 생각하고 있는지 알아보는 것에 도움이 됩니다.

최대한 많은 코드를 보고, 많은 아티클을 보고, 커뮤니티 활동도 많이 하면서 이 사람은 왜 이렇게 설계했는지, 어떤 방식으로 접근하고 있는지에 대해 고민하다 보면 결국 본인에게 알맞는 정답을 찾을 수 있을 거라고 믿습니다.

8개의 좋아요

@루나시아 좋은 글 감사합니다. :smile:
공감이 정말 많이 가네요. 질문자님 뿐만이 아니라 많은 분들에게도 읽혔으면 좋겠네요.

저도 잘 읽고 갑니다.

5개의 좋아요

궁금해하시는 내용은 특정 언어에 종속된 내용은 아닌 것 같습니다.

클린 아키텍처 등 소프트웨어 구조와 설계의 원칙에 대한 관련 책을 구입해서 보시는 것은 어떨까 합니다.

클린아키텍처로 검색하면 관련 도서가 조금 검색이 되네요.

그 중에 평이 좋은 책을 구입해서 보시는 것을 추천합니다.

6개의 좋아요

요즘 시간이 조금 비는데 제가 했던 MVVM에 대한 경험을 좀 나눠 드리고 싶네요.
코드 공유 가능하시면 개인 쪽지 부탁드려요~

7개의 좋아요

먼저 본인의 경험담을 알려주셔서 감사합니다.

저도 현재 루나시아님처럼 프로젝트를 진행하며 그때 그때 찾아가며 필요한 방법으로 진행하는 중입니다.
조금 다른점이 있다면 동료들과 함께 찾아가는 중이란 점이 다를 수 있겠네요
스스로 찾아가다보니 그저 작동만하는 프로그램이 만들어지는것 같아 걱정입니다.

말씀해주신대로 다양한 토론과 커뮤니티 활동, 다른 프로젝트를 많이 보는게 중요한 것 같습니다.
이 사람은 왜 이렇게 설계했는지. 라고 하셨는데 설계한 부분을 보려면 어떤 기획 블로그나 프로젝트를 참고 해야할텐데 이런부분은 github나 블로그를 통해 보셨을까요? 추천해 주실만한 MVVM방식으로 개발된 프로젝트가 있으실까요?

3개의 좋아요

이런 고민이 없을 때 그저 좋다고 하는 책이라 읽어 본 적이 있습니다.
이 시점에서 다시 읽으면 좋을 것 같네요 감사합니다.

4개의 좋아요

@nyjin

네 쪽지 드리겠습니다!

4개의 좋아요

깃헙에서 mvvm 또는 mvvm-pattern을 주제로 한 레포를 검색해 보시면 됩니다. mvvm은 MVVM 패턴을 지원하는 라이브러리가 올라오기도 하기 때문에, 순전히 MVVM 패턴을 차용한 프로젝트만 확인해 보고 싶으면 mvvm-pattern이 수고스러움은 덜할 것 같습니다.

혹은 닷넷데브의 튜토리얼, 팁, 강좌내가 만들었어요 탭으로 올라오는 WPF 프로젝트들은 대부분 MVVM 패턴을 차용하고 있으므로, 이를 참고해 보셔도 좋을 것 같습니다. 궁금하면 바로 댓글로 질문하고 답변하는 것이 가능하니까요! 특히 MVVM 이해를 돕는 목적으로 만들어진 것들도 많아서 MVVM에 익숙하지 않다면 많은 도움이 될 겁니다.

또한 프로젝트는 아니지만, 제가 자주 보는 국내 블로그 몇 곳을 첨부합니다. MVVM이라는 것을 처음 접했을 때 MVVM 패턴을 이해하고 제 나름대로의 관점을 정립하는데 많은 도움이 되었습니다.

  1. +++ ㅇㅅㅇ? +++ : 네이버 블로그
  2. https://kaki104.tistory.com/
  3. https://blog.arong.info/
6개의 좋아요

평소 자주 들르던 블로그들이군요 ㅎㅎ
깃허브에서 찾아 볼 생각은 못했었는데 해당 프로젝트들을 살펴봐야겠습니다.

감사합니다.

3개의 좋아요

만나서 반가웠습니다.

말씀 나눴던 어플리케이션 구조를 간단하게 데모로 만들어 봤습니다.
개발하시는데 도움이 되면 좋겠습니다.

다음의 시나리오들이 포함되어 있습니다.

  • SplashViewModel 에서 AppBootstrapper를 활용한 주요 컨트롤 초기화(의도적인 Sleep이 있습니다.)
  • Splash → Main으로의 윈도우 전환
  • MainViewModel 에서 초기화된 컨트롤 참조
  • DialogService 서비스를 활용한 SettingViewModel 처리
  • 앱 설정을 관리하는 Repository와 AppSetting 도메인 모델 연결

미팅할 때에도 말씀드렸지만 엔터프라이즈 어플리케이션에서 IoC를 잘 다루시면 느슨한 구조를 유지하시는데 많은 도움이 됩니다.

13개의 좋아요

와 생각도 못했던 선물을…ㅠㅠ
만들어주신 프로젝트 잘 살펴보며 열심히 공부하겠습니다! 감사합니다

4개의 좋아요