Post

TIL(20240724) [TCP/UDP와 http, https]

TIL(20240724) [TCP/UDP와 http, https]

  1. TCP/UDP에 대해서 설명해주세요.
  • TCP와 UDP는 데이터를 보내기 위해 사용하는 프로토콜(통신규약)입니다. TCP는 인터넷상에서 데이터를 메세지 형태로 보내기 위해 IP와 함께 사용하는 프로토콜 TCP특징으로는 3way-handshaking과정을 통해 연결을 설정하고 4way-handshaking을 통해 해제하게 됩니다. 이러한 과정에서 데이터의 흐름제어나 혼잡제어와 같은 기능도 하기에 UDP보다 속도가 느리지만(CPU의 사용으로 인해) 주로 연속성보다 신뢰성이 있는 데이터 전송이 중요할 때에 사용하는 프로토콜입니다. UDP는 데이터를 테이터그램 단위로 처리하는 프로토콜로, 비연결형 서비스이기 때문에 연결을 설정하고 해제하는 과정이 존재하지 않습니다. 그렇기 때문에 TCP보다 속도가 빠르며 네트워크 부하가 적다는 장점이 있지만 신뢰성있는 데이터의 전송을 보장하지 못하기 때문에 신뢰성보다는 연속성이 중요한 서비스 (순서보장X)사용됩니다. (ex) 실시간 서비스)

  • 3way-handshaking 개념 : 클라이언트와 서버 간에 안정적인 연결을 설정하기 위함, 양방향 통신을 위한 초기 순서 번호를 동기화
  • 3way-handshaking 과정 : 1.클라이언트 -> 서버: SYN 패킷 전송, 서버 -> 2.클라이언트: SYN-ACK 패킷 전송, 클라이언트 -> 3.서버: ACK 패킷 전송 (연결설정 완료)
  • SYN(Synchronize Sequence Numbers): 연결 요청, 초기 순서 번호 설정
  • ACK(Acknowledgment): 요청에 대한 응답 양방향 연결 확인: 클라이언트와 서버 모두 상대방의 준비 상태 확인

TCP와 UDP의 특징과 차이

  1. http, https 차이점에 대해 설명해주세요
    • HTTP,HTTPS는 웹에서 데이터를 전송하는 프로토콜 입니다. 두 프로토콜의 주요 개념과 차이점은 HTTP의 경우 클라이언트(브라우저)와 서버간의 통신을 위한 규칙이며 일반텍스트(평문)으로 주고 받아 보안이 없는 상태로 전송이 됩니다. 기본적으로 80번 포트를 사용하며 암호화를 하지 않기에 보안에 취약합니다. HTTPS는 HTTP에 보안 계층을 추가한 프로토콜로 SSL/TLS를 사용하여 데이터 전송을 암호화합니다. 기본적으로 443번 포트를 사용하며 데이터를 암호화하여 전송하므로 데이터를 안전하게 보호 할 수 있으며 SSL 인증서를 통해 데이터의 암호화, 서버 인증(서버 신원확인), 데이터 무결성 보장을 통해 데이터 조작여부를 판단하는 데 중요한 역할을 합니다. 즉, 안전한 HTTPS 연결을 통해 사용자는 데이터가 안전하게 전송되고 있다는 신뢰성을 가질 수 있으며 이는 웹사이트의 보안성을 높이는 데 기여할 수 있습니다.
  • HTTP는 상태를 유지하지 않는 Stateless 프로토콜입니다.

💡 최종프로젝트 - 챌린지 인증요청 (이미지업로드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 @Transactional
  public VerificationResponseDto requestVerification(Long challengeId, MultipartFile image, String imageName, VerificationRequestDto requestDto) {
    try {
      ObjectMetadata metadata= new ObjectMetadata();
      metadata.setContentType(image.getContentType());
      metadata.setContentLength(image.getSize());
      amazonS3Client.putObject(BUCKET, imageName, image.getInputStream(), metadata);

      Challenge challenge = challengeService.findChallengeById(challengeId);

      Verification verification = new Verification(requestDto.getTitle(), requestDto.getContent(), imageName, challenge);
      verificationRepository.save(verification);

      String imageUrl= "https://" + BUCKET + imageName;
      VerificationResponseDto responseDto = new VerificationResponseDto(verification.getTitle(), verification.getContent(), imageUrl);
      return responseDto;
    } catch(IOException e) {
      throw new FileUploadFailureException("파일 업로드 실패");
    }
  }

해당 url로 접속했을 때 확인이 되는지 검토 필요 검토X

1
2
3
라이브러리에 있는 해당 메서드 사용

String imageUrl= amazonS3Client.getResourceUrl(BUCKET, image.getOriginalFilename());
  1. DI, IoC에 대해 설명해주세요.

  2. 객체지향 프로그래밍이란 무엇이고 어떻게 활용할 수 있나요?

  3. 대용량 트래픽 발생 시 어떻게 대응해야 하나요?

  4. ORM을 사용하면서 쿼리가 복잡해지는 경우에는 어떻게 해결하는게 좋을까요?

  5. GET, POST의 개념과 함께 데이터 흐름에 대해서 설명해주세요.

  6. OSI 7계층에 대해 아는대로 설명해주세요.

  7. 세션 기반 인증과 토큰 기반 인증의 차이에 대해 설명해주세요.

  8. JWT, Refresh, Access Token에 대해서 설명해주세요.

  9. OAuth에 대해서 설명해주세요.

  10. 클래스형과 함수형의 차이를 설명해주세요. 어떤 방식을 주로 사용하였고 그 이유가 뭔지 답변해주세요.

  11. CI/CD에 대해서 설명해주세요.

  12. TDD에 대해서 설명해주세요.

  13. 프로세스와 쓰레드에 대해서 설명하고 그 차이에 대해서 설명해주세요.

  14. 멀티프로세스와 멀티쓰레드의 특징에 대해 설명해주세요.

  15. 쿼리 최적화에 대해 설명해주시고 방법에 대해 설명해주세요.

  16. DB 로직 최소화를 하려면 어떻게 해야 할까요?

  17. 테스트코드에 대해서 아는대로 설명해주시고 활용 경험에 대해서 답변해주세요.

  18. Array, LinkedList에 대해 설명해주시고 각각 어떻게 사용하는지 말씀해주세요.

  19. AWS S3, EC2를 사용하는 이유와 사용 경험에 대해서 답변해주세요.

  20. 정렬 알고리즘에 대해서 아는대로 설명해주세요.

  21. Array, LinkedList에 대해 설명해주시고 각각 어떻게 사용하는지 말씀해주세요.

  22. AWS S3, EC2를 사용하는 이유와 사용 경험에 대해서 답변해주세요.

  23. 정렬 알고리즘에 대해서 아는대로 설명해주세요. –>

aws s3 비지니스로직 참고

This post is licensed under CC BY 4.0 by the author.