미새문지

24.07.24 day32 HTTP, 동전1 본문

개발 TIL

24.07.24 day32 HTTP, 동전1

문미새 2024. 7. 24. 22:40
728x90

HTTP

공개키와 대칭키에 대해 설명해주세요.

공개키 암호화와 대칭키 암호화는 암호학에서 널리 사용되는 두 가지 주요 암호화 방법이며, 각각의 방식은 데이터를 안전하게 보호하는 데 사용되며, 각기 다른 용도와 특징을 가지고 있다.

 

대칭키 암호화(Symmetric Key Encryption)

대칭키 암호화는 암호화와 복호화에 동일한 키를 사용하는 방식이다.

 

특징

  1. 키의 동일성: 암호화와 복호화에 사용되는 키가 동일하다.
  2. 속도: 대칭키 암호화 알고리즘은 일반적으로 비대칭키 암호화 알고리즘보다 빠르다.
  3. 안전성: 키가 외부에 노출되지 않도록 하는 것이 중요하며, 키가 유출되면 데이터를 안전하게 보호할 수 없다.
  4. 알고리즘 예시: AES(Advanced Encryption Standard), DES(Data Encryption Standard), 3DES, RC4 등이 있다.

사용 예

  • 데이터 전송 시 빠른 암호화와 복호화가 필요할 때
  • 파일 시스템에서 데이터를 보호할 때
  • 네트워크 통신에서 대량의 데이터를 실시간으로 암호화할 때

공개키 암호화(Public Key Encryption)

공개키 암호화는 두 개의 키를 사용하는 방식이다.

하나는 공개키(Public Key)이고 다른 하나는 비밀키(Private Key)이다.

 

특징

  1. 키의 비대칭성: 암호화에 사용하는 공개키와 복호화에 사용하는 비밀키가 서로 다르며, 공개키는 누구에게나 공개할 수 있지만, 비밀키는 소유자만이 가지고 있어야 한다.
  2. 보안성: 비밀키를 외부에 노출하지 않기 때문에 키 관리가 비교적 수월하다.
  3. 속도: 대칭키 암호화보다 속도가 느리지만, 높은 보안성을 제공한다.
  4. 알고리즘 예시: RSA(Rivest-Shamir-Adleman), ECC(Elliptic Curve Cryptography), DSA(Digital Signature Algorithm) 등이 있다.

사용 예

  • 데이터 교환 전에 키를 안전하게 교환할 때
  • 디지털 서명 및 인증서에서 사용자 확인을 할 때
  • 전자 메일 암호화 및 VPN에서 보안 연결을 설정할 때

결론

  • 대칭키 암호화는 속도와 효율성이 중요할 때 주로 사용되며, 대량의 데이터를 빠르게 처리할 수 있다.
  • 공개키 암호화는 보안성이 중요한 상황에서 주로 사용되며, 키 교환 문제를 해결하고 신뢰성을 높이는 데 사용된다.
  • 실제 환경에서는 이 두 가지 암호화 방식을 혼합하여 사용하는 경우가 많다. 예를 들어, 하이브리드 암호화 시스템에서는 대칭키 암호화를 사용하여 데이터를 암호화하고, 대칭키 자체는 공개키 암호화를 통해 안전하게 전송한다.

SSL과 TLS의 차이는 무엇인가요?

SSL(Secure Sockets Layer)와 TLS(Transport Layer Security)는 인터넷을 통한 안전한 통신을 보장하기 위한 암호화 프로토콜이다. 두 기술 모두 비슷한 목적을 가지고 있지만, 몇 가지 중요한 차이점이 있다.

 

SSL (Secure Sockets Layer)

SSL은 인터넷을 통한 데이터 전송 시 보안을 제공하기 위해 넷스케이프(Netscape)에서 처음 개발한 프로토콜이다.

 

