네트워크

  1. 로드밸런싱이란 무엇인지 설명하고 어떤 상황에서 로드 밸런싱을 해야하는지 말해보세요
    로드밸런싱이란 어플리케이션을 구성하는 서버(리소스 풀)에 네트워크 트래픽을 균등하게 배포하는 것을 의미합니다.
    로드밸런싱은 특정 서버에 트래픽이 집중되거나 특정 서버가 오류가 발생해서 요청을 처리할 수 없는 (서버가 정상적으로 작동하지 않는)상황에서 다른 서버로 요청을 보내줌으로써 사용자가 문제없이 어플리케이션을 이용할 수 있도록 해줍니다.

로드밸런싱

애플리케이션을 지원하는 리소스 풀 전체에 네트워크 트래픽을 균등하게 배포하는 방법
많은 양의 트래픽을 처리하기 위해 대부분의 애플리케이션에는 데이터가 중복되는 리소스 서버가 많이 있습니다. - 이 중복되는 서버에 부하를 분산시켜준다는 말인듯함

애플리케이션 서비스의 가용성, 확장성, 보안 및 성능향상에 도움

  • 가용성: 시스템의 내결함성을 향상시켜 얻을 수 있음

    • Fault tolerance

      • 시스템의 구성 요소 중 하나가 다운 되더라도(전원부족/하드웨어 장애 등) 시스템이 계속 작동 할 수 있도록 설계 = 다운 타임 최소화
      • 서버 장애/유지 관리로 어플리케이션의 가동 중지시 클라이언트 트래픽을 사용 가능한 서버로 리디렉션
      • 내결함성 시스템에서 작업 중 오류가 발생하면 해당 작업의 올바른 종료 상태가 계속 출력됩니다.
      • High-availability: 고가용성
        다운 타임을 최소화
    • 애플리케이션 중지 없이 애플리케이션 서버 유지 관리 또는 업그레이드 실행

    • 백업 사이트에 자동 재해 복구기능 제공

  • 확장성: 수천 개의 클라이언트 요청을 처리할 수 있는 능력

    • 한 서버에서 트래픽 병목 현상 방지
    • 애플리케이션 트래픽을 예측 → 필요한 경우 서버 증축/삭제 가능
    • 시스템의 중복성 제공
  • 보안: 보안 계층을 추가

    • 공격 트래픽을 여러 백엔드 서버로 자동으로 리디렉션하여 영향 최소화
    • 네트워크 방화벽 그룹을 통해 트래픽 라우팅

알고리즘

로드 밸런서가 서로 다른 클라이언트 요청에 가장 적합한 서버를 결정하기 위해 따르는 규칙

  • 정적 로드 밸런싱
    고정된 규칙을 따르며 현재 서버 상태와 무관
  • 동적 로드 밸런싱
    트래픽을 배포하기 전에 서버의 현재 상태를 검사

로드 밸런싱 종류

OSI 7계층에 따라 나뉨

L4: NLB(Network LoadBalancer)L7: ALB(Application LoadBalancer)
Transport 계층을 사용Application 계층을 사용
클라이언트 → 서버 경로의 트래픽이 로드밸런서를 통함클라이언트 ⇆ 서버 경로의 트래픽 모두 로드밸런서와 통신함
Reverse Proxy
클라이언트 → 서버 엑세스 제한 가능클라이언트 → 서버 엑세스 제한 가능
서버의 Security Group을 통한 보안이 가능
따로 시큐리티 그룹을 통한 보안 불가능->보안 그룹을 통한 트래픽 제어 불가
Security Group을 통한 보안이 가능
A Record 사용가능CNAME사용
TCP/UDP 프로토콜을 사용할 수 있는 로드밸런서
L4 스위치라고도 함
시스템 리소스 소모가 적어 더 많은 트래픽 처리 가능
HTTP/HTTPS/WebSocket을 사용할 수 있음
시스템 리소스 소모가 많음
한대의 서버에 장애가 발생/추가 증설시 무중단 서비스가 가능함
고정 IP가 필요한 경우 사용
트래픽 플로우-DSR과 유사-> NLB의 트래픽 처리 부담이 감소함
근데 실제로는 NLB를 통한다고 함
제어함
대상에 따라 Source IP NAT 적용항상 적용

