Design by Figures

 

소프트웨어를 설계할 때 말 대신 그림으로 표현한다.

같은 말을 하더라도 서로 다른 생각을 하고 있을 수 있기 때문에 그림으로 표현하는 것이 좋다.

 

그럼, 그림으로 표현하는 것이 좋은 사례로는 무엇이 있을까?

 

 

1. Structure of Data (Data Structure)

자료 구조는 데이터를 효율적으로 사용할 수 있도록 컴퓨터에서 데이터를 구성하는 특정 방법이다.

 

 

2. Algorithm

알고리즘을 플로우 차트로 표현할 수 있다. 플로우 차트는 워크 플로우나 프로세스를 나타내는 일종의 다이어그램이다. 순서도는 다양한 종류의 박스들로 단계를 표시하고 박스를 화살표로 연결하여 순서를 보여준다. 다양한 분야에서 프로세스 또는 프로그램을 분석, 설계, 문서화 하는 데 사용된다.

 

 

3. Database

데이터 베이스는 데이터의 모음이다. 표(table)로 정보를 표현하고 표들 간에 관계를 맺고 있다. 

SQL: 구조화된 데이터를 Query하는 언어이다. (table based)

NoSQL: No or Not-only SQL. 고성능 비관계형 데이터 저장소를 나타내고 사용 편의성, 확장성, 복원력 및 가용성 특성에 탁월하다. 구조화되지 않은 데이터 또는 반구조화된 데이터를 Key-Value 쌍(pair) 또는 JSON 문서에 저장하는 경우가 많다.

 

 

4. Computer Network Diagram

 

 

5. Message Sequence Chart

1. 개념 정리

Agile이란?

고객의 요구에 빠르게 반응할 수 있는 개발 방법이다. 공정과 도구보다 ‘개인과 상호작용’을, 포 괄적인 문서보다 ‘작동하는 소프트웨어’를, 계약 협상보다 ‘고객과의 협력’을, 계획을 따르기보다 ‘변화에 대응하기’를 가치 있게 여긴다.

현업에 종사하는 사람들이 말하는 애자일 방식 사용의 장점은 다음과 같다. - 업무공유와 의사소통이 매우 잘 진행되어서 빠른 대처와 피드백이 가능해졌다.

- 기존에 본인 업무가 아닌 다른 업무를 경험해 보는 것과 필요 시 서로 도울 수 있다는 점이 좋았다.

- 팀원들 사이에 업무 진행상황과 진도를 바로 확인할 수 있으며 필요시 업무지원 요청을 바로 할 수 있다는 점이 좋았다.

- 애자일 미팅을 통해 서로의 고충도 공유하고 일의 진행이 매끄러워졌다.

- 업무공유가 효율적이며 팀원끼리의 유대관계가 좀 더 좋아질 수 있었다.

- 팀원들과 오픈마인드로 좀 더 교류를 할 수 있게 되었으며 팀워크가 좀 더 향상된 것 같다.

- 더 많고 다양한 종류에 업무를 접하고 지식공유를 통해 새로운 것을 배워나가는 데 있어서 많은 도움이 되었다.

- 밝은 분위기, 많은 대화, 타 모듈에 대한 관심, 적극성이 생긴 것 같다.

 

Scrum이란?

Agile이 개발 방법이라면 스크럼은 agile을 위한 도구이다. 스크럼은 럭비에서 유래된 용어이다. 팀 안에서 서로 공을 주고받으며 하나가 되어 필드를 나아가는 럭비의 모습을 본받았다. 스크럼 은 3~9명의 개발자로 구성된 팀을 위해 설계되었다. 스프린트(sprint)라고 불리는 업무 주기를 1~4주에 한 번씩 Scrum Master 지휘하에 반복한다. 이는 버전이 1~4주마다 하나씩 나오는 것이 라고 생각하면 된다. 그리고 Daily Scrum이라고 매일 모여서 이야기를 나눈다. 주로 전 날에 했던 일들을 이루었는지, 못 이루었다면 이슈는 무엇인지 등 진행사항에 관해 이야기한다. Scrum의 구 성요소로는 ‘Focus, Openness, Respect, Courage, Commitment’가 있다.

 

 