특징

  1. 버전: SSL은 여러 버전을 가지고 있으며, 가장 많이 알려진 버전은 SSL 2.0과 SSL 3.0이다.
  2. 취약점: SSL 2.0과 SSL 3.0에는 심각한 보안 취약점이 발견되어 SSL 프로토콜은 더 이상 사용되지 않는다.
  3. 역사: SSL은 인터넷 초창기인 1990년대에 개발되어 널리 사용되었지만, 보안상의 문제로 인해 발전된 버전인 TLS로 대체되었다.

TLS (Transport Layer Security)

TLS는 SSL을 기반으로 하여 IETF(Internet Engineering Task Force)에서 개발한 프로토콜이다.

TLS는 SSL의 보안 문제를 해결하고 더 강력한 보안을 제공하도록 설계되었다.

 

특징

  1. 버전: TLS는 여러 버전이 있으며, 가장 널리 사용되는 버전은 TLS 1.0, TLS 1.1, TLS 1.2, 최신 버전인 TLS 1.3이다.
  2. 보안성: TLS는 SSL보다 더 강력한 암호화 알고리즘과 보안 기능을 제공하는데, 이는 SSL에서 발견된 취약점을 해결하고 개선된 보안을 제공한다.
  3. 호환성: TLS는 SSL과의 하위 호환성을 제공하여 기존 SSL 기반 시스템에서도 TLS를 사용할 수 있게 한다.
  4. 성능: 최신 TLS 버전은 성능 최적화와 보안 개선을 동시에 해결했다. 예를 들어, 핸드셰이크(handshake) 과정이 간소화되어 연결 설정 시간이 단축되었다.

주요 차이점

  1. 보안: TLS는 SSL의 취약점을 해결하고 더 강력한 암호화 및 보안 기능을 제공한다.
  2. 프로토콜 버전: SSL은 더 이상 사용되지 않으며, TLS는 계속해서 업데이트되고 있다. TLS의 최신 버전은 TLS 1.3
  3. 성능: TLS는 성능 향상을 위해 설계되었으며, 특히 TLS 1.3에서는 연결 설정 시간과 데이터 전송 속도가 크게 개선되었다.
  4. 암호화 알고리즘: TLS는 더 최신의 강력한 암호화 알고리즘을 지원하여 보안을 강화한다.

HTTP 메소드에 대해 설명해주세요.

HTTP 메소드는 웹 브라우저와 서버 간의 통신에서 다양한 작업을 요청하기 위해 사용되는 프로토콜의 방식이다.

주요 HTTP 메소드에는 GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS, CONNECT, TRACE가 있으며, 각 메소드마다 고유한 기능을 가지고 있다.

 

1. GET

  • 용도: 리소스 조회
  • 특징: URL에 파라미터를 포함하여 전달
  • 예시: GET /index.html (홈페이지를 요청)

2. POST

  • 용도: 리소스 생성 또는 데이터 전송
  • 특징: 요청 데이터가 본문에 포함
  • 예시: POST /submit-form (폼 데이터를 제출)

3. PUT

  • 용도: 리소스 전체 업데이트 또는 생성
  • 특징: 지정된 리소스를 완전히 대체
  • 예시: PUT /users/123 (사용자 정보 업데이트)

4. DELETE

  • 용도: 리소스 삭제
  • 특징: 지정된 리소스를 삭제
  • 예시: DELETE /users/123 (사용자 정보 삭제)

5. PATCH

  • 용도: 리소스 일부 업데이트
  • 특징: 리소스의 일부분만 변경
  • 예시: PATCH /users/123 (사용자 정보 일부 수정)

6. HEAD

  • 용도: 리소스 헤더 조회
  • 특징: 응답 본문 없이 헤더만 반환
  • 예시: HEAD /index.html (헤더 정보만 요청)

7. OPTIONS

  • 용도: 지원하는 메소드 확인
  • 특징: 서버가 허용하는 메소드 목록 반환
  • 예시: OPTIONS / (허용된 메소드 확인)