http://www.incodom.kr/Load_Balancing#h_12a694c04cfce20f85615ea124aa10ba
https://aws-hyoh.tistory.com/entry/AWS-Network-Load-Balancer-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

nlb

IP 주소와 포트 번호를 분산할 수 있음❓
Elastic IP 를 Static IP로 사용이 가능하여❓DNS Name, IP주소 모두 사용 가능
Name Server 또는 Route 53에서 A Record 사용이 가능

alb

URL 또는 HTTP 헤더에서 부하 분산이 가능
IP 주소가 변동되기 때문에 Client 에서 Access 할 ELB의 DNS Name을 이용해야 합니다
또는 NLB를 ALB의 앞단에 두고 고정된 IP를 제공할 수 있음

elb

Elastic Load Balancing은 Application Load Balancers, Network Load Balancers, Gateway Load Balancers 및 Classic Load Balancer를 지원합니다.

only to healthy targets

Elastic Load Balancing은 활성화된 각 가용 영역에 대해 네트워크 인터페이스를 생성합니다. 가용 영역의 각 로드 밸런서 노드는 이 네트워크 인터페이스를 사용하여 고정 IP 주소를 가져옵니다.

NAT(Network Address Translation)

네트워킹에서 IP의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP주소를 rewrite하여 라우터를 통해 네트워크 트래픽을 주고 받음
public->private network
private->public network 이동시 필요함

주로 gateway역할을 하는 장비가 수행함(세션장비)
NAT내역을 기록한 테이블 - 세션 테이블 → stateful하게 만들어줌
ex. 가정- 공유기, 기업- 방화벽, vpn, L4스위치
https://aws-hyoh.tistory.com/145

https://dev.classmethod.jp/articles/load-balancing-types-and-algorithm/

로드 밸런싱 유형

클라이언트 요청에서 확인하는 콘텐츠에 따라

  • 애플리케이션 로드 밸런싱
    HTTP 헤더 또는 SSL 세션 ID와 같은 요청 콘텐츠에 따라 해당 서버로 트래픽을 리디렉션합니다.
  • 네트워크 로드 밸런싱
    IP 주소 및 기타 네트워크 정보를 검사하여 트래픽을 최적으로 리디렉션
    정적 및 동적 로드밸런싱 알고리즘 사용
  • 글로벌 서버 로드 밸런싱
    클라이언트와 지리적으로 더 가까운 서버 대상으로 트래픽을 리디렉션
  • DNS 로드 밸런싱
    도메인의 리소스 풀에서 네트워크 요청을 라우팅하도록 도메인을 구성합니다.
    하나의 도메인에 여러개의 IP주소가 등록되어있으므로

로드밸런싱 장점

고가의 서버로 확장(scale-up)하지 않고 저렴한 비용으로 다수의 서버를 증설(scale-out)하여 경제적으로 비용절감 할 수 있다

https://aws.amazon.com/ko/what-is/load-balancing/

  1. 대칭키와 공개키의 개념의 차이는 무엇인가요?
    대칭키와 공개키는 모두 암호화의 방식으로 암호화 및 복호화에 사용되는 키가 동일한지가 주요한 차이점입니다. 대칭키는 암복호화에 사용되는 키가 동일하고 공개키는 암복호화에 사용되는 키가 서로 다릅니다.

키를 이용한 암호화 방식

대칭키:

암호화-복호화에 사용하는 키가 동일
속도가 빠르다
키를 교환해야한다는 문제 (키 배송 문제)

  • 교환하는 중 키가 탈취될 수 있는 문제도 있고 사람이 증가할수록 전부 따로따로 키교환을 해야하기 때문에 관리해야 할 키가 방대하게 많아진다.
  • 키의 사전 공유에 의한 해결, 키 배포센터에 의한 해결, Diffie-Hellman 키 교환에 의한 해결, 공개키 암호에 의한 해결이 있다.
    대표적인 알고리즘으로는 DES, 3DES, AES, SEED, ARIA

