안내
확인
U
회원관리
로그인
가입
찾기
회원아이디
패스워드
로그인유지
회원아이디
이름
이메일
휴대폰번호
패스워드
패스워드 재입력
회원이용약관 및 개인정보 취급방침에 동의 합니다
회원이용약관 보기
개인정보처리방침 보기
본인 이름 입력
회원가입시 이메일 입력
소프트웨어 공학 기초 가이드 - 이 책 한 권이면 끝!
저자소개
와이웨이브이퍼블리싱
|
박빈
|
2025-02-10
19
읽음
0
0
0
1 / 195 목차보기
처음
1 / 195 목차
다음
로그인
회원가입
와
와이드웨이브
저자소개
서평
출판사평
1장. 소프트웨어 공학이란?
1. 소프트웨어 공학의 정의와 필요성
1.1 소프트웨어 공학의 정의
1.2 소프트웨어 공학의 필요성
2. 소프트웨어 개발과 전통적인 공학의 차이점
3. 소프트웨어의 유형
3.1 시스템 소프트웨어 (System Software)
예제: 간단한 파일 시스템 관리 프로그램 (Python)
3.2 애플리케이션 소프트웨어 (Application Software)
예제: 간단한 웹 애플리케이션 (Flask)
3.3 임베디드 소프트웨어 (Embedded Software)
예제: 간단한 임베디드 장치 시뮬레이션 (Python)
4. 좋은 소프트웨어란 무엇인가?
4.1 유지보수성 (Maintainability)
4.2 확장성 (Scalability)
4.3 안정성 (Reliability)
4.4 보안성 (Security)
예제: 보안 강화된 사용자 로그인 시스템 (Python)
결론
2장. 소프트웨어 개발 프로세스
1. 소프트웨어 개발 생명 주기(SDLC) 개요
1.1 SDLC 단계
2. 폭포수(Waterfall) 모델 vs. 애자일(Agile) 모델
2.1 폭포수(Waterfall) 모델
2.2 애자일(Agile) 모델
3. 스크럼(Scrum)과 칸반(Kanban) 이해하기
3.1 스크럼(Scrum)
3.2 칸반(Kanban)
4. 최신 개발 트렌드: DevOps와 CI/CD
4.1 DevOps
4.2 CI/CD
3장. 요구사항 분석과 정의
1. 소프트웨어 요구사항이란?
2. 기능 요구사항 vs. 비기능 요구사항
2.1 기능 요구사항 (Functional Requirements)
2.2 비기능 요구사항 (Non-Functional Requirements, NFRs)
3. 요구사항 수집 및 분석 기법
3.1 인터뷰 (Interviews)
3.2 브레인스토밍 (Brainstorming)
3.3 프로토타이핑 (Prototyping)
4. 요구사항 명세서(SRS) 작성법
4.1 SRS 문서 구조
결론
4장. 소프트웨어 설계의 원칙과 패턴
1. 좋은 소프트웨어 설계의 원칙
1.1 SOLID 원칙
1.2 DRY (Don't Repeat Yourself)
1.3 KISS (Keep It Simple, Stupid)
2. 디자인 패턴(Design Patterns) 개요
2.1 GoF 디자인 패턴
3. 계층형 아키텍처 vs. 마이크로서비스 아키텍처
3.1 계층형 아키텍처 (Layered Architecture)
3.2 마이크로서비스 아키텍처 (Microservices Architecture)
4. UML(Unified Modeling Language) 기초
4.1 클래스 다이어그램 (Class Diagram)
4.2 시퀀스 다이어그램 (Sequence Diagram)
4.3 유스케이스 다이어그램 (Use Case Diagram)
결론
5장. 프로그래밍 기초와 코드 품질
1. 프로그래밍 언어 선택: 어떤 언어를 배울 것인가?
1.1 프로그래밍 언어 선택 기준
1.2 주요 프로그래밍 언어
2. 클린 코드(Clean Code) 작성법
2.1 클린 코드 원칙
3. 버전 관리 시스템(Git)과 협업 워크플로우
3.1 Git의 핵심 개념
3.2 Git 기본 명령어
3.3 협업 워크플로우 (Git Flow)
4. 코드 리뷰와 리팩토링
4.1 코드 리뷰(Code Review)
4.2 리팩토링(Refactoring)
결론
6장. 데이터베이스와 시스템 설계
1. 데이터베이스의 기본 개념 (RDBMS vs. NoSQL)
1.1 관계형 데이터베이스(RDBMS)
1.2 NoSQL 데이터베이스
2. SQL 기초 (CRUD, JOIN, INDEX)
2.1 CRUD 연산
2.2 JOIN (테이블 간 관계 연결)
2.3 INDEX (조회 성능 최적화)
3. 데이터 모델링과 정규화
3.1 데이터 모델링
3.2 정규화(Normalization)
4. 시스템 설계 개요 (확장성, 가용성, 성능 고려)
4.1 확장성 (Scalability)
4.2 가용성 (Availability)
4.3 성능 고려
결론
7장. 소프트웨어 테스팅
1. 소프트웨어 테스트의 중요성
1.1 테스트의 목적
2. 단위 테스트(Unit Test) vs. 통합 테스트(Integration Test)
2.1 단위 테스트 (Unit Test)
2.2 통합 테스트 (Integration Test)
3. 자동화 테스트와 테스트 주도 개발(TDD)
3.1 자동화 테스트
3.2 테스트 주도 개발(TDD)
4. 성능 테스트 및 보안 테스트 개요
4.1 성능 테스트 (Performance Testing)
4.2 보안 테스트 (Security Testing)
결론
8장. 프로젝트 관리와 협업
1. 소프트웨어 프로젝트 관리 개요
1.1 프로젝트 관리 주요 요소
2. 애자일(Agile)과 스크럼(Scrum) 실무 적용
2.1 애자일(Agile) 개발 방식
2.2 스크럼(Scrum) 개요
2.3 실전 예제: 스프린트 계획
3. 협업 도구 (JIRA, Trello, Notion)
3.1 JIRA
3.2 Trello
3.3 Notion
4. 문서화의 중요성과 API 문서 작성법
4.1 문서화의 중요성
4.2 API 문서 작성법
4.3 실전 예제: Swagger를 활용한 API 문서 작성
결론
9장. 소프트웨어 보안 기초
1. 보안이 중요한 이유: 해킹 사례와 교훈
1.1 유명 해킹 사례
2. OWASP Top 10: 주요 웹 보안 취약점
2.1 OWASP Top 10 주요 항목
2.2 SQL Injection 실전 예제 및 방어 코드
❌ 취약한 코드
✅ 보안 강화 코드 (Prepared Statement 사용)
3. 보안 코드 작성법과 인증(Authentication) 기초
3.1 안전한 인증 시스템 구현
❌ 취약한 비밀번호 저장 방식
✅ 안전한 비밀번호 해싱 및 검증
3.2 JWT(JSON Web Token) 기반 인증 예제
✅ JWT 생성 및 검증 코드 (Python - PyJWT)
4. 데이터 암호화와 개인 정보 보호
4.1 데이터 암호화의 필요성
4.2 대칭키 암호화 vs. 비대칭키 암호화
4.3 실전 예제: AES 대칭키 암호화 (Python - PyCryptodome)
결론
10장. 배포와 운영 (DevOps)
1. 소프트웨어 배포 개념과 배포 전략
1.1 소프트웨어 배포 개념
1.2 배포 전략
1.3 실전 예제: 블루-그린 배포
2. 컨테이너 기술 (Docker, Kubernetes)
2.1 Docker 개요
2.2 Kubernetes 개요
3. CI/CD 파이프라인 구축 (Jenkins, GitHub Actions)
3.1 CI/CD 개요
3.2 Jenkins를 활용한 CI/CD
3.3 GitHub Actions를 활용한 CI/CD
4. 클라우드와 서버리스(Serverless) 개요
4.1 클라우드 컴퓨팅 개요
4.2 서버리스(Serverless) 개념
4.3 실전 예제: AWS Lambda를 활용한 서버리스 함수
결론
11장. 소프트웨어 유지보수와 성능 최적화
1. 유지보수 유형 (수정, 적응, 예방, 완화)
1.1 수정 유지보수 (Corrective Maintenance)
1.2 적응 유지보수 (Adaptive Maintenance)
1.3 예방 유지보수 (Preventive Maintenance)
1.4 완화 유지보수 (Perfective Maintenance)
2. 성능 최적화를 위한 프로파일링과 모니터링
2.1 프로파일링 (Profiling)
2.2 모니터링 (Monitoring)
3. 로그(Log) 관리와 분석
3.1 로그의 중요성
3.2 실전 예제: Python 로그 설정
3.3 중앙 집중형 로그 관리
4. 레거시 코드 유지보수 전략
4.1 레거시 코드란?
4.2 유지보수 전략
4.3 실전 예제: 코드 리팩토링
결론
12장. 소프트웨어 개발자로 성장하기
1. 소프트웨어 개발자의 커리어 패스
1.1 프론트엔드 개발자 (Frontend Developer)
1.2 백엔드 개발자 (Backend Developer)
1.3 풀스택 개발자 (Full Stack Developer)
1.4 모바일 개발자 (Mobile Developer)
1.5 DevOps 엔지니어
1.6 데이터 엔지니어 / 데이터 사이언티스트
1.7 보안 엔지니어
2. 기술 블로그 및 오픈소스 기여
2.1 기술 블로그 운영의 중요성
2.2 오픈소스 프로젝트 기여
3. 소프트웨어 공학 관련 추천 서적과 학습 자료
3.1 필독 서적 추천
3.2 온라인 학습 자료
4. 변화하는 기술 트렌드에 적응하는 법
4.1 최신 기술 동향을 파악하는 방법
4.2 꾸준한 학습과 스킬 업그레이드
4.3 개발자 커뮤니티 및 네트워킹
결론
판 권