Perforce(P4V) Search(검색) 기능

P4V 검색 기능

이번 포스트에서는 P4V에서 검색 기능을 알아보려합니다.
가이드 문서: P4V User Guide: Searching and filtering

P4V 검색 기능 가이드 문서를 간단히 요약하면,
파일, changelist, workspace, branch, stream, job, label을 필터를 통해 검색할 수 있습니다.
Cmd+F(Ctrl+F)를 통해서 검색도 가능합니다.

changelist description 검색 기능

사실 저나 대부분의 사용자는 submit된 changelist에서 설명으로 입력된 내용을 검색을 원할 것 같은데
P4V에는 Ctrl+F 기능을 통해서 간단하게 제공하고 있습니다. (너무 간단해요)
Find File 기능도 사실 Changelist 조건이 있어서 설명 검색이 가능하지 않을까해서 보았는데 숫자로만 검색이 가능한 상태입니다.
(탭 이름도 파일 찾는 탭이니 그럴 수 있다고는 생각합니다.)

검색할 때 필터를 사용하라고 하지만 필터에도 description으로 필터링해서 보여주는 것은 없어요. 🤯
이참에 p4vjs로 커스텀 html tab을 만드는게 낫겠다 싶어서 검색 페이지를 만들어보았습니다.

p4v custom html tab을 통한 검색 기능 설정

https://github.com/pineoc/p4v-html-utils

가이드에 맞춰 설정해주시고 Run Queries 메뉴를 눌러보시면 아래와 같은 화면으로 검색해보실 수 있습니다.


한번 사용해보셔요 😈

마무리

P4V 검색 기능을 소개하려했는데 사실 기본적으로 제공하는 검색 기능이 크게 도움이 되는지는 모르겠습니다. 😂
제가 모르는 기능이 있을지는 모르겠지만.. PM으로 업무를 하면서 사용해본 P4V에는 검색 기능이 좋지는 않은 것 같아요.
그래서 custom html tab까지 만들어서 사용해보고 있는데 나름 만족하고 있습니다.

제가 P4V를 완전히 깊게 사용하지 못해서 모르는 부분이 있을 수 있으니 정정이 필요한 부분이 있다면 댓글로 남겨주세요!

향후 업데이트에 검색 기능이 강화될 수 있지만.. 현재는 원하는 changelist를 검색하기가 어려운 상태이긴합니다.
description으로 필터링하는 기능이 생기기를 기원하며 마치겠습니다.
감사합니다 😸

다른 Perforce 가이드 문서들

Perforce(P4V) bookmark(북마크)

Bookmark(북마크)

P4V Guide: Bookmarks

P4V에는 폴더나 파일에 빠르게 접근할 수 있는 기능인 북마크 기능이 있습니다.
Tools > Bookmarks 메뉴에서 볼 수 있는데요.
(웹 브라우저에서 사용하는 북마크라고 생각하시면 될 것 같네요. 😸)

Name에는 북마크 이름, Location에는 파일이나 폴더의 경로를 입력하고 OK를 누르면 저장됩니다.
shortcut도 저장할 수 있네요. (맥에서는 ^+shift+[1~9 숫자]) 최대 9개의 숏컷을 저장할 수 있습니다.

북마크는 Tools > Bookmarks에서 리스트를 볼 수 있고 Manage Bookmarks 메뉴에서 관리할 수 있습니다.

짧은 소개 마무리

자주 찾는 폴더 경로나 파일을 빠르게 접근할 수 있는 북마크 기능을 알아보았습니다.
mainline과 특정 스트림을 이동하는 작업이 많을 경우 북마크를 등록하고 숏컷을 이용하여 편하게 이동할 수 있을 것 같아요.
다만, 북마크에는 타입에 따라 이동에 약간의 제한이 있습니다.

  • folder: Workspace folder / Depot folder
  • file: Workspace file / Depot file

Workspace folder, file의 경우 현재 workspace와 맞는 북마크만 보여지고 숏컷을 이용하더라도 workspace가 일치하지 않으면 이동하지 못합니다.
이와 달리 Depot folder, file현재 workspace와는 상관없이 이동할 수 있구요.

북마크 기능이 workspace까지 변경되면서 이동하지는 않으나 숏컷만으로도 유용한 기능이긴 한 것 같습니다.
이미 잘알고 사용하시는 분도 있겠지만 사용하고 있지 않다면 한번 사용해보시는 것도 좋겠네요. 😸

Perforce(P4V) Workspace(작업공간) 관리

Workspace(작업 공간)?

P4는 workspace을 만들고 그 공간에서 작업(checkout, submit 등)을 합니다.
(말 그대로 작업 공간이니 당연한 말을 하고 있었네요. 🙈)

