프로젝트 메모 목록 가이드
프로젝트(CSN)와 서버(lssn) 단위로 자유 형식 메모(키·값·메모)를 조회·추가·수정·삭제하는 방법을 안내합니다. 로그인이 필요한 페이지입니다.
📋 개요
프로젝트 메모는 특정 프로젝트(CSN)와 논리 서버(lssn)에 연결된 메모를 한 화면에서 관리하는 페이지입니다. 서버별 접속 정보·체크리스트·참고 URL 등 운영에 필요한 메모를 자유 형식(키 / 값 / 상세 메모)으로 저장할 수 있습니다.
각 메모는 다음 필드로 구성됩니다.
| 필드 | 의미 |
|---|---|
lcSn | 메모 일련번호(PK). 수정·삭제 시 사용 |
csn | 프로젝트 코드 |
lssn | 연결된 논리 서버 번호(선택) |
lcKey | 메모 키(예: ssh-port, admin-url) |
lcVal | 메모 값(예: 2222, https://...) |
lcMemo | 자유 서술 메모 |
🔍 주요 기능 설명
1. 서버(lssn) 지정 · LSVR 선택
상단 lssn 입력란에 서버 번호를 직접 넣거나, [LSVR 선택] 버튼으로 현재 프로젝트의 서버 목록에서 골라 채울 수 있습니다. 선택한 서버 번호는 이후 메모 추가 시 자동으로 함께 전달됩니다.
2. 프로젝트(CSN) 연동
CSN은 URL의 ?csn= 파라미터 또는 현재 로그인 세션의 프로젝트에서 자동으로 채워집니다. 상단 공통 영역에서 프로젝트를 바꾸면 목록도 새 프로젝트 기준으로 다시 조회됩니다.
3. 조회 (Fetch)
[Fetch] 버튼을 누르면 지정한 프로젝트의 메모가 조회됩니다. 결과는 데스크톱에서는 표(테이블), 모바일에서는 카드 형태로 표시됩니다.
- URL 자동 링크: 값(lcVal)이
http(s)://로 시작하면 새 탭에서 열리는 링크로 표시됩니다. - 서버 링크: 서버(lssn) 컬럼은 해당 서버 상세(
lsvrdetail)로 이동하는 링크로 표시됩니다.
4. 메모 추가 / 수정 / 삭제
- 추가: [메모 추가] 버튼을 누르면 현재 CSN·lssn을 가지고 메모 추가 페이지(
prjMemoPut)로 이동합니다. 표 안의 편집 모달에서 바로 추가할 수도 있습니다. - 수정: 각 행의 [Edit] 버튼을 누르면 해당 메모(lcKey / lcVal / lcMemo)를 불러온 편집 모달이 열립니다. 저장 시
lcSn이 함께 전달되어 기존 메모가 갱신됩니다. - 삭제: 각 행의 [Delete] 버튼을 누르면 확인창이 뜨고, 확인 시 메모가 삭제된 뒤 목록이 다시 조회됩니다. 삭제는 되돌릴 수 없습니다.
5. 머신 상세로 이동
[머신상세] 버튼을 누르면 입력한 lssn의 서버 상세 페이지(lsvrdetail)로 이동합니다.
🛠️ 사용 순서 (요약)
- 상단에서 lssn을 입력하거나 **[LSVR 선택]**으로 서버를 고른다.
- **[Fetch]**로 현재 프로젝트의 메모를 조회한다.
- [메모 추가] 또는 행의 **[Edit]**로 메모를 작성/수정하고 저장한다.
- 불필요한 메모는 행의 **[Delete]**로 삭제한다(확인 후 즉시 반영).
🔌 API 사용 가이드
이 화면은 GIIP 공용 API 엔드포인트(/api/giipApi)에 세 가지 커맨드를 호출해 동작합니다. 브라우저에서는 로그인 세션 토큰이 자동으로 전달되며, 외부에서 직접 호출할 때는 AK(액세스 토큰) 를 사용합니다.
아래 예시는 실제 라이브 환경(CSN 47)에서 조회→추가→삭제 라운드트립으로 동작을 검증한 것과 동일한 호출입니다.
공통 규격
- 엔드포인트:
POST https://giipfaw.azurewebsites.net/api/giipApi - Content-Type:
application/x-www-form-urlencoded - 인증: 폼 필드
token/usertoken에 AK(로그인 사용자 액세스 토큰)를 넣습니다. - 호출 형식: 폼 필드
text에커맨드 파라미터명…(값이 아니라 파라미터 이름)을, 폼 필드jsondata에 실제 값을 JSON으로 넣습니다.- 이 방식은 corpMemo 등 다른 메모 화면과 동일한 규약입니다.
| 커맨드 | 역할 | text | jsondata 필드 |
|---|---|---|---|
prjMemoList | 프로젝트 메모 목록 조회 | prjMemoList csn | csn |
prjMemoPut | 메모 추가/수정(upsert) | prjMemoPut csn lssn lcKey lcVal lcMemo (수정 시 끝에 lcSn) | csn, lssn, lcKey, lcVal, lcMemo, lcSn? |
prjMemoDel | 메모 삭제 | prjMemoDel csn lcSn | csn, lcSn |
권한: AK 사용자가 해당
csn(프로젝트)의 멤버(tCorpUserRel)여야 합니다. 아니면403 Forbidden이 반환됩니다. AK가 유효하지 않으면401 Unauthorized.
1) 목록 조회 — prjMemoList
curl -X POST "https://giipfaw.azurewebsites.net/api/giipApi" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "token=YOUR_AK" \
--data-urlencode "usertoken=YOUR_AK" \
--data-urlencode "text=prjMemoList csn" \
--data-urlencode 'jsondata={"csn":47}'
응답(예) — 각 행에 메모 필드와 tags(태그 JSON 배열, 없으면 null)가 포함됩니다.
[
{ "lcSn": 12, "csn": 47, "lssn": 71198, "lcKey": "ssh-port", "lcVal": "2222", "lcMemo": "점검용 포트", "tags": null }
]
메모가 없으면 결과 없음(빈 응답)이 반환됩니다.
2) 추가 / 수정 — prjMemoPut
lcSn을 생략하면 새 메모 추가, lcSn을 함께 보내면 해당 메모 수정입니다(upsert). 수정 시에는 text 끝에 lcSn을 덧붙입니다.
# 추가(insert)
curl -X POST "https://giipfaw.azurewebsites.net/api/giipApi" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "token=YOUR_AK" \
--data-urlencode "usertoken=YOUR_AK" \
--data-urlencode "text=prjMemoPut csn lssn lcKey lcVal lcMemo" \
--data-urlencode 'jsondata={"csn":47,"lssn":71198,"lcKey":"admin-url","lcVal":"https://portal.example.com","lcMemo":"관리자 콘솔"}'
# 수정(update) — lcSn 포함
$body = @{
token = "YOUR_AK"
usertoken = "YOUR_AK"
text = "prjMemoPut csn lssn lcKey lcVal lcMemo lcSn"
jsondata = '{"csn":47,"lssn":71198,"lcKey":"admin-url","lcVal":"https://portal2.example.com","lcMemo":"URL 변경","lcSn":12}'
}
Invoke-RestMethod -Method Post -Uri "https://giipfaw.azurewebsites.net/api/giipApi" `
-ContentType "application/x-www-form-urlencoded" -Body $body
응답(예) — 저장 후 갱신된 목록과 생성/수정된 lcSn을 돌려줍니다.
[ [ { "lcSn": 12, "csn": 47, "lcKey": "admin-url", "lcVal": "https://portal.example.com", "tags": null } ], [ { "lcSn": 12 } ] ]
3) 삭제 — prjMemoDel
curl -X POST "https://giipfaw.azurewebsites.net/api/giipApi" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "token=YOUR_AK" \
--data-urlencode "usertoken=YOUR_AK" \
--data-urlencode "text=prjMemoDel csn lcSn" \
--data-urlencode 'jsondata={"csn":47,"lcSn":12}'
응답(예)
{ "status": "Success", "lcSn": 12 }
결과 코드(RstVal)
| RstVal | 의미 | 조치 |
|---|---|---|
| (정상) | 성공. 데이터 행 또는 status:"Success" 반환 | — |
| 401 | Unauthorized — AK 없음/무효 | token/usertoken에 올바른 AK를 넣습니다 |
| 403 | Forbidden — 해당 CSN 권한 없음 | AK 사용자가 그 프로젝트 멤버인지 확인합니다 |
전체 결과 코드 정의는 API 결과 코드 가이드(RstVal)를 참조하세요.
💡 유의 사항
- CSN이 비어 있으면 조회 결과가 표시되지 않을 수 있습니다. 프로젝트를 먼저 지정하세요.
- 삭제는 확인 후 즉시 반영되며 복구할 수 없습니다.
lcVal에 URL을 넣으면 목록에서 바로 클릭할 수 있어 링크 저장소처럼 활용할 수 있습니다.
🔧 문제 해결
| 증상 | 원인 | 해결 |
|---|---|---|
| 메모가 조회되지 않음 | CSN이 비었거나 잘못됨 | 상단에서 올바른 프로젝트를 지정하고 [Fetch] |
| API가 401 반환 | AK 누락/무효 | token/usertoken에 유효한 AK 전달 |
| API가 403 반환 | AK 사용자가 해당 CSN 멤버 아님 | 프로젝트 멤버십(tCorpUserRel) 확인 |
| 수정이 새 메모로 저장됨 | 요청에 lcSn 누락 | 수정 시 text 끝에 lcSn을 넣고 jsondata에 lcSn 포함 |
| 삭제가 실패함 | 결과에 lcSn이 없거나 세션 만료 | 목록을 다시 조회하거나 재로그인 후 재시도 |
버전: 1.0
최종 업데이트: 2026-07-24
소스 파일: giipv3/public/help/prjmemolist.ko.md