소프트웨어 개발자/SW 개발론 9

[SW 개발] 의존성 주입 (DI, Dependency Injection)

DI (Dependency Injection) 란?하나의 객체가 다른 객체를 필요로 할 때(의존성을 가진다), 객체를 클래스 내부에서 직접 생성하여 사용하지 않고, 외부에서 생성해 놓은 객체를 사용(주입)하여 결합도를 낮추는 것. DI의 장점결합도 감소: 객체 간의 의존성이 명시적으로 주입되어, 객체들이 직접적으로 결합되지 않아 결합도가 낮아짐.유연성 및 재사용성 증가: 의존성 주입을 통해 객체의 구성 요소를 쉽게 교체하거나 재사용할 가능테스트 용이성: 의존성을 외부에서 주입받기 때문에, 모의 객체(Mock Object)나 테스트 더블(Test Double)을 사용하여 단위 테스트를 쉽게 작성 가능유지 보수성 향상: 의존성이 명확하게 드러나고 관리되므로, 코드의 가독성과 유지보수성 향상 Python DI..

[SW 개발] 소프트웨어 버저닝 방법

Semantic Versioning 주번호(Major), 부번호(Minor), 패치번호(Patch)로 기반의 {major}.{minor}.{patch} 버저닝 방식 - 일반적으로 오픈소스에 자주 사용되는 Versioning 방법 - Major : 큰 변화, 리뉴얼, API 버전 업그레이드- Minor : 신규 기능 추가/변경, 컴포넌트 추가 (하위 버전 API 와 호환 가능) - Patch : 사소한 버그 수정, 약간의 디자인 변경, 리팩토링, (하위 버전과 호환 가능) - 예시 : Python 3.11.4 CalVer (Calendar Versioning) 날짜 기반의 버저닝 방법 - 연도, 월로 구성 - 직관적인 버저닝으로 이해하기 쉽고, 해석이 쉬움 - 예시 : Ubuntu 20.04 Alpha, ..

[클린코드] SOLID 객체 지향 설계 원칙

SOLID 객체 지향 설계 원칙 SOLID는 객체 지향 설계의 다섯가지 원칙을 지칭한다. 클린코드의 한 방법으로 SRP, OCP, LSP, ISP, DIP 원칙이 있다. SRP (Single Responsibility Principle, 단일 책임 원칙) 모든 클래스는 각자 하나의 책임만 가지며 클래스는 그 책임을 완전히 캡슐화 해야 된다는 의미이다. 예로 DB를 1)생성 및 초기화 2) 데이터 삽입, 삭제 역할을 수행하는 A 클래스가 있다고 가정하면, 이를 우리는 SRP 원칙에 따라 A클래스의 역할을 B클래스로 분리할 수 있다. A클래스 : DB 생성 및 초기화 B클래스 : DB 데이터 삽입, 삭제 이렇게 SRP (단일 책임 원칙)을 지킨 경우, 클래스에 대한 외부 영향도를 최소화 할 수 있고, 유지보..

[SW 개발] 테스트 중심의 개발 TDD (with. Unit, E2E, Integration)

"의도하지 않은 결함 수가 많아지면 개발자는 변경을 주저한다" 테스트 주도 개발 (TDD) 란? Test Driven Development 의 약자로 테스트 주도 개발이란는 뜻을 가지는 소프트웨어 개발 방법론 중 하나이다. 작성한 코드의 검증이나 수정(리팩토링)시 기능이 의도한대로 동작하는지 체크할 때 사용 검증 절차를 통한 안정성을 높여 준다. 테스트 종류 구현한 코드가 정상적으로 작동하는지 확인하기 위해선 테스트가 필요한데, 테스트를 하고자 하는 범위(상황)에 따라 다양한 테스트 방법이 등장했다. UnitTest (단위테스트) EndtoEnd Test (종단 테스트) Integration Test (통합 테스트) Unit Test 함수 or Class 등 코드의 작은 부분을 테스트 하는 방식 ex. ..

[SW 개발] MSA vs 모놀리식

