Child pages
  • 2013학년 1학기 소프트웨어 공학 수업을 마치면서...
Skip to end of metadata
Go to start of metadata

2013학년 1학기 소프트웨어 공학 수업이 오늘 학생들과의 만남을 끝으로 모두 마무리했다. 1학기의 전체 과정을 남기려고 했으나 중간 고사 이후의 과정을 남기지 못해 아쉬움이 남는다. 기록을 남기지 못해 아쉬움이 남지만 마지막 기록은 남겨야겠다는 생각이 들어 글을 시작한다.

소프트웨어 공학 일곱번째 수업 - 테스트 글 이후로 진행한 강의에 대해 간략하면 다뤄보면 다음과 같다.

  • 여덟번째 수업 - 중간 고사로 건너 뛰었다. 중간 고사는 보지 않았으며, 학생들과 만나 커피한잔 먹으면서 소프트웨어 개발과 관련한 다양한 이야기를 나누는 시간을 가졌다.
  • 아홉번째 수업 - 통합 테스트 및 빌드 : 여덟번째 수업은 통합 테스트와 빌드에 대해서 다루었다. 통합 테스트는 Selenium 기반으로 웹 UI를 테스트하는 과정에 대해 다루었다. 다음은 일곱번째 수업에 다룬 단위 테스트와 통합 테스트를 실행, 패키지 등을 위해 빌드 도구에 대해 다루었다. 각 언어(C진영, 자바, 루비 정도)별로 빌드 도구가 어떻게 발전해 왔는지에 대해 간략하게 다루었다. 빌드 도구를 활용해 통합 테스트 실행을 자동화하는 과정이 학생들에게 인상적이었던 것으로 기억한다.
  • 열번째 수업 - 지속적 통합 : 빌드 도구와 테스트까지 마무리했는데 완전한 자동화를 이룬 것은 아니기 때문에 완전한 자동화를 위해 지속적 통합 도구를 다루었다. 지속적 통합 도구를 활용했을 때 어느 수준까지 자동화할 수 있으며, 이를 활용했을 때의 개발 프로세스를 어떻게 가져갈 수 있는지에 대해 논의하는 시간을 가졌다. 지속적 통합 도구는 Jenkins를 활용했다.
  • 열한번째 수업 - 스프린트 마감, 스프린트 시작 : 열번째까지 첫번째 스프린트 0을 마쳤다. 즉, 기본적인 개발 환경 구성을 마쳤다. 따라서 이번 시간에는 스프린트를 마칠 때의 활동에 대해서 다루었다. 스프린트를 마무리할 때의 테스트, 마감 회의, 데모, 회고를 진행했다. 다음 단계로 새로운 스프린트(스프린트 1이다.)를 시작할 때의 활동을 했다. 우선순위가 높은 백로그를 선택하고 스프린트에 대한 목표를 작는 과정을 거쳤다. 이제 본격적으로 개발을 진행하면 된다.
  • 열두번째 수업 - 코드 리뷰, 짝 프로그래밍 : 소스 코드 품질의 중요성에 대해서 다루면서 소스 코드 품질을 관리하기 위한 활동으로 코드 리뷰와 짝 프로그래밍에 대해 공유하는 시간을 가졌다. 코드 리뷰는 가끔씩 진행하고 있었기 때문에 실습은 짝 프로그래밍을 집중적으로 했다. 지난 번 시간에 선정한 백로그에서 우선순위가 높은 기능에 대해 5분 단위로 짝을 바꿔가면서 기능을 구현해 보고 경험을 했다. 짝 프로그래밍 활동은 생각보다 쉽지 않음을 다시 한번 느꼈다.
  • 열세번째 수업 - 소스 코드 품질 관리 : 코드 리뷰와 짝 프로그래밍은 자동화할 수 없는 부분에 대해 사람의 힘을 빌리는 부분에 대해 다루었으며, 이번 시간에는 지속적 통합 도구를 활용해 소스 코드 품질 리포트를 추출해서 관리하는 방법에 대해 다루었다.
  • 열네번째 수업 - 기능 개발 : 열네번째 수업일은 현충일이었다. 학생들과 수업을 진행하기보다 기능 개발을 하는 것에 집중해 보기로 했다. 학생들도 좋아해서 현충일 오후 5시에 모여 저녁 10시까지 백로그를 구현하는 것에 집중했다. 수업도 좋지만 학생들과의 이런 경험이 오히려 즐겁고 많은 것으로 공유할 수 있는 시간이라는 생각이 들었다.
  • 열다섯번째 수업 - 지속적인 배포 : 지속적인 배포를 위한 소스 코드 브랜치 관리에 대해 다루었다. git-flow의 workflow에 대한 공유와 직접 실습을 진행했다. 다음은 지속적인 배포를 위한 데이터베이스 스키마 관리에 대한 내용이었는데 Ruby On Rails의 경우 이 기능이 이미 포함되어 있기 때문에 학생들이 어렵지 않게 이해해 좋았다. 마지막으로 브랜치가 많아질 경우 개발 환경 세팅에 대한 부담을 덜기 위해 vagrant와 chef를 활용해 웹 애플리케이션을 배포하는 과정에 대해 다루었다. 그 동안 수동으로 하던 작업을 몇 번의 명령어를 입력해 개발 환경 구축을 끝내는 모습이 인상 깊었던 것으로 생각한다. vagrant와 chef 내용은 지금 진행하고 있는 스터디에서 다룬 2주차 - vagrant, chef 를 통한 동일 개발환경 구축를 활용했다. 스터디했던 내용도 수업을 진행하는데 참 많은 도움이 된다.
  • 열여섯번째 수업 - 학생과의 마지막 만남 시간 : 이 과목은 시험을 보지 않았다. 평가는 수업 진행 중에 리포트를 제출해서 대체하고, 수업 중에 진행한 프로젝트에 얼마나 적극적으로 참여했는지에 따라 pass와 fail로 성적을 평가한다. 그래서 마지막 수업은 학생들과 만나 이번 학기 소프트웨어 공학에 대한 회고를 하는 시간을 가졌다.

