강의

멘토링

로드맵

로드맵 썸네일

Simple Design - 소프트웨어 개발, 얼마나 단순하게 할 수 있을까?

작성자 프로필 이미지

영록

리팩터링

초급 대상

로드맵 참여중인 유저 프로필 사진
로드맵 참여중인 유저 프로필 사진

23명 참여중

조회수

476

로드맵 코스

Simple Design은 복잡한 소프트웨어 개발 과정을 단순화해서 효율을 높일 수 있는 과정을 안내합니다. 먼저 코드 품질의 기준에서부터 코드 품질을 높이는 다양한 기법들, 단순한 아키텍처를 설계하는 법, 소프트웨어 개발 방법론에서 낭비를 줄이고 효율을 극대화하는 방법들을 다룹니다.


구체적인 강의 내용은 다음과 같습니다. 현재 2강까지 준비되어 있습니다.


1강 - 좋은 코드의 기준

  • 좋은 코드의 기준

    • 가독성을 코드 품질 기준으로 삼지 말자.

    • Kent Beck의 Simple Design

      • 중복을 제거한다.

      • 구성요소를 줄인다.

  • 중복 제거의 어려움

  • 구성요소를 줄이지 못하게 방해하는 관념

  • 코드 품질을 얼마나 높여야 하나?

2강 - 중복 코드 다루기

  • 중복코드가 치명적인 이유

  • 조건문의 중복과 다형성

    • 중복코드 중 가장 나쁜 유형

    • IF문을 최적화하는 방법

    • 본질적인 복잡성과 우발적인 복잡성

  • 약간 다른 중복코드 다루기

  • 인지하기 어려운 중복

    • 평행상속 구조, 파라미터 덩어리, 타입 선언

    • 서버와 클라이언트의 중복

    • 테스트 코드의 중복

    • 문서와 코드의 중복

      • 실용적인 문서 작성법

  • 중복 제거를 도와주는 도구들 - IDE, 메트릭 도구, AI

3강 - Less is more

  • 왜 구성요소의 수를 줄이는 것이 중요한가?

    • 사람 인지능력의 물리적 한계

    • AI 역시 컨텍스트의 크기가 제한되어 있고 토큰 소모량이 차이난다.

  • 구성요소가 늘어날 때는 그에 상응하는 대가를 얻어야 한다.

    • 개인의 주관적이고 심미적인 만족감을 위해 구성요소를 늘리지 말 것.

    • 과도한 일관성을 경계하라.

  • 구성요소를 줄이는데도 우선순위가 있나?

    • Call stack의 깊이

      • 함수 하나만 작다고 이해하기 쉬운 것이 아니다.

    • 조건문

    • 상태

      • 순수함수

      • SSOT

    • 라인 수

  • 대규모 프로젝트를 개발하는 방법

  • 기술스택도 중요하다.

4강 - Simple Design 방법론

  • 팀에서 Simple Design을 추구하는 방법론

  • 객관적이려 노력하는 개인들의 주관적인 판단

  • 코드리뷰 어떻게 할 것인가?

    • 코드리뷰에서의 분쟁을 조정하고 해소하는 법

    • 코드리뷰는 양방향 토론이어야 한다.

    • PR 단위의 코드리뷰만으로는 팀의 코드 품질 수준을 높일 수 없다.

    • 리뷰어에게 암묵적으로 주어지는 권력을 경계하고, 커미터의 권한을 존중하라.

    • 팀의 코드 품질이 곧 리더의 실력이다.

  • Baby Step

    • Big Design Up Front의 폐해

  • 밥 먹기 전에 설거지하기 전략

  • 자동화를 경계하라

  • 코드 품질과 다른 가치의 충돌

    • 코드 품질을 높일 시간이 없다?

  • 전문성의 차이에 따라 다르게

    • 전문가라면 유연하게

    • 초보자라면 철저하게 Simple Design의 원칙들을 따라보자.

  • 우리 팀의 코드 품질 실력을 평가하는 방법

  • 애자일 선언과 익스트림 프로그래밍

5강 - Simple Design 심화과정

  • Kent Beck의 Simple Design에서 지나쳤던 주제, 의도를 드러내라

    • 어떤 의도를 드러내야 하나?

    • 기술적인 개념들이 보존되게 하기

      • OS - 파일, 디렉토리, 소켓, 프로세스, 쓰레드, 비동기/동기, IO

      • 웹 - request, response, header, cookie, session, ...

    • mutator와 accessor를 구분하라.

  • Test Driven Development

  • 리팩터링과 Code Smell 살펴보기

6강 - Simple Design 데이터베이스

  • 데이터베이스의 종류와 선택 방법

  • 왜 RDBMS가 유리한가?

  • 데이터베이스 정규화

    • 외래키만 정확하게 이해하면 모든 정규화 문제를 풀 수 있다.

  • 인덱스의 활용

  • 역정규화가 필요할 때

  • 더 단순하게 설계하기

  • 데이터베이스 관리 간단하게 하기

  • ORM의 선택 기준

7강 - Simple Design 웹 개발

  • Simple Design의 원칙들을 웹 개발에 극단적으로 적용해본다면?

  • JSON 상하차?

    • 백엔드에서 JSON을 생성하는 과정의 최적화

    • 백엔드, 프론트엔드 간의 코드 중복을 제거하는 다양한 방법

    • 유효성 검사의 최적화

  • Thin controller, Fat model


  • 백엔드와 프론트엔드를 철저하게 나누는 것은 유익한가?

    • 서버 사이드 객체들의 풍부한 기능성을 그대로 프론트엔드에서 사용할 수 있다면?

    • 서버 컴포넌트

    • HTML over the wire

    • HTMX

  • UI 개발 극단적으로 단순화하기

    • 디자인 시스템을 가볍고 실용적으로 설계하고 사용하는 법


    • CSS를 깊이 이해하면 디자인 시스템 열심히 만들 필요가 없다.

  • 예제

8강 - Simple Design DevOps

  • DevOps는 개발과 운영 간의 경계를 허무는 것

  • 시스템 운영도 극단적으로 단순화시켜보자.

    • 이미지 대신 스크립트

    • 멱등성

    • 실용주의 패키지 버전 관리

  • 웹 서비스 환경 구축

  • DevOps 작업에서 중복 제거하기

  • 모니터링에 비싼 툴이 필요한가?

  • 에러가 발생하면 사용자보다 개발자가 먼저 알아차려야 한다.

  • 보안과 편의성의 조화

로드맵 상세보기

2개 코스

로드맵에 포함된 강의 썸네일
인프런
[인프런] Simple Design 개론 - 코드 품질에 대하여
좋은 코드의 기준이 주관적일 수 밖에 없는지, 좀더 객관적으로 판단하기 위해 어떤 고민이 필요한지 다 같이 생각해봅시다.

무료

로드맵에 포함된 강의 썸네일
이 강의는 Simple Design 시리즈의 두번째 강의입니다. Simple Design은 좋은 코드를 만들기 위한 방법으로 다음의 두 가지를 제안합니다.

1. 중복 코드를 제거한다.
2. 그러면서 구성요소를 줄일 방법을 찾는다.

첫번째 강의(무료 강의)를 먼저 보고 오시면 좋습니다. https://inf.run/L1wf8


이 강의는 이 중에 첫번째에 초점을 맞춥니다.

3,300

11,000

로드맵 코스 2