오늘 할 일: 갈고 닦기
article thumbnail

저는 IT 산업에 종사하고는 있지만 소프트웨어가 어떤 과정을 거쳐 만들어지는지는 잘 모르고 있었습니다. 주로 데이터 분석, 머신러닝 개발 일을 하기 때문에 제품/서비스를 만드는 과정에 전부 관여하기 보다는 데이터로 무언가를 하는 단계에만 관여를 했죠. 물론 그 "데이터로 무언가를 하는 단계" 에서 내부적으로 어떤 과정을 거쳐야 하는지는 잘 알고 있었습니다. 해결해야하는 과제를 정의하고, 데이터를 수집하고, 분석하고, 모델을 학습하고, 테스트하고 배포하는 절차야 늘 해왔기 때문이죠.

 

혹시나 나중에 직접 제품이나 서비스를 기획하거나 대규모 프로젝트에 참여해야할 수도 있으니, 데이터를 이용하는 단계 이상으로, 제품/서비스 릴리즈를 위해 어떤 정석적인 과정을 거치는지 학습할 필요가 있다고 생각했습니다. 주변의 조언을 듣던 중 소프트웨어 엔지니어링이라는 개념을 알게되었고, 뜻이 맞는 팀원과 작은 스터디를 꾸려 함께 유데미 강의를 수강하였습니다. 혼자 학습을 하는 경우 진도가.. 매우 더디게 나갈 것이 분명했기 때문이죠.🤣 

 

소프트웨어 엔지니어링
소프트웨어의 개발, 운용, 유지보수 등의 생명 주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문
(출처: wikipedia)

 

https://www.udemy.com/share/101BHy3@fEoWp7r-jPh9dPzIYrNbBa0ka9ytPJZtrJsEmgtjH-swT8gC4coJIbFQTTtnoZN3hA==/

 

Software Engineering 101: Plan and Execute Better Software.

Software Engineering 101: Use Software Engineering to Plan and Build Amazing Software + Learn SCRUM Framework!

www.udemy.com

출처: Udemy Software Engineering 101

 

 

🧐 강의 후기

 

📢 전체 후기

 

강의는 소프트웨어 엔지니어링의 핵심 기술과 아이디어에 대해 다루고 있습니다. 소프트웨어 개발 라이프사이클이란 무엇인지, 어떤 단계로 구성되어 있는지, 각 단계에서 필요한 것들과 핵심 개념들을 설명해줍니다. 최근 인기가 있다는 애자일 방법론인 SCRUM에 대해서도 자세하게 설명해줍니다.

 

저는 단돈 19,000원에 결제하여 수강했고(할인가였어요!), 이만원도 안되는 돈으로 소프트웨어 엔지니어링 방법론에 대해 개괄적으로 배울 수 있어 가성비가 좋았습니다. IT 프로젝트를 수행하면서 접했던 설계, 구현, 테스트, 이행이란 단계에 대해 그 정의가 무엇인지, 각 단계에서 어떤 일을 해야하는지 자세하게 알 수 있었습니다.

 

저는 컴퓨터 관련 전공이 아니었기 때문에 이런 내용을 접할 기회가 없었으며, 사수든 누군가가 가르쳐준 적도 없었습니다. 프로젝트 경험을 쌓으며 암묵지로서 막연하게만 알고 있었는데요. 본 강의를 수강함으로써 소프트웨어 엔지니어링을 흐름에 따라 이해하게 되었고, 암묵지가 아닌 형식지로 전환할 수 있었습니다. 그때그때 검색을 해서 얻는 단편적인 지식이 아니라, 강의였기 때문에 전체적인 틀을 살펴보고 각각의 세부적인 내용을 배울 수 있었다고 생각합니다.

 

강의 설명서에 이 강의는 프로그래머 초심자, 개발 방법에 대해 자세히 알고 싶은 사람, 컴퓨터 사이언스 학생들을 대상으로 한다고 쓰여있습니다. 개인적으로는 IT 프로젝트에 투입되는 사람, 관리해야하는 사람, 제품과 서비스를 기획하며 매니징하는 사람이라면 모두가 이 내용을 알면 좋겠다고 생각합니다. 다만 엄청나게 전문적인 용어로 설명하는 공학 지식이 아니기 때문에 그런 내용을 기대하신다면 다른 강의를 찾아보시는 편이 좋겠습니다.

 

 

