728x90
반응형

결합도 Coupling

  • 외부 모듈과의 연관도 또는 모듈 간의 상호의존성을 나타내는 정도
  • 소프트웨어 구조에서 모듈간의 관련성을 측정하는 척도
  • 한 모듈이 변경되기 위해서 다른 모듈의 변경을 요구하는 정도
    • 결합도가 높을 수록 함께 변경해야 하는 모듈의 수가 늘어나게 됨

결합도 특징

  • 모듈 연관성 없음
  • 인터페이스 의존성
  • 복잡성 감소
  • 파급효과 최소화

결합도의 유형

  • 자료 < 스탬프 < 제어 < 외부 < 공통 < 내용
  • 내용 결합도
    • 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우의 결합도
    • 하나의 모듈이 직접적으로 다른 모듈의 내용을 참조할 때 두 모듈은 내용적으로 결합된 경우의 결합도
  • 공통 결합도
    • 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고, 전역 변수를 갱신하는 식으로 상호작용 하는 경우의 결합도
  • 외부 결합도
    • 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우의 결합도
  • 제어 결합도
    • 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어 신호를 이용해 통신하는 경우의 결합도
    • 하위 모듈에서 상위 모듈로 제어 신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도 현상 발생하는 결합도
  • 스탬프 결합도
    • 모듈 간의 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우의 결합도
  • 자료 결합도
    • 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈간의 상호 작용이 일어나는 경우의 결합도

응집도 Cohesion

  • 모듈의 독립성을 나타내는 개념
  • 모듈 내부 구성요소 간 연관 정도 의미
  • 하나의 모듈은 하나의 기능을 수행하는 것을 의미
  • 즉 변경이 발생할 때 모듈 내부에서 발생하는 변경의 정도
    • 하나의 변경을 수용하기 위해 모듈 전체가 변경 -> 높은 응집도
    • 하나의 변경을 수용하기 위해 일부 모듈의 일부만 변경 -> 낮은 응집도

특징

  • 유사기능 영역 구성
  • 단일 책임 할당
  • 함수 간 상호 협력

유형

  • 우연적 < 논리적 < 시간적 < 절차적 < 통신적 < 순차적 < 기능적
  • 우연적 응집도
    • 서로 간에 어떠한 의미 있는 연관 관계도 없는 기능 요소로 구성될 경우의 응집도
    • 서로 다른 상위 모듈에 의해 호출되어 처리상의 연관성이 없는 서로 다른 기능을 수행할 경우의 응집도
  • 논리적 응집도
    • 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우의 응집도
  • 시간적 응집도
    • 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우의 응집도
  • 절차적 응집도
    • 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우의 응집도
  • 통신적 응집도
    • 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있을 경우의 응집도
  • 순차적 응집도
    • 모듈 내에서 한 활동으로부터 나온 출력 값을 다른 활동이 사용할 경우의 응집도
  • 기능적 응집도
    • 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우의 응집도

결론

  • 응집도는 높아야 하고, 결합도는 느슨해야 한다.
  • 설계를 변경하기에 편리해 지기 때문
728x90
반응형

'백엔드 Backend' 카테고리의 다른 글

[보안] 보안 공격 종류  (0) 2024.11.04
[테스팅] 어플리케이션 테스팅  (2) 2024.11.01
악성코드 종류  (0) 2024.10.16
SOLID 원칙  (0) 2024.10.08
비동기 Asynchronous 란?  (0) 2024.10.04
728x90
반응형

_Async/Await_

 

자바스크립트에서 async/await는 뭘까?

 

async/await는?

Promise 기반으로 동작하지만, then/catch/finally 와 같은 프로미스 후속 처리 메서드에 콜백 함수를 전달하여

비동기 처리 결과를 후속 처리할 필요 없이 마치 동기 처리처럼 프로미스를 사용할 수 있다.

결과적으로 Promise를 더 쉽게 다룰 수 있게 해 준다.

