소프트웨어 개발의 어려움
- 요구조건은 계속해서 변화한다.
- 디자인 시 모든 문제를 미리 알 수 없다.
- Water-Fall 모델은 소프트웨어 개발에 부적합
- 요구조건 -> 디자인 -> 개발 -> 테스트 -> 릴리스 -> 유지보수
- 대규모 프로젝트 일수록 디자인에 걸리는 시간이 길어지며 그 기간 사이에 요구조건이 바뀔 수 있으며 실제 개발에 들어가면 생각치 못 했던 문제들로 디자인을 변경해야 할 수 있음
애자일 개발
아는 만큼 보이는 만큼 만들어 가자!
- 매 사이틀마다 바로 쓸 수 있는 기능을 구현
짧은 사이클이 특징 (보통 2주)
- 이를 보통 스프린트(sprint)라고 부름
매 사이클 마다 다음 작업을 반복
- 작업별로 우선순위 결정 (Backlog Prioritization)
- 보통 PM들이 수행
- 이를 Gromming이라고도 부름
- 각 작업별로 중요도와 복잡도 결정 (Point)
- 이번 사이클에 일할 작업 결정 (Planning)
- 매일 standup (5분 ~ 10분)
- 마지막 날 Retrospective & Demo 미팅
스프린트 카드 예제
- 타이틀 (작업 타이틀)
- 세부설명
- 포인트 (숫자)
- 성공의 정의 (Definition of Done)
- 체크리스트 (이 작업이 성공적으로 끝나는데 필요한 세부 작업들을 작성)
플래닝 포커 (Planning Poker)
- 작업별 일정 산정 기법
- 작업별로 포인트를 산정
- 포인트의 정의는 회사마다 다름, 예를 들어 1포인트는 1 full day for a developer 같은 식으로 정의 가능
- 개발자들이 모여 다 같이 작업별로 들어가는 일정을 산정(추측)하는 방법
- 일종의 투표
- 너무 다른 의견들이 존재할 경우 약간의 토론을 거쳐 어느 정도 수렴할 때 까지 진행
- 오래 걸릴 경우 작업 자체의 정의가 잘 되어 있거나 여러개의 작업으로 나눠질 필요가 있다는 것을 의미
일일 스탠드업
- 매일 모든 팀원들이 10~15분씩 모여서 각자 상황 공유 (각자 2~3분 정도 사용)
- 공유 내용
- 마지막 스탠드업 이후로 한 작업(들)
- 오늘 하려고 하는 일이나 진행 중인 일
- 일을 함에 있어 문제가 있거나 도움이 필요하면 언급
흔히 사용되는 툴: JIRA, Trello, ...
Test Driven Development
개발 시 테스트를 어떻게 할 것인지부터 생각
- 테스트 코드부터 작성
코드 구성 자체가 테스트에 편리하는게 되는 효과가 발생
- 코드 자체가 잘 구성되어 있지 않으면 테스트가 불가능
빌드란?
- 자신(혹은 팀)이 개발한 소프트웨어를 최종적으로 출시하기 위한 형태로 만드는 것
- 테스트가 빌드의 중요한 일부로 포함
- 참여 개발자들이 많을수록 이는 더 중요
- 개발이 끝나기 전부터 빌드를 하면 소프트웨어의 안정성 증대
- Continuous Integration (커밋을 하면서 바로 테스트)
serializer란?
django 내부의 로직에 따른 복잡한 데이터를 다른 framework에서도 이해할 수 있도록 변환해주는 것
frontend로 데이터를 보내기 위해 장고 내부의 복잡한 데이터들을 json/xml등의 형태로 데이터를 변환해주는 것
사용 시기
model.py를 통해 데이터베이스(DB)를 구축하고 serializer는 DB를 json으로 바꿀 때 사용되며, 반대로 json을 DB로 바꿀 때는 deserializer가 사용된다. serializer을 할 때는 각각의 DB의 캌ㄹ럼들로 정의해줘야 한다.
반응형