4 min read

ChatGPT에게 Elixir 코딩을 시켜봤다

ChatGPT에게 Elixir 코딩을 시켜봤다
Photo by Levart_Photographer / Unsplash

ChatGPT-4도 나왔고,
유료 플랜 결제를 한 김에 Elixir 코드 작성도 할 수 있나 궁금해서 한번 시도해봤다.


devage:
elixir 언어로 NAT (Network Address Translation) 기능을 수행하는 코드를 작성해줘

ChatGPT:
Elixir는 주로 웹 개발과 분산 시스템에 사용되는 함수형 프로그래밍 언어입니다. NAT (Network Address Translation) 기능을 수행하는 코드를 Elixir로 작성하기 위해서는, 하위 수준의 네트워크 패킷 조작이 필요합니다. Elixir로 직접 구현하기에는 적합하지 않으나, Erlang의 gen_udp와 같은 라이브러리를 사용하여 UDP 패킷을 조작하는 예시를 제공할 수 있습니다.

이 예시에서는 간단한 UDP 패킷 전달 프록시를 작성하여, 클라이언트에서 보낸 메시지를 프록시가 중간에서 받아 목적지로 전달하는 역할을 합니다. 실제 NAT 구현에는 더 많은 로직이 필요하지만, 이 예제는 기본적인 패킷 전달을 보여줍니다.

defmodule UdpProxy do
  @external_host 'external.example.com'
  @external_port 12345
  @local_port 5555

  def start do
    {:ok, socket} = :gen_udp.open(@local_port, [:binary, {:active, true}])
    loop(socket)
  end

  defp loop(socket) do
    receive do
      {:udp, _socket, _src_ip, _src_port, data} ->
        {:ok, dest_ip} = :inet.gethostbyname(@external_host)
        :gen_udp.send(socket, dest_ip, @external_port, data)
    end

    loop(socket)
  end
end

이 코드는 UdpProxy 모듈을 정의하고, start 함수를 사용하여 로컬 포트 5555에서 UDP 패킷을 수신하고, 외부 호스트로 전달합니다. 이 예제에서는 외부 호스트를 'external.example.com'으로 설정했습니다. 이 간단한 예제에서는 IP 주소를 변경하지 않고 패킷을 전달하지만, 실제 NAT 구현에서는 IP 주소와 포트 번호를 변경해야 합니다.

실제 NAT 기능을 구현하려면 더 낮은 수준의 네트워크 스택 조작이 필요하며, Elixir와 Erlang은 이를 위한 최적의 도구가 아닙니다. 이러한 작업에는 C, C++, Rust와 같은 시스템 프로그래밍 언어를 사용하는 것이 좋습니다.


소감을 정리해보면,

Elixir가 함수형 언어라든지, 분산 시스템 및 웹 응용 개발에 주로 쓰인다는 이야기를 같이 설명할 수 있다는 점이 단순 검색 뿐 아니라 +a의 정보를 제공할 수 있다는 것이고 이것이 강점이라고 생각한다.

하지만 제시한 코드는 원하는 수준에 미치지 못했다. 보다 구체적인 내용을 추가로 입력해보면 어떤 코드가 나올지 궁금해진다. 아니면 파이썬이나 golang 같은 인기 언어로 질의를 던졌으면 처음부터 보다 구체적인 코드가 나왔을 수도 있을 것 같다.

그리고 말이 많다. 얼른 코드부터 줄 것이지. :)

코드 결과를 보면 당분간은 프로그래머를 대체한다기 보다는 보조하는 역할로 갈 것 같다. 프로그래머의 진화는 게을러지기 위한 욕구가 동기가 되었다. 하나부터 열까지 일일이 키보드를 두드리던 때에서 남이 올린 코드를 ctrl-c/ctrl-p로 진화했고 이제는 '좀 더 편하게' 개발하기 위한 방향으로 가기 위한 수단이라고 생각하면 바람직한 선택이 될 것이다. 지금까지처럼 프로그래밍 기초나 언어, 소프트웨어 공학 등은 공부할 필요가 없어지기보다는 반대로 더 확실히 이해하고 있어야 ChatGPT가 내놓은 결과물을 평가할 수 있을 것이다.

— END OF POST.