KUIT 4th Server 파트장 회고 #1

함형주·2024년 10월 15일
0

KUIT

목록 보기
3/4

질문, 피드백 등 모든 댓글 환영합니다

개요

https://www.konkuk-kuit.com

KUIT은 건국대학교 교내 개발동아리로 2023년 1기로 시작해 24년 현재 4기가 진행 중입니다. Web / Server / Android / iOS / PM / Designer 직군이 있으며, 학기 중에는 디자이너를 제외한 각 분야 파트장들이 제공하는 강의와 미션을 기반으로 스터디를 진행하고, 방학 중에는 각 직군이 모여 프로젝트를 진행하는 것으로 한 기수의 활동이 마무리됩니다.

KUIT 1기 서버 부원을 시작으로 2기 서버 튜터, 4기에는 서버 파트장을 맡게 되었습니다. 파트장을 하며 부원들께 전달한 강의와 미션 준비 과정에 대한 회고를 작성하려 합니다.

커리큘럼

KUIT 4th Server 파트의 커리큘럼은 아래와 같습니다.(블로그 작성 시점, 현재 4~5주 차 진행중)

  • 1주 차 : 객체지향 & TDD
  • 2주 차 - 객체지향 & TDD 리팩토링
  • 3주 차 - 네트워크 / IP / HTTP
  • 4주 차 - 서블릿 JSP
  • 5주 차 - 서블릿 JDBC
  • 6주 차 - 서블릿 MVC
  • 7주 차 - 스프링 MVC & IoC, DI
  • 8주 차 - 인증과 인가
  • 9주 차 - 데이터베이스와 ERD 설계
  • 10주 차 - REST API 개발, 페이징 처리

총 10주 차의 커리큘럼 중 제가 담당한 부분은 1~3주 차입니다.

강의 준비

제가 담당한 부분의 강의 목표는 서버 개발을 위한 객체 지향 개념을 다지고 네트워크 기본 이론 및 HTTP 이해였습니다. 강의 커리큐럼 초반에 본격적인 서버 개발에 앞서 가장 기본이 되고 중요한 기초를 잡고 진행하기를 원했습니다.
1주 차 강의는 객체 지향 & TDD를 다뤘습니다. 1주 차 학습 목표는 TDD에 대한 기본적인 이해와 객체 지향적인 설계에 대해 깊게 고민해 보는 것이었습니다. 객체 지향과 TDD는 파트를 완전히 나누어서 강의를 구성했고, 순서는 TDD 부터 다루었습니다.

TDD

강의 제목은 TDD 였지만 내용은 TDD에 대해 깊게 공부하기보단, 테스트 작성의 중요성을 잘 이해하는 것으로 출발했습니다. 하지만 저도 지금껏 강의나 개발 세션 등으로 테스트를 접하고 웹서핑을 통해 이래저래 사용해 왔었지만, 막상 테스트에 대해서 뭔가 제대로 공부해본 적이 없었습니다. 때문에 이번 기회에 테스트 주도 개발 시작하기 책을 통해 테스트와 TDD에 대해 공부하게 되었습니다.
책의 내용을 기반으로 앞으로 강의를 어떻게 구성해야 할지에 대한 감이 점차 잡혀갔습니다. 책을 읽었더라도 책에서 배운 내용에 대해 테스트 케이스 작성 및 TDD 개발 절차를 코드로 활용해 볼 시간은 넉넉치 않았기에 TDD에 대해 자세한 강의를 준비하기에는 많이 부족했지만, 강의 목표에 맞는 내용을 구성하기에는 충분하다고 생각이 들었습니다.

강의 흐름은 처음에는 아래 처럼 구성했습니다.

테스트? -> main 메서드를 통한 테스트의 문제 -> TDD -> TDD 개발 절차 -> TDD 장단점 -> TDD 예제(계좌 입출금) 라이브 코딩

이렇게 구성한 내용으로도 충분히 강의 목표를 채울 수 있을 것이라 생각했습니다.
기존 개발 방식의 문제부터 시작해서 테스트가 필요한 이유와 장점, 이런 테스트를 프로젝트에 적절히 적용하고 활용하기 위한 방법론인 TDD의 소개 및 라이브코딩을 통한 이해 순서로 강의를 구성하고 강의를 찍었습니다. 그런데...

강의 내용 보강

1주 차 강의를 준비할 당시 부원 모집이 한창이었는데, 면접에 참여했었습니다. 모집 당시부터 커리큘럼을 공개했었고, 면접에서 몇몇 지원자분들께 서버 파트 커리큘럼에 대한 생각을 물었습니다. 생각보다 많은 지원자분들께서 1, 2주 차에 진행되는 TDD, Test에 대한 내용이 많이 기대된다는 답변을 해주셨습니다. 지원자분들의 기대보다 생각보다 커서 강의 목표였던 TDD 소개 및 간단한 이해, 테스트 코드 작성의 중요성 이해에서 크게 벗어나지 않는 선에서 내용을 보강하기로 결정했습니다.

결국 추가적으로 테스트하기 나쁜 코드/좋은 코드, 테스트를 가능하도록 돕는 설계, 테스트 코드의 유지 보수성을 높히는 방법, 테스트 범위와 종류에 대한 내용을 추가해서 최종적으로 강의를 구성했습니다.
추가된 내용은 테스트에 대한 기초적인 이해가 선행되지 않으면 잘 와닿지 않을 내용이라 생각해서 라이브 코딩 뒤 순서로 배정했습니다.

