하드웨어 환경 : 클라이언트와 서버로 구성된다.
서버의 종류
WWDF(서버가 음식을 쏟더니 이렇게 말했다. W..What Da-Fuck) - Web Server / WAS(Web Application Server) / DB Server / File Server
웹 서버 : 정적 파일들을 제공.
WAS : 동적 서비스를 제공하거나 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행.
DB 서버 : DB와 DBMS 운영
파일 서버 : DB에 저장하기 비효율적이거나 서비스 제공이 목적인 파일들을 저장함
웹 서버의 기능
H 정통 대 가인(정통 Himnae맨 vs(대) 가인) - HTTP 지원 / 통신 기록 / 정적 파일 관리 / 대역폭 제한 / 가상 호스팅 / 인증
개발 언어의 선정 기준
이친 범 효적(이 미친 범인 호(효)적에서 파버릴거야) - 이식성 / 친밀성 / 범용성 / 효율성 / 적정성
이식성 : 다양한 시스템 및 환경에 적용이 가능해야 함
친밀성 : 개발자들의 이해도와 활용도가 높아야 함
범용성 : 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 함
효율성 : 작성 및 구현이 효율적이어야 함
적정성 : 목적에 적합해야 함
소프트웨어 아키텍처 : 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
소프트웨어 아키텍처의 기본 원리
모추단닉 - 모듈화 / 추상화 / 단계적 분해 / 정보 은닉
모듈화(Modluarization) : 시스템의 기능들을 모듈 단위로 나누는 것
추상화(Abstraction) : 전체적인 개념을 설계한 후 구체화시켜나가는 것 (과데제 - 과정(흐름) / 데이터 / 제어(이벤트))
단계적 분해(Stepwise Refinement) : 상위 중요 개념으로부터 하위의 개념으로 구체화시키는 분할 기법
정보 은닉(Information Hiding) : 모듈 내부에 포함된 절차와 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
상위설계 : 예아(Yeah-) - 예비 설계, 아키텍처 설계
하위설계 : 상모 - 상세 설계, 모듈 설계
품질 평가 요소의 종류
시비아 - 시스템 / 비즈니스 / 아키텍처
시스템 측면 : 용사 가보 확성기 - 변경 용이성 / 사용성 / 가용성 / 보안 / 확장성 / 성능 / 기능성
비즈니스 측면 : 시비예목공 - 시장 적시성 / 비용과 혜택 / 예상 시스템 수명 / 목표 시장 / 공개 일정 (대충 이건 안 외워도 감으로 알수 있음)
아키텍처 측면 : 개정완구변시 - 개념적 무결성 / 정확성 / 완결성 / 구축 가능성 / 변경성 / 시험성
협약(Contract)에 의한 설계 : 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
선결불 - 선행 조건 / 결과 조건 / 불변 조건
아키텍처 패턴
레클파모 마브 피벤블인 - 레이어 패턴 / 클라이언트-서버 패턴 / 파이프-필터 패턴 / 모델-뷰-컨트롤러 패턴 / 마스터-슬레이브 패턴 / 브로커 패턴 / 피어-투-피어 패턴 / 이벤트-버스 패턴 / 블랙보드 패턴 / 인터프리터 패턴
레이어(Layer) 패턴 : 시스템을 계층으로 구분하여 구성하는 패턴. 하위 계층은 서비스 제공자, 상위 계층은 클라이언트가 된다.
클라이언트-서버(Client-Server) 패턴 : 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성되는 패턴.
파이프-필터(Pipe-Filter) 패턴 : 서브시스템이 입력 데이터를 받아 처리하고 결과를 다음 서브시스템으로 넘겨주는 과정을 반복하는 패턴.
모델-뷰-컨트롤러(MVC) 패턴 : 서브시스템을 모델, 뷰, 컨트롤러로 구조화하는 패턴.
마스터-슬레이브(Master-Slave) 패턴 : 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 수행되는 패턴. (병렬)
브로커(Broker) 패턴 : 브로커 컴포넌트에 요청하면 요청에 맞는 컴포넌트와 사용자를 연결해주는 패턴. (분산)
피어-투-피어(Peer-To-Peer) 패턴 : 피어 컴포넌트가 클라이언트가 될 수도, 서버가 될 수도 있는 패턴. (파일 공유)
이벤트-버스(Event-Bus) 패턴 : 이벤트 메시지를 발행하면 채널을 구독한 리스너들이 메시지를 받아 이벤트를 처리하는 패턴. (알림)
블랙보드(Blackboard) 패턴 : 모든 컴포넌트들이 블랙보드 컴포넌트에 접근이 가능한 패턴. (음성 인식, 차량 식별)
인터프리터(Interpreter) 패턴 : 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴. (번역)
객체지향의 구성요소
객클메 - 객체 / 클래스 / 메세지
객체지향의 특징
캡 다 연상(캡틴 아메리카의 여자친구는 다 연상이다.) - 캡슐화 / 상속 / 다형성 / 연관성
객체(Object) : 데이터와 함수를 묶어놓은 소프트웨어 모듈.
클래스(Class) : 공통된 속성과 연산을 갖는 객체의 집합.
메시지(Message) : 객체들 간의 상호작용을 하는데 사용되는 수단.
캡슐화(Encapsulation) : 외부에서의 접근을 제한하기 위해 세부 내용을 은닉하는 것.
다형성(Polymorphism) : 하나의 메시지에 대해 각각의 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력.
연관성(Relationship) : 두 개 이상의 객체들이 상호 참조하는 관계
상속(Inheritance) : 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것.
연관성의 종류
연 일집분 (연관이는 행동반경이 일집뿐(분)이다.) - 연관화 / 일반화 / 집단화 / 분류화
연관화 : is member of (연관이는 멤멤(mem) 우는 매미가 싫다.)
일반화 : is a (a는 알파벳의 1(일)번째 숫자.)
집단화 : is part of (파트 타임 근무자들이 집단으로 무단결근을 했다.)
분류화 : is instance of (인스턴트(스) 음식은 쓰레기 음식으로 분류되었다.)
객체지향 분석의 방법론
RBJCW (Red Black Jack Coke is Wonderful) - Rumbaugh / Booch / Jacobson / Coad-Yourdon / Wirfs-Brock
럼바우 방법 : 모든 소프트웨어 구성요소를 그래픽 표기법을 이용해 모델링하는 기법. (객동기 - 객체->동적->기능)
객체(Object, Information) 모델링 : 정보 모델링
동적(Dynamic) 모델링 : 상태 다이어그램을 이용
기능(Functional) 모델링 : 자료 흐름도(DFD)를 이용
부치 방법 : 미시적, 거시적 프로세스 사용. (미시 거시 부치)
Jacobson 방법 : 유스케이스를 강조하여 사용. (Ja유~)
Coad-Yourdon 방법 : E-R 다이어그램을 사용. (CYER. QWER 아님)
Wirfs-Brock 방법 : 고객 명세서를 평가, 분석과 설계의 구분 없이 연속적으로 수행. (고객님이 저의 Wife가 되셨어요.)
객체지향 설계 원칙
SOLID - SRP / OCP / LSP / ISP / DIP
단일 책임(Single Responsible) 원칙 : 객체는 단 하나의 책임만 가져야 한다는 원칙
개방-폐쇄(Open-Closed) 원칙 : 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야한다는 원칙
리스코프 치환(Liscov Subsitution) 원칙 : 자식 클래스는 최소한 부모 클래스의 기능은 수행할 수 있어야 한다는 원칙
(리스코프씨가 아이들에게 말했다. "요즘 애들은.. 쯧쯧. 최소한 니네 부모 발끝만큼은 해야하지 않겠니? 에효 쯧쯧.")
인터페이스 분리(Interface Seperate) 원칙 : 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야한다는 원칙
의존 역설(Dependence Inversion) 원칙 : 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
모듈 : 모듈화를 통해 분리된 시스템의 각 기능
모듈의 독립성 : 결합도(Coupling), 응집도(Cohesion)
결합도
내공외제스자 - 내용(Content) / 공통(공유)(Common) / 외부(External) / 제어(Control) / 스탬프(Stamp) / 자료(Data)
(->오른쪽으로 갈수록 결합도 낮아짐)
내용 결합도 : 직접 참조하거나 수정
공통(공유) 결합도 : 전역변수 사용
외부 결합도 : 외부의 다른 모듈에서 참조
제어 결합도 : 제어 요소 전달
스탬프 결합도 : 자료구조 전달
자료 결합도 : 인터페이스가 자료 요소로만 구성
응집도
우논시절통순기 - 우연적(Coincidental) / 논리적(Logical) / 시간적(Temporal) / 절차적(Procedural) / 통신(교환)적(Communication) / 순차적(Sequential) / 기능적(Functional)
(->오른쪽으로 갈수록 응집도 높아짐)
우연적 응집도 : 내부 구성 요소들이 서로 관련 없음
논리적 응집도 : 요소들이 유사한 성격을 가짐
시간적 응집도 : 특정 시간에 처리되는 기능들이 모임
절차적 응집도 : 순차적으로 수행
통신(교환)적 응집도 : 동일한 입출력을 사용하여 다른 기능을 수행
순차적 응집도 : 출력 데이터를 다음 활동의 입력 데이터로 사용
기능적 응집도 : 요소들이 단일 문제와 연관
팬인(Fan-In) : 어떤 모듈을 제어하는 모듈의 수
팬아웃(Fan-Out) : 어떤 모듈에 의해 제어되는 모듈의 수
N-S 차트(Nassi-Schneiderman Chart) : 논리의 기술에 중점을 둔 도형식 표현 방법.
단위 모듈(Unit Module) : 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
IPC(Inter-Process Communication) : 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
IPC의 대표 메소드 5가지
3S PM(3She 오후(PM)에 Internet PC 통신을 하자.) - Shared Memory / Socket / Semaphores / Pipes&named Pipes / Message Queueing
Shared Memory : 공유가능한 메모리를 구성하여 다수의 프로세스가 통신
Socket : 소켓을 이용
Semaphores : 공유 자원에 대한 접근 제어
Pipes&named Pipes : 선입선출 형태 (프로세스 동시 접근 X)
Message Queueing : 메시지 전달
단위 모듈 테스트 : 모듈이 정해진 기능을 정확히 수행하는지 검증
테스트 케이스 : 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위한 테스트 항목에 대한 명세서
공통 모듈 : 여러 프로그램에서 공통으로 사용할 수 있는 모듈
공통 모듈 명세 기법의 종류
정명완일추 - 정확성 / 명확성 / 완전성 / 일관성 / 추적성
정확성(Correctness) : 정확히 작성
명확성(Clarity) : 중의적으로 해석되지 않도록 작성
완전성(Completeness) : 모든 것을 기술함
일관성(Consistency) : 공통 기능 간 상호 충돌이 발생하지 않도록 작성
추적성(Traceability) : 출처, 관계를 파악할 수 있도록 작성
재사용(Reuse) : 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기에 적합하도록 최적화하는 작업
재사용 규모에 따른 분류
함컴애 - 함수와 객체 / 컴포넌트 / 애플리케이션
컴포넌트 : 명백한 역할을 가지고 독립적으로 존재할 수 있는 시스템의 부분. 넓은 의미에서는 재사용되는 모든 단위라고 볼 수 있음. 인터페이스를 통해서만 접근 가능함.
코드의 주요 기능
배 분간 표식(배를 분간하기 위해 표식을 그려놨다.) - 배열 기능 / 분류 기능 / 간소화 기능 / 표준화 기능 / 식별 기능
코드의 종류
순블연 그표합10(순한맛 블랙 공연, 그 표를 합치면 10개다.) - 순차 코드 / 블록 코드 / 연상 코드 / 그룹 분류 코드 / 표의 숫자 코드 / 합성 코드 / 10진 코드
순차(Sequence) 코드 : 순서대로
블록(Block) 코드(=구분 코드) : 공통성이 있는 것끼리 블록으로 구분
연상(Mnemonic) 코드 : 관계있는 숫자나 문자, 기호 사용 (ex. TV-40 <- 40인치 TV)
그룹 분류(Group Classification) 코드 : 대분류, 중분류, 소분류 등으로 구분
표의 숫자(Significant Digit) 코드 : 물리적 수치를 적용 (ex. 120-720-1500 <- 두께x폭x길이가 120x720x1500인 강판)
10진(Decimal)코드 : 10진 분할을 필요한 만큼 반복
디자인 패턴 : 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
생구행 - 생성 / 구조 / 행위
생성 패턴(Creational Pattern)
프로빌더 싱글 팩토리(프로틴 먹는 보디빌더는 아직 싱글이라 애인을 생성하기 위해 팩토리에서 일한다.) - 프로토타입 / 빌더 / 싱글톤 / 추상 팩토리 / 팩토리 메소드
프로토타입(Prototype) : 원본 객체를 복제하는 방법으로 객체 생성.
빌더(Builder) : 인스턴스를 건축하듯 조합.
싱글톤(Singleton) : 하나의 객체를 생성하면 어디서든 참조할 수 있지만 여러 프로세스가 동시에 참조하진 못함.
추상 팩토리(Abstract Factory) : 인터페이스를 통해 그룹으로 생성하여 추상적으로 표현.
팩토리 메소드(Factory Method) (=가상 생성자 패턴) : 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화.
구조 패턴(Structural Pattern)
어브컴데 퍼플프 - 어댑터 / 브리지 / 컴포지트 / 데코레이터 / 퍼싸드 / 플라이웨이트 / 프록시
어댑터(Adapter) : 호환성이 없는 클래스들의 인터페이스를 변환해줌
브리지(Bridge) : 서로가 독립적으로 확장할 수 있도록 구성
컴포지트(Composite) : 복합 객체와 단일 객체를 구분 없이 다룸
데코레이터(Decorator) : 기능 확장, 부가적인 기능 추가를 위해 객체 덧붙이는 방식 사용
퍼싸드(Facade) : 서브 클래스들의 기능 간편화. Wrapper 객체 필요
플라이웨이트(Flyweight) : 인스턴스 공유로 메모리 절약
프록시(Proxy) :대리자. 외부에서 세부적인 내용을 숨김
행위 패턴(Behavioral Pattern)
(줄임말은 걍 위에 두 패턴만 외우는게 편할듯 행위 패턴 너무 많아서.. 위에 포함되지 않는 건 다 행위 패턴인걸로)
책임 연쇄(Chain of Responsibility) : 요청이 해결될 때까지 고리를 따라 책임이 넘어감
커맨드(Command) : 명령어들을 단순화함
인터프리터(Interpreter) : SQL이나 통신 프로토콜 개발 등에 사용
반복자(Iterator) : 접근이 잦은 객체에 대해 동일한 인터페이스 사용
중재자(Mediator) : 상호작용을 캡슐화
메멘토(Memento) : 해당 시점의 상태로 돌릴 수 있는 기능을 제공
옵서버(Observer) : 상태 변화 시 변화된 상태를 전달
상태(State) : 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용
전략(Strategy) : 알고리즘을 캡슐화
탬플릿 메소드(Template Method) : 상위 클래스에서 골격을 정의, 하위 클래스에서 구체화
방문자(Visitor) : 처리 기능을 분리 후 방문
통합 개발 환경(IDE; Integrated Development Environment) : 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 환경
이비엑안I - 이클립스(PHP) / 비주얼 스튜디오(Basic) / 엑스 코드(AppleScript) / 안드로이드 스튜디오 / IDEA(Kotlin)
(괄호 안에 든 것은 지원 언어. 근데 일단 겹치지 않는 것들만 적어놓았음. 지원 언어 더 많음.)
(이비인후과에 가서 엑스레이 찍었더니 안과에 가라고 했다. I인 나는 사람을 또 만나야하는 것이 두렵다.)
빌드 도구 : 소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정 또는 결과물
AMG - Ant / Maven / Gradle
Ant : 자바 공식 빌드 도구
Maven : 의존성 설정하여 라이브러리 관리. 규칙, 표준 존재. (Ant의 업그레이드)
Gradle : 안드로이드 스튜디오 공식 빌드 도구. Groovy 기반. (Ant, Maven의 업그레이드)
서버 개발 : 웹 어플리케이션의 로직을 구현할 서버 프로그램을 제작하여 WAS에 탑재하는 것
서버 개발 프레임워크 : 다양한 것들을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
SNDCR (어제 SNL도 보고 DC 영화도 보고 그랬R) - Spring / Node.js / Django / Codeigniter / Ruby on Rails
Spring : JAVA 기반. 전자정부 표준 프레임워크
Node.js : JavaScript 기반. 입출력이 많을 때 적합
Django : Python 기반. 플러그인화 강조
Codeigniter : PHP 기반. 인터페이스 간편
Ruby on Rails : Ruby 기반. 작업 단순화, 자동화
서버 개발 과정
CSDSD (Candy Soda Soda) - Controller / Service / DAO / SQL / DB
Controller : 사용자 요청에 적절한 서비스 호출 후 결과 반환
Service : 사용자 요청에 응답
DAO(Data Access Object) : DB에 접근
SQL : 데이터의 삽입, 삭제, 변경 수행.
DTO/VO(Data Transfer Object)/(Value Object) : 데이터 교환을 위해 사용할 객체를 만드는 과정(거의 전 과정에서 사용됨)
배치 프로그램(Batch Program) : 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램
배치 프로그램의 필수 요소
안자성 대견(물건 배치하려고 했는데 너가 안자성 대견해~) - 안정성 / 자동화 / 성능 / 대용량 데이터 / 견고성
대용량 데이터 : 대량의 데이터 처리
자동화 : 사용자의 개입 없이 수행
견고성 : 중단되지 않고 수행
안정성 : 오류 발생 시 추적 가능
성능 : 다른 응용 프로그램의 수행을 방해하지 않음. 시간 내 처리 완료되어야 함.
배치 스케줄러(Batch Scheduler) (=Job Scheduler) : 일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원.
배치 스케줄러의 종류
SQC (봄에 로즈 쿼츠가 옥수수(corn 아님)를 따서 배치하는 스케줄을 세웠다.) - Spring / Quartz / Cron
Spring Batch : Spring Source랑 Accenture가 공동 개발
Quartz : 유연성을 제공
Cron : 리눅스의 기본 스케줄러. crontab 명령어로 작업 예약 가능
crontab 명령어 작성 방법
[분][시][일][월][요일]/~~
* * * * */root/com.sh
매일 오후 1시 30분에 실행할 경우
30 13 * * * /root/com.sh
매일 0:30에 3시간마다 실행할 경우
30 */3 * * * /root/com.sh
매월 20일 18~23시 사이 매분마다 실행할 경우
* 18-23 20 * * /root/com.sh
4, 9, 11월의 25일 23시 30분에 실행할 경우
30 23 25 4,9,11 * /root/com.sh
crontab 명령어 작성법은 그렇게 어렵진 않은데 아마 헷갈릴 수 있으니 시험 보기 전에 잘 보기.
'TIL > 기타' 카테고리의 다른 글
정처기 실기 용어정리 (6장) (1) | 2024.10.11 |
---|---|
정처기 실기 용어정리 (5장) (0) | 2024.10.10 |
정처기 실기 용어정리 (3장) (0) | 2024.10.01 |
정처기 실기 용어정리 (2장) (0) | 2024.10.01 |
정처기 실기 용어정리 (1장) (1) | 2024.09.18 |