해결된 질문
작성
·
22
·
수정됨
0
안녕하세요! 강의 잘 보고 있습니다.
강의 내용중
- "File + a"가 있고
- "a"에 해당되는 내용이 네트워크(port번호, IP주소)가 되면
- "file + a" == 소켓이다.
이렇게 말씀하셨는데 그러면 앞에서 쭉 강의 하셨던 내용을 토대로 생각해보면 제가 작성한 A,B가 맞는 내용인가요? 아니면 C가 맞는 내용인가요? 아래 그림도 첨부했습니다!
A. "a"에 해당하는 네트워크 정보가 있기 때문에 서버와 클라이언트는 각 소켓을 통해 데이터를 주고 받고가 가능.
B. 이때 클라이언트에서 hello!라는 mgs를 소켓을 통해 전송하면 : 로컬(서버)에 "file"이라는 1차원 선형 공간에는 data(그림의 경우 클라이언트가 전송한 String타입의 data)이 저장되고 해당 file을 콘솔에 출력하거나, txt로 저장하거나 할 수 있다.
C. A,B 둘 다 아니고 소켓은 (장치파일 + a(네트워크 정보))이고 소켓에 send,recv 행위를 하는 것은 장치파일에 write,read 하는 것과 같은 행위이다. 그림에서 클라이언트의 msg를 서버에서 recv 하면 장치파일에 [hello]가 저장되고 그것을 콘솔에 출력하거나 별도의 파일로 저장할 수 있는 것 이라는 의미인가요...??
답변 2
0
A. +알파에 해당하는 정보가 있기 때문이 아니라 +알파에 해당하는 정보가 없으면 소켓을 생성 자체가 불가능합니다.
B. 소켓의 본질은 파일입니다. 소켓을 통해 전송한다는 표현이 틀린 것이 아닙니다만 '소켓에 쓴다.'라고 하는 것이 굳이 따지면 더 정확한 표현이 될 수 있습니다. 다만 소켓이 일반적인 데이터 파일이 아니기 때문에 2차 메모리를 이용하는 것은 아닙니다.
C. 서버에서 recv()하면 장치 파일에 hello가 저장되는 것이 아니라 네트워크로 수신한 정보가 저장된 메모리에서 hello라는 정보를 읽어오는 것입니다.
참고하시기 바랍니다. 😄
소켓은 파일의 모습을 하고 있을 뿐 파일은 아닙니다. 그러므로 메모리에 저장되는 것이 아니라 TCP에 전달되는 것입니다. TCP는 OS수준에서 구현되어 있는 모듈로 이해할 수 있으며 실제 NIC을 OS가 움직여 전송합니다. 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다.
소켓이 파일로 불리는 이유는 그 본질이 운영체제 상에서 입력/출력 인터페이스로 작동하기 때문입니다. 운영체제에서 파일을 통해 데이터를 읽고 쓰듯이 소켓도 데이터를 송수신하는 추상적인 인터페이스로 생각할 수 있습니다. 소켓을 통해 네트워크 상의 다른 장치와 통신할 수 있으며, 이는 파일 시스템의 읽기/쓰기와 유사한 방식입니다. 질문하신 A와 B에 대한 설명을 아래와 같이 덧붙일 수 있습니다:
A. 네트워크 정보(IP 주소와 포트 번호)가 설정된 소켓을 통해 클라이언트와 서버가 데이터를 주고 받습니다. 이는 클라이언트 소켓이 서버의 소켓에 연결되어 데이터를 송수신하는 구조입니다.
B. 클라이언트가 소켓을 통해 전송한 메시지는 서버에서 수신됩니다. 수신된 데이터는 로컬 파일 시스템에 저장되거나 바로 콘솔에 출력될 수 있습니다. 이 파일 시스템에서 데이터를 다루는 방식은 데이터베이스나 로깅 시스템으로 활용될 수 있습니다.
관련된 질문과 답변이 아래 URL에서 확인 가능합니다:
각 링크에서 소켓과 파일의 관계를 더 깊이 이해할 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 감사합니다.
그러면 클라이언트 쪽에서 hello라는 msg를 send()하는 과정을 생각해보면 아래처럼 정리가 되는데 맞을까요?
1. 서버와 연결에 성공한 소켓에 .write("hello!");를 하면
2. 로컬(클라이언트)에 있는 소켓(파일)에 "hello!"저장
3. JVM이 소켓 파일(데이터+네트웍 정보)을 이용해 OS에게 전송 요청
4. OS는 (osi 4,3,2,1) NIC 하드웨어에 실제 전송 요청을 보낸다.