전체 글138 간단한 FTP 프로그램 만들기4 이번 글에서는 my_ftp 프로그램에 put 명령을 추가해 보자. put 명령은 get 명령과 반대로 클라이언트의 파일을 서버에 업로드하는 기능이다. 코드를 작성하기 전에 put 명령에 대해 서버와 클라이언트가 서로 어떻게 통신하고 처리해야 할지를 생각해 보자. 클라이언트가 'puts 파일명'의 형식으로 서버에게 메시지를 보내면, 서버는 현재 작업 디렉터리 안에 해당 파일을 생성할 수 있는지 검사해야 한다. 여기서는 파일을 생성할 수 있는 권한은 있다고 가정하고, 다만 같은 이름의 디렉터리가 존재하는지만 검사하자. 같은 이름의 파일이 이미 있을 경우, 기존 내용을 지우고 새로 덮어쓸 수는 있지만, 같은 이름의 디렉터리가 있다면 파일 생성은 불가능하기 때문이다. 서버에서 파일 생성이 가능하다고 판단하면 O.. 2025. 6. 27. 간단한 FTP 프로그램 만들기3 이번 글에서는 my_ftp 프로그램에 몇 가지 기능을 추가해 보자. 추가할 기능은 서버와 클라이언트의 현재 작업 디렉터리 경로를 조회하고 변경할 수 있는 기능으로, 서버에서 지원해야 할 명령 두 개와 클라이언트에서 지원해야 할 명령 두 개다. pwd 명령은 서버 쪽의 현재 작업 디렉터리 경로를 알려주고, cd 명령은 서버 쪽의 작업 디렉터리를 변경할 수 있다. 반대로 lpwd 명령은 클라이언트 쪽의 현재 작업 디렉터리 경로를 알려주고, lcd 명령은 클라이언트의 작업 디렉터리를 변경할 수 있다. lpwd와 lcd 명령은 서버와 통신할 필요가 없으므로 클라이언트 측 소스 중 client.rb 파일만 변경하면 된다. 기능을 추가하기 전에 먼저 서버와 클라이언트의 통신 프로토콜을 조금 변경하자. 서버가 응답으.. 2025. 6. 25. 간단한 FTP 프로그램 만들기2 이번 글에서는 my_ftp 프로그램의 코드를 조금 다듬어 보려고 한다. 먼저 client.rb 소스 코드에서 실제 FTP 서버에 접속하고, 명령을 전송하며 결과를 받아 처리하는 부분을 MyFtpClient 클래스로 분리하자. 아래 코드를 보면, 객체를 생성할 때 접속할 대상의 호스트와 포트 정보를 인수로 전달하도록 하였고, 명령을 처리할 메서드를 명령과 동일한 이름의 인스턴스 메서드로 정의하였다. 그리고 명령을 처리하는 메서드들은 모두 처리 상태(status)와 결괏값(data 또는 error)을 담은 해시를 반환하도록 하였다. 이렇게 처리 결과를 화면에 바로 출력하는 것이 아니라, 결과를 값으로 반환하도록 정의하면 MyFtpClient 클래스의 활용도가 더 높아진다. 그리고 dir 명령의 경우, 기존에.. 2025. 6. 19. 간단한 FTP 프로그램 만들기1 이번 글에서는 TCPServer와 TCPSocket 클래스를 사용해서 간단한 FTP 프로그램을 만들어 보자. 프로그램은 서버와 클라이언트로 구성되고, 클라이언트는 서버에 접속하여 dir, get, bye 명령을 보낼 수 있다. dir 명령은 서버가 지정한 홈 디렉터리를 기준으로 디렉터리 내 항목들을 조회할 수 있는 기능이고, get 명령은 역시 홈 디렉터리를 기준으로 원하는 파일을 클라이언트의 현재 작업 디렉터리로 다운로드하는 기능이다. 마지막으로 bye 명령은 서버와의 접속을 종료시킨다. 서버와 클라이언트가 서로 통신을 원활히 하기 위해서는, 정해진 프로토콜 대로 서로 메시지를 주고받아야 한다. 따라서, 지금 만들어 볼 프로그램(my_ftp)도 프로토콜을 먼저 결정한 후, 그 프로토콜에 맞춰 코드를 작.. 2025. 6. 17. 이전 1 2 3 4 5 6 ··· 35 다음