728x90
반응형

필드 주입 방식(Field Injection)

 

: @Autowired 어노테이션을 사용하여 클래스의 멤버 변수에 직접 의존성을 주입하는 방식

@Autowired
private JoinService joinService

 

장점

1. 간편함(필드, 생성자 또는 메서드에 간단히 붙여서 의존성을 주입할 수 있다 /  코드가 짧고, 직관적이며 설정이 간단하다)

2. 유연성(필드, 생성자, 세터 메서드 등 다양한 주입 방법을 지원한다 / 클래스의 구조에 따라 적절한 주입 방식을 선택할 수 있다)

 

생성자 주입 방식(Constructor Injection)

 

: 클래스의 생성자를 통해 의존성을 주입하는 방식으로 주입할 의존성을 생성자의 매게변수로 받는다...

private final JoinService joinService;

@Autowired
public YourClassName(JoinService joinService) {
    this.joinService = joinService;
}

 

 

근데 왜... 생성자 주입 방식이 더 좋을까요??

 

 

1.불변성(Immutability)

- 필드 주입 방식에서는 private 필드가 final일 수 있습니다. 하지만 생성자 주입을 사용하면 주입된 의존성을 final로 선언할 수 있어 객체의 불변성을 보장합니다

- 이는 객체가 생성된 후 의존성이 변경되지 않도록 합니다

 

2. 테스트 용이성

- 생성자 주입은 단위 테스트 시에 더 쉽습니다. 의존성을 주입하기 위해 리플렉션이나 프레임워크에 의존하지 않고, 단순히 생성자를 호출하면됩니다

- 이를 통해 더 깨끗하고 간단한 테스트 코드를 작성할 수 있습니다

 

3. 순환 의존성 방지

- 생성자 주입은 순환 의존성을 컴파일 시점에 감지할 수 있게 됩니다. 이는 순환 의존성을 방지하고, 더 명확한 의존성 구조를 유지하는 데 도움이 됩니다.

- 필드 주입이나 setter 주입 방식에서는 순환 의존성을 런타임까지 알 수 없습니다

 

4. 명시적 의존성

- 생성자 주입은 클래스가 어떤 의존성을 필요로 하는지 명시적으로 보여줍니다. 이는 코드의 가독성과 유지보수성을 높입니다.

- 반면 필드 주입 방식은 의존성을 클래스 내부에서만 알 수 있어, 의존성을 추적하기 어렵습니다

 

=> 결론

@Authowired  어노테이션은 사용이 간단하고 직관적이어서 널리 사용되지만, 필드 주입 방식보다는 생성자 주입 방식을 권장합니다. 생성자 주입 방식은 객체의 불변성을 보장하고 코드의 명확성과 테스트 용이성을 높이며, 순환 의존성을 방지하는 데 도움이 됩니다. 이러한 이유로, 생성자 주입 방식이 더 많이 권장되는 것입니다

 

728x90
반응형
728x90
반응형

***  일반 + 신유형

오라클, sql server 차이 봐두기

 

oracle에서 빈문자열은 null로 저장 / sql server에서는 빈문자열 그대로 저장되어 

4번은 null이 아니자나... 그래서 조회가 안됩니다...

 

논리 연산자 우선순위 : NOT > AND > OR

 

null 은 포함하지 않고 계산하면

 

1. (20 + 0) / 2 = 10

2. (20 + null (x)) / 1  = 20

3. (20 + null (x)) / 1  = 20

 

NVL(대상데이터 , NULL일때 데이터)

값이 null 인 경우, 2번째 지정값을 출력하고 그렇지 않으면 대상데이터를 출력한다.

 

SELECT TOP(3) WITH TIES 팀명, 승리건수   // TOP(3) 만 적는다면 그냥 3개만 출력
	FROM 팀별 성적
    ORDER BY 승리건수 DESC;

 

=> 3번째 행과 동일한 값을 가진 추가 행이 있다면 이 행들도 포함(SQL Server에서 사용)

 

SELECT 팀명. 승리건수
	FROM 팀별성적
    WHERE ROWNM <= 3
    ORDER BY 승리건수 DESC;

 

=> 3번째 행과 동일한 값을 가지 추가행이 있더라도 포함 x (Oracle에서 사용)

=> Oracle에서서 TOP(3) WITH TIES와 유사한 기능을 구현하려면 DENSE_RANK()의 윈도우 함수를 사용할 수 있다

 

 

RANK()와 DENSE_RANK()의 차이....

 

EmployeeIDNameSalary

1 Alice 5000
2 Bob 4000
3 Carol 4000
4 Dave 3000
5 Eve 2000

RANK() 사용 예시

SELECT *
FROM (
    SELECT e.*, RANK() OVER (ORDER BY Salary DESC) AS rnk
    FROM Employees e
)
WHERE rnk <= 3;

 

EmployeeIDNameSalaryrnk

EmployeeID Name Salary rank
1 Alice 5000 1
2 Bob 4000 2
3 Carol 4000 2
4 Dave 3000 4

 

RANK() 함수는 Salary가 같은 Bob과 Carol에게 동일한 2순위를 부여하고, 다음 순위인 3을 건너뛰고 4를 Dave에게 부여

DENSE_RANK() 사용 예시

SELECT *
FROM (
    SELECT e.*, DENSE_RANK() OVER (ORDER BY Salary DESC) AS rnk
    FROM Employees e
)
WHERE rnk <= 3;

 

EmployeeIDNameSalaryrnk

1 Alice 5000 1
2 Bob 4000 2
3 Carol 4000 2
4 Dave 3000 3

DENSE_RANK() 함수는 Salary가 같은 Bob과 Carol에게 동일한 2순위를 부여하고, 다음 순위를 3으로 부여하여 연속성을 유지합니다.

 

  • RANK(): 동일한 값을 가진 행들이 있으면 순위에 공백이 생깁니다.
  • DENSE_RANK(): 동일한 값을 가진 행들이 있더라도 순위에 공백이 생기지 않고 연속적으로 부여됩니다.

 

단, auto commit은 false로 설정 되어 있다는 말은 sql server라는 말..

oracle은 수정후에 create하면 자동으로 저장된다

    

헷갈리기 쉬운 문제...

ROWNUM 을 정렬 전에 쓰면 아무 의미 없다....

정답은 3번

 

' \d+', 'xxx', 1, 2 => 문자를 xxx로 바꾸는데 처음부터 시작해서 2번째 위치꺼를 REPLACE 바꿔라

 

 

*** 노랭이 모르는거

 

TCL :  논리적인 작업의 단위를 묶어 DML에 의해 조작된 결과를 작업 단위(Transaction) 별로 제어하는 명령어인 Commit, Rollback, Savepoint 등이 여기에 해당하며, 일부에서는 DCL로 분류하기도 한다

 

UNIQUE는 NULL 입력이 가능하다!!! PK는 불가능함 ㅋㅋㅋ

 

 

****  노랭이 정리

 

데이터 모델링

1. 개념적 데이터 모델링 : 추상화 수준이 높고 업무중심적이고 포괄적인 수준의 모델링 진행, 전사적 데이터 모델링, EA 수립시 많이 이용

2. 논리적 데이터 모델링 : 시스템으로 구축하고자 하는 업무에 대해 Key 속성, 관계 등을 정확하게 표현, 재사용성이 높음

3. 물리적 데이터 모델링 : 실제로 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계 

 

 

데이터 모델링을 하는 주요한 이유

1. 업무정보를 구성하는 기초가 되는 정보들에 대해 일정한 표기법에 의해 표현함으로써 정보시스템 구축의 대상이 되는 업무 내용을 정확하게 분석하기 위해서

2. 분석된 모델을 가지고 실제 데이터베이스를 생성하여 개발 및 데이터 관리에 사용하기 위해서

 

=> 데이터 모델링 이라는 것은 단지 데이터베이스만을 구축하기 위한 용도로 쓰이는 것이 아니라 데이터모델링 자체로서 업무를 설명하고 분석하는 부분에서도 매우 중요한 의미를 가짐

 

데이터 모델링 유의점 : 중복, 비유연성, 비일관성

 

데이터베이스 스키마 구조 3단계

- 외부 스키마 : 사용자가 보는 데이터베이스의 부분적 뷰를 정의

- 개념 스키마 : 통합 관점의 스키마 구조를 표현한 것으로 데이터 모델링은 통합관점의 뷰를 가지고 있는 개념 스키마를 만들어가는 과정임.

- 내부 스키마 : 데이터의 물리적 저장 구조를 정의

 

ERD 작성 순서

1. 엔터티를 그린다

2. 엔터티를 적절하게 배치한다

3. 엔터티 간 관계를 설정한다

4. 관계명을 기술한다

5, 관계의 참여도를 기술한다

6. 관계의 필수여부를 기술한다

 

엔터티의 특징

1.반드시 해당 업무에서 필요하고 관리하고자 하는 정보여야 한다

2. 유일한 식별자에 의해 식별이 가능해야 한다

3. 영속적으로 존재하는 (두개 이상의)인스턴스의 집합이어야 한다

4. 엔터티는 업무 프로세스에 의해 이용되어야 한다

5. 엔터티는 반드시 속성이 있어야 한다

6. 엔터티는 다른 엔터티와 최소 한 개 이상의 관계야 있어야 한다 

 

기본엔터티(키엔터티) 

- 원래 존재하는 정보로서 다른 엔터티와의 관계에 의해 생성되지 않고 독립적으로 생성이 가능하고 자신은 타 엔터티의 부모의 역할을 하게 된다

- 다른 엔터티로부터 주식별자를 상속받지 않고 자신의 고유한 주식별자를 가지게 된다

- 예를 들어 사원, 부서, 고객...

-  vs) 중심엔터티(메인엔터티) : 데이터 모델에서 다른 여러 엔터티와 관계를 맺는 중심적인 역할을 하는 엔터티로 여러 엔터티와의 관계를 맺고 관계를 통해 데이터를 연결한다

 

속성(Attribute) 

: 업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단위

=> 업무상 관리가 가능한 최소의 의미 단위(엔터티의 한 분야)

 

속성의 특성에 따른 분류

- 기본속성 :  엔터티가 본질적으로 가지고 있는 속성('고객' 엔터티의  '이름', '주소', '전화번호')

- 설계 속성 : 데이터베이스 설계를 위해 추가된 속성('주문' 엔터티의 '주문번호', '고객ID')

- 파생 속성 : 다른 속성 값에서 계산되거나 유도되는 속성, 조회할 때 빠른 성능을 내도록 함('주문' 엔터티의 총금액)

 

 속성의 도메인