https://github.com/Konkuk-KUIT/KUIT4_Server-TDD-Example | TDD 예제 코드 샘플 github

객체 지향

객체 지향에 관한 부분은 깊게 다루지 않았습니다. 부원들을 모집할 당시 객체 지향 언어 개발 경험이 있고 객체 지향에 대한 이해가 있는 사람들을 대상으로 모집했기 때문에 최소한의 내용만 다루려고 했습니다.

OOP

OOP에 대한 내용은 책과 인터넷 강의를 기반으로 만들었으며, 특히 객체 지향의 사실과 오해 책의 내용을 많이 참고했습니다.
기본적인 내용이지만 사람들이 많이 놓치거나 객체 지향적인 설계에 대해 깊게 고민 해보는데 도움을 줄 수 있는 내용으로 구성하려고 노력했습니다.

강의 흐름은 아래와 같습니다.

일반적인 'OOP'의 시각 -> 객체 -> 객체 지향의 사실과 오해 -> 객체 지향 프로그래밍의 본질

객체 지향 생활 체조 원칙 (소트웍스 엔솔로지)

객체 지향 생활 체조 원칙은 마틴 파울러가 쓴 소트웍스 엔솔로지 책에서 다루는 원칙으로, 좋은 품질의 소프트웨어를 개발하기 위한 9가지 원칙입니다. 마틴 파울러가 말하는 좋은 소프트웨어의 조건인 응집도(cohension), 느슨한 결합(loose coupling), 무중복(zero duplication), 캡슐화(encapsulation), 테스트 가능성(testability), 가독성(readability), 초점(focus) 을 실현하기 위해 고안된 원칙입니다.
해당 원칙은 우테코에서도 등장하는 내용이기 때문에 국내에 많이 알려져 있기도 합니다. 이미 너무나 유명하고 명실상부 최고 교육 기관에서도 가르치는 내용이기 때문에 신뢰가 가기도 하고, 저 또한 이 원칙을 접하며 도움이 많이 되었기에 해당 내용도 강의에 포함했습니다.

각 원칙에 대한 소개와 각각의 원칙이 어떠한 문제를 해결하기 위해, 또 어떠한 목적을 달성하기 위해 고안되었는지와 핵심적인 의도를 설명하고자 했습니다. 각 원칙이 좋은 내용이긴 하나 너무 해당 원칙들에 매몰되면 오히려 그 가치를 잃어버리는 경우가 많기 때문에 의도 전달에 초점을 맞춰서 강의를 구성했습니다.

미션

1~2주 차 미션은 사다리 타기 구현 입니다. 총 2주간 같은 프로젝트에서 진행하며, 1주 차에는 기본 기능 구현, 2주 차에는 요구사항 추가 및 리팩토링으로 구성됩니다.

요구사항

대략적인 요구사항은 아래와 같습니다. 자세한 요구사항과 구현 힌트는 부원들에게 따로 미션북을 통해 제공했습니다.

  1. 순수 JAVA 코드로 구현 (테스트 외 라이브러리 등 사용 금지)
  2. 테스트 코드로 단위 테스트를 진행 (가능하면 TDD로 구현)
    • main 메서드가 아닌 JUnit 테스트 코드에서 정상 작동 여부 확인
  3. 객체 지향 생활 체조 원칙을 최대한 지키면서 구현
  4. 하나의 메서드에게 하나의 일만 시키도록 한다.

  1. Ladder 클래스의 생성 인자로 사다리 줄의 개수(게임에 참여하는 사람의 수)사다리의 높이를 전달하면 사다리를 생성
  2. 사다리의 각 라인의 생성은 drawLine(positon) 형식의 메서드를 통해 수동으로 사다리 생성
  3. Ladder 클래스의 run 메서드를 통해 사다리 번호를 선택하면 게임 진행 후 도착 사다리 번호를 알 수 있도록 구현

코드 리뷰

부원들이 미션을 완료한 후 pr을 제출하면, 이에 대한 코드 리뷰를 제공합니다. KUIT은 튜터 제도를 운영하고 있습니다. 튜터는 스터디 진행 및 조별 공지, 운영진과 소통 등을 담당합니다. 별도로 파트장에게 코드 리뷰를 요청하는 경우를 제외하곤, 미션을 일찍 제출한 부원들에 대해서 파트장이 직접 코드 리뷰를 진행하고, 그 외 인원에 대해서 각 조 튜터가 코드 리뷰를 진행합니다.

1주 차에는 소프트하게 코드 리뷰를 진행했습니다. 첫 시간이기도 하고 객체 지향적인 개발에 익숙하지 않은 시기이기 때문에 강의에서 언급했던 객체 지향의 내용과 테스트에 관한 부분을 중심으로 엄격하지 않은 수준에서 코드 리뷰를 진행했습니다.

https://github.com/Konkuk-KUIT/KUIT4_Server-Ladder | 1~2주 차 미션 진행 github
main branch : 시작 브랜치
1week-basic : 1주 차 미션 리팩토링 전 완성 브랜치

profile
평범한 대학생의 공부 일기?

0개의 댓글