언리얼, 퍼포스(Perforce)로 협업하기

dain·2022년 10월 16일
7

💭 언리얼5로 진행하는 팀프로젝트에서 협업 툴로 조교님께서 추천해주신 'perforce'를 사용하기로 했다.

그런데 설치부터 한참을 헤맸다... 한글 자료 너무 없어😭
언리얼 공식 문서에 자세히 나와있긴 하지만 정작 설치에 관한 내용이 없다...

그래서 '스스로 정리 + 정보 전달' 목적으로 작성하는 포스팅!
(정보가 정확하지 않을 수 있습니다...!)


Perforce? (P4V)

  • 언리얼 엔진에 적합한 소스 컨트롤 소프트웨어
  • 중앙집중형 서버

    • 서버 컴퓨터는 항상 켜져있어야 할 필요가 있다.

      📌 추가
      나는 서버 컴퓨터를 365일 24시간 켜놔야 한다는 의미로 이해했었는데, 나중에 알고보니 서버를 사용할 때만 켜져 있으면 되는 것 같다.

      💭 현실적으로 우리 조원의 데스크탑이나 노트북을 24시간 켜놓는 것은 불가능하고, 마땅한 컴퓨터도 없었기 때문에 외부 서버를 구매해서 사용하기로 결정했다.
      서버는 선배님께서 AWS EC2를 프리티어(1년동안 일정 사용량 무료 제공)로 사용하고 총 300원 나왔다는 얘기를 보고, 우리도 AWS EC2를 사용하기로 했다.

    • 로컬

      • 같은 공유기를 쓰는 구역에서만 협업 가능
    • 리모트

      • 다른 공유기를 쓰는 다른 장소의 컴퓨터끼리도 협업 가능
      • 유료 서버 호스팅 사이트를 이용하거나, 개인 컴퓨터 서버 이용
        (나는 전자를 사용했기 때문에 후자에 대해서는 잘 모른다.)
  • 기본적으로 유료지만, 5인까지는 무료라고 한다.

    📌 그런데 사실 어떤 부분에서 유료인지는 잘 모르겠다... 일단 기본적인 다운로드는 무료이다. 우리 팀은 4인 1조였지만, 중간에 오류로 인해 또는 다른 컴퓨터 장치를 사용하는 과정에서 5인이 초과되었던 것 같은데 추가적인 비용이 발생하지는 않았다. 외부 서버를 이용해서 였을까...? 아니면 워크스페이스만 초과되고, 사용자는 초과되지 않았는데 내가 잘못 기억하고 있을 수도...

  • 장점
    • 바이너리 파일 관리에 용이하다.
    • 체크인/체크아웃이 가능해 Merge Conflict에 좋다.
  • 단점
    • 관련 한글 자료가 별로 없어 설치와 초기 사용이 어렵다.
    • 유료


AWS(Amazon Web Serive) EC2(Elastic Compute Cloud)

  • 아마존에서 제공하는 클라우드 가상 컴퓨터 서비스
  • EC2 인스턴스에 Perforce 서버를 연결할 수 있다.


Windows에서 AWS EC2에 대한 Perforce 설정하는 법

