배포 가이드

본서버 배포 전 확인사항 및 절차. 최종 업데이트: 2026-03-31

환경 정보

항목개발 (DEV)본서버 (PROD)
프론트 URLhttp://localhost:5136https://admin.seanergyp.com
백엔드 APIhttp://localhost:5105확인 필요 (아래 참고)
DB52.79.189.228 / SEANERGY_PARTNER_DEV본서버 DB (별도)
파일 저장C:\UploadFiles\Seanergy본서버 동일 경로 확인
DownloadRootUrlhttp://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

빌드된 파일을 본서버에 복사하고 서비스 재시작.

배포 후 테스트

테스트 체크리스트

외부 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 변경은 롤백 불필요:

DB 변경은 전부 하위 호환이라, 코드 롤백만으로 안전하게 되돌릴 수 있습니다.

이번 배포에 포함된 기능

기능설명영향 범위
NEW-013 ETA + DDDETA 필드 추가, 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개 추가인쿼리 파싱