:  각 속성은 가질 수 있는 값의 범위가 있는데 이를 속성의 도메인이라하며, 엔터티 내에서 속성에 대한 데이터타입과 크기 그리고 제약사항을 저장하는 것

 

두개의 엔터티 사이에 체크해야 할 사항

1. 두 개의  엔터티 사이에 관심있는 연관규칙이 존재하는가?

2. 두 개읜 엔터티 사이에 정보의 조합이 발생하는가?

3. 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?

4. 업무기술서, 장표에 관계연결을 가능하게 하는 동사가 있는가?

 

주식별자를 저장할 때 고려해야 할 사항

- 주식별자에 의해 엔터티내에 모든 인스턴스들이 유일하게 구분되어야 한다(유일성)

- 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다(최소성)

- 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다(불변성)

- 주식별자가 지정이 되면 반드시 값이 들어와야 한다(존재성)                                                                                                                                                                                                                                                                              

식별자의 종류

- 엔터티 내에서 대표성을 가지는가에 따라 주식별자와 보조식별자로 구분

- 엔터티 내에서 스스로 생성되었는지 여부에 따라 내부식별자와 외부식별자로 구분

- 단일 속성으로 식별이 되는가에 따라 단일식별자와 복합 식별자로 구분

- 원래 업무적으로 의미가 있던 식별자 속성을 대체하여 일련번호와 같이 새롭게 만든 식별자를 구분하기 위해 본질식별자와 인조식별자로 구분

 

성능 데이터 모델링 수행 절차에 대한 설명..

1. 데이터모델링을 할 때 정규화를 정확하게 수행

2. 데이터베이스 용량산정을 수행

3. 데이터베이스에 발생되는 트랜잭션의 유형을 파악

4. 용량과 트랜잭션 유형에 따라 반정규화를 수행

5. 이력모델의 조정, PK/FK 조정, 슈퍼 타입/서브타입 조정 등을 수행

6. 성능관점에서 데이터모델을 검증                                                                                                                                         

 

 

 

728x90
반응형

'자격증 > sqld' 카테고리의 다른 글

sqld 1과목. 데이터 모델링의 이해  (1) 2024.03.07
sqld 2과목 정리(SQL 활용)  (3) 2024.03.06
sqld 2과목 정리(SQL 기본)  (4) 2024.03.05
sqld 1일차(45회 기출 1과목)  (2) 2024.02.23
728x90
반응형
  1. ec2 발급
  2. ufw 설정 및 port 구성도
  3. swap 메모리 설정
  4. docker 설치 (+ Ubuntu 기본 환경 세팅)
  5. docker-compose & jenkins 설치
  6. jenkins gitlab 연동(project-build) 및 플러그인 설치
  7. Nginx
  8. https 적용
  9. Jenkins Pipeline 작성
  10. S3 설치 및 설정
  11. RDS 설치 및 설정

 

https 적용

 

Certbot ????

: Let's encrypt를 이용해서 ssl 인증서를 발급, 갱신할 수 있게 도와주는 무료 오픈소스 툴
- Certbot을 따로 설치해도 되고, letsencrypt를 설치해도 됨(certbot이 포함되어있음)

 

 

인증서 발급(Let's Ecrypt)

 

- Let's Ecrypt는 이메일과 도메인만으로, 빠르게 인증서를 발급할 수 있는 무료 서비스

- Certbot을 통해서 받을 수 있음

 

 

certbot 설치

sudo snap install certbot-nginx
sudo apt-get update
sudo apt-get install python3-certbot-nginx

 

SSL(Secure Sockets Layer) ????

: Netscape Communications Corporation 에서 웹 서버와 웹 브라우저간의 보안을 위해 만든 프로토콜
공개키 / 개인키 대칭키 기반으로 사용함

무료로 사용할 수 있는 사이트 
=> Let's Encrypt / AWS Certificate Manager

 

 

Nginx에 SSL 적용하기

sudo certbot --nginx -d {도메인}

ex)
sudo certbot --nginx -d sokdaksokdak.com

 

- 위의 명령어를 통해 인증서를 발급하면서 nginx에 인증서 관련 설정을 자동으로 할 수 있다

- 작성하면 Successfullu received certificate라는 안애와 함께 인증서 정보를 출력

 

/etc/nginx/sites-availble 경로로 가면 default라는 파일이 있는데 이 공간에 default 파일은 삭제하고 project.conf라는 이름을 가진 파일을 생성합니다(이름은 상관 없지만 위치는 저 위치여야 함)

 