(https://www.youtube.com/watch?v=7eVO0qXC3nk)

1. PUTTY 64-bit x86 설치

  • PUTTY는 원격 접속 프로그램으로, Linux와 Window를 용이하게 연결하기 위해 사용한다.
  • arm과 x86의 차이는 잘 모르지만 구글링해보니 모바일과 컴퓨터 환경의 차이인 것 같다.

2. 퍼포스 설치

  • Helix Visual Client (P4V)
    • 클라이언트(개발자)와 서버 컴퓨터에 설치
  • Helix Admin Tool (P4Admin)
    • 클라이언트(개발자) 컴퓨터에 설치

  • Helix Core (P4D) Server
    • 서버 컴퓨터에 설치
    • 이때 내 컴퓨터의 OS는 윈도우더라도 서버 환경을 Linux로 설정해줘야 한다
      (우리가 perforce 서버를 연결할 EC2가 리눅스 기반 서버기 때문에)

      💭 나처럼 하나의 컴퓨터에서 작업하고 AWS 서버도 연결하려면 세 개 모두 설치하는 게 맞다. (참고로 외부 서버를 사용하든 아니든, P4D를 설치할 컴퓨터는 팀원 중 하나면 된다. 나는 내 컴퓨터에서 퍼포스 서버를 열거라 모두 설치한 거고, 만약 팀원 중 한 명이 서버를 열었다면 다른 팀원들은 클라이언트용만 설치하면 된다.)


3. 환경 변수 설정

  • 시스템 환경변수 편집 > 환경변수 > Path 편집 > putty 파일 경로 추가
  • 경로가 올바르게 설정된 경우 명령 프롬프트에서 putty를 입력했을 때, putty가 실행된다.

4. EC2 인스턴스 생성

  • 아마존 계정 가입이 필요하고, 제한된 자원 내에서 무료로 이용하고 싶을 경우 요금제는 프리티어로 가입해야 한다.

  • 인스턴스 시작

    • 리전은 아무 데나 상관없다. 기본 설정으로 하는 것을 추천한다.

      📌 단, 리소스가 리전별로 표시되는 것에 주의!!
      나는 처음에는 도쿄에 만들었다가, 보안 그룹 설정에 문제가 있어서 버지니아에 새로 만들었는데, 알고보니 이전의 도쿄가 계속 돌아가고 있어서 요금 폭탄 맞았다...~ 다들 꼭 비용 관리를 자주 확인하시길...^^

  • 설정

    • 애플리케이션 및 OS
      • Amazon Linux 2 AMI 64비트
    • 인스턴스 유형
      • t2.micro
    • 스토리지 구성
      • 30GB gp2 (30GB가 프리티어의 최대 한도이다.)
    • 키페어 설정
      • ppk 파일
        (동영상처럼 puttygen을 이용해 pem을 ppk로 변환하는 과정이 필요하지 않는다.)

    • 네트워크 설정 (보안그룹)
      • 보안 규칙에 사용자 지정 규칙 추가
      • 프로토콜은 TCP가 기본
      • 원본/대상
        : 해당 서버에 대해 수신(인바운드) 및 발신(아웃바운드)할 IP 주소를 입력하는 곳

        📌 당시의 나는 IPV4와 IPV6의 차이를 몰라서 둘 다 설정했다. 일반적으로는 IPV4로만 설정해도 문제 없을 것이다.

      • 포트 범위
        : 22 (EC2에 접속하는데 필요)와 1666 (퍼포스 서버에 접속하는데 필요, P4D 설치시 기본으로 설정한 포트 넘버) 모두 어떤 IP에서나 접속 가능하도록 설정

        📌 보안 그룹을 꼭!! 제대로 설정해야 한다!!
        그렇지 않을 경우 마지막에 아래 사진과 같은 포트 관련 에러가 발생할 수 있다.
        어떻게 알았냐면요 저도 알고싶지 않았습니다..... check $P4PORT라는 오류가 발생했다면 보안 그룹과 방화벽을 제대로 설정했는지 다시 확인하자!

        (근데 지금 와서 생각한거지만... 위처럼 모든 곳에서 접근 가능하게 설정하면 보안 문제가 있다. 만약 보안이 중요하다면 팀원들이 사용하는 컴퓨터 IP 주소만으로 설정하는게 좋을 것 같다. 물론 사용하는 컴퓨터가 변경될 때마다 보안 그룹 규칙을 수정해줘야 하는 번거로움이 있지만, 아마존 서버를 해킹해서 불법으로 이용하는 사람들도 있다고 하니까... 다행히 우리는 그런 일은 없었다.)

  • 나머진 기본 설정값 그대로 인스턴스 생성

  • 성공😊

5. P4 Adim 실행 > Remote Server 설정

  • 동영상에선 나중에(13:10) 나오는데 미리 설정해야 나중에 'sever ID를 찾을 수 없다'는 오류가 나지 않는다.

  • Sever엔 EC2 퍼블릭 DNS:1666 입력하고 user와 workspace 생성

    💭 이때 check $P4PORT 1666 failed는 EC2 인스턴스 생성시 보안 규칙 설정이 잘못됐거나, 컴퓨터(윈도우나 mcafee 등등)에서 퍼포스 서버가 접속하는 방화벽을 차단해서 발생하는 오류이다.


6. 방화벽 해제

  • 윈도우의 경우 'Windows Defender 방화벽' > 고급 설정 > 인바운드 & 아웃바운드 규칙에 포트넘버 1666와 22를 어디에서든 접속 가능하도록 추가

    📌 사실 지금은 잘 기억나지 않는데 여기서 시행 착오가 엄청 많았던 것 같다. 잘 안돼서 허용되는 앱에 퍼포스 관련 앱을 모두 추가했었고, 인바운드와 아웃바운드 규칙에 포트 번호 22와 1666에 대해 모든 연결을 허용했었다. 마찬가지로 보안은 꽝이었겠지만... 잘 몰라서 그냥 다 했다 ㅎㅎ...


7. 생성한 EC2 인스턴스와 퍼포스 서버 연결

💭 이때 p4d 다운로드 파일인 helix-core-server.tgz 의 압축을 꼭!!!! 먼저 풀고 진행해야 한다! 나는 그냥 유튜브는 4년 전 영상이니까 파일명이 바뀐지 알고 p4d 대신 다 helix-core-server.tgz 입력했다가 마지막에 바이너리 파일로 변환할 수 없다는 에러 뜨고 태초마을 다녀왔다 🥲

📌 이때 지쳐서 여기서부턴 좀 대충 썼던 것 같다 ㅎ... 동영상 참고해주시고 만약 의문 사항 있으시면 물어보셔도 됩니당
(그리고 사진에서 서버가 ec2-54~ec2~107~ 두 개가 있는데 이건 내가 한 번 태초마을 다녀오면서 사진들이 섞여서 그런 거다... 각자 DNS 서버로 진행하면 된다.)


8. 많은 시행착오 끝에 성공💕

💭 8시간 정도 걸렸다. 그치만 내가 무지해서 그런 거일듯...

📌 중간에 프로젝트에 문제가 생겨서 서버를 새로 파야했던 일이 있었는데, 다시 할 때는 2시간도 안 걸렸었다! 그 2시간도 이전 파일과 아마존 계정을 완전히 삭제하느라 조금 오래 걸렸다.
참고로 우리 팀 프로젝트에 생겼던 문제는 나도 정확히는 모르지만, 언리얼 내에서 파일들을 막 삭제하다가 레퍼런스가 꼬여서 발생했던 것 같다. 그래서 수정한 파일들을 서밋하는데 몇십 기가가 전송되구 ㅋㅋ... 남은 용량이 20KB도 안돼서 리버트도 안되고 딜리트도 안되고 워크스페이스 삭제도 안되고 접속조차 잘 안되고 그냥 난리가 났었다. 😭😭
만약 언리얼에서 파일들을 삭제할 때 '~ 아직 메모리에 참조되어 있습니다.'가 뜬다면 절대로 강제 삭제를 하지 말고!! 차근차근 순서대로 삭제해서 메모리 참조를 하나씩 해제해주도록 하자! 그래도 메모리 참조가 풀리지 않는 경우 '폴더의 리디렉터'고치기를 하거나, 조금 기다리거나, 언리얼을 껐다 키면 대부분 해결된다. 레퍼런스가 정상 작동하지 않을 경우 퍼포스 뿐만이 아니라 다른 문제가 발생할 수도 있으니 주의하자...!


언리얼에 퍼포스 연결

  • 방법
    https://docs.unrealengine.com/5.0/ko/using-perforce-as-source-control-for-unreal-engine/

    📌 그리고 혹시 우리처럼 중간에 프로젝트나 서버에 문제가 생겨서 소스 컨트롤 서버를 변경한다면, 소스 컨트롤 로그인시 항상 이전 서버가 기본으로 설정되어 있을 수 있다. 그런 경우 SourceControlSettings 파일 (프로젝트 폴더 > saved > config > windowsEditor > SourceControlSettings)을 변경하거나, 아예 삭제하면 된다.

    참고로 소스 컨트롤 세팅이 잘못되어있으면 빌드가 안된다. 우리 조는 이 문제를 최종 발표 전날 빌드가 안돼서 몇 시간 동안 고생하다가 알게 되었다. 그리고 파일들을 하나하나 읽어가며 찾았다 ^^...

  • 성공

퍼포스 사용법

📌 사실 사용법 적기 귀찮아서 링크로 때우는 건 사실 맞다 ㅎㅎ...
그치만 만약 링크를 읽어도 잘 모르겠어서 추가적인 포스팅을 원하시는 분이 있다면 적는 걸 생각해 보겠습니다😊

  • 간단히 적자면 Workspace는 사용자당 1개 이상 가질 수 있는 로컬 경로이고, depot은 모든 사용자가 공유하는 서버이다.
    Submit은 로컬에서 변경한 내용을 서버에 올리는 것이고 (깃의 Push), Get Latest는 다른 사용자가 변경하고 서버에 올린 파일들을 받아오는 것이다. (깃의 Pull)
    Pending에서 Submit을 할 수 있는데, 변경 사항이 있는 경우 default 옆의 삼각형이 빨갛게 변하는데 우클릭해서 설명쓰고 서밋하면 된다. 이때 파일들을 확인하는 것이 좋다. 서밋하기 전에 Revert Unchanged Files를 해주면 더 좋다. 변경 사항들은 History에서 확인할 수 있다.


📌 퍼포스가 처음에는 엄청 어려웠고, "이걸 굳이 왜 써야 하나, 그냥 깃허브를 쓰면 안되나?"라는 생각도 많이 들었는데, 적응하고 나니 별로 어렵지 않았다. (근데 사실 '스트림'은 아직 잘 모른다 우린 그냥 디폿 하나만 썼다ㅎ)

그리고 처음에는 딱히 쓸모 없다고 생각했던 체크아웃/체크인 기능은 정말 신이었다!!!🥹 다른 수업에서 진행하는 유니티 프로젝트는 깃허브로 진행했었는데, 맨날 씬 충돌나서 아예 리버트하거나 머지 컨플릭트하고 있는데 퍼포스에서는 그런 게 없어서 너무너무 좋았다. 언리얼 에디터 내에서 특정 파일만 체크아웃/체크인하고, 서밋하거나 풀 할 수 있는 것도 편리했다! 그 외에도 여러 좋은 기능들이 있다~

다만 단점은 소스 컨트롤에 연결한 채로 작업하면 렉이 너무 심했다... 내 노트북 문제일 수도 있긴 한데 여러 명이 동시에 작업하면 렉이 더욱 심했었다. 그래서 나는 항상 '먼저 서버의 변경 사항 받음 → 내가 작업할 파일들 다 체크아웃 → 소스 컨트롤 연결 해제 → 작업 완료 → 소스 컨트롤 연결 → 서밋' 순으로 진행했다.
또 다른 단점에는 사용법이 어렵다 보니 오류 해결이 어려울 수 있고, 체크아웃한 사람이 체크인해주기 전까지는 해당 파일을 수정할 수 없다는 문제가 있다. (그래도 super 사용자는 체크아웃을 강제 해제할 수 있으니 해당 문제가 발생했다면 관련해서 찾아보길 추천한다.)

결론은 처음엔 조금 어렵고 복잡하겠지만, 전체적으론 좋은 경험이었다고 생각한다! 서버를 연결하는 과정도 처음에는 아예 몰라서 끙끙댔지만 컴퓨터 네트워크 수업을 들으면서 하나씩 이해돼서 신기했다 ㅎㅎ 혹시 이 글을 보시는 경희대 후배님들이 있으시다면 겜엔기 수업에서 퍼포스 서버를 이용해보는 걸 추천합니당. 파이팅🤗

profile
자라나는 감자

3개의 댓글

comment-user-thumbnail
2023년 8월 19일

헉! 이런 꿀팁이~

답글 달기
comment-user-thumbnail
2023년 8월 19일

대박…! 정말 유용해요….!!!!!

답글 달기
comment-user-thumbnail
2023년 12월 10일

글이 너무 상세해서 도움 많이 받고 갑니다 ㅜㅜ

답글 달기