본문 바로가기

Professional Engineer/SE10

개발자라면 반드시 알아야 할 안티패턴(anti-pattern) 완벽 정리! 개발자라면 반드시 알아야 할 안티패턴(anti-pattern) 완벽 정리!소프트웨어 개발 과정에서 피해야 할 "실패의 패턴"을 알고 있나요? 안티패턴(anti-pattern)은 흔히들 간과하지만, 결국 개발 생산성과 코드 품질을 떨어뜨리는 치명적인 문제로 발전할 수 있습니다. 이번 포스팅에서는 개발, 설계, 아키텍처에서의 주요 안티패턴과 이를 방지하기 위한 팁을 소개합니다. 1. 개발 안티패턴 (Development Anti-patterns)1️⃣ Spaghetti Code (스파게티 코드)정의: 구조 없이 복잡하게 얽힌 코드로 인해 유지보수가 어렵고 디버깅이 악몽이 되는 코드.문제점: 가독성 저하, 유지보수 비용 증가, 새로운 요구사항 반영의 어려움.예방 방법: 코드를 모듈화하고, 명확한 코딩 규칙 및.. 2024. 12. 20.
RAD(Rapid Application Development) 정의- 2~3개월 동안의 짧은 개발 주기 동안 개발 툴을 적극적으로 사용하여 소프트웨어를 개발하는 프로세스 모형 키워드- JRP, JAD, Construction Phase, Cutover, Time-Boxing 메커니즘 기술요소구성요소설명JRP (요구분석정의)- Joint Requirement Planning- 분석단계로 사용자와 함께 요구사항을 분석하고 계획을 세우는 단계JAD (사용자설계)- Joint Application Design- 설계단계로 사용자와 함께 개략적 모델링 이후 설계를 진행- 빠른 구현을 위한 CASE Tool 활용Construction Phase- SDLC의 개발 Task와 유사Cut Over- 대상 시스템의 설계와 개발을 완료하고 테스트한 후 운영에 필요한 매뉴얼 2024. 9. 24.
반복적 개발(증분형/진화형 개발모델) 정의- 사용자의 요구사항 일부분 혹은 제품의 일부분을 반복적으로 개발하여 고품질의 최종 시스템으로 완성해 가는 모델 키워드- 점증적 반복, 증분형 (요구사항 명확, 병행), 진화형 (요구 불명확, N단계 진화) 메커니즘증분형 개발모델[정의]사용자 요구사항 또는 제품의 일부분을 반복적으로 개발하면서 대상범위를 확대해 최종제품을 완성하는 방법[특징]1. 병렬 개발 수행 가능2. 고객요구사항 반영 진화형 개발모델[정의]시스템이 가지는 여러 구성요소의 핵심 부분을 개발한 후 각 구성 요소를 지속적으로 발전시켜 나가는 방법 [특징]1. 프로토타입2. 고객요구사항 정의가 어려운 경우 항목증분형 모형진화적 모형정의폭포수 모형에 반복적 수행 개념을 결합, 증분을 반복하여 최종 시스템을 구현하는 개발 모형핵심 요구사항을.. 2024. 9. 24.
Spiral 모델 정의- 시스템 개발 중 생기는 위험을 최소화하기 위해 나선을 돌면서 점진적으로 개발하는 모델 키워드- 계획 및 정의, 위험분석, 개발, 고객의 평가, 위험 최소화 메커니즘① 계획 및 정의 → ② 위험분석 → ③ 개발 → ④ 고객 평가 단계를 반복하여 점진적으로 개발기술요소계획 및 정의 단계(Planning and Definition) - 초기 요구분석 및 프로젝트 계획 수립 - 프로젝트 위험 식별 및 상세 관리 계획 수립 - 프로세스 각 단계에 대한 목표수립 - 프로젝트 단계별 계획서 - Risk Check List 위험분석 단계(Risk Analysis) - 위험 분석·평가하여 감소시키는 활동 - 식별된 위험의 종류에 따라 상세 분류 수행 - 위험 분석서 - 상세 분석서 개발 단계(Engineering.. 2024. 9. 24.
프로토타입 모델 정의- 사용자의 요구사항을 충분히 분석할 목적으로 짧은 시간 내에 시제품을 개발하여 평가한 후 구현하는 점진적 개발 모델 키워드- 프로토타입(시제품), 의사소통, 실험적 프로토타입, 진화적 프로토타입 메커니즘 기술요소계획수립  - 시스템 개발 계획 수립하고, 시스템의 전체적인 수립 - 시스템정의서 - 프로젝트 계획서 요구분석과 정의 - 고객의 요구사항을 정리하고 명세화 하는 단계로 명세화 방법으로 프로토타입을 사용 - 요구분석서 - 요구사항정의서 - 프로토타입 식별 Prototype(개발/개선) - 핵심기능을 가지고 구현 프로토타입의 대상선정하고 방향 및 내용을 명세화 한 설계서로 프로토타입을 구축 - 프로토타입 설계서 Prototype(검토/평가) - 개발된 프로토타입에 대한 고객의 평가를 실시하여, .. 2024. 9. 24.
폭포수 모델(애자일 비교) 정의- 분석, 설계, 개발, 구현, 시험 및 유지보수 과정을 단계별로 구분하여 순차적으로 접근하는 방법 키워드- 순차적, 산출물중심, 단계적 테스팅, 정식변경절차 수행(Frozen Delivery), 고전적 모델 메커니즘 기술요소장점 관리 용이  - 간결하고 이해하기 쉬움 체계적 문서화  - 단계별 정형화된 접근법으로 체계적 문서화 가능 변화가 적은 프로젝트  - 요구사항 변화가 적은 프로젝트에 적합 - 비교적 소규모 프로젝트 개발에 유리 단점 단계적 진행 - 앞 단계가 끝날 때까지 대기, 개발완료전에 사용자가 원하는 것을 정확 히 알 수 없음 오류/변경에 취약 - 단계 결과물이 완벽하지 않으면 다음 단계에 오류가 전파, 요구사항 변경시 전체일정에 부담 폭포수 모델과 애자일 모델의 비교핵심요소 - Pha.. 2024. 9. 24.
좋은 소프트웨어의 조건 정의- 좋은 소프트웨어는 ‘사용자의 요구사항을 만족’하고 ‘정확하게 동작’하며 ‘쉬운 사용방법’과 ‘좋은 코드’로 개발된 소프트웨어  메커니즘 기술요소정확성(Correctness) - 기능적으로 맞게 동작하는가, 표준에 적합한가? - 요구 분석서의 기능과 일치하는지 점검  신뢰성(Reliability) - 소프트웨어가 주어진 기간 동안 바르게 작동할 확률 - 오류 발생 확률에 반비례 - 정확성 제공하기 위한 필요조건  강인성(Robustness) - 요구 명세에 표시하지 않은 상황(오류 입력)에서도 제대로 작동하는 성질  성능(Performance) - 수행 속도, 데이터/트랜잭션 처리량 - 알고리즘의 시간 복잡도 - 시뮬레이션, 스트레스 테스트  사용 용이성(Usability) - 시스템을 친근하게 느.. 2024. 9. 24.
소프트웨어 공학 정의 및 발전 원리 정의- 소프트웨어의 개발, 운용, 유지보수 등의 생명 주기 전반을 소프트웨어 원리, 지식, 도구 등을 적용하여, 체계적이고 서술적이며 정량적으로 다루는 학문으로, 소프트웨어 제품 개발에 공학적 기법을 적용한 공학 키워드- 소프트웨어 공학 지식 체계(SWEBOK)(Software Engineering Body of Knowledge), 소프트웨어 원리, 지식, 도구 메커니즘 기술요소비가시성(Invisibility) - 소프트웨어의 생산물 구조가 외부에 노출되지 않고 코드에 내재되어 있음  복잡성(Complexity) - 정형적 구조가 없어 개발과정이 복잡하고 전산화 대상 업무, 소프트웨어 시스템 자체가 난해함.- 비규칙적, 비정규적  변경성(Changeability) - 필요에 따라 항상 수정이 가능(진화.. 2024. 9. 24.
정보 은닉(Information Hiding) 내부 구현정보, 데이터 보호위해 은닉개체의 공용 인터페이스로만 접근가능한 특징1. 클래스 정의:    - 관련 데이터와 메서드를 그룹화하여 클래스를 생성합니다.    - 추상화: 복잡한 시스템에서 핵심적인 개념이나 기능을 추출합니다. 2. 접근 제어자 사용:    - private, protected, public 등의 접근 제어자로 멤버의 가시성을 제한합니다. 3. 캡슐화 적용:    - 데이터(속성)를 private으로 선언합니다.    - public 메서드(getter/setter)를 통해 데이터에 접근합니다.    - 데이터와 그 데이터를 처리하는 메서드를 하나의 단위로 묶습니다. 4. 추상 클래스 및 메서드 정의:    - 추상화를 구현하기 위해 추상 클래스와 추상 메서드를 사용합니다.    .. 2024. 8. 2.
형상관리(Conflguration Management) SDLC 과정의 단계별 산출물을 관리하여 가시성과 추적성을 부여, 품질을 향상시키는 관리 방법형상식별, 형상 통제, 형상 감사, 형상 기록기능 분배 설계 시험 제품 운영 변경통제 위원회(CCB)1. Centralized Version Control System (CVCS):    - 대표적 도구: SVN (Subversion), CVS (Concurrent Versions System), Perforce    - 특징:      - 단일 중앙 서버에 모든 버전 정보 저장      - 개발자들은 최신 버전만 체크아웃하여 작업      - 인터넷 연결이 필요한 작업 환경      - 중앙 서버 장애 시 전체 작업에 영향    - 장점: 간단한 구조, 접근 제어 용이    - 단점: 오프라인 작업 제한, 중앙.. 2024. 8. 2.