👍👎 강의의 장단점

 

초반 설계, 디자인 챕터에서 3개의 과제를 주십니다. 물론 안한다고 해서 다음 강의를 듣지 못하는 것은 아닙니다만, 과제를 수행하면서 설계에 대해 좀 더 깊게 이해할 수 있습니다. 수강생들끼리 각자가 제출한 과제를 확인하고 피드백을 줄 수도 있습니다. 강사님이 예시 답안도 주십니다! 저도 저의 아이디어가 구현될 수 있는 설계 방안을 제출했는데, 다른 수강생이 흐름이 자연스러웠다는 피드백을 준 것이 기억나네요.(피드백을 다시 보고 싶은데 어디서 볼 수 있는지 못찾았겠네요😅) 

 

각 챕터마다 요약 노트, 관련된 정보가 있는 링크들도 제공하고 있어 수강생이 내용을 깊게 이해할 수 있도록 도와주고 있습니다. 자료를 못찾아서 더 공부 못하겠다는 핑계를 댈 수 없게 말이죠🤣 

 

강사님이 강의에 사용하는 PPT 발표 자료를 따로 제공하지는 않습니다만, 필기하면서 볼 수 있는 정도의 양과 수준입니다.(참, 화면 캡처는 불가능합니다) 다만.. 강사님 말씀이 너무 빠릅니다. 이 강의가 1배속이 맞는지.. 의심이 들어 다시 배속을 확인해보니 1배속이 맞습니다. 짧은 시간에 본인이 알고 있는 많은 것들을 수강생들에게 전달해주고 싶었나 봅니다. 전체 강의시간은 8.5시간으로 길지 않지만, 강사님의 말을 따라가며 내용을 충분히 익히기 위해서는 2~3배의 시간을 쓰게 될 것입니다. 

 

 

 

🙆‍♀️ 앞으로 내가 적용해야할 점들

 

이제 막연하게 알고 있던 지식을 명확하게 알게 되었으니, 실천을 잘하면 될 것 같습니다. 프로젝트 시작 전에는 세워진 계획들을 살펴보며 계획이 적절하게 이뤄졌는지 확인하고, 프로젝트 중간에는 각 단계마다 우리가 지금 해야할 일들을 잘 하고 있는지, 놓친 부분은 없는지 살펴볼 수 있을 것 같습니다. 

 

스크럼 방법론도 인상적이었는데요, 이전에 짧게 경험한 적이 있어 더 와닿았습니다. 스프린트라는 개념이 차근차근 서두르지 않는 분들에게는 개발자들을 너무 몰아세운다고 느껴질 수도 있겠습니다. 상황에 맞게 적절하게 적용된다면(물론 이게 가장 어렵겠지만요) 중간에 이탈하는 사람 없이 프로젝트를 잘 완수할 수 있을 것이라고 생각합니다. 개인적으로 사이드 프로젝트를 하게 된다거나, 일을 하면서 나중에 관리자가 된다면 스크럼 방법론도 적용해보고 싶네요.

 

 

📑 강의 요약

 

강의의 목차는 아래와 같습니다.

 

 

1. Introduction

2. Software Lifecycle

소프트웨어 엔지니어링 및 개발 라이프사이클을 왜 배워야하는지, 전통적인 소프트웨어 개발 사이클은 어떻게 구성되는지 설명합니다. SDLC는 Software Development LifeCycle을 뜻합니다.

출처: https://www.tutorialspoint.com/sdlc/sdlc_overview.htm

 

3. Requirements and Specifications

기획 단계에서 정의해야하는 요구사항과 사양의 개념와 차이점에 대해 설명합니다. 두 개념에 대해 어떤 방식으로 접근해야하는지 방법론과 예시를 함께 설명해서 이해가 쉬웠습니다. 

출처: https://medium.com/@sofiia./wrspm-reference-model-or-the-world-machine-model-54f6436f31e7

 

4. Design: Architecture