server {
    listen 80;
    server_name k10d101.p.ssafy.io;

    # HTTP 요청을 HTTPS로 리다이렉트
    location / {
        return 301 https://$host$request_uri;
    }
}
server {
    listen 443 ssl; // 443 포트의 요청을 받음
    server_name k10d101.p.ssafy.io; // 도메인 지정

    include /etc/nginx/conf.d/service_url.inc;

    ssl_certificate /etc/letsencrypt/live/k10d101.p.ssafy.io/fullchain.pem; # SSL 인증서
    ssl_certificate_key /etc/letsencrypt/live/k10d101.p.ssafy.io/privkey.pem; # SSL 키
    include /etc/letsencrypt/options-ssl-nginx.conf; # SSL 옵션
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # DH 파라미터
    
     # Frontend: 정적 파일 서빙 및 SPA 라우팅 지원
    location / {
        proxy_pass http://localhost:3000; # Docker 서비스 이름 사용
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    
     # Backend: API 요청
    location /api/ {
        proxy_pass $service_url; # Docker 서비스 이름과 포트 사용
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Connection "close"; # API 요청에는 'Connection: upgrade' 불필요
    }
}

 

$ sudo service nginx restart

 

명령어를 통해 nginx를 재시작하면...

 

 

 

참고

 

https://www.youtube.com/watch?v=wPdH7lJ8jf0&t=508s&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9C%ED%85%8C%ED%81%AC

 

https://velog.io/@byeongju/HTTPS-%EC%A0%81%EC%9A%A9%EA%B8%B0

728x90
반응형
728x90
반응형
  1. ec2 발급
  2. ufw 설정 및 port 구성도
  3. swap 메모리 설정
  4. docker 설치 (+ Ubuntu 기본 환경 세팅)
  5. docker-compose & jenkins 설치
  6. jenkins gitlab 연동(project-build) 및 플러그인 설치
  7. Nginx
  8. https 적용
  9. Jenkins Pipeline 작성
  10. S3 설치 및 설정
  11. RDS 설치 및 설정

 

jenkins gitlab 연동(project-build) 및 플러그인 설치

 

Backend Dockerfile(백엔드 애플리케이션을 컨테이너화하는데 사용)

FROM openjdk:17-jdk-alpine
VOLUME /tmp 
ADD ./build/libs/backend-0.0.1-SNAPSHOT.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT ["java", "-jar", "/app.jar"]

 

  1. FROM openjdk:17-jdk-alpine
    : openjdk:17-jdk-alpine 이미지를 기반으로 새 docker 이미지를 생성
    - openjdk:17-jdk-alpine 는 OpenJDK 17을 포함 + 리눅스 배포판 중 하나인 Alpine Linux 기반의 이미지
    - Alpine Linux는 경량화가 잘 되어 있어 컨테이너 이미지 크기를 작게 유지할 수 있다
  2. VOLUME /tmp
    : /tmp 경로에 볼륨을 마운트 함
    - 일반적으로 Spring Boot 애플리케이션에서는 /tmp를 사용하여 임시 파일 등을 저장하는데 사용
  3. ADD ./build/libs/backend-0.0.1-SNAPSHOT.jar app.jar
    : 로컬 파일 시스템의 backend-0.0.1-SNAPSHOT.jar 파일을 컨테이너의 루트 디렉토리에 app.jar라는 이름으로 복사
    -  ADD는 COPY와 유사하지만 원격 URL에서 파일을 다운로드하거나 로컬 파일을 자동으로 압축 해제하는 기능을 추가로 제공
  4. ENV JAVA_OPTS=""
    : 환경 변수  JAVA_OPTS를 설정

    - 기본적으로 빈 문자열로 설정되어 있음
  5. ENTRYPOINT ["java", "-jar", "/app.jar"]
    : 컨테이너가 시작될 때 실행되는 명령어를 지정
    - java 애플리케이션을 실행하는데 사용되는 명령어
    - -jar 옵션 다음에 애플리케이션 JAR 파일의 경로인 /app.jar를 지정함

 

 

Frontend Dockerfile

FROM node:20.12.0

WORKDIR /app

COPY package.json /app

RUN npm install
COPY . /app

EXPOSE 3000
RUN npm run docs-build

CMD ["npm","run", "docs"]

 

 

  1. 'FROM node:20.12.0'.
    : 'node:20.12.0' 이미지를 기반으로 새 Docker 이미지를 생성
  2. WORKDIR /app
    : 'WORKDIR' 명령어는 Docker 이미지 내에서 작업 디렉토리를 '/app' 으로 설정
     이후의 명령어들은 이 디렉토리를 기준으로 실행
  3. COPY package.json /app
    : 호스트 기기의 'package.json' 파일을 이미지 내의 '/app' 디렉토리로 복사
  4. RUN npm install
    : npm install 명령어를 실행하여 package.json에 정의된 Node.js 프로젝트의 의존성을 설치
  5. COPY . /app
    : 현재 디렉토리의 모든 파일과 서브디렉토리를 이미지 내의 '/app' 디렉토리에 복사
  6. EXPOSE 3000
    : 칸테인저가 리스닝할 포트 번호 3000을 Docker에 알림. 이 포트를 통해 외부와 통신할 수 있다
  7. RUN npm run docs-build
    : npm run docs-build 스크립트를 실행하여 문서를 빌드하는 작업을 수행
  8. CMD ["npm","run", "docs"]
    : 컨테이너가 실행될 떄 'npm run docs' 명령을 실행(일반적으로 문서를 호스팅하거나 생성하는 데 사용)

 

Ngnix

Ngnix ????

: 경량 웹서버로 정적파일을 serving 하는 web server 또는 요청을 다른 서버로 전달하는 reverse proxy server로 활용되어 was의 부하를 줄이는 로드 밸런서로 사용할 수 있다


=> 웹  서버중 apache와의 파이점 : 요청을 처리하는 방식
apache 웹 서버의 경우 요청마다 새로운 쓰레드를 생성하여 요청을 처리되므로 요청이 많으면 많을수록 자원이 많이 소모된다
반면에 nginx는 event-driven 구조로 동작하는데, 이 때문에 하나 또는 고정된 개수의 프로세스만 생성되고 요청들은 동시적으로 처리된다. 그렇기 때문에 보다 적은 자원으로도 효율적인 운용이 가능

 

 

sudo apt update 
sudo apt-get install nginx

 

- sudo apy update : 시스템의 패키지 목록 업데이트

- sudo apt-get install nginx :  nginx 웹 서버를 설치

 

 

nginx 웹 서버에서 새로운 사이트를 구성하는 방법

sudo nano /etc/nginx/sites-available/내가 만들 것
vi코드로 열고 밑에 명령어를 작성한다. 

server {
    listen 80;					// 서버가 80번 포트를 사용하여 HTTP 요청을 수신하도록 설정
    server_name abc.com www.abc.com;		// 해당 도메인으로 들어오는 요청을 처리하도록 함

    root /var/www/abc.com/html;				// 웹 문서의 루트 디렉토리를 저장(실제 웹 파일들이 여기 위치/ abc.com은 내 도메인으로 변경해야함)
    index index.html index.htm index.nginx-debian.html;	// 기본 인덱스 파일들을 정의 nginx는 요청된 디렉토리에 이 파일이 있으면 해당 파일을 응답으로 보냄

    location / {						// 루트 url('/') 에 대한 설정을 정의
        try_files $uri $uri/ =404;		// 요청된 파일이 있으면 해당 파일을 서빙, 없으면 디렉토리를 확인, 둘다 없으면 404 오류를 반환
    }
}

 

 

해당 파일을 sites-enabled로 옮겨준다.


: sites-available 디렉토리는 모든 사이트의 설정 파일을 보관하는 곳 / sites-enabled는 현재 활성화된 사이트의 설정 파일에 대한 심볼릭 링크를 보관함으로써, 특정 사이트를 쉽게 활성화하거나 비활성화할 수 있다

 

 

nginx 재실행

 

sudo nginx -t 	 			// nginx의 설정 파일에 문제가 없는지 확인
sudo systemctl restart nginx		// nginx 재시작
sudo service nginx status		// nginx가 잘 실행중인지 확인

 

 

그 후에 ec2 퍼블릭 ip주소로 접속하면 

를 확인할 수 있다

 

 

참고

https://blog.naver.com/gi_balja/223028077537

 

Nginx란 무엇인가?

Nginx(엔진엑스)는 높은 성능과 안정성 그리고 현재 가장 많이 사용되고 있는 웹 서버입니다. Apache(아...

blog.naver.com

 

https://velog.io/@dev_leewoooo/Forward-Proxy-Reverse-Proxy%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC

728x90
반응형
728x90
반응형
  1. ec2 발급
  2. ufw 설정 및 port 구성도
  3. swap 메모리 설정
  4. docker 설치 (+ Ubuntu 기본 환경 세팅)
  5. docker-compose & jenkins 설치
  6. jenkins gitlab 연동(project-build) 및 플러그인 설치
  7. dockerHub 설치 및 연동(docker-build)
  8. dockerScript 작성(pipeline)
  9. Nginx
  10. S3 설치 및 설정
  11. RDS 설치 및 설정

 

docker 설치

 

Docker ?????

- 리눅스 기반의 컨테이너화 기술로, 애플리케이션을 효율적으로 배포하고 실행할 수 있도록 해주는 오픈소스 프로젝트
- 도커 컨테이너는 가상 머신(VM ware, VirtualBox) 보다 가벼워 리소스 사용이 적고, 프로세스 격리를 통해 성능 손실이 거의  없다
- 각 컨테이너는 필요한 라이브러리와 실행 파일만 포함하므로 이미지 크기가 작고, 만들어 배포하는 시간이 가상 머신에 비해 빠르고, 도커 엔진을 통해 이미지와 컨테이너를 관리한다
- 도커에서 사용하는 이미지의 이름 구성
 [ 저장소 이름 ] / [ 이미지 이름 ] : [ 태그 ]

저장소 이름 : 이미지가 저장된 장소, 저장소 이름이 명시되지 않은 이미지는 도커 허브의 공식 이미지를 뜻함
이미지 이름 : 해당 이미지가 어떤 역할을 하는지 나타내며 필수로 설정
Ex) ubuntu:latest : 우분투 컨테이너를 생성하기 위한 이미지
태그 : 이미지의 버전을 나타냄, 태그를 생략하면 도커 엔진은 latest로 인식함

 

 

Ubuntu 기본 환경 세팅

 

sudo apt update
sudo apt upgrade

 

  • sudo apt update : 시스템이 새로운 소프트웨어를 설치하거나 업그레이드 할 때 가장 최신 정보를 사용할 수 있게 함
  • sudo apt upgrade : 시스템에 설치된 모든 패키지를 최신 버전으로 업그레이드 함 
sudo apt install apt-transport-https ca-certificates

 

  • apt-transport-https 
    : HTTPS 프로토콜을 통해 안전하게 소프트웨어 패키지를 다운로드하고 설치할 수 있도록 도와주는 패키지
    : HTTPS는 데이터 전송 중에 암호화를 제공하여 보안성을 강화함
  • ca-certificates 
    : 인증서(authority certificates)를 관리하는 데 사용
    : HTTPS 통신 시에 서버의 신뢰할 수 있는 인증서를 확인하기 위해 필요함
sudo apt install curl gnupg-agent software-properties-common
  • curl
    : 데이터 전송을 위한 명령줄 도구
    : 다양한 프로토콜을 지원하며 주로 웹에서 파일을 다운로드하거나 api 요청을 보내는 데 사용
  • gnupg-agent
    : GNU Privacy Guard(GnuPG)의 에이전트 프로그램
    : 암호화 및 서명 작업에 필요한 키 관리를 지원( 캐싱하여 암호 통신의 보안을 강화하는 데 사용)
  • software-properties-common
    : 소프트웨어 소스 및 패키지 관리를 위한 공통 소프트웨어 속성을 제공하는 패키지
    : add-apt-repository 와 같은 유용한 명령어를 사용할 수 있게 됨

 

GPG 퍼블릭 키 에러

 

GPG(GNU Privacy Guard) ????

- 개인정보 보호 및 데이터 암호화를 위한 오픈 소스 소프트웨어로, PGP(Pretty Good Privacy)를 기반으로 만들어졌으며, 보안통신을 위한 오픈소스
- 공개 키(Public Key) : 이 키는 다른 사름들에게 공유되며, 이 키를 사용하여 사용자에게 메시지를 암호화하거나 사용자의 디지털 서명을 검증할 수 있다
- .비공개 키(Private Key) : 이 키는 사용자만 알고 있어야 하고 이 키를 사용하여 메시지를 해독하거나 자신의 디지털 서명을 만들 수 있다
- GPG 키는 디지털 서명, 엄호화, 소프트웨어 패키지의 무결성 검증 등에 사용된다
Ex) 오픈 소스 소프트웨어의 개발자는 GPG 키를 사용하여 소프트웨어 패키지에 서명하고, 사용자는 그 키를 사용하여 다운로드한 소프트웨어가 원본 그대로임을 확인할 수 있다

 

W: GPG error: https://download.docker.com/linux/ubuntu focal InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8
E: The repository 'https://download.docker.com/linux/ubuntu focal InRelease' is not signed.

 

해당 에러 : Docker 저장소의 GPG 키가 시스템에 제대로 추가되지 않았다...라는 의미

 

 

👇👇👇👇👇

위 문제를 해결하는 방법

 

  1. GPG 키 추가
    : 오류 메시지에는 누락된 공개 키(NO_PUBKEY 7EA0A9C3F273FCD8) 가  표시됩니다. 
     다음 명령을 사용하여 시스템의 신뢰할 수 있는 키 목록에 이 키를 추가해야 한다!!
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  • curl -fsSL https://download.docker.com/linux/ubuntu/gpg : Docker의 GPG 키를 안전하게 다운로드한다...
    여기서 -f 는 실패 시 에러를 반환하고, -s 는 침묵 모드(출력 없음)로 실행하며, -S 는 에러 발생 시 에러 메시지를 출력, -L 는 리다이렉트를 따름
  • | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg : 다운로드한 GPG 키를 dearmor 하여 바이너리 형식으로 변환하고 /usr/share/keyrings/docker-archive-keyring.gpg에 저장

 

2. Docker 저장소 추가
  :  이전에 키가 제대로 추가되지 않은 경우 지정된 키를 사용하여 Docker 저장소를 다시 추가해야 할 수 도 있다

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

 

3. 시스템 업데이트
 : 키와 저장소를 올바르게 추가한 후 패키지 색인을 업데이트 

sudo apt-get update

 

4. Docker 설치 

sudo apt-get install docker-ce docker-ce-cli containerd.io
docker -v

 

 

도커의 기본 명령어들

 

$ docker run  // 새 컨테이너를 생성하고 실행
$ docker ps   // 실행 중인 컨테이너의 목록을 보여줌, -a 옵션을 추가하면 종료된 컨테이너까지
$ doxker stop // 실행 중인 컨테이너를 정지
$ docker rm   // 컨테이너 삭제
$ docker images // 시스템에 있는 도커 이미지의 목록을 보여줌
$ docker pull 	// 리모트 저장소에서 이미지를 다운로드 받기
$ docker build  // doxkerfile을 사용하여 이미지를 빌드

 

 

docker-compose & jenkins 설치

 

Docker Compose ????

- 여러 개의 Docker 컨테이너들을 하나의 서비스로 정의하고 구성해 하나의 묶음으로 관라할 수 있는 하나의 애플리케이션을 만드는 것

 

 

도커 컴포즈 설치

# 도커 컴포즈 V2 버전 설치
sudo curl -sSL "https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
 
# 실행 권한 설정
chmod +x /usr/local/bin/docker-compose
 
# 버전 확인
docker-compose --version

 

 

docker-compose.yml 작성

version: '3.7'

services:
  jenkins:
    image: 'jenkins/jenkins'
    restart: unless-stopped
    user: root
    privileged: true
    ports:
      - '9090:8080'
    volumes:
      - '/home/ubuntu/docker/jenkins-data:/var/jenkins_home'
      - '/var/run/docker.sock:/var/run/docker.sock'
      - '/usr/bin/docker:/usr/bin/docker'
    container_name: 'jenkins'

 

 

해당 명령어를 통해 비번 확인할 수 있습니다

 

 

참고

 

https://seosh817.tistory.com/345

 

[Docker] 도커란? - 도커 개념 정리

도커란? 도커(Docker)는 리눅스 컨테이너에 리눅스 어플리케이션을 프로세스 격리기술을 사용하여 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트 입니다. 도커는 일반적