8. CONNECT

  • 용도: 프록시 서버와의 터널 설정
  • 특징: TCP/IP 터널을 설정하여 연결
  • 예시: CONNECT www.example.com:443 (HTTPS 연결 설정)

9. TRACE

  • 용도: 경로 추적
  • 특징: 요청 메시지를 따라 반환
  • 예시: TRACE / (요청 경로 추적)

HTTP 메소드는 클라이언트와 서버 간의 명확하고 표준화된 통신을 가능하게 한다.

그렇기 때문에 각 메소드는 특정한 목적을 가지고 있으며, 이를 올바르게 이해하고 사용하는 것이 웹 애플리케이션 개발에 있어서 매우 중요하다.


HTTP메소드의 멱등성에 대해 설명해주세요.

멱등성(Idempotency)은 동일한 요청을 여러 번 반복해도 결과가 동일한 성질을 의미한다. 즉, 동일한 요청을 한 번 보내든 여러 번 보내든 서버의 상태와 응답은 동일해야 한다.

멱등성의 개념은 네트워크 및 웹 애플리케이션에서 매우 중요하며, 요청의 안전성과 예측 가능성을 보장한다.

 

멱등성 메소드

1. GET : 여러 번 GET 요청을 보내도 서버의 데이터 상태는 변경되지 않는다. 서버는 동일한 리소스를 반환하기 때문에 결과는 동일하다.

  • 예시: GET /index.html을 여러 번 요청해도 페이지의 내용은 변하지 않는다.

2. PUT : 동일한 리소스에 동일한 데이터를 여러 번 PUT 요청을 통해 업데이트하더라도 서버의 상태는 변하지 않는다. 즉, 동일한 데이터로 갱신하면 서버의 최종 상태는 항상 동일하다.

  • 예시: PUT /users/123에 동일한 사용자 정보를 여러 번 보내도 사용자의 정보는 한 번 업데이트된 상태와 동일하다.

3. DELETE : 동일한 리소스에 대해 DELETE 요청을 여러 번 보내도 서버의 상태는 변하지 않는다. 첫 번째 요청에서 리소스가 삭제된 이후, 추가적인 DELETE 요청은 동일한 결과를 반환한다.

  • 예시: DELETE /users/123을 여러 번 호출해도 사용자는 한 번만 삭제된다.

4. HEAD : GET 요청과 유사하게 여러 번 요청해도 서버의 상태나 리소스의 상태는 변하지 않는다.

  • 예시: HEAD /index.html을 여러 번 요청해도 리소스의 메타데이터는 변하지 않는다.

5. OPTIONS : 서버에 대해 어떤 HTTP 메소드를 지원하는지 요청하는 것으로 서버의 상태를 변경하지 않으며, 여러 번 요청해도 응답은 동일하다.

  • 예시: OPTIONS /index.html을 여러 번 요청해도 지원하는 메소드 목록은 동일하다.

비멱등성 메소드

1. POST : POST 요청은 서버의 상태를 변경할 수 있으며, 동일한 요청을 여러 번 보내면 서버의 상태가 매번 달라질 수 있다. 예를 들어, 폼 제출로 새로운 리소스를 생성할 때, 동일한 요청이 여러 번 처리되면 중복된 리소스가 생성될 수 있다.

  • 예시: POST /submit-form을 여러 번 요청하면 여러 개의 리소스가 생성될 수 있다.

2. PATCH : PATCH 요청은 리소스의 일부를 수정하는 것이기 때문에 동일한 요청을 여러 번 보내면 서버의 상태가 매번 달라질 수 있다.

  • 예시: PATCH /users/123에 동일한 수정 요청을 여러 번 보내면 매번 리소스의 상태가 달라질 수 있다.

