객체 지향 소프트웨어 개발 과정
객체지향기술을 사용하여 소프트웨어를 개발하고자 한다면 OOSD를 사용해야 함
사전적 의미로는 경험에 의해 얻어진 방법, 규칙, 가정들의 집합
소프트웨어 개발에서 방법론은 개발과정의 가장 고수준으로 얘기되어짐
근래의 많은 방법론은 Inception, Elaboration, Construction, Transition 이렇게 4단계로 구성되어짐
이들 단계는 다시 세부적인 워크플로우(Workflow)로 구성되어지고 이 워크플로우는 특별한 Activities(동적행위)로 이루어짐
Activities는 Worker(워커)와 Artifacts(산출물)를 포함
Worker : activity를 수행할 사람
Artifacts : activity에 의해 산출된 유형의 정보 조각, 예를 들어 다이어그램들이나 문서, 소프트웨어 코드 등을 말함
모든 방법론들은 단계라는 것을 갖는데, 각각의 단계에서는 해야할 일의 그룹이 생김, 그것을 워크플로우라 부름

1. 요구사항 수집
2. 요구사항 분석
3. 아키텍쳐 수립
4. 디자인
5. 구현
6. 테스트
7. 배치
(vs 절차적 패러다임)
1. 유기적 구조
2. 소프트웨어 변경 능력
3. 재사용
4. 특수한 경우의 구성
5. 기능의 분리
다형성은 철학의 의미 뿐만 아니라 속도에 영향을 줄 수 있음

클라우드 엔지니어는 deployment specialist에 해당
모델이란 어떤 엔티티 또는 시스템의 추상적 개념화
모델은 그것의 본질로 추상화 되어짐
또한 모델은 여러 다른 사물들(예를 들어, 빌딩이나 컴퓨터 네트웍 같은 물리적 사물들이나 소프트웨어와 같은 관념적 사물들까지도)로 표현 될 수도 있음
(하려고 하고자 하는 일을 가시적으로 단순화)
모델은 어떻게 바라보느냐에 따라 다양한 뷰가 나올 수 있음
예를 들어 건축가는 집을 지을 때 평면도, 정면도, 투시도와 같은 다양한 관점에서의 그림을 그림
소프트웨어도 마찬가지로 이러한 여러 관점에서의 그림을 그리게 됨
모델링은 다음과 같은 것을 가능하게 함
새 시스템이나 기존 시스템의 가시화
프로젝트 stakeholder들간의 의사소통을 원활히 함
어떤 모델은 비즈니스 오너, 도메인 전문가 그리고 다른 클라이언트 참가자들과의 이해를 돕는데 필수적
또 어떤 모델은 개발팀내에서 사용하는데 더 유용할 수도 있음
각 OOSD 워크플로우에서 만들어지는 결정의 문서화
개발팀의 크기에 따라 모든 팀원들이 같은 워크플로우를 진행할 수 있는 것은 아님
각 역할 구성원들이 다른 작업을 수행하면서 이루어지는 모든 프로젝트에 관한 결정은 문서화 되어야만 이후에 다른 구성원들에게 전달되어 사용될 수 있을 것임

1. 프로젝트 참가자들의 구상 모델(Stakeholders Mental Model)을 수집
프로젝트 참가자(이해관계자)들이 가지고 있는 시스템에 대한 생각과 기대를 수집
이는 시스템의 요구사항을 정의하는 기초가 됨
2. 시스템이 최종적으로 가져야 할 모든 요구 사항 모델(Requirements Model)을 구상
3. 시스템의 비기능적 요구 사항을 적용한 아키텍처 모델(Architecture Model)과 시스템의 기능적 요구 사항을 적용한 디자인 모델(Design Model) 생성
아키텍처 모델: 시스템의 구조를 정의하고 비기능적 요구사항(NFRs)을 반영
디자인 모델: 시스템의 세부 설계를 정의하고 기능적 요구사항(FRs)을 반영
4. 솔루션 모델(Solution Model)에서 취합, 시스템의 구체적인 형태를 정의
아키텍처 모델과 디자인 모델을 통합하여 시스템의 구체적인 형태를 정의
솔루션 모델은 시스템 구현의 청사진
5. 요구사항 모델에서 정의된 요구사항을 충족한 최종적으로 구현된 소프트웨어 생성

actor은 사람뿐만 아니라 system도 될 수 있음
receptionist는 bookingagent가 하는 일을 모두 다 할 수 있으면서 추가적인 일을 할 수 있음
한번만 실행해도 되는것을 extend
매번 선행해야 하는것을 include
래퍼런스 : 고객 이름(중요하지 않은 래퍼런스는 래퍼런스명 생략 가능)

도메인이 가장 먼저 만들어져야 UI와 Services가 참조

Behavioral : 사용자가 할 수 있는 기능
Structural : 구조적인 기능
Dynamic : 동작 기능

functional programming > 개발 속도, 편의 때문에

영속성
객체가 시공을 넘어서도 존재하는 것을 말함
메모리 주소에 무관하게 저장
RDBMS는 상속 관계가 없음
실무에서는 완전한 객체지향 형태가 아닌 형태가 많음
primary key(유일키)로 identity를 부여
엔티티
독립적 엔티티
의존적 엔티티
외래키 설명 추가
ERD : 엔티티 relationship diagram
처음엔 실선(일반 관계성), 방향 관계성을 갖게 됨
다대다 관계를 유지하기보다는 일대다 관계로 표현하기 위해(분리) 별도의 클래스를 생성
데이터 : 현실에서 측정하거나 보이는 사실이나 값, 순수하게 있는 그대로의 로우(raw) 데이터
정보 : 어떠한 목적이나 의도에 맞게 데이터를 가공한 것을 의미
모든 데이터가 정보이지는 않다
몽고db는 rdb가 아닌 nosql db
document 기반
데이터베이스는 크게 관계형 데이터베이스와 NoSQL로 분류
create database myboard default char set utf8; use myboard; create table post ( id int(11) not null auto_increment, title varchar(100) not null, content text, created datetime not null, writer varchar(100), email varchar(100), primary key(id) ); desc post; insert into post(title, content, created, writer, email) values('삶은', '계란이다', now(), 'lee', 'lee@naver.com'); insert into post(title, content, created, writer, email) values('위대하다', '밥을 많이 먹어서', now(), 'lee', 'lee@naver.com'); insert into post(title, content, created, writer, email) values('나의 성격유형', 'infj', now(), 'lee', 'lee@naver.com'); insert into post(title, content, created, writer, email) values('가을바람', '가을은 쓸쓸하다', now(), 'lee', 'lee@naver.com'); insert into post(title, content, created, writer, email) values('언젠가부터', '사람들과 이해관계가 힘들어지는 것 같다', now(), 'lee', 'lee@naver.com');
select id, title, content from post;
select * from post where id>2;
select * from post where writer='lee';
select * from post order by id desc;
select * from post limit 2;
update post set content='성격 파탄자' where id='3';
delete from post where id=2;
직접 입력하고 Apply 버튼 눌러 적용도 가능
select id, title, content, created, writer, email from post left join profile on post.profile_id = profile.id;
id는 post테이블과 profile테이블 둘 다 포함하고 있어 모호하다는 오류가 뜸select post.id, title, content, created, writer, email from post left join profile on post.profile_id = profile.id;
post.id라고 명확히 지시해주어 오류 해결