요구사항을 구체적으로, 기술적으로 다루는 설계(디자인) 단계를 배웁니다. 설계는 내용이 많아 4, 5챕터에 걸쳐 설명합니다. 챕터 4에서는 소프트웨어 아키텍처에 대한 개괄적인 이해, 좋은 아키텍처의 중요성, 아키텍처에 사용되는 패턴들을 다룹니다. 좋은 아키텍처는 큰 시스템을 작고 집중적인 시스템으로 쪼개서 잘 모아둔 것이라며, 아키텍처를 잘 만드는 과정은 어렵고, 한번 잘못 설계하면 이후 과정이 다 망가지니 매우매우 중요하다고 강조했습니다. 

출처: https://scaleyourapp.com/spaghetti-code-explained/

 

5. Design: Modularity

챕터 4에서 좋은 아키텍처를 강조했었죠. 챕터 5에서는 아키텍처를 잘 설계하기 위해 어떤 단계를 거쳐야하는지, 좋은 아키텍처의 조건인 모듈성은 무엇인지, 모듈성의 특징인 결합도와 응집도란 무엇인지를 배웁니다. 다른 챕터들 보다 상대적으로 내용이 추상적이어서 이해하기에 어려웠네요 😅

출처: https://techdifferences.com/difference-between-cohesion-and-coupling.html

 

6. Implementation and Development

요구사항 정의와 디자인을 마쳤으니 이제 본격적으로 구현과 배포를 하는 단계입니다. 구현의 핵심 원리, 구현 과정에서 정해야하는 것, 배포의 정의와 배포 계획에서 주의할 점에 대해 다룹니다.

 

7. Testing

제품 및 서비스를 테스트하는 방법에 대해 배웁니다. 테스트 단계에서 무엇이 필요한지, Verification(검증)과 Validation(검사)는 무슨 차이인지, 테스트 종류에는 무엇이 있는지에 대해 다룹니다. 프로그램이 버그로부터 자유로울지는 아무도 알 수 없으며, 모든 버그를 검증하는 철저한 테스트는 불가능하니 효율적으로 테스트를 하자는 조언이 인상적이었습니다.

출처: https://www.cs.uic.edu/~jbell/CourseNotes/OO_SoftwareEngineering/Testing.html

 

 

8. Software Development Models

지금까지 소프트웨어 개발 라이프사이클에 대해 모두 배웠습니다. 요구사항(+사양), 설계(디자인) ,구현, 테스트, 배포 단계를 한단계씩 차례로 밟아갈 수도 있지만, 보다 효율적으로 진행할 수 있는 방법론들에 대해 다룹니다. 일반적으로 쓰이는 Waterfall 모델과 확장된 모델인 V-모델, 통합 프로세스 프레임워크, 나선형 모델 등을 다룹니다.

출처: https://itwiki.kr/w/나선형_모델

 

9. Agile

위에서 배운 방법론들은 보편적이지만 전통적인 방법론들입니다. 시장이 변하고 새로운 기술이 빠르게 개발되는 현 시점에서는 다소 맞지 않을 수 있습니다. 변화에 대응하기에 어렵거든요. 챕터 9에서는 변화에 빠르게 대응하기 위해 등장한 애자일 방법론에 대해 설명합니다. 애자일 방법론의 기본 철학과 SCRUM, Kanban, Lean Startup 개념에 대해서도 다룹니다.

출처: https://www.pm-partners.com.au/the-agile-journey-a-scrum-overview/

 

10. Scrum Deep Dive

애자일 방법론인 SCRUM에 대해 한시간 반을 할애하여 구체적으로 다룹니다. SCRUM에서 필요한 역할들은 무엇이 있는지, SCRUM의 단계와 산출물에 대해 설명해줍니다.

https://www.scruminc.com/the-3-5-3-of-scrum/

 

11. Conclusion

 


 

누군가는 너무 기본적인 내용이 아니냐고 할 수 있겠지만, 개인적으로는 프로젝트, 기획과 IT에 대한 시야를 넓힐 수 있는 좋은 시간이었다고 생각합니다. 위 강의 요약을 읽고 내용이 궁금해졌다면 강의 수강을 적극 추천합니다.