데브콘 활동 후기

[Go To Learn] 데이터 중심 애플리케이션 설계 - 1장

K-DEVCON 2024. 5. 14. 20:24
해당 글은 Go to Learn 1기 공상현님께서 작성하신 후기이며, 허락하에 게시하였습니다.
원글 :  https://velog.io/@codingsnom/DDIA-1

 

😊 Go to Learn이란?

K-devcon에서 주최하는 멘토링 프로그래밍으로 각 분야에서 전문가이신 멘토분들의 멘토링을 통하여 약 2-3달간 진행하는 프로그램입니다.

Go to Learn 1기 같은 경우 Flutter, Back-end, Full-stack, Writing 등 여러가지 주제가 담긴 멘토링 프로그램이 있었습니다.

그 중 Back-end를 중심으로 진행하는 DDIA 프로그램 같은 경우 데이터 중심 애플리케이션 설계라는 책을 매주 1장 씩 정독하고 요약하면서 괸련된 이야기를 논의하면서 진행하고 있습니다.

K-devcon 이란? : IT 정보를 공유하거나 위에서 설명한 Go to Learn 스터디 및 밋업을 개최하는 활동을 하고있는 IT 커뮤니티입니다.
K-devcon 홈페이지 바로가기


📖 1장 요약

🤔 데이터 중심 어플리케이션이란?

  • 데이터 저장과 처리를 위한 여러 도구들은 점차 다양한 사용 사례에 최적화 되어 위의 두가지 경계가 점차 흐려지고 있는 도구가 나오는 추세이다.
  • 애플리케이션을 개발 및 설계 시 과도하고 광범위한 요구사항이 점차 나타나고 있어 더 이상 단일 도구로는 모두 만족할 수 없게 되었다. 여러 도구들을 이용한 복합 데이터의 시스템이 등장하게 되었다.
  • 따라서 복합적 데이터 시스템의 등장으로 인하여 각 시스템 내의 내부적인 문제가 있어도 데이터를 완전히 유지할려면 어떻게 설계해야하는지 등 여러 문제가 등장하게 되었다. 위의 문제들을 해결하기 위하여 데이터를 포괄적으로 묶어야하는 작업이 중요시 되기 시작하였다.

신뢰성 (Reilability)

  • 아래의 결함들이 발생하더라도 시스템은 지속적이거나 안정적으로 동작해야만 한다.
  • 위에서 설명하는 결함이란 소프트웨어를 수행할 때 잘못될 수 있는 일들을 포괄적으로 의미한다.
    • 종류 : 하드웨어 결함 / 소프트웨어 오류 / 인적 오류
  • 장애는 결함과 달리 소프트웨어를 수행 할 때 기능이 정상적으로 작동할 수 없도록 만드는 결함들을 의미한다.

확장성 (Scalability)

  • 시스템의 데이터 양, 트래픽 양, 복잡도가 증가하면서 이를 처리할 수 있는 적절할 방법이 있어야한다.
  • 단, 확장성의 매개변수는 시스템에 부여하는 일차원적인 표식이 아님을 유의해야한다.
    • 부하 기술하기 : 부하 매개변수
    • 성능 기술하기 : 처리량, 서비스 응답 시간 등의 시스템 성능
    • 부하 대응 접근 방식 : 용량 확장, 규모 확장

유지보수성 (Maintainability)

  • 시간이 지남에 따라 여러 다양한 사람들이 위의 시스템에서 작업할 것이기 때문에 모든 사용자가 생산적으로 작업할 수 있게 개발을 유지해야한다.
  • 소프트웨어 시스템 설계 원칙
    • 운용성 : 운영의 편리함 만들기
    • 단순성 : 프로젝트 내 복잡도 관리
    • 발전성 : 변화를 쉽게 만들기 ex) 애자일

😉 필자의 생각

1장을 읽어보면서 간단히 요약해보면 어플리케이션 개발 방식이 데이터 중심으로 설계 및 개발해나간다는 점을 설명해준 다음, 그 이후 위의 설계 방식에서 요하는 세가지를 소개하면서 각 요소들을 설명해주는 방식이었다.

데이터 중심으로 설계하는 방식을 위 장을 읽음으로써 처음 알았음에도 해당 방식을 설명해주는 용어가 익숙한 느낌을 받았었다. 또한 어플리케이션 개발을 진행하면서 데이터 중심으로 설계되었다는 느낌이 받지 못했었던 것 같았다. 해당 장에 따르면 시스템 추상화가 잘 되어있었기 때문에 위 두가지 현상이 나타날 수 있었다는 내용이 들어있었다.

데이터 중심 설계가 등장하게 된 계기 중 하나인 어플리케이션 요구사항이 점차 다양화 및 세분화 되어진다는 사실은 업무를 수행하면서 이러한 사항을 잘 알고 있었기 때문에 이러한 설계가 왜 도입이 되었는지 쉽게 이해 할 수 있었다.

아래의 내용들은 각 요소들을 읽으면서 떠오른 것들을 서술한 내용이다.

  • 신뢰성 : 신뢰성을 높이기 위한 방법 중 일부러 결함을 발생시켜 애플리케이션 내 안정성을 높이는 방법이 가장 먼저 기억에 남았다. 위의 방법을 서술하자면 결함을 완전히 해결하는 방식보다 오히려 이러한 결함을 이용하여 애플리케이션 내 신뢰성을 높히는 방법이다.
  • 확장성 : 확장성에 영향이 끼치는 여러 매개변수를 설명하기 전 유명한 플랫폼을 예시로 들어서 어떠한 방식으로 확장성을 개선할 수 있는 방법이 순서대로 여러차례 설명한 내용이 담겨있어서 이해하기 쉬웠었다.
  • 유지보수성 : 시스템 설계 원칙의 원칙들을 보면서 프로젝트 내 팀원들이 작성한 코드를 쉽게 알아볼 수 있기 위하여 리펙토링 서적 및 아티클을 읽었던 활동이 생각 났었다. 이러한 활동 덕분에 위의 두가지 요소 보다 상대적으로 더 유심히 읽었었던 내용이었다.

🥨 활동 후기

최근 위 책을 읽으면서 위의 내용 처럼 정리한 내용들을 논의해보는 스터디를 시작하였다.

필자 같은 경우 1장 초반에 나타내어있는 그림에서 어떠한 도구들이 데이터 중심 애플리케이션을 설계할 때 사용되는지를 주제로 질문을 드렸는데 인터페이스 추상을 이용하여 설계할 수 있다는 점을 다른 책(클린코드)를 인용하면서 답변을 받았었다.

또한 다른 분이 서술한 이야기를 들어보면서 나랑 비슷한 경험을 한 분도 있는 한편 다른 관점에서 설계 및 문제 해결을 수행한 이야기 등을 들을 수 있었던 시간이었다.