seosh817.tistory.com

 

https://uyfuyfuy-042.tistory.com/entry/GPG-keyPGP

 

GPG key(PGP)

GPG(GNU Privacy Guard) 개인정보 보호 및 데이터 암호화를 위한 오픈 소스 소프트웨어입니다. PGP(Pretty Good Privacy)를 기반으로 만들어졌으며, 보안통신을 위한 오프소스이다. 공개 키(Public Key): 이 키는

uyfuyfuy-042.tistory.com

 

https://hstory0208.tistory.com/entry/Docker-%EB%8F%84%EC%BB%A4-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%B4%9D%EB%AA%A8%EC%9D%8C%EC%A7%91-image-container-compose

 

[Docker] 도커 명령어 총모음집 (image, container, compose)

📌 Docker 실행 sudo systemctl status docker # 1 sudo /etc/init.d/docker start # 2 Docker Image 관련 명령어 이미지 빌드 Dockerfile을 이용해서 이미지 생성 (제일 많이 쓰는 이미지 생성 방법) ➡ docker build -t {이미지

hstory0208.tistory.com

 

https://hstory0208.tistory.com/entry/Docker-%EB%8F%84%EC%BB%A4-%EC%BB%B4%ED%8F%AC%EC%A6%88Docker-Compose%EB%9E%80-%EC%99%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EA%B0%80

 

[Docker] 도커 컴포즈(Docker Compose)란? 왜 사용하는가?

📌 도커 컴포즈란? 여러 개의 Docker 컨테이너들을 하나의 서비스로 정의하고 구성해 하나의 묶음으로 관리할 수 있는 하나의 애플리케이션을 만드는 것이다. 도커 컴포즈 설치 # 도커 컴포즈 V2

hstory0208.tistory.com

 

https://velog.io/@suhongkim98/jenkins-%EB%8F%84%EC%BB%A4%EB%A1%9C-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

 

jenkins 도커로 설치하기

우분투에 젠킨스를 도커로 설치하는 방법을 알아봅니다

velog.io

 

728x90
반응형
728x90
반응형

대략적인 배포 순서...

  1. ec2 발급
  2. ufw 설정 및 port 구성도
  3. swap 메모리 설정
  4. docker 설치
  5. docker-compose jenkins 설치
  6. jenkins gitlab 연동(project-build) 및 플러그인 설치
  7. dockerHub 설치 및 연동(docker-build)
  8. dockerScript 작성(pipeline)
  9. Nginx
  10. S3 설치 및 설정
  11. RDS 설치 및 설정

 

EC2 설정

 

EC2 (Elastic Compute Cloud) ???

- 아마존 웹 서비스(AWS) 에서 제공하는 클라우드 컴퓨팅 서비스
- 클라우드 컴퓨팅 인터넷(클라우드)을 통해 서버, 스토리지, 데이터베이스 등의 컴퓨팅 서비스를 제공
  => AWS 에서 원격으로 제어할 수 있는 가상의 컴퓨터를 한 대 빌리는 것
- 사용한 만큼 비용을 지불하기 때문에 탄력적인 이라는 의미의  Elastic이라는 단어가 붙어있다

조금 더 알고 싶다면 👇👇👇👇👇
https://velog.io/@server30sopt/AWS-EC2-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC



AWS 에서 직접 EC2를 내가 할당할 때 참조할 블로그
https://velog.io/@sunblock99/AWS-%ED%94%84%EB%A6%AC%ED%8B%B0%EC%96%B4-EC2-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EB%A7%8C%EB%93%9C%EB%8A%94-%EB%B0%A9%EB%B2%95

 

[AWS] 프리티어 EC2 인스턴스 만드는 방법

1) AWS 계정 생성 개인정보와 결제 카드 등을 등록해서 가입하면 됩니다. 인당 1계정 제한이 없으니 프리티어 기간이 끝났다면 다른 이메일로 가입하면 됩니다. 2) 인스턴스 시작 메인 화면에서 EC2

velog.io

 

나는 싸피에서 프로젝트를 위해 수행해서 설정을 해주시고 발급 받았다...

따로 포트 설정이나 인스턴스 생성 할 필요 X

 

 

ufw 설정 

 

ufw(Uncomplicated Firewall; 복잡하지 않은 방화벽) ??????

- 리눅스 계열 운영체제에서 사용하기 쉬운 방화벽 관리 프로그램
- 리눅스 커널은 다양한 네트워크 관련 연산을 수행하는 netfilter(넷 필터) 라는 프레임워크를 사용하고 있는데, 이를 관리하는 것이 UFW
- netfilter는 리눅스에서 방화벽을 설정하기 위해 iptables(네트워크 트래픽을 관리하고 제어)라는 프로그램을 사용
- 사용자가 직접 iptables를 관리하기에는 복잡하기 때문에 이러한 절차를 간편하게 해준 것이 UFW

 

 

방화벽이란 ????

- 컴퓨터의 보안을 위해 미리 정의된 규칙에 기반하여 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 네트워크 보안 시스템
- 내부에서 외부의 정보 통신망에 접근하거나 외부에서 내부로 불법적으로 접근하는 움직임을 차단
- 목적 : 인가받지 않은 사용자가 내부 컴퓨터 자원을 사용 또는 교란하거나 중요한 정보를 외부에 유출하는 것을 방지하기 위해 사용
- 작동 원리  : 기본적으로 방화벽은 모든 접근을 거부하고, 단계적으로 접근을 허용한다. 네트워크를 통해 데이터가 이동하는 통로를 포트(port)라 하는데, 방화벽은 약 65,000개의 통신 포트를 모두 차단하고, 접근을 허용하는 특정 포트만 열어둔다

 

 

.SSH(Secure Shell) ????

- 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜
- 사용자가 명령어를 입력하면 해석해서 커널로 옮겨 실행하는 역할을 해주는 것
- 기존 원격 접속은 Telnet 이라는 방식을 사용했는데, 암호화를 제공하지 않기 때문에 보안상 취약하다는 단점이   있었는데 이를 암호화하는 SSH 기술이 등장했고, 현재 원격 접속 보안을 위한 필수 방법으로 사용되고 있다

 

 

우리 프로젝트에서는 VMware에서 바로 명령어를 입력하지 않고 puttygen을 사용해서 키를 만들고 편의 기능성의 폭을 넓힘

 

PuTTY

-  윈도우용 오픈소스 SHH 및 Telnet 클라이언트
-  원격으로 서버 및 장치에 연결이 가능하고 프로그램이 굉장히 가볍고 간편해서 사용성이 뛰어남
-  클라이언트는 강력한 암호화를 사용하여 클라이언트와 서버 간에 전송되는 데이터를 보호하며 암호 인증, 공개 키 인증 및 키보드 대화식 인증을 포함한 다양한 인증 방법을 지원

 

https://www.puttygen.com/

 

PuTTYgen Download

Download PuTTYgen for Windows, Linux and Mac operating system. Find step by step guide to downloading PuTTYgen, a key generator for free.

www.puttygen.com

https://www.putty.org/

 

 

Download PuTTY - a free SSH and telnet client for Windows

Is Bitvise affiliated with PuTTY? Bitvise is not affiliated with PuTTY. We develop our SSH Server for Windows, which is compatible with PuTTY. Many PuTTY users are therefore our users as well. From time to time, they need to find the PuTTY download link. W

www.putty.org

  • ssh 접속을 허용하는 규칙 추가하기
$ sudo ufw allow 22

 

  • ufw 활성화하기
$ sudo ufw enable

 

  • ufw 상태 확인하기
$ sudo ufw status

 

  • 포트 정상 등록되었는지 확인하기
$ sudo ufw status numbered

 

 

EC2 보안그룹

22 : ssh 

8080 : Springboot

80 : Nginx

6379 : Redis

5000 : Docker

3306 : Database

 

 

swap 메모리 설정

swap memory ????

- 실제 메모리 Ram이 가득 찼지만 더 많은 메모리가 필요할 때 디스크 공간을 이용하여 부족한 메모리를 대체할 수 있는 공간
- 실제 운영환경에서는 스왑 메모리를 사용하는 것보다 실제 메모리를 올려서 사용하는 게 더 좋다
 => 스왑 메모리 사용이  실제 메모리 사용보다 덜 바람직한 이유

1. 속도 차이 : 스왑 메모리는 하드 드라이브에 위치하는데, 이러한 저장 장치는 RAM보다 읽고 쓰는 속도가 훨씬 느려서 시스템이 스왑 메모리를 사용할 때 프로그램의 응답 시간이 늘어나고 전반적인 성능이 저하될 수 있다
2. 웨어 라벨링(Wear Leveling) : SSD의 경우, 데이터를 지속적으로 쓰고 지우는 작업이 SSD의 수명을 단축
3. 시스템 자원의 효율적 사용 :  프로세스 관리와 자원 할당에 있어서 최적의 성능을 내지 못할 수 있다
4. 시스템의 안정성 : 스왑 메모리를 과도하게 사용하는 시스템은 메모리가 부족할 때 자주 발생하는 '스왑 스레싱' 현상을 빠질 수 있다(메모리와 스왑 영역 사이에서 데이터를 이동시켜 처리하는 현상을 말하고, 시스템이 느려지고 불안정해질 수 있다)

그럼에도 사용하는 이유??
: 프로그램의 비정상 종료나 시스템의 불안정을 방지하는 데 도움이 될 수 있다. 메모리가 제한적인 환경에서는 스왑 공간을 적절히 설정해두는 것이 좋다!!

 

  1.  dd 명령어로 swap 메모리 할당

    dd : 디스크 복사 도구로서 데이터를 변환하고 복사
    if=/dev/zero : 입력 파일로 /dev/zero를 사용
    of=/swapfile : 출력 파일로 /swapfile을 지정
    bs=128M: 블록 사이즈로 128 메가 바이트를 지정(한번에 128MB의 데이터 블록을 사용하겠다는 의미)
    count=16 : 블록을 총 16번 사용하겠다는 의미(2GB의 스왑 파일이 생성된다)
sudo dd if=/dew/zero of=/swapfile bs=128M count= 16

 

 2. 생성한 swapfile의 권한(읽기, 쓰기)를 업데이트 :보안상 다른 사용자에게 접근 권한이 없어야 함!

sudo chmod 600 /swapfile

 

3. mkswap 명령어로 swap 공간을 생성 : 스왑 공간으로 사용하기 위해 스왑 파일을 설정

sudo mkswap /swapfile

 

4. 스왑 활성화 : 시스템에 스왑 파일을 활성화

sudo swapon /swapfile


