안녕하세요. 명월입니다.
이 글은 프로젝트 설계에 대한 글입니다.
참 오랫만에 글을 쓰는 것 같습니다. 최근 개인적인 일로 여러가지 일이 있어서 블로그 글을 게시하지 못하다가 다시 시작하려하니 어디서부터 해야할 지 모르고 글을 올리지 못했네요.
아직 블로그 글에 부족한 것이 많아서 여기저기 수정할 것이 엄청 많고 엄두도 못내고 있다가 최근 재미있는 글들을 보고 이걸 주제로 다시 시작해야 겠다 생각하고 글을 올리게 되었습니다.
최근에 본 글에 초급 개발자, 중급 개발자, 고급 개발자를 구분하는 글을 보았습니다.
저는 한국 개발 세계에서 벗어나서 외국에서 여기저기 일한지도 벌써 10년이 되었네요.. 사실 한국에서의 경력은 2~3년 밖에 없습니다.
제가 한국에 있었을 때도 그런 구분이 있었나 싶은데.. 최근에 3~4년까지는 초급 개발자.. 5~10년은 중급, 10년이 이상은 고급으로 구분하더라고요..
왜 이런 구분이 있는 지는 솔직히 잘 모르겠으나 개발 실력이나 능력이 경력과 무슨 상관 관계인지 솔직히 잘 모르겠네요..
물론 실력이 경력이 올라갈 수록 좋아지는 건 맞기는 하지만 현재 제가 순수 사회에서 일한 경력만 11년차.. 올래 넘어가면 12년차네요..(학교 다니면서 쌓인 경력까지 하면 한 14~5년차 되네요..)
제가 11년차라고 해서 3~4년차들 개발자보다 월등히 잘한다고 절대 말할 수 없습니다. 경력이 적은 개발자 분들도 많은 이론과 설계 경험을 가진 친구들이 많더라고요.. 그래서 제가 경력이 많다는 이유로 경력이 적은 개발자들을 무시할 수는 없습니다.
그런 분들한테도 분명히 배울점도 많습니다. 그래서 저는 왜 이런 구분이 생기는 지는 모르겠습니다.
이런 구분이 급여나 연봉과 관계가 있을 듯 싶은데, 본인이 만든 상품(프로그램)이 수익이 좋으면 돈 많이 받는 거고 아니면 덜 받는게 맞습니다.
물론 대다수는 본인이 설계하기 보다는 누군가 설계한 것을 커스텀 마이징 또는 추가 개발이 대부분일 것이라고 생각됩니다. 사실 이런 포지션은 급여나 연봉을 많이 받기는 힘들죠...
그래서 개발 할 때, 프로그램 코딩만이 아닌 프로그램 프로젝트를 설계해야 합니다.
프로젝트 설계라고 해서 뭐 크게 대단한 것 없습니다. 대부분 소프트웨어 공학 등으로 이론적으로 정의되어 있고 내가 만들 프로그램에 대해서 맞는 형태를 채택해서 사용만 하면 됩니다.
제가 글을 쓰기 위해서 여러가지 자료 조사를 하려고 구글링을 해 봤는데.. 생각보다 이런 류의 글은 많이 없더군요. 거진 프로그램 코딩에 대한 글이 많고...
그래서 딱딱한 이론적인 글보다는 순전히 개인적인 경험에 의한 글을 작성해 볼까 합니다.
먼저 개인적으로 프로젝트 경험은 처음 CS프로그램(Server - Client 기반) 프로그램으로 메인은 C/C++에서 서브로 C#를 주로 사용했습니다.
예전에는 CS프로그램 개발건도 많았으나 최근에는 전무하네요... 웹 개발자로 아예 포지션을 바꾸어서 그런가..
게임 프로그램도 예전에 살짝 개발해 본 적이 있습니다만 게임은 특성상 개발자가 설계가 힘들고 게임은 거의 따로 기획하고 설계하는 사람이 있네요. 물론 출신은 개발자이겠지만...
게임이라는 것은 아무로 최적화가 좋고 프로그램을 잘 만든다해도 재미가 없으면 의미가 없잖아요.. 또 최근 게임의 규모가 예전처럼 개발자 한 두명이 만들 수 있는 수준이 훨씬 넘어섰기 때문에 디자인도 신경써야 하고 유저 학습이던가 여러가지 신경쓰는 부분이 많이 있습니다.
그래서 직접 코딩하고 설계하는 개발자가 아닌 따로 게임을 기획하고 설계, 운영하는 사람이 있을 거라 생각됩니다.
현재는 웹 개발자로 활동하고 있습니다만, 웹은 일단 html 태그만 넘기면 브라우저가 드로잉을 하기 때문에 서버 개발만 신경쓰면 되는 것이니 보통 개발자가 설계, 개발을 많이 합니다.
웹이라는 것은 네이버같은 검색 포털 사이트도 있습니다만, 회사 내부에서 관리나 업무 공유를 위해 혹은 회사 간의 정보 공유를 위한 포털 사이트를 만드는 것이 대부분입니다.
이러한 프로그램을 만들기 위해서는 전체적인 업무를 파악하는 것도 중요합니다만 프로그램을 어떻게 만들고 데이터를 어떻게 관리하는 것도 꽤 중요합니다. 그런 의미에서 프로젝트 설계가 필요합니다.
이러한 프로그램을 만들기 위해서는 먼저 공정을 생각해야 하는데, 대표적인것이 워터폴 개발 방식과 애자일 개발 방식이 있습니다.
사실 프로그램 공정은 여러가지가 있는데 다른 것들은 장점이 있으면 단점 또한 확실히 있기 때문에 보통은 워터폴과 애자일 방식 중에 둘 중 하나를 채택합니다.
이러한 공정을 생각하면 인원을 어떻게 배치할 것인지 프로젝트를 어떻게 운영해야 할 지도 생각해야 합니다. 혼자서 프로젝트를 운영하게 되면 어떻게 시간 배분을 할지 생각해야 하겠네요.
공정을 결정하면 개발을 위한 환경 설정을 만들어야 합니다. 어떤 OS를 사용하고, 어떤 웹 서버를 사용하는지 어떤 언어를 사용하고 어떤 프레임 워크를 사용할 지, 어떤 디비를 사용하고 어떤 ORM을 사용할 지, 그리고 소스 저장소는 어떻게 사용할 지, 문서는 어떻게 만들지까지 생각할 부분이 많이 있습니다.
그러한 것들이 결정되면 실 사용자와 어떻게 커뮤니케이션을 할지 어떤 식으로 확인을 받고 테스트를 할 것인가 이런 부분도 생각해야 하겠네요.
이러한 것들을 정리해서 다음 포스팅부터 글을 써 볼까 합니다.
솔직히 프로젝트 설계는 개인적인 취향이던가 방법론이 확실하기 때문에 제 방법이 반드시 정답은 아닙니다. 단순히 참고 사항으로 가볍게 봐주시면 감사하겠습니다.
혹시라도 여기에 부족한 부분이던가 무언가 보충할 내용이 있으면 많은 댓글 부탁드립니다.
여기까지 프로젝트 설계에 대한 글이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.
'Study > Project design' 카테고리의 다른 글
[Project design] 프로그램 결합 테스트 - IT(Integration test) 테스트 (0) | 2020.12.24 |
---|---|
[Project design] 프로그램 검증과 테스트 - Unit 테스트 (0) | 2020.12.23 |
[Project design] 프로그램 생산과 작성(코딩) - 클래스 작성법 (0) | 2020.12.16 |
[Project design] 프로그램 생산과 작성(코딩) - 함수 작성법 (0) | 2020.12.15 |
[Project design] 상세 설계(인터페이스 설계와 추상화 작업) (0) | 2020.12.11 |
[Project design] 기본 설계(화면 설계와 DB설계) (0) | 2020.12.09 |
[Project design] 요건 정의(요구 사항 정리) (0) | 2020.12.09 |
[Project design] 프로그램 공정(워터폴 vs 애자일) (0) | 2020.12.04 |