Monolithic Architecture (모놀리식 아키텍쳐) 👉 장점 서비스의 개발 환경이 동일해 복잡하지 않다. End-to-End 테스트와 개발 및 관리가 용이 👉 단점 프로젝트의 규모가 커지면 작은 부분을 수정하더라도 전체를 다시 빌드 & 배포 해야 한다. 특정 부분의 오류로 인해 전체 서비스에 문제가 생길 수 있다. 시스템이 거대해질 수록 코드를 이해하기 어려워지고, 유지보수하기가 어려워진다. MSA (Micro Service Architecture) 👉 장점 서비스별로 독립적으로 모듈을 나눠 구현함으로서, 개발이 용이 (빌드 및 테스트 시간 단축)하다. 특정 서비스가 버그가 생겨 중단되더라도, 전체 서비스에는 영향을 미치지 않는다. 폴리그랏 아키텍쳐 구성이 가능하여 (폴리그랏 : 여러 언어(..

[SW 개발] Agile, Scrum, Sprint, Waterfall

Agile 방법론 vs Waterfall 방법론 Agile은 SW 개발 방식의 한 종류로, "개발 간 필요사항을 피드백을 바탕으로 주도적으로 개발" 해 나가겠다는 것을 의미 폭포수 방법론은 단계별로 진행하는데, 다음 단계로 가기전 완벽하게 요구사항을 반영하여 개발했다는 것을 전제함 둘의 가장 큰 차이점은 "불확실성을 관리하는지 여부"로, 폭포수 모델은 초기에 모든 요구사항을 세세하게 정의 후 진행하기 때문에 기술의 불확실성을 확실하게 잡고 가는 반면, Agile 모델은 개발 중간중간 피드백을 반영하면서, 요구사항과 기술에 대한 불확실성이 높다는 것을 반영하여, 프로젝트를 진행하면서 수정해 나간다. Agile 방법론의 Scrum Scrum은 Sprint(스프린트)라는 대규모 프로젝트를 일정 단위(ex. 1..

[SW 개발] PoC, Prototype, Pilot, MVP 란?

일반적으로 SW(서비스)를 개발하면서, 어떠한 수준의 제품을 만들 것인 가에 대한 몇가지 단계가 존재한다. 크게 PoC(Proof of Concept, 개념증명), Prototype(프로토타입), Pilot(시범적용), MVP(Minimum Viable Product, 최소 실행 가능 제품) 정도가 있다. 한 줄 설명 PoC, Prototype, Pilot, MVP 각각을 한 줄로 설명하면 다음과 같다. PoC 어떠한 아이디어가 실현 가능한 아이디어 인지 실체화 하는 과정을 통해 기술의 가능성을 증명하는 것 Prototype 시제품이 나오기 전의 제품의 원형으로, 프로토타입은 중요한 기능들이 포함 된 시스템 초기모델 Pilot 전체 확대 전 소규모로 테스트(미연의 오류를 사전 체크) 진행하는 것. (실제..

CSR, SSR, SPA, MPA 정리

CSR (Client-Side Rendering) 작동 방식 1. 웹 브라우저(클라이언트)에서 요청 2. 웹 서버에서 데이터가 없는 HTML, Static 파일을 우선 반환 (빈페이지) 3. 2. 진행 중 클라이언트가 서버에 데이터를 요청 4. 불러온 데이터를 JS로 View를 컨트롤하며 화면이 나타나게 됨. 특징 - 모든 작업을 Clinet Side에서 수행하는 방식 - TTI (Time to Interaction, 페이지 요청시 활동 시작 가능 할 때까지 걸리는 시간)과 TTV(Time to View, 페이지가 보일 때 까지 걸리는 시간)이 동시에 이루어지기 때문에 효율적인 Loading 고려 필요 - Low SEO (Search Engine Optimization) : Body가 대부분 비어있어 S..

동적 웹페이지 개발 (Templates Engine)

웹페이지는 '유저와 데이터를 주고받는지' 여부에 따라 정적 웹페이지와 동적 웹페이지로 나뉘며 대부분의 웹페이지는 동적 웹페이지로 코드 유지보수나 자유도 측면에서 월등히 유리 동적웹페이지 = 웹페이지 (HTML, CSS, JS) + 동적 (Templates) 템플릿 엔진이란? 지정된 템플릿 양식과 데이터를 합쳐 HTML 문서를 출력하는 것. 주로 Server 사이드 / Clinet 사이드 엔진으로 구분됨 웹 템플릿 엔진 종류 각 템플릿 엔진에 따라 다양한 문법을 구사하고 있으며, 대표적인 엔진으로는 Python Flask(Jinja2), Django (Django Template Engine), JavaScript (JSP, Freemaker, Vue, React) 등 존재. (기타. Mako, HamlP..