5. /etc/fstab 파일을 편집하여 부팅 시 스왑 파일을 시작하게끔 함

sudo vi /etc/fstab

 

6, 스왑 파일을 시스템 부팅 시 자동으로 마운트 하도록 설정

/swapfile swap swap sw 0 0

 

참고

 

https://samgyeobsal123.tistory.com/entry/PuTTY-PuTTY-Key-Generator-%EC%82%AC%EC%9A%A9%EB%B2%95

 

[PuTTY] PuTTY Key Generator 사용법

필요시 aws에서 제공한 프라이빗 키 파일을 PuTTY에 맞는 확장자인 PPK로 변환해야 할 때가 있다. PuTTY를 성공적으로 설치했으면 PuTTY Key Generator (이하 키젠)을 실행하면 아래 화면이 뜬다. Load를 눌

samgyeobsal123.tistory.com

puttygen 사용법...

 

 

https://calvinjmkim.tistory.com/20

 

PEM파일을 PPK로 변경하기 (PEM to PPK)

윈도우즈에서 간단한 터미널 툴을 사용하고 싶을 때 가장 먼저 생각나는 툴이 Putty이다. 기본적인 기능만 갖추고 있고, 간단하고, 설치할 필요도 없고, 용량마저 작은 것이 그 매력이 아닐까 싶

calvinjmkim.tistory.com

ppk를 변경하는 이유..

728x90
반응형
728x90
반응형

문제 😵‍💫

https://school.programmers.co.kr/learn/courses/30/lessons/68935?language=java

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록

solution 함수를 완성해주세요

 

 

제한사항

- n은 1이상 100,000,000 이하인 자연수입니다.

 

 

입출력 예

n result
45 7
125 229

 

내 풀🦷

 

class Solution {
    public int solution(int n) {
        String sam = Integer.toString(n, 3);
        String reverse_sam = new StringBuilder(sam).reverse().toString();
        int decimal = Integer.parseInt(reverse_sam, 3);

        return decimal;
    }
    
}

 

다시 알고리즘 하기로 하고 처음으로 유나가 골라준 문제라 그런지 쉬운 문제였다!!

이해력이 안 좋은데 프로그래머스는 예시를 설명해줘서 좀 더 풀기 좋은 듯 하다

10진법을 3진법 으로 바꾸고 3진법을 뒤집어서 다시 10진법으로 바꾸어서 도출!!

뒤집는 메서드인 reverse()는 파이썬과 동일하게 있다

그리고 Intger,toString()으로 바로 진법 변환할 수 있다는 것을 알게되었다!!!

 

 

다른 사람 풀이

class Solution {
    public int solution(int n) {
        String a = "";

        while(n > 0){
            a = (n % 3) + a;
            n /= 3;
        }
        a = new StringBuilder(a).reverse().toString();


        return Integer.parseInt(a,3);
    }
}

 

깔끔하다!!

변수명을 한 단어로 하는것도 좋은 방법일듯!!

 

참고하면 좋을 개념들 ✍️

  • Integer.parseInt(String s) : 문자열(s)을 인자값으로 받으면 해당 값을 10진수의 Integer 형으로 변환
    ex) Integer.parseInt("1004")    // 1004
  • Integer.parseInt(String s, int radix) : 숫자형의 문자열을 첫번째 인자값으로 받고 변환할 진수값을 입력하면 해당 진수에 맞춰서 Integer 형으로 변환
    ex) Integer.psrseInt("45", 3)    // 1200
  • Integer.toString() : 숫자를 문자로 변환하는 형 변환 방법!!!
    ex) int num = 123;
          String str1 = Integer.toString(num);  .// 숫자가 아니고 문자 123임
728x90
반응형
728x90
반응형

2023 기출..

 

JavaScript 를 사용한 비동기 통신기술클라이언트와 서버 간에 XML데이터를 주고받는 기술이다. 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드 할 수 있어, 메뉴 등 화면상의 객체를 자유롭게 움직이고 다툴 수 있다. 비슷한 기능의 액티브X 나 플래시 등에 비해 가볍고 속도가 빨라 차세대 웹 기술로 각광받고 있다.

:AJAX(Asynchronmous JavaScript and XML, 비동기식 자바스크립트 XML)

 

 

 

시스코의 L2F와 PPTP 을 조합하여 만든 VPN이다. 자체적으로 암호화 기능이 없기 때문에 보통 IPsec과 같은 보안용 프로토콜과 같이 사용한다. 기본적으로 PPTP 방식을 따르기 때문에, 서버-클라이언트 통신 방식은 유사하나 UDP 500번 포트를 사용해 통신을 한다는 점이 PPTP와 조금 다르다. 따라서 NAT 방식을 사용한 방화벽에 쉽게 차단될 수 있지만, 높은 보안성과 설치 밒 설정이 간단하고 빠른 속도를 가지고 있는 장점이 있다,

- 데이터링크 계층에서 구현되는 터널링(두 노드 또는 네트워크 간 가상의 링크를 형성하는 기법) 기술

: L2TP

 

 

 

네트워크를 통한 원격 호스트 연결 과정을 보호하기 위한 프로토콜

: SSH(Secure Shell, 시큐어 쉘)

 

 

 

포트 : 컴퓨터 간 상호 통신을 위해 프로토콜에서 이용하는 가상의 연결단

- 컴퓨터는 동시에 하나 이상의 프로그램을 실행하기  떄문에  IP주소만으로는 특징 서비스에 접근할 수 없으므로

포트 사용하여 특정 서비스에 할당될 수 있고, 원하는 서비스에 접근할 수 있다.

- 잘 알려진 포트

포트 설명 포트 설명
20 FTP - 데이터 포트 21 FTP - 제어 포트
22 SSH - 원격 접속 보안 23 TELNET - 원격 접속
25 SMTP - 이메일 전송 80 HTTP - 웹 페이지 전송
110 POP3 - 이메일 수신 443 HTTPS - 암호화 전송

 

 

 

악성 루틴이 숨어 있는 프로그램으로, 겉보기에는 정상적인 프로그램으로 보이지만 실행하면 악성 코드를 실행하는 프로그램

- 컴퓨터 바이러스나 웜과는 달리, 트로이 목마는 보통 다른 파일에 삽입되거나 스스로 전파되지 않는다.

: 트로이 목마

 

 

 

스스로를 복제하여 파일을 손상시키는 악성 프로그램

- 다른 실행 프로그램에 기생하여 실행

- CD,. USB 드라이버 등을 통해 전파 => 스스로 전파 불가능

: 바이러스

 

 

 

스스로를 복제하여 네트워크를 손상시키는 악성 프로그램

- 독자적으로 실행되어 다른 프로그램이 필요하지 않음

- 네트워크를 사용하여 복제본을 스스로 전파

:

 

 

 

TCP/IP에서 신뢰성 없는 IP를 대신하여 송신 측으로 네트워크의 IP 상태 및 에러 메시지를 전달해주는 프로토콜

- 서버와 게이트웨이 사이에서 메시지를 제어하고 알려주는 프로토콜

: ICMP 

 

 

 

특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 디자인 패턴으로, 객체의 대리자를 이용하여 원래 객체의 작업을 대신 처리하는 방식이다. 즉, 어떤 객체를 사용하려고 할 때, 객체를 직접 참조하는 것이 아니라 해당 객체에 대응하는 일종의 대리자 역할을 하는 객체를 통해서 대상에 접근하는 방식으로 직접 참조하려던 객체가 메모리에 존재하지 않아도 기본적인 정보 참조나 실제 사용 시점까지 생성 시점을 미루는 등 행위가 가능해진다

: Proxy

 

 

생성 단계를 캡슐화하여 구축 공점을 동일하게 이용하도록 하는 패턴

: Builder(빌더)

 

 

 

구현부에서 추상층을 분리하여  각자 독립적으로 확장할 수 있게하여 결합도를 낮춘 패턴

:Bridge(브릿지)

 

 

한 객체의 상태 변화가 일어났을 때 그 객체에 의존(상속)하는 다른 객체들에게 알리고, 자동으로 내용이 갱신되는 방식으로 일대다(One-To-Many)의존성을 가지는 패턴

:Observer(옵저버)

 

 

*** db 요소들

릴레이션 인스턴스 :  튜플들의 집합(릴레이션 실제값)

도메인 : 한 속성에 나타날 수 있는 값들의 범위

튜플(Row)

차수 : 속성들의 수

릴레이션 스키마 : 속성 이름들(릴레이션 틀, 구조)

카디널리티 : 튜플들의 수

 

 

 

*** 데이터베이스 스키마

외부 스키마 : 개념 사용자나 응용 프로그래머가 접근하는 데이터베이스의 논리적 구조를 정의

개념 스키마 : 데이터베이스의 전체적인 논리적 구조로, 개체간의 관계와 제약조건을 나타냄

내부 스키마 : 데이터베이스의 물리적 구조로, 데이터의 실제 저장 방법을 기술

 

 

 

데이터베이스 설계 순서(요괴눈물)

요구사항 분석 -> 개념적 설계 -> 논리적 설계 -> 물리적 설계 -> 구현

 

 

 

DROP VIEW 고객 CASCADE

: [고객] 뷰를 삭제하고, [고객] 뷰와 의존성 관계가 있는 객체들을 모두 삭제\

 

 

 

대칭키(=개인키, Private) 알고리즘 : 암호화 키 = 복호화 키

- 종류 : LFSR, RC4, SEED. AES, DES. ARIA,

 

 

 

비대칭키(=공개키, Public) 알고리즘 : 암호화 키 <> 복호화 키

- 종휴 : RSA, ECC 

 

 

 

**코드 커버리지

구문 커버리지 : 모든 구문이 한 번 이상 수행되도록 테스트 케이스 설계

다중 조건 커버리지 : 결정 포인트 내에 있는 모든 개별 조건식의 모든 가능한 논리적인 조합을 고려하여 100%커버리지 보장

변형 조건/결정 커버리지 : 조건과 결정을 복합적으로 고려한 측정 방법이며, 결정 포인트 내의 다른 개별적인 조건식 결과에 상관없이 독립적으로 전체 조건식의 결과에 영향을 주는 테스트 커버리지

결정 커버리지 : 결정 포인트 내의 모든 분기문(조건문)이 적어도 한 번 이상 수행되도록 테스트 케이스 설계

조건/결정 커버리지 : 모든 조건문과 각 개별 조건식이 적어도 한 번 이상 수행되도록 테스트 케이스 설계

경로 커버리지 : 모든 논리적인 경로가 한 번 이상 수행되도록 테스트 케이스 설계