async/await을 사용하면 비동기 함수들을 마치 동기 함수처럼 작성하여 동작할 수 있게 해 준다.

 

function getData(){

/*

 비동기 함수

 */

}

// 프로미스

new Promise((resolve, reject) => {

const result = getData();

if ( /* 비동기 작업 수행 성공 */) {

resolve(result);

} else {

reject(result);

}

})


// async/await

async function getData() {

await /* 비동기 함수 */

}

 

Async

async 함수는 async 키워드를 사용해 정의하고, 언제나 프로미스를 반환한다.

 

Await

await 키워드는 프로미스가 settled 상태가 될 때까지 대기하다가 settled 상태가 되면 프로미스가 resolve 한 처리 결과를 반환한다.

 

참고 링크

- async/await (https://learnjs.vlpt.us/async/02-async-await.html)

728x90
반응형

'백엔드 Backend > Nodejs' 카테고리의 다른 글

[NODEJS] Promise란?  (0) 2024.10.22
[NODEJS] 이벤트 루프란?  (0) 2024.10.01
Nodejs 란?  (1) 2024.09.30
728x90
반응형

자바스크립트에서 사용되는 Promise는 무엇일까?

 

콜백

콜백 함수는 다른 함수에 인자로 전달되는 함수로

어떤 함수의 동작에서 이벤트가 발생하였을 때, 혹은 특정 시점에 도달했을 때 호출하는 함수이다.

아래 예시는 정말 러프하게 이해할 수 있게끔만 적어놓은 함수이다. 단순한 구조라면 콜백 구조가 깊지 않지만, 복잡도가 높아짐에 따라 콜백 함수가 중첩되고 그 깊이가 엄청나게 깊어지는 것을 콜백 지옥이라 한다.

 

function getData(){

  /*

  비동기 함수

  */

}


getData().then(

  // 완료 되었을 때

).then().then().catch().finally()

 

Promise

Promise 객체는 ES6에서 추가된 개념으로, 비동기 작업이 작업 완료 후 미래의 완료 혹은 실패 결과를 나타낸다.

기존의 방식으로는 작성하게 된다면 콜백 지옥에 빠지게 된다.

또한 Promise 객체는는 비동기 함수들을 병렬로 수행할 수 있도록 하며 .all() 메서드와 .allSettled() 메서드를 프로퍼티로 가진다.

 

_출처: https://adrianalonso.es/desarrollo-web/apis/trabajando-con-promises-pagination-promise-chain/_

 

Promise는 비동기 작업을 수행하고 그 작업의 성공 혹은 실패 함수를 호출할 수 있다.

function getData(){

  /*

  비동기 함수

  */

}


new Promise((resolve, reject) => {

  const result = getData();


  if ( /* 비동기 작업 수행 성공 */) {

    resolve(result);

  } else {

    reject(result);

  }

})

 

Promise의 상태(State)

Promise 객체의 상태 정보는 세가지가 있다.

  • pending: 비동기 처리가 아직 수행되지 않은 상태 - Promise 객체가 생성된 직후 기본 상태
  • fulfilled: 비동기 처리가 수행된 상태 (성공) -> resolve 함수 호출
  • rejected: 비동기 처리가 수행된 상태 (실패) -> reject 함수 호출

 

정리

  • Promise는 콜백 지옥에 빠지는 비동기 처리를 간결하게 처리할 수 있게 표현
  • 상태에는 pending, fulfilled, rejected 가 있다.
  • 실행 결과에 따라 실패 시 reject, 성공 시 resolve 함수를 호출할 수 있다.

참고 링크

- Promise (https://learnjs.vlpt.us/async/01-promise.html)

728x90
반응형

'백엔드 Backend > Nodejs' 카테고리의 다른 글

[NODEJS] Async/Await 란?  (0) 2024.10.23
[NODEJS] 이벤트 루프란?  (0) 2024.10.01
Nodejs 란?  (1) 2024.09.30
728x90
반응형

WORM

  • 감염 방식 중 하나로, 여러 단말기에 분산되어 해당 단말기들에 연결된 네트워크 전체를 감염
  • 트로이 목마의 위장 기능과 바이러스의 증식 기능을 탑재

Trojan horse

  • 정상적인 프로그램으로 위장한 악성코드
  • 시작부터 끝까지 메모리에 상주하여, 시스템 내부 정보를 공격자의 컴퓨터로 빼돌리는 프로그램
  • 직접적 전파능력은 없음

Root Kit

  • 공격자의 존재를 숨기면서 시스템에 대한 무제한 접근 권한 부여
  • 펌웨어, 가상화 계층 등의 시스템 영역에서 작동
  • 운영체제 시스템콜을 해킹하여 안티바이러스 탐지 우회 가능

Ransomware

  • 피해자의 데이터나 디바이스를 점유해 데이터를 암호화 한 후, 암호키를 대가로 금품을 요구하는 악성 코드
728x90
반응형

'백엔드 Backend' 카테고리의 다른 글

[테스팅] 어플리케이션 테스팅  (2) 2024.11.01
[결합도/응집도] 결합도와 응집도란  (0) 2024.10.24
SOLID 원칙  (0) 2024.10.08
비동기 Asynchronous 란?  (0) 2024.10.04
[백엔드] REST API 란?  (0) 2024.09.27
728x90
반응형

페이지 교체 알고리즘

  • 메모리를 관리하는 운영체제에서 페이지 부재가 발생하여 새로운 페이지를 할당하기 위해 현재 할당된 페이지 중 어느 것을 교체할지 결정하는 방법

FIFO

  • 선입선출법. 페이지 주기억장치에 적재된 시간 기준으로 교체된 페이지 산정하는 기법
    • 중요한 페이지가 오래 있었다는 이유만으로 교체되는 문제.
    • 가장 오래 있었던 페이지는 앞으로도 계속 사용될 가능성이 있으므로.

LFU

  • 가장 적은 횟수를 참조하는 페이지 교체
    • 참조될 가능성이 많음에도 불구하고 횟수에 의한 방법으로, 최근에 사용된 프로그램을 교체할 가능성 존재
    • 해당 횟수를 증가시키므로 오버헤드 발생

LRU

  • 가장 오랫동안 참조되지 않은 페이지 교체
    • 프로세스가 주기억장치에 접근할 때마다 참조된 페이지에 대한 시간을 기록해야함. 큰 오버해드 발생
728x90
반응형
728x90
반응형

세타조인 (Theta Join)

  • 조인에 참여하는 두 릴레이션의 속성 값을 비교하여 조건을 만족하는 튜플만 반환
  • 조건은 (=, !=, >=, <=, >, <) 중 하나
  • 조인에서 ON 키워드로 사용함

동등조인 (Inner Join)

  • 세타조인의 하나. 세타조인 중 = 연산자를 사용하는 조인
  • 동등조인의 결과 릴레이션의 차수는 첫번째 릴레이션과 두번째 릴레이션의 차수를 합한 것
    • 3 + 2 = 5 차수

자연조인

  • 동등조인에서 조인에 참여한 속성이 두 번 나오지 않도록, 중복된 속성 제거 결과 반환
  • 차수는 (두 릴레이션의 차수의 합) - (중복된 속성 수)

외부조인

왼쪽 외부 조인 (left outer join)

  • 왼쪽 투플 기준으로, 자연조인 시 실패한 튜플을 모두 보여주되 값이 없는 대응 속성에는 NULL 값으로 채워 반환

오른쪽 외부 조인 (right outer join)

  • 오른쪽 튜플 기준으로, 자연조인 시 실패한 튜플을 보여주되 값이 없는 대응 속성에는 NULL 값을 반환

완전 외부 조인 (full outer join)

  • 양쪽 튜플 기준으로 자연조인 시 실패한 튜플을 모두 보여주되 값이 없는 대응 속성에는 NULL 값을 채워서 반환
728x90
반응형
728x90
반응형

역정규화

  • 비정규화: 시스템 성능 향상을 위해 의도적으로 중복을 허용하는 과정
  • 쿼리 성능 최적화를 위한 의도적 중복

장점

  • 대용량 데이터 처리 시스템 / 읽기 연산이 많은 시스템에서 유리
  • 데이터 접근 시간 단축

단점

  • 그러나 데이터 중복으로 인해, 일관성을 위지하기 위한 방법이 필요
728x90
반응형
728x90
반응형

DataBase 설계 시 고려해야 하는 것 중엔 정규화와 비정규화(역정규화)가 있다.

정규화

  • 데이터 중복을 최소화하고 무결성을 유지하는 과정

장점

    • 데이터 모델을 여러 작은 테이블로 분해
  • 각 테이블이 하나의 주제에 집중하도록 설계
  • 데이터 중복 줄이고, 업데이트 이상 현상 방지
    • 저장 공간 효율적, 데이터 무결성 보장
    • 데이터베이스 구조의 단순화
    • 데이터 간의 관계가 명확해짐

단점

  • 그러나 과도한 정규화는 쿼리 복잡도 증가시킴 (JOIN)
  • 성능 저하도 가능

정규화 과정

제 1 정규화 (1NF)

  • 테이블의 칼럼이 원자값(Atomic Value: 하나의 값)을 갖도록 테이블 분해
    • 각 칼럼이 하나의 속성만을 가져야 함
    • 하나의 칼럼은 같은 종류나 타입의 값을 가져야 함
    • 각 칼럼이 유일한 이름을 가져야 함
    • 칼럼의 순서가 상관없어야 함
이름 나이 수강과목
홍길동 20 C,C++
이순신 21 Java
이도 34 DB, 운영체제

에서

이름 나이 수강과목
홍길동 20 C
홍길동 20 C++
이순신 21 Java
이도 34 DB
이도 34 운영체제

제 2정규화(2NF)

  • 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 분해하는 것
  • 부분적 종속: 기본키 중에 특정 칼럼에 종속되는 것
  • 완전 함수 종속: 기본키의 부분집합이 결정자가 되어선 안됨을 의미
  • 조건
    • 제 1 정규화를 만족해야함
    • 모든 칼럼이 부분적 종속이 없어야 함.
    • 모든 칼럼이 완전 함수 종속을 만족해야 함
이름 수강과목 강사명 성적
홍길동 C 광해군 95
홍길동 C++ 선조 100
이순신 Java 선조 70
이도 DB 세종 80
이도 운영체제 태종 85
  • 특정 학생의 성적을 알기 위해선 이름과 수강과목을 알아야 함
  • 특정 과목의 강사는 과목명만 알면 알 수 있다.
  • 위 테이블의 기본키는 이름과 과목으로, 복합키이다.
  • 반면 지도교수 칼럼은 과목에만 종속되므로, 제 2정규화를 만족하지 않음
이름 수강과목 성적
홍길동 C 95
홍길동 C++ 100
이순신 Java 70
이도 DB 80
이도 운영체제 85
강사명 수강과목
광해군 C
선조 C++
선조 Java
세종 DB
태종 운영체제

으로 테이블을 나눈다는 의미


제 3정규화

  • 이행적 종속(Transitive Dependencies) 을 없애도록 테이블을 분해함
  • 이행적 종속: A -> B, B -> C이 성립할 때, A -> C이 성립함을 의미함
  • 조건
    • 제 2 정규화를 만족해야 함
    • 기본키를 제외한 속성들 간의 이행 종속성이 없어야 한다.
ID 등급 할인율
101 VIP 70%
102 Gold 40%
103 Bronze 20%
  • 이렇게 데이터가 있으면, ID 를 통해 할인율을 알 수 있다
    • 따라서 제 3정규형을 만족하지 않는다.
ID 등급
101 VIP
102 Gold
103 Bronze
등급 할인율
VIP 70%
Gold 40%
Bronze 20%

BCNF (Boyce-Codd Normal Form)

  • 제 3정규형을 좀 더 강화한 버전
  • 조건
    • 제 3정규형을 만족해야 함
    • 모든 결정자가 후보키 집합에 속해야 함
      • 후보키 집합에 없는 칼럼이 결정자가 되어선 안된다는 의미
이름 수강과목 지도교수
홍길동 C 광해군
홍길동 C++ 선조
이순신 Java 선조
이도 DB 세종
이도 운영체제 태종
* 강사의 이름을 이름과 과목으로 조회할 수 있다.
* 그러나 같은 과목을 다른 강사가 가르칠 수 있기 때문에, 수강과목 -> 지도교수 이란 종속은 성립하지 않음
* 하지만 지도교수 -> 수강과목이라는 종속은 성립
이름 지도교수
홍길동 광해군
홍길동 선조
이순신 선조
이도 세종
이도 태종
지도교수 수강과목
광해군 C
선조 C++
선조 Java
세종 DB
태종 운영체제
으로 나눌 수 있다.

제 4정규화

  • 일반적으로 BCNF 정규화까지만 함
728x90
반응형
728x90
반응형
  • 디자인 패턴은 코드를 잘 작성할 수 있도록 하는 지침서. 레시피라고 말할 수 있다.

생성 패턴

싱글톤 패턴 Singleton

  • 하나의 클래스 인스턴스를 전역에서 접근 가능하게 함
  • 따라서 해당 인스턴스가 한 번만 생성되도록 보장

팩토리 메서드 패턴 Factory Method

  • 객체를 생성하기 위한 인터페이스를 정의하고 서브 클래스에서 어떤 클래스를 인스턴스를 생성할지 결정하는 패턴

추상 팩토리 패턴 Abstract Factory

  • 관련된 객체들의 집합을 생성하는 인터페이스 제공
  • 구체적인 팩토리 클래스를 통해 객체 생성을 추상화하는 패턴

빌더 패턴 Builder

  • 복잡한 객체의 생성 과정을 단순화하고, 객체를 단계적으로 생성하며 구성하는 패턴

프로토타입 패턴 Prototype

  • 객체를 복제하여 새로운 객체를 생성하는 패턴
  • 기존 객체를 템플릿으로 사용
728x90
반응형
728x90
반응형

솔리드 (SOLID) 원칙

  • 솔리드 원칙은 코드를 올바르게 사용할 수 있게 하는 지침서이다
  • 여담으로 디자인패턴은 코드를 잘 만들 수 있게 하는 레시피이다.

단일 책임 원칙 (Single Responsiblity Principle; SRP)

  • 소프트웨어의 컴포넌트는 단 하나의 책임만을 가져야 한다.

개방 폐쇄 원칙 (Open Close Principles; OCP)

  • 확장에 대해선 열려 있어야 하고 수정에 대해선 닫겨 있어야 한다.

리츠코프 치환 원칙 (Liskov Substitution Principle; LSP)

  • 자식 클래스는 부모클래스에서 가능한 행위를 수행할 수 있어야 한다.

인터페이스 분리의 원칙 (Interface Segregation Principle; ISP)

  • 하나의 일반적인 인터페이스 보단 여러 개의 구체적인 인터페이스가 낫다.

*의존관계 역전 원칙 (Dependency Inversion Principle; DIP) *

  • 의존 관계를 맺을 때, 변화하기 쉬운것 보단 변화하기 어려운 것에 의존해야 한다.
728x90
반응형

'백엔드 Backend' 카테고리의 다른 글

[결합도/응집도] 결합도와 응집도란  (0) 2024.10.24
악성코드 종류  (0) 2024.10.16
비동기 Asynchronous 란?  (0) 2024.10.04
[백엔드] REST API 란?  (0) 2024.09.27
[백엔드] gRPC란  (3) 2024.09.26

+ Recent posts