배포 가이드
본서버 배포 전 확인사항 및 절차. 최종 업데이트: 2026-03-31
환경 정보
| 항목 | 개발 (DEV) | 본서버 (PROD) |
| 프론트 URL | http://localhost:5136 | https://admin.seanergyp.com |
| 백엔드 API | http://localhost:5105 | 확인 필요 (아래 참고) |
| DB | 52.79.189.228 / SEANERGY_PARTNER_DEV | 본서버 DB (별도) |
| 파일 저장 | C:\UploadFiles\Seanergy | 본서버 동일 경로 확인 |
| DownloadRootUrl | http://localhost:5105 (Dev 프로필) | https://download.api.seanergyp.com |
배포 전 확인사항
1. 본서버 API 주소 확인 중요
ExternalInquiryController.cs에 내부 HTTP 호출 URL이 하드코딩되어 있습니다:
private static readonly HttpClient _internalHttp = new()
{
BaseAddress = new Uri("http://localhost:5105") // ← 본서버에서 이 주소가 맞는지 확인
};
본서버 API 주소: https://api.seanergyp.com (확인됨)
개발에서는 http://localhost:5105, 본서버에서는 내부 포트가 다를 수 있으므로 배포 시 아래와 같이 변경하는 것을 권장:
// ExternalInquiryController.cs
// 개발: http://localhost:5105
// 본서버: https://api.seanergyp.com (또는 본서버 내부 localhost:포트)
private static readonly HttpClient _internalHttp = new()
{
BaseAddress = new Uri("https://api.seanergyp.com")
};
또는 appsettings.json에 "InternalApiUrl": "https://api.seanergyp.com"를 추가하고 코드에서 읽어오는 방식으로 변경하면 환경별 설정이 가능합니다.
2. 본서버 DB 연결 확인 코드
appsettings.json의 DB 연결 문자열이 본서버 DB를 가리키는지 확인:
// appsettings.json
"ConnectionStrings": {
"SEANERGY_PARTNER_Context": "Data Source=본서버DB주소;Initial Catalog=본서버DB명;..."
}
개발 DB(SEANERGY_PARTNER_DEV)가 아닌 본서버 DB여야 합니다.
3. 파일 저장 경로 확인 코드
본서버에 C:\UploadFiles\Seanergy 디렉토리가 있는지 확인. 없으면 생성해야 합니다.
관련 파일: Program.cs (정적 파일 서빙), ImageEditController.cs (편집 저장)
4. appsettings.Development.json은 무시됨 참고
본서버에서는 ASPNETCORE_ENVIRONMENT가 빈 값 또는 Production이므로 appsettings.Development.json은 읽히지 않습니다. appsettings.json만 적용됩니다.
DB 마이그레이션 (본서버 DB에 실행)
반드시 코드 배포 전에 DB 마이그레이션을 먼저 실행하세요. 코드가 새 컬럼을 사용하는데 DB에 없으면 에러가 납니다.
SQL 실행 순서
1. ETA 컬럼 추가 (NEW-013)
ALTER TABLE OrderInfo ADD Eta datetime NULL;
2. ModUserID 컬럼 추가 + 백필 (NEW-015)
ALTER TABLE OrderInfo ADD ModUserID INT NULL;
UPDATE OrderInfo SET ModUserID = RegUserID WHERE ModUserID IS NULL;
3. OrderLog Contents 확장 (NEW-015)
ALTER TABLE OrderLog ALTER COLUMN Contents NVARCHAR(MAX);
4. 외부 API Key 등록 (필요 시)
-- 먼저 본서버에서 사용할 관리자 계정의 GUID를 확인:
SELECT ua.UserAccountID, ua.UserName,
ua.[Guid] as UserGuid,
aa.[Guid] as AdminGuid
FROM AdminAccount aa
JOIN UserAccount ua ON aa.UserAccountId = ua.UserAccountId
WHERE ua.IsActivated = 1;
-- 확인된 GUID로 API Key 등록:
INSERT INTO ExternalApi
(ApiName, AuthType, AuthKey01, AuthKey02, AuthKey03, RegDate)
VALUES (
'EXTERNAL_INQUIRY',
'API_KEY',
'sk-sngy-본서버용-랜덤키생성', -- API Key (외부 업체에 전달)
'위에서 확인한 UserGuid', -- 주문 등록자
'위에서 확인한 AdminGuid', -- 주문 담당자
GETDATE()
);
코드 배포
빌드 및 배포
-- 백엔드 빌드
cd seanergy-API/Seanergy.API
dotnet publish -c Release -o ./publish
-- 프론트엔드 빌드
cd seanergy/Seanergy
dotnet publish -c Release -o ./publish
빌드된 파일을 본서버에 복사하고 서비스 재시작.
배포 후 테스트
테스트 체크리스트
- 웹 로그인 정상 동작
- 바이어 관리 → 주문 목록 조회 정상
- 주문 상세 → ETA DatePicker 표시 + 입력 + 저장
- ETA 입력 시 지급기한일 자동 재계산
- 주문 상세 → "변경 이력" 버튼 클릭 → 팝업에 이력 표시
- 주문 수정 후 → 변경 이력에 구체적 변경 내역 기록 (ETA, 항구, 단가 등)
- "최근 업데이트" 옆에 수정자 이름 표시
- 인쿼리 파싱 → 주문 등록 정상 동작
- 인보이스 발행 → 선박명 제거 체크박스 동작
- 서류보기 → 편집(🖊) 아이콘 클릭 → 이미지 자동 로드
- 셀러 관리 → 셀러 주문 정상 표시
외부 API 테스트 (선택)
curl -X POST https://api.seanergyp.com/api/ExternalInquiry/Create \
-H "Content-Type: application/json; charset=utf-8" \
-H "X-Api-Key: 본서버용API키" \
-d '{"text":"VESSEL NAME: TEST\nIMO : 9999999\nDELIVERY PORT/AREA NAME: BUSAN\nDELIVERY WINDOW: 01-03RD APR 2026\nVLSFO : 100MT\n바이어 : 홍콩이마린 1400 (30DDD)\n셀러 : 금진 1300 (7DDD)"}'
응답에 "code": 200이면 성공. 바이어 관리 + 셀러 관리에서 주문 확인.
롤백 방법
문제 발생 시 코드만 이전 버전으로 되돌리면 됩니다. DB 변경은 롤백 불필요:
Eta 컬럼: NULL 가능이라 이전 코드에서 무시됨
ModUserID 컬럼: NULL 가능이라 이전 코드에서 무시됨
Contents NVARCHAR(MAX): 하위 호환 (기존 코드도 문제없음)
ExternalApi 행: 이전 코드에서 안 읽으므로 영향 없음
DB 변경은 전부 하위 호환이라, 코드 롤백만으로 안전하게 되돌릴 수 있습니다.
이번 배포에 포함된 기능
| 기능 | 설명 | 영향 범위 |
| NEW-013 ETA + DDD | ETA 필드 추가, 3단계 DDD 자동 계산, 100개국 공휴일 API | 바이어 관리 |
| NEW-015 변경 이력 | EF Core ChangeTracker 기반 자동 변경 추적, 발송 로그 | 바이어 관리 |
| NEW-010 선박명 제거 | 인보이스 발행 시 선박명 제거 체크박스 | 인보이스 |
| NEW-018 개선 편집기 | 서류보기에서 편집 아이콘 클릭 시 파일 자동 로드 | 바이어/셀러 관리 |
| 외부 API | 인쿼리 텍스트 → 자동 주문 생성 (API Key 인증) | 신규 엔드포인트 |
| 공휴일 | DDD 계산 시 Nager.Date API로 100개국 공휴일 자동 반영 | 결제 계산 |
| 인쿼리 파싱 | MR/MS 제거, AGENT NAME 지원, 업체 약칭 3개 추가 | 인쿼리 파싱 |