공개키:

암호화-복호화에 사용하는 키가 다름 == 비대칭키
속도가 느림
대칭키의 키교환 문제를 해결하기 위해 등장
키가 공개되어있기 때문에 키를 교환할 필요가 없어
공개키는 모든 사람이 접근 가능한 키이고 개인키는 각 사용자만이 가지고 있는 키
개인키를 갖고 있는 사람만이 공개키로 암호화한 데이터를 볼 수 있다

  • 공개키-개인키 페어 생성
  • 공개키는 등록(공개) 개인키는 자기가 가지고 있음
  • 송신자에게 공개키 전달
  • 송신자가 공개키로 데이터를 암호화하여 수신자에게 전달
  • 수신자는 개인키로 복호화

HTTPS에서의 사용

SSL 인증서 발급
1. 서버가 CA로부터 공개키의 소유를 증명하는 인증서를 발급받음
2. 클라이언트에게 공개키가 포함된 인증서를 주고
3. 클라이언트는 CA에게 인증서 확인을 요청하고(CA리스트를 그냥 확인하는 건가?)
4. 맞다면 공개키로 데이터를 암호화해서 서버에 전달
5. 서버가 개인키로 이 데이터를 복호화한다면 서버는 인증된 서버가 됨

락&데드락

  1. 락과 데드락이란
    락은 멀티 스레드 프로세싱에서 동기화 문제를 해결하기 위해 하나의 스레드가 특정 자원을 점유하고 있을 때 상호배제의 원칙을 구현하기 위한 것입니다.
    데드락은 상호배제/ 비선점/ 점유대기/ 순환대기의 조건을 충족할 때 발생하는 교착상태입니다.

락이 없다면 두 개 이상의 스레드가 동시에 자원에 접근할 수 있으므로, 데이터의 무결성이 보장되지 않는다. 락의 개념은 멀티스레드를 사용하는 환경이라면 어디든 사용될 수 있다

데드락: 교착상태

시스템 자원에대한 요구가 뒤엉킨 상태
둘 이상의 프로세스가 다른 프로세스가 사용중인 자원을 무기한 대기하는 상태

  • 상호배제/ 점유대기/ 비선점/ 순환대기의 특성으로 발생

해결

  • 무시: 예방/ 탐지와 관련된 오버헤드를 발생시키지 않고 무시함
  • 예방: 위의 4가지 요인들을 제거함으로써 해결하지만.. 시스템의 처리량과 효율성이 모두 저하된다
  • 회피:
    SAFE STATE: 데드락이 발생하지 않는 상태
    SAFE SEQUENCE: 프로세스가 데드락을 발생시키지 않고 자원을 할당하는 순서
    UNSAFE STATE: 불안정한 상태 -교챡상태는 불안정의 부분집합
    • 자원 할당 그래프 알고리즘
      프로세스 시작 전 자원 할당 그래프에 예약 간선을 추가하여 자원과 프로세스간의 주기가 형성되지 않는 경우에만 자원을 할당받음
    • Banker’s Algorithm
      프로세스 시작 전 프로세스당 필요한 최대자원량을 선언
      안정상태가 보장되는 경우 요청을 받아들임
      불안정상태가 예상되면 대기
      → 자원 최대 할당량을 알아야하고, 자원의 수가 일정해야하는 등의 제약조건으로 자원 이용도가 떨어짐
  • 탐지
    탐지시 오버헤드가 발생하므로 탐지알고리즘의 호출빈도는 조절되어야함
    • 대기 그래프
      자원 할당 그래프에서 자원을 제거 후 간선을 결합한 그래프
      대기 그래프에 주기가 있으면 교착상태로 판단
    • Banker’s Algorithm
      프로세스 당 요청 자원수를 확인하고 불안정상태라면 교착상태로 판단
  • 회복
    • 프로세스 종료
      • 교착상태가 제거될 때까지 하나씩 종료
      • 교착상태의 프로세스를 모두 종료
    • 자원 선점
      교착상태인 프로세스의 자원을 선점하여 다른 프로세스에게 할당해주고 해당 프로세스를 일시정지