이렇게 정리하고 보니 참 많은 주제를 짧은 시간에 다루었다는 생각이 든다. 많은 것을 느끼게 해주고 싶었지만 학생들이 프로젝트 경험이 없는 상태에서 소프트웨어 공학의 practice의 참 맛을 느끼게 하는 것이 참 힘든 일인 듯하다. 소프트웨어 공학 첫번째 수업 글에서도 언급했지만 이 과목은 원래 2학년 2학기에 계획되어 있는 과목이었는데 1학년 1학기에 진행하다보니 그 필요성을 느끼기 힘든 부분이 있었다는 생각이 든다. 그래도 학생들이 프로젝트를 주도하면서 더 많은 관심을 가지고 프로젝트를 진행할 수 있었다.

오늘 학생들과 소프트웨어 공학을 마무리하면서 소프트웨어 공학에 대한 회고를 했다. 회고를 하면서 가장 마음에 남는 말은 교수님이 아니라 같이 프로젝트를 진행하는 선배 개발자와 같은 느낌을 받았다는 것이다. 내가 next에 오면서 정말 하고 싶은 일이 학생들과 같이 프로젝트를 하면서 자연스럽게 지식을 전파하는 선배 개발자와 같은 모습이었는데 이번 수업에서 조금이나마 그런 역할을 할 수 있었다는 것이 기쁘다.

지금까지 살아오면서 과거에 태어났으면 장군이 맞을 것 같다는 소리를 여러 사람한테 들었다. 그런데 오늘 회고하면서 학생 중 한 명이 갑자기 고구려 이야기를 하길래 또 장군 이야기를 하려나 했는데 "반란군"이었을 것 같다는 이야기를 들었다. 기존의 틀에 얽매이지 않고 뭔지 모를 다름이 있는 것이 딱 반란군이 맞을 것 같다는 이야기에 나 또한 공감할 수 밖에 없었다. 뭐 항상 다른 것이 좋은 것은 아니지만 내가 기존의 틀에 얽매이는 것을 좀 싫어하는데 그 모습이 자연스럽게 학생들에게 비춰졌구나라는 생각이 들었다.

마지막 회고를 하면서 느낀 점 중의 하나는 내 행동 하나 하나가 학생들에게 많은 영향을 미쳤다는 것이다. 내가 의도적으로 내 자신을 드러내지 않으려 하더라도 학생들은 자연스럽게 내 성향을 파악하고 많은 영향을 받는다는 것이다. 자연스럽게 내 자신이 드러나는 만큼 내가 가진 색깔을 숨기려 하기보다는 직접 드러내는 것이 좋겠다는 생각이 든다. 그래야 학생들과 더 빠르게 가까워질 수 있고, 서로를 알아갈 수 있기 때문에 더 효과적인 배움의 과정이 만들어 질 수 있다는 생각이 든다.

준비를 많이 하지 않은 상태에서 갑작스럽게 시작해 제대로 된 강의를 할 수 있을까 걱정했는데 현장의 경험을 그대로 전달하려는데 노력한 부분이 학생들에게 좋은 인상으로 다가왔던 듯하다. 앞으로 4명의 학생을 대상으로 수업을 할 수 있는 기회가 있을지 모르겠지만 next에서 첫번째 수업을 통해 나 또한 많은 것을 배우고 느낄 수 있었다. 앞으로 next에서 수업을 진행할 때 어떻게 이끌어 가는 것이 좋을 것인지에 대한 많은 아이디어를 얻을 수 있었다. 2학기 수업의 목표는 1학기의 경험을 더 많은 학생들을 대상으로 어떻게 만들어 갈 것인지를 고민하고 실험하는데 있다. 4명의 학생이 아닌 20명의 학생과도 1학기 소프트웨어 공학의 경험을 같이할 수 있다면 좋겠다. 물론 학생수가 많아 소홀한 부분도 있겠지만 비슷한 경험을 할 수 있도록 노력해 봐야겠다.

next에서 신선한 경험을 하게 해준 남훈, 제혁, 동국, 지웅에게 감사의 말을 전한다.