Perforce 가이드 문서에는 workspace를 아래와 같이 설명하고 있습니다.

Workspace: Helix Core server에서 관리하는 파일의 개정판을 작업하는 워크스테이션의 폴더 또는 디렉토리입니다.

단순하게 보면 작업 공간이긴하나 git과 다른 점은 p4 서버가 내 작업 공간 정보를 가지고 있다는 것 입니다.

여러 컴퓨터에서 생성한 workspace 리스트

위의 화면은 서버에 등록된 workspace를 선택하여 사용할 수 있는 화면입니다.
Show only workspace available for use on this computer 옵션을 통해서 현재 컴퓨터에서 만든 workspace를 필터링해서 보고 선택하여 사용할 수 있습니다.

Workspace 만들기

시작 화면에서 Workspace 만들기

작업을 시작하기 위해 workspace를 만들어보죠. p4v를 실행하면 제일 먼저 아래화면을 보실겁니다.

이 화면에서 Workspace에 있는 New 버튼을 눌러보면 아래와 같은 화면을 볼 수 있습니다.

이 글을 보는 모든 분들이 같은 화면을 보지는 않겠지만, Workspace name, Stream에 텍스트를 입력해줍니다.
Workspace name은 workspace의 이름이고 Stream은 해당 workspace에 어떤 스트림을 매핑할지 고르는 거에요.
Stream은 Browse해서 찾을 수도 있고, 입력칸에 검색해서 입력할 수 있습니다.
(직접 입력하면 Stream이 정확하게 입력되지 않을 수 있으니 직접입력하고 자동완성되는 항목을 선택하는 것을 추천합니다.)

이렇게 workspace를 만들고 Open Connection 화면에서 접속을 진행합니다.

현재 Workspace에 접속한 상태에서 다른 Workspace 만들기

시작 화면에서 Workspace 만들기 방법과 같지만 현재 접속한 화면에서 다른 workspace를 만드는 방법도 있습니다.

  • 상단에 있는 메뉴에서 Connection > New Workspace​를 선택합니다.
  • Streams tab (오른쪽 탭)에서 workspace를 만들고자하는 스트림에 마우스 오른쪽 클릭New Workspace를 선택합니다​.
  • Workspaces tab (오른쪽 탭) 상단에 드롭박스 메뉴를 선택한 뒤에 New Workspace를 선택합니다.

위에서 각 New Workspace 메뉴 선택한 뒤에 workspace 만드는 방법은 동일합니다.

Workspace에서 작업하기

workspace를 만들었으니 작업을 위해 소스들을 가져와야겠죠?
다만, 이 포스트에서는 Get Latest 내용만 간단히 보고 넘어가겠습니다.
(workspace와 관련한 내용을 다루기 위한 포스트니까요 😸)

현재 workspace에 연결된 스트림에 있는 모든 파일을 싱크(Sync)하고자 한다면 현재 폴더에서 Get Latest를 선택해주시면 됩니다.

또는 특별히 필요한 폴더만 싱크하고자 한다면,
오른쪽 탭에서 Depot에 스트림 하위에 필요한 폴더에서 마우스 오른쪽 클릭으로 Get Latest Revision을 선택하여 원하는 것만 싱크할 수 있습니다.

이후에 수정이 필요한 소스를 Checkout하고 작업한 뒤에 Changelist를 만들고 Submit하면 커밋이 완료됩니다. 👍

나중에 changelist, submit까지 흐름을 간단하게 정리해보면 좋겠네요.

Workspace 이동(Switch)

작업을 하다보면 브랜치를 이동해야하는 경우가 있습니다.
퍼포스에서는 workspace가 곧 스트림에 연결되어있으니 workspace를 이동하여 작업합니다.

드롭다운 메뉴에서 바로 이동!

Switch to Workspace 메뉴를 통해 이동

위 예시 스크린샷은 같은 스트림을 보고있는 workspace이지만, 다른 스트림을 바라보는 workspace로도 이동할 수 있습니다.

Workspace 삭제(delete)

P4 Guide: Workspace Delete & Unload

workspace를 삭제하는 방법은 간단합니다.

  1. 삭제하고자 하는 workspace에 작업중인 내용이 있다면 리버트합니다. (pending changelist, shelve가 있다면 revert해줍니다.)
  2. View > Workspaces 메뉴에서 Workspaces 탭을 열어줍니다. (이미 열려있다면 해당 탭으로 갑니다)
  3. 마우스 오른쪽 클릭을 누른 뒤 삭제합니다.

삭제하고자하는 workspace에 작업중인 내용이 있다면 아래와 같은 오류가 발생할 수 있으니 작업중인 내용이 있는지 확인해보세요.