https://yoongrammer.tistory.com/67

네트워크

미들웨어(Middleware)

양 쪽을 연결하여 데이터를 주고받을 수 있도록 중간에서 매개 역할을 하는 소프트웨어, 네트워크를 통해서 연결된 여러 개의 컴퓨터에 있는 많은 프로세스들에게 서비스를 사용할 수 있도록 연결해주는 소프트웨어

3tier Architecture

효율적인 서비스 처리를 위해 플랫폼을 3계층으로 나눈 것.

  • 클라이언트-서버 구조에서 미들웨어가 있는 구조

  • 미들웨어를 이용한 분산 컴퓨팅서버측에 약간 무리가 있을 수 있지만, 서버 측은 멀티 프로세스 시스템이나 클러스터링(clustering)을 이용함으로써 문제를 해결할 수 있다

  • 서버가 나뉘어있어 각 서버의 부하가 줄어든다.
    ↔ 장애가 발생하는 포인트가 늘어나 관리 포인트가 많아진다.

  • thin-client를 사용하여 클라이언트 컴퓨터 성능이 떨어져도 프로그램을 실행에 문제가 없다

    • 1st Presentation Tier (ex. 웹서버)
      frontend라고 부름
      사용자 인터페이스와 관계없는 데이터를 처리하는 로직은 포함되지 않음
    • 2nd Application Tier (ex. WAS)
      비지니스 로직이 수행됨
      첫번째 계층에서 보면 서버의 역할을하고 세번째 계층에서 보면 클라이언트의 역할을 해서 미들웨어라고 부름
      middleware/ backend라고 부름
    • 3rd Data Tier (ex. DB)
      데이터베이스에 접근해서 데이터를 읽고 씀

+ Ntier Architecture
https://12bme.tistory.com/289

프로그래머스 문제풀기

➡️ 과일 장수

def solution(k, m, score):
    score.sort(reverse=True)
    ans=0
    i=0
    for _ in range(len(score)//m):
        ans+=min(score[i:i+m])*m
        i=i+m
    return ans

k: 가장 높은 등급
m: 한 상자에 들어가는 과일 갯수
score: 과일별 등급 배열

오름차순으로 배열해서 가장 높은 것부터 m개씩 잘라서
그 중 가장 등급이 낮은 과일*m을
총 나올 수 있는 과일 상자수만큼 반복

def solution(k, m, score):
    return sum(sorted(score)[len(score)%m::m])*m

오름차순으로 정렬한 score를
len(score)%m :남는 박스는 건너뛰고
거기서부터 리스트 슬라이싱을 m개씩해서 더함
기가막히넹ㅋㅋㅋ
그리고 m은 어차피 다 공통으로 곱하는 거니까 맨 마지막에 한번만 곱해줌

굳이 정렬을 내림차순으로 바꿔줄 필요도 없고 i나 ans같은 변수도 따로 안만들어주고, 그 값이 바뀌지도 않고 하니까 훨씬 효율적이겠다 아

solution = lambda _, m, s: sum(sorted(s)[-m::-m]) * m

오름차순으로 정렬한 리스트를
-m부터 처음으로 범위를 좁혀서
뒤에서부터 m씩 뛰면서 슬라이싱함
그럼 m개씩 끊은 것 중에 작은 값이 리스트에 들어가게 돼서 그걸 합해서 m곱하면 끗

-m+1~끝까지는 갯수가 m-1개임->버려지는 과일
근데 이걸 오름차순으로 해서 버려도 상관이 없나..? 최대이익을 내야하는데??❓근데 답은 일단 맞으니까.. 으아라아가3ㅏ

profile
looooggi

0개의 댓글