[프로그래머스] full-cycle-development

Lina Hongbi Ko·2025년 1월 8일
1

Programmers_BootCamp

목록 보기
76/76

2024년 1월 7일

  1. 소프트웨어 개발 프로세스

    • 소프트웨어 개발 프로세스에 있어서 기반을 다지는 것이 중요 (집을 짓는것과 같음)
    • 소프트웨어를 개발하기 위해 필요한 절차나 과정
      • 소프트웨어를 기획, 설계, 구현, 테스트하고 유지보수하는 일련의 단계로 구성
    • 중요성
      • 품질 향상
      • 일정 준수
      • 의사 소통 촉진
      • 생산성 향상
      • 고객 만족도 향상
  2. 요구사항 수집 및 분석

    • 요구사항 수집
      • 시장 조사, 이해 관계자 인터뷰, 설문 조사, 문서 분석
    • 요구사항 분류
      • 기능적 요구사항, 비기능적 요구사항
    • 요구사항 분석
    • 문서화
    • 요구사항 검증 및 확인
  3. 시스템 설계

    • 상위 설계

      • 시스템 아키텍처 설계
      • 모듈화
      • 데이터 설계
      • 인터페이스 설계
    • 하위 설계

      • 데이터베이스 설계
      • 클래스 설계
      • 알고리즘 설계
      • 에러 처리 및 로깅 방식
    • 핵심 설계 원칙

      • 모듈화 : 시스템을 독립적으로 분리된 모듈로 설계. 각 모듈은 특정 기능이나 책임을 가지고 다른 모듈과는 잘 정의된 인터페이스를 통해 상호작용 (시스템의 복잡성을 낮추고, 개발과 테스트 용이하게함)
      • 캡슐화 : 모듈 내부의 데이터와 구현 세부사항을 외부로부터 숨기고 잘 정의된 인터페이스를 통해서만 모듈과 상호작용 할 수 있도록 제안 (모듈간의 결합도을 낮추고, 시스템를 쉽게 유지보수 할 수 있게함)
      • 재사용성 : 시스템의 구성요소를 재사용할 수 있도록 설계. 다른 시스템이나 모듈에서 활용할 수 있게함 (개발 효율성을 높이고 시스템의 일관성을 높임)
      • 확장성 : 시스템이 향후 요구사항에 유연하게 대응할 수 있도록 설계. 새로운 기능을 쉽게 추가하거나 기존 기능을 수정할 수 있는 구조를 만듦 (유지보수를 쉽게 해서 비용절감에 도움됨)
      • 응집도와 결합도 : 응집도 → 모듈 내부의 요소들이 얼마나 관련성이 있는지 / 결합도 → 모듈 간의 상호 의존성 나타냄. 높은 응집도를 가진 모듈은 이해하기 쉽고 재사용성이 좋고 유지보수가 좋음. 낮은 결합도를 가진 시스템은 모듈의 독립성을 높이고 변경의 파급효과를 줄임
      • 단순성 : 복잡성을 최소화하고 간결하고 이해하기 쉽게 설계 (문제해결과 디버그를 쉽게해 전체적인 시스템의 안정성을 향상 시킴)
    • 소프트웨어 아키텍처

      • 클라이언트 서버 아키텍처
      • MVC(ModelViewControl) 패턴→ 웹서비스에 많이 사용됨
      • 모놀리식(Monolithic) 아키텍처→ 웹서비스에 많이 사용됨
      • 마이크로서비스(Microservice) 아키텍처→ 웹서비스에 많이 사용됨
    • MVC 아키텍처

      • 어플리케이션을 모델, 뷰, 컨트롤러라고 하는 서로 다른 역할을 하는 3가지 구성요소로 분리해 개발하는 방법
      • 뷰와 모델은 서로 직접적으로 데이터를 주고 받지 않고 항상 컨트롤러를 통해 상호작용함
      • 스프링 mvc, django, ruby 등 웹프레임워크가 사용함
      • 모델 : 어플리케이션의 데이터와 비즈니스 로직을 처리하는 역할을함. 데이터베이스에서 데이터를 가져와 컨트롤러에 전달. 데이터와 관련된 로직만 처리.
      • 뷰 : 사용자에게 정보를 보여주기 위한 역할을 함. 컨트롤러에게 받은 데이터를 받아 웹페이지 생성
      • 컨트롤러 : 사용자에게 받은 요청을 처리하고, 모델과 뷰 사이를 중재하는 역할을 함. 사용자의 요청에 따라서 필요한 모델과 상호작용을 하고 데이터를 처리한 후에 처리된 데이터를 뷰에 전달함.
      • mvc 패턴을 사용하면 각 구성요소가 역할별로 나눠져 있기 때문에 각각를 독립적으로 수정할 수 있고, 유지보수하기 쉽고, 재사용하기 쉽고, 각 구성 요소를 독립적으로 확장할 수 있음
    • 모놀리식 vs 마이크로서비스 스크린샷
      • 모놀리식 아키텍처 : 어플리케이션의 모든 구성요소가 하나의 큰 단위로 개발되고 배포되는 방식.
        • 어플리케이션의 모든 기능과 모듈들이 하나의 코드 베이스에 통합되어 있으며, 모든 기능이 같은 기술 스택으로 개발됨
        • 장점
          • 간단한 개발 및 배포
          • 손쉬운 디버깅
          • 용이한 테스트
        • 단점
          • 개발 속도 저하 (어플리케이션의 크기가 커질수록 코드베이스의 크기가 커짐)
          • 배포의 어려움 (모든 기능을 한꺼번에 배포해야해서 자주 배포하기 어려움)
          • 확장성 제한 (서버의 CPU나 메모리가 증가해서)
          • 신뢰성 (하나가 문제 생기면 전체에 영향 줄 수 있음)
          • 기술 채택의 장벽 (언어나 프레임워크를 변경하면 많은 비용이 듦)
      • 마이크로서비스 아키텍처 : 어플리케이션을 작고 독립적인 서비스의 집합으로 구성하는 접근 방식.
        • 각 마이크로서비스는 특정 기능을 수행하며 각각 독립적으로 개발, 배포 운영 될 수 있음
        • 팀별로 각자 담당하는 마이크로 서비스만 개발하고 배포할 수 있음
        • 장점
          • 높은 안정성
          • 유연한 확장
          • 배포 용이성
          • 기술적 유연성
        • 단점
          • 복잡성 증가 (서비스간의 통신관리나 데이터 일관성이 어려울 수 있음, 서비스 중 하나의 오류가 발생하거나 지연이 될 경우 방어코드 작성 필요함)
          • 네트워크 오버 헤드 (서비스 간의 통신이 네트워크를 통해 이뤄지기 때문에 오버헤드 발생할 수 있음)
          • 디버깅과 모니터링의 어려움 (서비스가 많아지면 디버깅과 모니터링이 많아져 문제의 원인을 찾기 어려움)
          • 배포 복잡성 (각 서비스를 따로 배포하고 관리해야하므로 전체적인 배포 프로세스가 복잡해질 수 있음)
profile
프론트엔드개발자가 되고 싶어서 열심히 땅굴 파는 자

1개의 댓글

comment-user-thumbnail
2025년 1월 8일

안녕하세요! 개발자 준비하시는 분이나 현업에 종사하고 계신 분들만 할 수 있는 시급 25달러~51달러 LLM 평가 부업 공유합니다~ 제 블로그에 자세하게 써놓았으니 관심있으시면 한 번 읽어봐주세요 :)

답글 달기