Client 'pineoc-feature1' has files opened. To delete the client, revert any opened files and delete any pending changes first. An administrator may specify -f to force the delete of another user's client.
예시로 삭제해보려했는데 파일 하나가 checkout 되어있어 위와 같은 오류를 볼 수 있었습니다.

가이드 문서에 있는 언로드는 제가 테스트하는 workspace에서는 나오지 않아 넘어가겠습니다.

Workspace 관리 마무리

이렇게 Perforce에서 workspace를 생성하고 이동, 삭제하는 것까지 살펴보았습니다.
사실 더 자세하게 정리하면 이야기할 내용이 많지만 use case 별로 정리를 하고 포스팅을 해봐야겠네요. 😎

다른 Perforce 가이드 문서들

P4V(Perforce Client) 프로그램 분석기

P4V, Perforce 클라이언트

https://www.perforce.com/products/helix-core-apps/helix-visual-client-p4v
https://www.perforce.com/downloads/helix-visual-client-p4v

P4V main view

앞선 포스트에서 기본 내용을 소개한 것과 연관해서 P4V는 어떻게 만들어졌는지 궁금해져서 확인해보았습니다.

사실 git 클라이언트 프로그램은 많은데 “왜 Perforce는 다양한 클라이언트가 없을까?”하는 궁금함이 있었고 프로그램에 뭔가 있지 않을까해서 확인해보게되었네요. 🙈

앱(프로그램) 파일 구조 확인 on Mac

Mac에서 p4v를 설치하고 내부 패키지가 어떻게 구성되었는지 확인해보았습니다.
Frameworks에 Qt관련 폴더가 가득한 것을 보니 Qt를 사용해서 개발한 것 같네요.

실제로 패치노트에서도 Qt를 언급하고 있긴합니다. Qt 5버전을 쓰고 있네요.
https://www.perforce.com/perforce/doc.current/user/p4vnotes.txt

1
2
3
4
5
6
7
--------------------------------------------------------------------------
Supporting Libraries for 2020.3.1/2059355
Qt 5.15.1
OpenSSL1.1.1
ICU 65.1
Helix Core C/C++ API 2020.2
--------------------------------------------------------------------------

Qt 프레임워크?

https://www.qt.io/

Qt 프레임워크를 간단하게 설명하면, C++로 개발한 프로그램(GUI 포함)을 다양한 플랫폼에서 사용할 수 있도록 개발할 수 있는 프레임워크입니다. 크로스 플랫폼 프레임워크죠 (React Native나 Ionic, Flutter 같은 프레임워크)
다시 P4V 분석으로 돌아가봅니다.

Qt Webkit, WebEngine을 사용한 웹 렌더링

P4V에는 p4vjs를 통해 웹페이지를 보여주거나 커스텀 HTML을 통해 p4v에서 기본적으로 보여주는 것 외의 것들을 제공할 수 있는데요.

참고 데모: https://www.perforce.com/manuals/p4vjs-ug/Content/P4VJS-UG/run-demo-mode.html

Qt에서는 크로미움(Chromium)을 사용한 웹킷으로 HTML을 보여줄 수 있도록 지원하고 있습니다.
이를 이용해서 P4V도 HTML을 보여줄 수 있는 방법을 열어준 것 같네요.

더 분석할만한 프로그램 내용

딱 파일 구조랑 사용한 프레임워크 외에는 더 분석할 만한 내용은 보이지 않네요. CLI 정도까지만 간단하게 보겠습니다.
(리버스 엔지니어링까지 할만한 프로그램은 아니라고 생각이 들기도하구요. 😸)

P4V 외의 P4 CLI(Command Line Interface)

https://www.perforce.com/manuals/cmdref/Content/CmdRef/Home-cmdref.html

p4도 당연히 CLI가 존재하고 커맨드라인으로 p4v에서 할 수 있는 것들을 할 수 있습니다.
(커맨드를 잘 다룰 수 있다면, 더 많은 것들을 할 수도 있겠죠)

짧은 분석, 공부 마무리

사실 p4v를 사용하면서 뭘로 만들어졌길래 뭔가 안이쁘지? 하고 확인, 정리해보았는데요.
개발툴이라고 생각하고 보면 git 관리툴들이 다 이쁘게 만들어진게 아닐까하는 생각도 들었습니다.

이번에 정리하면서 기본적인 UI 외에 p4vjs로도 뭔가 더 커스텀하게 만들어볼 수 있으니 그걸 쓰면 더 이쁘게 쓸 수 있지 않을까하는 생각도 들었어요. 🤔