2. Agile case: Kakao agile coach part

  카카오에는 애자일코치파트가 존재한다. 애자일코치파트의 업무는 크게 두 가지이다. 첫 번째는 애자일코치로서 팀을 코칭하고, 일하는 방식을 더욱더 성숙하게 하기 위한 일들을 수행하는 것이 다. 카카오 크루들이 애자일 마인드셋, 가치, 원칙, 실천법들을 올바르게 이해하고 실행할 수 있도 록 돕는다. SDLC(Software Development Life Cycle)를 더욱 민첩하게 하기 위한 문화, 표준, 도구, 프로세스, 실천법들을 발굴하고 적용한다. SDLC 내에 다양한 피드백 루프를 구성할 수 있도록 하 고, 이를 지속해서 이어나갈 수 있도록 돕는다. 두 번째는 첫 번째 업무를 뒷받침하는 다양한 협 업도구들을 안정적으로 운용하고, 기민함에 날개를 달아줄 수 있는 다양한 도구의 활용법, 애자일 적용 사례들을 발굴하고 사내에 전파하는 업무를 수행한다. 효율적인 플랫폼 운영을 위한 다양한 도구(플러그인, 운영툴, 자동화 도구, 시스템 간 연동 등)를 개발한다. 도구에 대한 교육 업무(도구 기초 교육, 애자일 프랙티스를 적용할 수 있는 실무 교육 등)을 진행한다.

  이러한 카카오의 애자일 조직을 통해 성공한 소프트웨어가 있다. 그것은 ‘카카오뱅크’이다. 2014 년 카카오는 모바일 송금 서비스를 제공하는 ‘뱅크 월렛 카카오’와 모바일 결제에 중점을 둔 ‘카 카오 페이’를 거의 동시에 출시하며 핀테크 시장에 진입했다. 하지만 뱅크 월렛 카카오 서비스는 2016년 12월에 종료되었다. 가상 계좌를 만든 뒤 돈을 충전해야 하는 등 불편함이 컸기 때문이다. 또한 카카오페이 역시 삼성페이나 네이버 페이에 밀렸다. 카카오는 이러한 실패에서 얻은 교훈으 로 직관적인 사용자 경험에 초점을 맞춰 빠르게 대응하는 가벼운 전략인 ‘애자일 조직문화’를 택 했다. 하나의 서비스나 상품 개발을 위해 필요한 각 분야의 업무 담당자를 한 곳에 모아 놓아 부 서 간 경계를 허물고 필요에 맞게 팀은 구성해 업무를 수행하였다. 이와 같은 ‘agile’ 방식으로 카 카오는 카카오 뱅크를 성공시켰다.

  카카오 외에도 국내에서는 삼성 SDS, KB 국민은행, 현대카드와 SK이노베이션이 애자일 업무 방 식을 적용 중에 있다. 국외에는 구글, 스포티파이, ING은행, 넷플릭스, 페이스북, 아마존, 알리바바, 샤오미, H&M, 자라, 교세라 등이 있다.

Design(& Development) Process

 

1. Software development paradigm

과거에는 소프트웨어를 직접 팔기 위해 개발하였다. 즉 소프트웨어 자체가 수익의 목표였다.

ex) Microsoft Windows & Office, Hancom Hangul Word Processor, Adobe Photoshop, Packaged Game

또한 소프트웨어를 개발하는 데 긴 시간이 걸렸고 많은 사람과 돈을 요구했으며 언제까지 완성할 지에 대한 데드라인이 엄격했다.

 

오늘날은 서비스를 위해 도구적 관점으로 소프트웨어를 개발한다.

ex) Google & Naver Search Service, Free Game with Pay Items, Daum KaKao & Line Instant Messenger, Ad-based Free Services