조건 커버리지 : 결정 포인트 내의 모든 개별 조건식이 적어도 한 번 이상 수행되도록 테스트 케이스 설계

 

 

 

 

 

 

 

Tampering(부정 조작)검출 시스템을 통하여 소프트웨어에 적용된 위,변조를 감지하고 프로그램이 오작동 하도록 만드는 기술

: 템퍼 프루핑(Tamper Proofing)

 

 

 

인터넷 애플리케이션에서 사용자 인증에 사용되는 공개 API(OpenAPI)로 구현된 표준 인증 방법

- 다른 애플리케이션에서 네이버, 카카오톡, 구글 등의 저장된 사용자 정보에 접근할 때 사용할 수 있다

- ex) 다른 애플리케이션에 Google로 로그인하면 연동된 계정의 Google Calendar  정보를 가져올 수 있다

: OAuth(Open Authorization, 공개 인증)

 

 

 

#include <stdio.h>
int main() {
	char*p = "KOREA";
    printf("%s\n", p);				// KOREA
    printf("%s\n", p+1);			// OREA
    printf("%c\n", *p);				// K
    printf("%c\n", *(p+3));			// E
    printf("%c\n", *p+4);			// O (아스키 코드 규칙에 따라 *p(K = 75) + 4 = 79로 계산)
}

 

 

 

 

구조체 포인터 변수가 구조체 멤버에 접근할 때 사용하는 연산자

: 화살표 연산자(->)

 

 

 

 

** .super

: 상위 클래스를 호출하는 예약어

** this 

: 객체 자기자신을 의미하는 예약어

 

 

A b = new B();
A : 상위 클래스
B : 하위 클래스

** 오버라이딩(Overriding)
:하위(자식) 클래스에서 상위(부모) 클래스의 메소드를 재정의 하는 과정
- 하위 클래스의 오버라이딩 메소드는 상위 클래스 메소드보다 우선순위가 높다

 

 

 

                                                 

ATM(Asynchronous Transger Mode, 비동기 전송 모드)

- 기존 패킷교환방식과 유사하나, 패킷 크기를 일정(샐Cell)하게 하고 에러 복구 등을 간략화시킴

- ATM 샐들을 모아서 -> 비동기 시분할 다중화( ATDM)전송할 데이터를 버퍼에 우선 저장  -> 우선순위에 따라 다중화 슬롯(ATM 샐들의 전달에만 관여) 에 삽입

 

 

 

 

*** 접근 통제(Access Control, 접근 제어)

- 임의 접근 통제(DAC; Discretionary Access Control, 신분 기반 정책)

: 자원에 접근하는 사용자의 신원에 따라 접근 권한을 부여하는 방식

 

- 강제 접근 통제(MAC; Mandatory Access Control, 규칙 기반 정책)

: 사용자나 자원(객체) 모두 보안 레벨(등급)을 부여 받아 서로의 레벨을 비교하여 접근 권한을 부여하는 방식

 

- 역할기반 접근 통제(RBAC; Role-Based Access Control)

: 사용자에게 할당된 역할에 기반하여 접근권한을 부여하는 방식 -> 직책에 권한을 부여

 

 

 

*** RIP(Routing Information Protocol, 경로 선택 정보 프로토콜)

- 거리 백터 기반 라우팅 프로토콜

- 경유하는 라우터의 대수(홉수)에 따라 최단 경로를 동적으로 결정 -> 최적의 경로가 아닌 경우 발생(왜? 속도나 지연 등을 고려하지 않아)

- 30초 주기로 전체 라우팅 정보 갱신 -> 변화 업데이트 시 많은 시간 소요 -> 소규모 동종 네트워크에 적합

 

 

 

**** 관계대수(순수관계 연산자)

- SELECT( σ ) : 릴레이션에서 주어진 조건을 만족하는 튜플들을 검색하는 것

- PROJECT( Π ) : 릴레이션에서 주어진 조건을 만족하는 속성들을 검색하는 것

- JOIN( ) : 두개의 릴레이션 A와 B에 공통된 속성을 연결하는 것

- DIVISION(%)  : X > Y인 두 개의 릴레이션 R(X)와 S(Y)갸 있을 때,  R의 속성이 S의 속성 값을 모두 가진 튜플에서 S가 가진 속성을 제외한 속성만을 구하는 것

 

 


 

2022 기출...

 

*** RAID(.Redundant Array of Inexpensive Disk)

: 디스크의 고장에 대비해 데이터의 안정성을 높인 컴퓨터의 저장 장치로서, 하나의 대형 저장 장치 대신 다수의 일반 하드를 배열로 구성하고, 데이터를 분할해서 분산 저장하거나 다중화한 저장 장치

- 여러 개의 하드 디스크에 일부 중복된 데이터를 나눠서 저장하는 기술

- 값싼 디스크를 여러 개 묶어 대용량의 저장 공간을 만들고자 함

- 여러 개의 디스크를 하나로 묶어 하나의 논리적 디스크로 작동하게 하여 사용자에게 하나의 디스크처럼 보이게 한다

- 디스크 어레이(Disk Array)라고도 한다.

- RAID에 사용되는 기술

스트라이핑(Striping) 데이터를 여러 개의 디스크에 분산 저장할 수 있게 해주는 기술
미러링(Mirroring) 데이터를 복제하는 기술
패리티(Parity) 데이터의 오류 검출 확인에 사용되는 기술

 

- RAID 종류

RAID 0 여러 개의 디스크에 데이터를 똑같이 분할하여 저장하는 방식
- 스트하이핑(Striping)이라고도 부른다.
- 여러 개의 디스크를 하나의 디스크처럼 인식하여 사용하므로, 하나의 디스크에 문제가 발생하면 전체에 문제가 생기게 된다
RAID 1 여러 개의 디스크에 데이터를 똑같이 복제(Mirroring)하는 방식
- 미러링(Mirroring)이라고도 부른다.
- 디스크마다 데이터가 복제되어 있으므로 안정성이 높다
RAID 2 기록용 디스크와 복구용(패리티용, 해밍 코드)디스크를 별도로 분리하여 구성하는 방식

 

 

*** TKIP(Temporal Key Integrity Protocol, 임시 키 무결성 프로토콜)

: IEEE 802.11 무선랜 보안에 사용된 WEP 방식의 취약성을 보완한 데이터 보안 프로토콜

 

 

** UI 종류

- CLI : 텍스트 또는 키보드 기반으로 기기를 조작하는 인터페이스

- GUI : 그래픽 또는 마우스 기반으로 기기를 조작하는 인터페이스

- NUI : 인간의 자연스러운 신체 움직임으로 기기를 조작하는 인터페이스

- VUI : 사람의 음성 기반으로 기기를 조작하는 인터페이스

- OUI : 모든 자연 상태가 입력과 출력이 동시에 이뤄지는 인터페이스

 

 

*** ISMS(Information Security Management System, 정보 보호 관리 체계)

: 정보 자산의 비밀을 유지하고 결함이 없게 하며, 언제든 사용할 수 있게 한 보호 절차와 과정

- 기업의 정보 보호 수준을 끌어올리라는 것

- 방송통신위원회는 정보통신 서비스를 시작하기 전에 보안 위험을 분석해 미리 조치하고, 사이버 공격에 대응할 최소 보호 조치 기준을 마련하였다.

 

 

*** Watering Hole(워터링 홀)

: 표적으로 삼은 특정 집단이 주로 방문하는 웹 사이트(물웅덩이)를 감염시키고 피해 대상이 그 웹사이트를 방문할 떄까지 기다리는 공격

- 감염된 웹 사이트의 방문자는 모두 악성 코드에 감염되어, 전염성이 높아지는 것이 특징이다

 

 

1. 단위 테스트

2. 통합 테스트

3. 시스템 테스트

4. 인수 테스트

 

 

*** 관계 데이터 연산

관계 대수 - 절차적 언어(절차 중심)
: 원하는 정보를 '어떻게' 유도하는가를 연산자와 연산 규칙 이용하여 기술
- 분류 : 순수 관계 연산자, 일반 집합 연산자
관계 해석 - 비절차적 언어(결과 중심)
: 원하는 정보가 '무엇'이라는 것만 정의
- 분류 : 튜플 관계 해석, 도메인 관계 해석

 

 

 

*** ALL : 검색된 조건을 모두 만족해야 한다

SELECT 이름, 과목, 점수 FROM 수강생

WHERE 점수 > ALL (

SELECT 점수 FROM 수강생 WHERE 이름 = '김길현');

 

이름 과목 점수
남기욱 정보 100

: '김길현' 수강생의 점수인 90 그리고 70ㅂ보다 높은 튜플을 출력한다.

 

***  ANY : 검색된 조건을 하나 이상 만족해야 한다.

SELECT 이름, 과목, 점수 FROM 수강생

WHERE 점수 > ANY (

SELECT 점수 FROM 수강생 WHERE 이름 = '김길현');

 

이름 과목 점수
김길현 정보 90
남기욱 정보 100
김상현 컴활 80

: '김길현' 수강생의 점수인 90 또는 70보다 높은 튜플을 출력한다.

 

 

*** COUNT() : .그룹별 튜플 수

COUNT(*) NULL 값을 포함한 튜플 수 반환
COUNT(속성명) NULL 값을 포함하지 않는 튜플 수 반환

 

 

*** VPN(Virtual Private Network; 가상 사설망)

: 인터넷망과 같은 공중망을 사설망처럼 이용해서 회선 비용을 크게 절감할 수 있는 기업통신 서비스

- 인터넷망을 전용선처럼 사용할 수 있도록 특수통신체계의 암호화기법을 제공하는 서비스로 기업 본사와 지사 또는 지사간에 전용망을 설치한 것과 같은 효과를 거둘 수 있으며, 전용선에 비해 20 ~ 80% 이상의 비용을 줄일 수 있다.

 

 

** 보안 솔루션

- 방화벽(Firewall) : 네트워크 간에 전송되는 정보를 선별하는 기능을 가진 침입 차단 시스템

- 웹방화벽(Web Firewall) : 웹 기반 공격을 방어할 목적으로 만들어진 웹 서버 특화 방화벽

- 침입탐지 시스템(IDS; Intrusion Detection System) : 컴퓨터 시스템의 비정상적인 사용, 오용 등을 실시간으로 탐지하는 시스템, 이상탐지, 오용탐지

- 침입 방지 시스템(IPS; Intrusion Prevention System) :  방화벽과 침입탐지 시스템을 결합한 것

- 데이터유출방지(DLP; Data Leakage/Loss Prevention) : 내부 정보의 유출을 방지하기 위한 보안 솔루션