p4v를 사용하면서 더 공유할만한 내용이 있다면 또 들고 오겠습니다.
다음 포스트에서 보아요! 😎

꺼지지 않는 백그라운드 ngrok 실행기

ngrok?

https://ngrok.com/

간단하게 설명하면 로컬에서 실행중인 서비스를 터널링(포워딩)해주는 서비스입니다.
저는 주로 간단하게 만든 웹서비스를 잠깐 외부에서 테스트하거나 시연할 때 사용하곤합니다.
근데 ngrok은 자꾸 껐다 켰다 하기에 귀찮아서 백그라운드로 오래 돌릴 방법이 없나 찾아보게되었어요.

긴 글을 읽기 귀찮으신분들은 요약만 읽어주시면 알 수 있습니다. 😸

꺼지지 않는 백그라운드 ngrok 실행기 요약

  1. ./ngrok http 80 -log=stdout > ngrok.log &
  • 그냥 백그라운드 실행 옵션으로 실행할 수는 있습니다.
  • 터미널이 닫히면 ngrok도 같이 꺼집니다.
  1. screen을 사용해서 ./ngrok http 80 -log=stdout > ngrok.log &
  • 스크린을 사용하더라도 스크린을 사용하던 터미널이 닫히면 ngrok도 같이 꺼집니다.
  1. 그냥 터미널 끄지말고 ngrok 백그라운드 상태로 두고 사용하자..

꺼지지 않는 백그라운드 ngrok 실행?

우선 ngrok으로 터널링 하는 방법은 서비스 페이지에 잘 나와있으니 백그라운드로 실행하는 방법에 대해 고민해보았습니다.
ngrok을 4000 포트로 http 터널링을 하기 위해서 아래와 같이 실행할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
$ ngrok http 4000
ngrok by @inconshreveable (Ctrl+C to quit)

Session Status online
Account Allen Yunseok Lee (Plan: Basic)
Version 2.3.35
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://4a3ed4201b8f.ngrok.io -> http://localhost:4000
Forwarding https://4a3ed4201b8f.ngrok.io -> http://localhost:4000

Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00

무료 버전은 포워딩을 랜덤으로 받는 것이 기본 옵션이고 결제를 하게되면 서브 도메인에 이름을 정해서 포워딩할 수 있습니다.

Take #1

근데 이렇게 실행하고 나서 다른 작업을 위해 이 터미널을 닫으면 그대로 포워딩이 풀려버립니다.
처음엔 이걸 유지하기 위해 간단히 백그라운드 실행을 해보았죠.

1
2
$ ./ngrok http 80 -log=stdout > ngrok.log &
[1] 76732

이렇게 하고 ngrok.log 파일을 보고 URL에 접속하면 포워딩이 잘되는 것을 확인했습니다.
다만 이것도 터미널을 닫으면 포워딩이 풀리는 것은 마찬가지였습니다. 😂

Take #2

사실 원했던 것은 ngrok을 백그라운드로 계속 돌려두고 싶었던 것인데 방법이 없을까 찾아보았습니다.
(터미널에 종속되지 않고 백그라운드로 돌아가는 서비스 말이죠.)

그래서 screen 명령어를 사용해서 터미널을 백그라운드처럼 두고 하면 어떨까 싶어서 시도해보았습니다.
(없다면 설치해야하는 명령어입니다.)

1
2
3
$ screen a
$ ./ngrok http 80 -log=stdout > ngrok.log &
# Ctrl-a, d를 입력하면 터미널에서 나오게됩니다.

이렇게 하면 스크린이 백그라운드에 떠있고 그 뒤에 ngrok이 실행되겠지 했지만…
터미널 끄면 마찬가지로 꺼지게됩니다. 😂 😂 😂

Take #3

ngrok 서비스에 뭔가 없나하고 찾아보게 되었습니다.
stack overflow: How to keep ngrok running even when signing off of a server 글도 보고 찾아보게 되었죠.

Installing ngrok as a service에서 ngrok을 서비스 형태로 설치하는 방법에 대한 것인데 알고보니 ngrok link는 엔터프라이즈 서비스로 돈을 많이 내고 써야하는 물건이어서 이것도 실패했네요. 🔥

더 찾아보고 시도해봤지만 더 좋은 방법은 나오지 않아서 결론은…

ngrok을 실행한 터미널을 끄지말고 백그라운드 정도로만 ngrok을 사용하자.

로 결론을 내고 포스트를 마무리해봅니다. 🤭
시도는 다 보실 필요 없으니 위에 요약만 보셔도 되었겠네요. 여기까지 읽어주셔서 고맙습니다. 😸

혹시 다른 방법이 있다면 댓글로 알려주세요!