결론

  • 멱등성은 HTTP 메소드가 가진 중요한 속성 중 하나로, 이를 통해 네트워크 요청의 안정성과 예측 가능성을 보장할 수 있다.
  • GET, PUT, DELETE, HEAD, OPTIONS 메소드는 멱등성을 가지므로 여러 번 요청해도 서버 상태가 동일하게 유지된다.
  • POST와 PATCH 메소드는 멱등성을 가지지 않아 동일한 요청을 반복하면 서버 상태가 달라질 수 있다.

GET과 POST의 차이는 무엇인가요?

GET과 POST는 서버와 클라이언트 간의 데이터 전송 방식에 있어서 중요한 차이점을 가지고 있다.

 

GET 메소드 특징

  1. 데이터 전송 위치
  2. 목적
    • 주로 서버에서 데이터를 요청할 때 사용되며, 서버의 상태를 변경하지 않는다.(읽기 전용).
  3. 안전성
    • 요청이 서버의 상태를 변경하지 않으므로, 같은 요청을 여러 번 해도 같은 결과를 얻을 수 있기 때문에 안전하다.
  4. 멱등성
    • 동일한 GET 요청을 여러 번 반복해도 서버의 상태가 변하지 않기 때문에 멱등성을 가진다.
  5. 데이터 크기
    • URL의 길이에 제한이 있을 수 있다.(대부분의 브라우저에서 2048자 이하)
  6. 캐싱
    • 브라우저와 중간 캐시 서버가 GET 요청의 응답을 저장하여 이후 동일한 요청에 대해 빠르게 응답을 캐싱할 수 있다.
  7. 북마크
    • GET 요청은 모든 데이터가 URL에 포함되므로 북마크에 적합하다.

POST 메소드 특징

  1. 데이터 전송 위치
    • 요청 본문(body)에 데이터를 포함하여 전송한다.
    • 예시: 요청 본문에 param1=value1&param2=value2와 같은 형태로 데이터 포함
  2. 목적
    • 서버로 데이터를 전송하여 새로운 리소스를 생성하거나 서버의 상태를 변경할 때 사용된다.
    • 예시: 폼 제출, 파일 업로드 등
  3. 안전성
    • 요청이 서버의 상태를 변경할 수 있기 때문에 안전하지 않다.
  4. 멱등성
    • 동일한 POST 요청을 여러 번 반복하면 서버의 상태가 매번 달라질 수 있어 멱등성을 가지지 않는다.
    • 예를 들어, 폼을 여러 번 제출하면 여러 개의 리소스가 생성될 수 있다.
  5. 데이터 크기
    • 본문(body)에 데이터를 포함하므로, 전송할 데이터 크기에 제한이 없다.
  6. 캐싱
    • POST 요청은 주로 데이터 변경 작업에 사용되므로 일반적으로 캐싱이 적절하지 않다.
  7. 북마크
    • URL에 데이터가 포함되지 않으므로 북마크할 수 없다.

요약

  • GET: 데이터를 URL의 쿼리 스트링에 포함하여 서버로 전송하고, 서버에서 데이터를 요청할 때 사용한다. 읽기 전용이며, 안전하고 멱등성을 가진다. URL을 통해 데이터 전송이 이루어지므로 데이터 크기에 제한이 있고, 캐싱과 북마크가 가능
  • POST: 데이터를 요청 본문(body)에 포함하여 서버로 전송하고, 서버의 상태를 변경하거나 새로운 리소스를 생성할 때 사용한다. 안전하지 않으며 멱등성을 가지지 않는다. 데이터 크기에 제한이 없고, 일반적으로 캐싱되지 않으며 북마크가 불가능

동전 1

a, b = map(int, input().split())
coin = []
for i in range(a):
    coin.append(int(input()))

dp = [0] * (b+1)
dp[0] = 1

for won in coin:
    for i in range(won, b+1):
        gyungwoo = dp[i - won]
        dp[i] += gyungwoo

print(dp[b])
728x90