- NAC(Network Access Control) : 네트워크에 접속하는 내부 PC의 MAC주소(고유랜카드주소)를 IP관리 시스템에 등록한 후 일관된 보안관리 기능을 제공하는 보안솔루션

- ESM(Enterprise Security Management) : 다양한 장비에서 발생하는 로그 및 보안 이벤트를 통합관리하는 보안 솔루션

 

 

 

*** 태스트 종류

- 안전 테스트(Security Test) : 불법적인 소프트웨어가 접근하여 시스템을 파괴하지 못하도록 소스코드 내의 보안적인 결함을 미리 점검하는 테스트

- 성능 테스트(Performance Test) : 시용자의 이벤트에 시스템이 응답하는 시간, 특정 시간 내에 처리하는 업무량, 사용자 요구에 시스템이 반응하는 속도 등을 테스트

- 병행 테스트(Parallel Test) : 변경된 시스템과 기존 시스템에 동일한 데이터를 입력 후 결과를 비교하는 테스트

- 회복 테스트(Recovery Test) : 시스템에 고의로 실패를 유도하고 시스템이 정상적으로 복귀하는지 테스트

- 회귀 테스트(Regression Test) : 변경 또는 수정된 코드에 대하여 새로운 결함 발견 여부를 평가하는 테스트

- 구조 테스트(Strategy Test) : 시스템의 내부 논리 경로, 소스코드의 복잡도록 평가하는 테스트

 

 

*** 라우팅 방식

- 내/외부 라우팅

1) IGP(Interior Gateway Protocol)

- 자율 시스템 내부에서만 이루어지는 라우팅 프로토콜

- 프로토콜 종류 : RIP, IGRP, OSPF

 

* 자율 시스템(AS; Autonomous System)

: 하나의 도메인(회사)에 속하는 라우터들의 집합

 

2) EGP(Exterior Gateway Protocol)

- 자율 시스템 간 라우팅 프로토콜

- 프로토콜 종류 : BGP

 

** RIP(Routing Information Protocol, 경로 선택 정보 프로토콜)

- 거리 백터 기반 라우팅 프로토콜

- 경유하는 라우터의 대수(홉수)에 따라 최단 경로를 동적으로 결정 -> 최적의 경로가 아닌 경우 발생(왜? 속도나 지연 등을 고려하지 않아)

- 30초 주기로 전체 라우팅 정보 갱신 -> 변화 업데이트 시 많은 시간 소요 -> 소규모 동종 네트워크에 적합

- 최대 홉수를 15 이하로 한정 -> 대규모 네트워크에 사용할 수 없음

 

** IGRP(Interior Gateway Routing Protocol, 내부 경로 제어 프로토콜)

: RIP의 문제점 개선을 위해 시스코에서 개발

- 네트워크 상태를 고려하여 라우팅(대역폭, 속도 등) -> 중규모 네트워크에 적합

 

** OSPF(Open Shortest Path First, 최단 경로 우선 프로토콜)

: RIP(경로 선택 정보 프로토콜)의 난점을 해결 -> 발생한 변경 정보에 대해 RIP보다 빠른 업데이트

- 인터넷망에서 이용자가 최단 경로를 선정할 수 있도록 라우팅 정보에 노드 간의 거리 정보, 링크 상태 정보를 실시간으로 조합하여 최단 경로로 라우팅을 지원하는 프로토콜

- 경로수에 제한이 없으므로 대규모 네트워크에 사용

- Link State 방식(링크 상태 알고리즘) : 라우팅 정보에 변화가 생길 경우, 변화된 정보만 네트워크 내의 모든 라우터에게 알리는 방식(OSPF가 대표적)

 

 

** BGP(Border Gateway Protocol, 경계 게이트웨이 프로토콜)

: EGP의 단점(다른 도메인 사이에 라우팅시 속도 문제점, 보안과 제어가 본래 목적)을 보완

- 여러 자율 시스템(Autonomous System) 간에 라우팅 정보를 교환 -> 규모갸 큰 네트워크의 상호 연결 -> 인터넷 서비스 업체(ISP; Internet Service Provider) 간의 상호 라우팅

- 발전된 형태의 거리 백터 라우팅 프로토콜

 

 

*** 응집도의 유형(모듈에 포함된 내부 요소들이 하나의 책임 / 목적을 위해 연결되어 있는 연관된 정도)

- 우연적 응집도(Coincidental Cohesion) : 모듈 내부의 각 구성요소가 연관이 없을 경우의 응집도

- 논리적 응집도(Logical Cohesion) : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우의 응집도

- 시간적 응딥도(Temporal Cohesion) : 연관된 기능이라기보다는 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우의 응집도

- 절차적 응집도(Procedural Cohesion) : 모듈 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우의 응집도

- 통신적 응집도(Communication Cohesion) : 동일한 입력과 출력을 사용하여 다른 기능을 수행

- 순차적 응집도(Sequential Cohesion) : 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우의 응집도

- 기능적 응집도(Functional Cohesion) : 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우의 응집도

(우논시절통순기)

 

 

*** 결합도의 유형(다른 모듈과의 의존성의 정도)

- 내용 결합도(Content Coupling) : 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우의 결합도

- 공통 결합도(Common Coupling) : 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고, 전역 변수를 갱신하는 식으로 상호작용하는 경우의 결합도

- 외부 결합도(External Coupling) : 모듈에서 외부로 선언한 변수를 다른 모듈에서 참조

- 제어 결합도(Control Coupling) : 단순 처리할 대상인 값만 전달되는 게 아니라 어떻게 처리를 해야 한다는 제어 요소가 전달되는 경우의 결합도

- 스탬프 결합도(Stamp Coupling) : 모듈 간의 언터페이스로 배열이나 객체, 구조 등이 전달되는 경우의 결합도

- 자료 결합도(Data Coupling) :모듈간의 인터페이스로 자료(값)를 통해서만 모듈간의 상호작용이 일어나는 경우의 결합도

(내공외제스자)

 

 

*** 객체지향 설계원칙(SOLID)

- 단일 책임 원칙(SRP, Single responsibility principle) : 한 클래스는 하나의 책임만을 가져야한다

- 개방 폐쇄 원칙(OCP, Open-closed principle) : 확장에는 열려 있고, 수정에는 닫혀 있어야 한다

- 리스코프 치환 원칙(LSP, Liskov substitution priciple) : 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 한다.

- 인터페이스 분리 원칙(ISP, Interface Segregation principle) : 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다

- 의존성 역전 원칙(DIP, Dependency Inversion principle) : 의존 관계를 맺을 때 자주 변화하는 것보다, 변화가 거의 없는 것에 의존해야 한다

 

 

*** 함수적 종속

- 부분 함수 종속(Partial Functional Dependency) : 릴레이션에서 기본 키가 복합 키일 경우 기본 키를 구성하는 속성 중 일부에게 종속된 경우

ex) { 학번, 과목번호 } -> 성적

 

- 완전 함수 종속(Full Functional Dependency) : 릴레이션에서 X -> Y 관계가 있을 때, Y는 X의 전체 속성에 대해 종속하고, 부분 집합 속성에 종속하지 않는 경우

ex) 학번 -> 학년

 

- 이행 함수 종속(Transtive Functional Dependency) : 릴레이션에서 X -> Y, Y -> Z 종속 관계가 있을 때, X -> Z가 성립되는 경우 

 

 

*** 형상관리 절차(형상관리 : 소프트웨어의 변경사항을 체계적으로 추적하고 통제하는 것)

: 형상 식별 -> 형상 통제 -> 형상 감사 -> 형상 기록

통제 => 소프트ㅜ에어 형상 변경 요청을 검토하고 승인하여 현재의 베이스라인에 반영될 수 있도록 통제

 

 

*** 관계

- 일반화 관계(Generalization) : 한 클래스가 다른 클래스를 포함하는 상위 개념일 때의 관계

- 연관 관계(Accociation) : 한 클래스가 다른 클래스에서 제공하는 기능을 사용할 때 표시

- 의존 관계(Dependency) : 클래스의 관계가 한 메서드를 실행하는 동안과 같이 매우 짧은 시간만 유지

- 실체화 관계(Realization) : 인터페이스를  구현받아 추상 메서드를 오버라이딩하는 것을 의미

- 집약 관계(Aggregation) : 전체 객체의 라이프타입과 부분 객체의 라이프타입은 독립적

- 합성 관계(Composition) : 부분 객체가 전체 객체에 속하는 관계로 긴밀한 필수적 관계

 

 

*** 블랙박스 테스트

- 동등 분할 기법(Equivalence Partitioning) : 입력 자료에 초점을 맞춰 테스트 케이스를 만들어 검사하는 방법

- 경계값 분석(Boundary Value Analysis) : 입력 조건의 경계값을 테스트 케이스로 선정하는 방법

- 원인-효과 그래프 검사(Cause Effect Graph) : 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법

- 오류 예측 검사(Error Guessing) : 과거의 경험이나 테스터의 감각으로 테스트하는 기법

- 비교 검사(Comparison Testing) : 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법

 

 

*** 선점형 기법 -> 프로세스를 강제로 뺏을 수 있는것

- Round Robin(RR)

- SRT(Shortest Remaining Time) : 실행시간 짧은것 먼저

- 다단계 큐(MLQ, Multi-Level Queue)

- 다단계 피드백 큐(MLFQ, Multi-Level Feedback Queue)

 

*** 비선점형 기법 => 프로세스를 강제로 못뺏음

- FCFS(First Come First Serve)

- SJF(Shortest Job First)

- HRN(Highest Response ratio Next)

- 우선순위(Priority)

- 기한부(Deadline)

 

 

2021 가출...

 

물리주소(MAC Address) IP 주소로 변화하는 프로토콜

RARP

 

IP 주소를 물리주소로 변화하는 프로토콜

ARP

 

설계3종류(--)

개념적 설계 : 현실 세계에 있는 그대로 사람이 이해할 수 있는 형태의 정보구조로 만들어가는 과정을 의미하기 때문에 정보 모델이라고 한다.(산출물ERD)

논리적 설계 : 추출된 엔터티와 속성들의 관계를 구조적으로 정의하는 단계로, 개념적 설계에서 만들어진 구조를 컴퓨터가 이해하고 처리할 수 있도록 변환하는 과정

물리적 설계 : 실제 저장장치에 어떻게 저장할지 설계하는 단계

 

카디널리티(튜플의 수) : 세로차수(어트리뷰트: 속성의 수) : 가로

 

 

 

EAI