또한 오늘날 서비스는 가능한 빨리, 제한된 인력과 돈으로 시장 요구를 충족시키며 개발된다.

 

2. Waterfall process

Waterfall Process는 위에서 아래로 흐르기 때문에 설계가 잘못되면 다 꼬인다. 따라서 최대한 앞쪽에서 문제가 없도록 노력해야 한다.

선행 단계가 완벽할 때는 좋다. 하지만 서비스가 중심인 오늘날에는 시장, 고객의 마음이 바뀌는 경우가 허다하다. 

따라서 오늘날에는 Waterfall Process는 적합하지 않다.

 

3. Agile

"어떻게 하면 소프트웨어를 잘 만들어낼 수 있을까?"에 대한 고민을 하여 만들어낸 소프트웨어 개발 방법이자 철학, 규정, Manifesto이다.

 

공정과 도구보다 개인과 상호작용
포괄적인 문서보다 작동하는 소프트웨어
계약 협상보다 고객과의 협력
계획을 따르기보다 변화에 대응하기

 

Agile Manifesto 12 Principles (9개로 생략)

1. 상사가 아닌 고객을 만족시켜라.

2. 변화를 거부하지 말고 받아들여라.

3. 문서가 아닌 소프트웨어로 진행사항을 보여줘라.

4. 개발자가 아닌 사람들과도 대화를 많이 해라.

5. 프로젝트를 동기부여가 된 개인들로 구성해라.

6. 얼굴을 보며 대화하는 것이 가장 효과적이다.

7. 작동하는 소프트웨어로 중간 과정을 보여줘라.

8. 스폰서, 개발자, 사용자들이 유기적으로 연결되어 있어야 한다.

9. 끊임 없이 스스로 발전 시켜라. 자기 분야에 관심을 가져야 한다.

 

4. Scrum

Scrum은 에자일이라는 철학을 반영한 방법론이다.

Product가 가져야할 것들을 Product Backlog에서 명시한 후 우선 순위대로 여러 Sprint로 쪼갠다.

하루에 한번씩 모여 어제 해야 할 것들을 이뤘는 지, 새로 생긴 이슈가 무엇인 지 등을 이야기하는 Daily Scrum이라는 것이 존재한다. 이로써 시장의 반응을 빠르게 받아들일 수 있다.

제일 중요한 것은 1~4주 마다 하는 Sprint 과정을 통해 데모, 즉 버전이 하나씩 나온다는 것이다.

 

이러한 Agile과 Scrum의 간단한 도구로 post-it이 있다.

 

5. DevOps

좋은 기술로 원하는 소프트웨어를 개발하기 원하는 개발자와 안정적으로 소프트웨어를 운영하려는 운영자가 합을 맞춰 잘 돌아가야 한다. 이를 위해 나온 개발 철학이자 문화가 DevOps이다.

DevOps의 가장 핵심적인 특징은 모든 과정이 자동화된다는 것이다.

DevOps는 더 짧은 개발 사이클, 증가된 개발 효율, 더 믿을만한 릴리즈를 목표로 한다.

아래의 사진을 보면 DevOps를 위한 많은 도구들이 소개되어 있다.

 

DevOps와 Agile을 비교해보자면 다음과 같다.

협력과 생산성을 높이는 것을 강조한다. Philosophy 반복적인 개발과 testing을 강조한다.
규모가 큰 팀 Team Size 규모가 작은 팀
팀이 나뉘어져 있기 때문에 문서가 중요하다. Documentation 문서를 최소화 한다.
운영팀이 고객의 feedback을 받아 전달한다. Feedback 내부적인 feedback이 주를 이룬다.

 

'강의 정리 > 오픈소스sw개발방법및도구' 카테고리의 다른 글

Design by Figures  (0) 2023.08.26
Design Approach - Agile or Scrum case study  (0) 2023.08.26
OS - FreeBSD, SteamOS  (0) 2023.08.14
Selecting Right OS  (0) 2023.08.14
Programming Language - Julia  (0) 2023.08.14

+ Recent posts