기업 내부에서 운영되는 각종 플랫폼 및 애플리케이션 간의 정보전달, 연계, 통합을 가능하게 하는 솔루션Point to Point, Hub&Spoke, Message Bus, Hybrid 형태로 구성

- Point to Point : 가장 기초적인 애플리케이션 통합 방법( 1:1 단순 통합 방법 ) / 개발자간 대화를 통해 통합 가능

허브 앤 스포크 : 단일한 접점의 허브 시스템을 통하여 데이터를 전송하는 중앙 집중적 방식

메시지 버스 : 애플리케이션 사이 미들웨어를 두어 연계하는 통합 방식 / 뛰어난 확장성과 대용량 데이터 처리 가능

하이브리드 : 그룹 내는 허브 앤 스포크 방식 / 그룹 간에는 메세지 버스 방식 사용하는 통합 방식

 

 

데이터 모델 구성 3요소

연산 : 데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세로 데이터베이스를 조작하는 도구

구조 : 논리적으로 표현된 개체 타입들 간의 관계로서 데이터 구조 및 정적 성찰을 표현한다.

제약조건 : 데이터베이스에 저장될 수 잇는 실제 데이터의 논리적인 제약 조건

 

 

요구사항 종류

기능적 요구사항은 제품을 구현하기 위해 소프트웨어가 가져야 할 기능적 속성

비기능적 요구사항은 제품 품질 기준 등의 만족을 위해 소프트웨어가 가져야 할 특성(성능, 보안, 품질...)

웹 서비스의 구체적 내용이 기술되어 있어 서비스 제공 장소, 서비스 메시지 포맷, 프로토콜 등이 기술되어 있는 언어는?

: WSDL

SQL(SELECT)

SELECT * FROM 테이블 이름

WHERE 조건 AND, OR

GROUP BY 컬럼명

HAVING SUM()

ORDER BY ASC, DESC....

 

 

IPC(Inter-Process Communication)

컴퓨터 프로세스가 통신을 의미하는 용어로 운영체제 상에서 실행 중인 프로세스 산에 통신을 가능하게 하는 기술, 주요 기법에는 공유 메모리 기법, 메시지 전달 기법이 있으며 메시지 전달 기법에 기반을 둔 기법들에는 소켓, 파이프, 세마포어, 시그널 등이 있다

 

네트워크의 구성 및 유지를 위해 기지국이나 액세스 포인트와 같은 기반 네트워크 장치를 필요로 하지 않고, 멀티 홉 라우팅 기능에 의해 무선 인터페이스가 가지는 통신 거리상의 제약을 극복하며노드들의 이동이 자유롭기 때문에 네트워크 토폴로지가 동적으로 변화되는 특징이 있다. 응용 분야로는 긴급 구조, 긴급 회의, 전쟁터에서의 군사 네트워크 등이 있다

AD-hoc Network

 

 

*** 병행 제어 기법의 종류

로킹(Locking) : 하나의 트랜잭션을 실행하는 동안 특정 데이터 항목에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 상호배제(Mutual Exclusion) 기능을 제공하는 기법

 * 로킹의 특징!!

·         데이터베이스 파일, 레코드 등은 로킹 단위가 될 수 있음

·         로킹 단위가 작아지면 데이터베이스 공유도가 증가

·         로킹 단위가 작아지면 로킹 오버헤드가 증가

·         한꺼번에 로킹할 수 있는 객체의 크기를 로킹 단위라고 함

낙관적 검증(Optimistic Validation) :  트랜잭션이 어떠한 검증도 수행하지 않고 일단 트랜잭션을 수행하고, 트랜잭션 종료 시 검증을 수행하여 데이터베이스에 반영하는 기법

타임 스탬프 순서(Time Stamp Orderring) : 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 타임 스탬프를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법

 

 

 

*** 보안의 세 가지 용어

- 인증(Authentication) : 보안 기능에서, 사람이나 프로세스의 신분을 확인하는 것

- 인가(Authorization) : 검증된 사용자에게 어떤 수준의 권한과 서비스를 허용하는 것

- 계정 관리(Accounting) : 사용자의 자원에 대한 사용 정보를 모아서 과금, 감사, 용량증설, 리포팅 등을 실시하는 것

 

 

*** 스푸핑(Spoofing)

- IP 스푸핑

  • IP 자체의 보안 취약성을 악용한 것으로 자신의 IP 주소를 속여서 접속하는 공격
  • IP 스푸핑을 통해 서비스 거부 공격(DoS)도 수행 가능하며 공격 대상 컴퓨터와 서버 사이의 연결된 세션을 끊을 수도 있다
  • 종단 인증(end point authentication) 같은 방법으로 해결한다

- DNS 스푸핑

  • 공격대상에게 전달되는 DNS IP 주소를 조작하여 의도치 않는 주소로 접속하는 공격
  • 공격대상은 정상적인 URL을 통해서 접속하지만, 실제로 가짜 사이트로 접속된다

 

 

*** 파일의 구조

- 순차 파일(Sequential File, 순서 파일) : 순차 파일은 레코드를 논리적인 처리 순서에 따라 연속된 물리적 공간으로 기록하는 것

- 직접 파일(Direct File) : 파일을 구성하는 레코드를 임의의 물리적 저장공간에 기록하는 것

- 색인 순차 파일(Indexed Sequential File) : 순차 파일과 직접 파일에서 지원하는 편성 방법이 결합된 형태

 

 

*** 구조적 다이어그램(Sturcture Diagram)

- 클래스 다이어그램 : 시스템을 구성하는 클래스들 사이의 관계를 표현한다

- 패키지 다이어그램 : 클래스나 유스 케이스 등을 포함한 여러 모델 요소들을 그룹화하여 패키지를 구성하고 패키지 들 사이의 관계를 표현한다

- 복합체 구조 다이어그램 : 복합 구조의 클래스와 컴포넌트 내부 구조를 표현한다

- 객체 다이어그램 : 객체 정보를 보여준다 

- 컴포넌트 다이어그램 : 컴포넌트 구조 사이의 관계를 표현한다

- 배치 다이어그램 : 소프트웨어, 하드웨어, 네트워크를 포함한 실행 시스템의 물리 구조를 표현한다

 

 

*** 행위 다이어그램(Behavior Diagram)

- 유스 케이스 다이어그램 : 사용자 관점에서 시스템 행위를 표현한다

- 활동 다이어그램 : 업무 처리 과정에서 연산이 수행되는 과정을 표현한다.

- 콜라보레이션 다이어그램 : 순차 다이어그램과 같으며 모델링 공간에 제약이 없어 구조적인 면을 중시한다.

- 상태 머신 다이어그램 : 객체의 생명주기를 표현한다.

- 순차 다이어그램 : 시간 흐름에 따라 객체 사이의 상호작용을 표현한다

- 통신 다이어그램 : 객체 사이의 관계를 중심으로 상호작용을 표현한다

- 상호작용 다이어그램 : 여러 상호작용 다이어그램 사이의 제어 흐름을 표현한다.

- 타이밍 다이어그램 : 객체 상태 변화와 시간 제약을 명시적으로 표현한다.

 

 

*** UML 관계

- 일반화 관계(Generalization) : 한 클래스가 다른 클래스를 포함하는 상위 관졈일 때의 관계

- 연관관계(Accociation) : 2개 이상 사물이 서로 관련된 관계

- 의존관계(Dependency) : 연관관계와 같이 한 클래스가 다른 클래스에서 제공하는 기능을 사용할 때 표시, 일시적으로

- 실체화 관계(Realizatrion) : 한 객체가 다른 객체에게 오퍼레이션을 수행하도록 지정

- 집합 관계 - 집약관계(Aggregation) : 한 객체가 다른 객체를 소유하는 'has a'관계

- 집합 관계 - 합성관계(Composition) : 부분 객체가 전체 객체에 속하는 관계로 긴밀한 필수적 관계

 

 

 

 


 

 

 

 

***** 디자인 패턴 중 행위 패턴

- Mediator : 객체지향 설계에서 객체 수가 많아지면 서로 간 통신을 위해 복잡해져서 객체지향에서 가장 중요한 느슨한 결합의 특성을 해칠 수 있기에 중간에서 이를 통제하고 지시할 수 있는 역할의 중재자를 두고, 중재자에게 모든 것을 요구하여 통신의 빈도를 줄여 객체지향의 목표를 달성하게 해줌

- Interpreter : 언어의 다양한 해석, 구체적으로 구문을 나누고, 그 분리된 구문의 해석을 맡는 클래스를 각각 작성하여 여러 형태의 언어 구문을 해석할 수 있게 만듬

- .Iterator : 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어가있는 모든 항목에 접근할 방법을 제공

- Template Method : 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꿈

- Observer : 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에 연락이 가고 자동으로 내용이 갱신되는 방법

- State : 객체 상태를 캡슐화하여 클래스화함으로써 그것을 참조하게 하는 방식

- Visitor : 각 클래스 데이터 구조로부터 처리 기능을 분리하여 별도의 클래스를 만들어 놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만듦

- Command : 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용이 높은 클래스를 설계

- Strategy : 알고리즘 군을 정의하고(추상 클래스)같은 알고리즘을 각각 하나의 클래스로 캡슐화한 다음, 필요할 때 서로 교환해서 사용할 수 있게 하는 패턴

- Memento : 클래스 설계 관점에서 객체의 정보를 저장할 필요가 있을 때 적용하는 디자인 패턴

- Chain of Responsibility : 정적으로 어떤 기능에 대한 처리의 연결이 하드 코딩이 있을 때 기능처러의 연결 변경이 불가능한데, 이를 동적으로 연결된 경우에 따라 처리될 수 있도록 연결한 디자인 패턴

 

 

 

 

입력 데이터 검증 및 표현에 대한 취약점

- XSS(Cross Site Script) : 검증되지 않은 외부 입력 데이터가 포함된 웹 페이지가 전송되는 경우, 사용자가 해당 웹 페이지를 열람함으로써 웹 페이지에 포함된 부적절한 스크립트가 실행되는 공격

- 사이트 간 요청 위조(CSRF) :사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특징 웹 사이트에 요청하게 하는 공격

- SQL 삽입(Injection) : 응용 프로그램의 보안 취약점을 이용해서 악의적인 sql 구문을 삽입, 실행시켜서 데이터베이스의 접근을 통해 정보를 탕취하거나 조작 등을 행위하는 공격 기법

 

 

 

 

공격기법 , uml, 다자인 패턴 더 정리...

728x90
반응형

'자격증 > 정보처리기사 실기' 카테고리의 다른 글

서브넷 마스크  (1) 2024.04.12

+ Recent posts