feat: 모모유통 유통관리 ERP로 브랜딩/설정 전환

- 로그인 화면: 모모유통 + 유통관리 ERP 로고/테마(그린), 본사·지사 주소 및 연락처 표시
- MOMO 로고/파비콘 SVG 추가
- Constants.SYSTEM_TITLE을 "유통관리 ERP", COMPANY_NAME을 "모모유통"으로 변경
- docker-compose 모든 환경(prod/dev/localdev/debug/win) DB 연결을 env 변수로 외부화하고 .env/.env.production에서 로드
- Traefik 라우팅을 momo.junggomoa.com 으로 변경, 컨테이너명 momo-erp로 통일
- .gitignore에 .env.* 패턴 추가(.env.example 제외) — 실제 크리덴셜은 git에 포함하지 않음

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
chpark
2026-04-25 01:46:23 +09:00
parent bf4ce3b751
commit 80ddde87b2
11 changed files with 138 additions and 90 deletions
+8
View File
@@ -0,0 +1,8 @@
# Copy this file to .env (local dev) or .env.production (prod) and fill in values.
# These files are gitignored — never commit real credentials.
DB_HOST=183.99.177.40
DB_PORT=5432
DB_NAME=distribution
DB_USERNAME=postgres
DB_PASSWORD=changeme
+2
View File
@@ -16,6 +16,8 @@ Thumbs.db
# Docker environment files
.env
.env.*
!.env.example
env.development
env.production
+31 -27
View File
@@ -8,16 +8,16 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><%=Constants.SYSTEM_TITLE %></title>
<link rel="icon" type="image/svg+xml" href="/images/favicon_fito.svg">
<title>모모유통 | <%=Constants.SYSTEM_TITLE %></title>
<link rel="icon" type="image/svg+xml" href="/images/favicon_momo.svg">
<link href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" rel="stylesheet">
<script src="/js/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="/js/sweetalert2.js"></script>
<style>
:root {
--main-color: #3b6db5;
--main-dark: #2a5599;
--accent: #4affff;
--main-color: #2E8B57;
--main-dark: #226e44;
--accent: #7ED9A7;
--shadow-lg: 0 8px 30px rgba(0,0,0,.12);
}
* { margin:0; padding:0; box-sizing:border-box; }
@@ -31,15 +31,15 @@
/* ===== Container ===== */
.login-container {
min-height:100vh; display:flex; align-items:center; justify-content:center;
background: linear-gradient(135deg, #0f0c29, #302b63 50%, #24243e);
background: linear-gradient(135deg, #0d3b24, #1b5e3a 50%, #0f4a2a);
position:relative; overflow:hidden;
}
.login-container::before {
content:""; position:absolute; top:0; left:0; right:0; bottom:0;
background:
radial-gradient(circle at 20% 50%, rgba(59,109,181,0.3) 0, transparent 50%),
radial-gradient(circle at 80% 20%, rgba(74,255,255,0.08) 0, transparent 40%),
radial-gradient(circle at 50% 80%, rgba(94,53,177,0.15) 0, transparent 50%);
radial-gradient(circle at 20% 50%, rgba(46,139,87,0.35) 0, transparent 50%),
radial-gradient(circle at 80% 20%, rgba(126,217,167,0.12) 0, transparent 40%),
radial-gradient(circle at 50% 80%, rgba(60,179,113,0.18) 0, transparent 50%);
animation: loginBgPulse 20s ease-in-out infinite;
}
.login-container::after {
@@ -82,7 +82,7 @@
}
.input-wrap:focus-within {
border-color: var(--main-color);
box-shadow: 0 0 0 2px rgba(59,109,181,0.12);
box-shadow: 0 0 0 2px rgba(46,139,87,0.12);
}
.input-wrap .icon { color:#bfbfbf; margin-right:10px; display:flex; align-items:center; }
.input-wrap .icon svg { width:16px; height:16px; }
@@ -122,33 +122,36 @@
width:100%; height:44px; border:none; border-radius:8px;
background: var(--main-color); color:#fff;
font-size:15px; font-weight:600; cursor:pointer;
box-shadow: 0 2px 6px rgba(59,109,181,0.25);
box-shadow: 0 2px 6px rgba(46,139,87,0.25);
transition: all 0.3s ease;
font-family:inherit;
}
.login-btn:hover {
background: var(--main-dark);
transform:translateY(-1px);
box-shadow: 0 4px 10px rgba(59,109,181,0.35);
box-shadow: 0 4px 10px rgba(46,139,87,0.35);
}
.login-btn:active { transform:translateY(0); }
/* ===== Footer ===== */
.login-footer {
position:absolute; bottom:0; left:0; right:0; z-index:2;
display:flex; align-items:center; gap:40px;
padding:20px 40px;
display:flex; align-items:center; gap:28px;
padding:18px 40px;
background: hsla(0,0%,100%,0.95);
border-top:1px solid #eee;
}
.login-footer-left { display:flex; flex-direction:column; align-items:center; gap:4px; }
.login-footer-left img { height:28px; }
.login-footer-left { display:flex; flex-direction:column; align-items:flex-start; gap:2px; }
.login-footer-left img { height:36px; }
.login-footer-left span {
font-size:11px; font-weight:800; color: var(--main-color);
font-size:12px; font-weight:800; color: var(--main-color);
letter-spacing:1px;
}
.login-footer-info p {
font-size:11px; color:#888; line-height:1.6; margin:0;
font-size:11px; color:#888; line-height:1.7; margin:0;
}
.login-footer-info .label {
display:inline-block; color: var(--main-color); font-weight:700; margin-right:6px;
}
</style>
<script>
@@ -186,9 +189,9 @@
<form name="loginForm" id="loginForm" method="post">
<div class="login-card">
<div class="logo">
<img src="/images/loginLogo_fito.png" alt="FITO">
<h1>(주)피토</h1>
<p>PLM System</p>
<img src="/images/loginLogo_momo.svg" alt="MOMO">
<h1>모모유통</h1>
<p>유통관리 ERP</p>
</div>
<div class="input-wrap">
@@ -202,7 +205,7 @@
<span class="suffix toggle-pw"><svg viewBox="64 64 896 896" width="1em" height="1em" fill="currentColor"><path d="M942.2 486.2Q889.47 375.11 816.7 305l-50.88 50.88C807.31 395.53 843.45 447.4 874.7 512 791.5 684.2 673.4 766 512 766q-72.67 0-133.87-22.38L323 798.75Q408 838 512 838q288.3 0 430.2-300.3a60.29 60.29 0 000-51.5zm-63.57-320.64L836 122.88a8 8 0 00-11.32 0L715.31 232.2Q624.86 186 512 186q-288.3 0-430.2 300.3a60.3 60.3 0 000 51.5q56.69 119.4 136.5 191.41L112.48 835a8 8 0 000 11.31L155.17 889a8 8 0 0011.31 0l712.15-712.12a8 8 0 000-11.32zM149.3 512C232.6 339.8 350.7 258 512 258c54.54 0 104.13 9.36 149.12 28.39l-70.3 70.3a176 176 0 00-238.13 238.13l-83.42 83.42C223.1 637.49 183.3 582.28 149.3 512zm246.7 0a112.11 112.11 0 01146.2-106.69L401.31 546.2A112 112 0 01396 512z"/><path d="M508 624c-3.46 0-6.87-.16-10.25-.47l-52.82 52.82a176.09 176.09 0 00227.42-227.42l-52.82 52.82c.31 3.38.47 6.79.47 10.25a111.94 111.94 0 01-112 112z"/></svg></span>
</div>
<input type="hidden" name="chk_info" value="(주)피토">
<input type="hidden" name="chk_info" value="모모유통">
<div class="login-options">
<label><input type="checkbox" id="saveId"> ID 저장</label>
@@ -214,13 +217,14 @@
<div class="login-footer">
<div class="login-footer-left">
<img src="/images/loginLogo_fito.png" alt="FITO">
<span>(주)피토</span>
<img src="/images/loginLogo_momo.svg" alt="MOMO">
<span>모모유통</span>
</div>
<div class="login-footer-info">
<p>충남 아산시 음봉면 4산단로 131 (우: 31418)</p>
<p>T: 041-583-5900 / F: 041-583-5902</p>
<p style="margin-top:6px">COPYRIGHT &copy;2025 FITO ALL RIGHT RESERVED.</p>
<p><span class="label">본사</span>경기도 의왕시 벌모루길 46 B동</p>
<p><span class="label">지사</span>경기도 김포시 고촌읍 김포대로 451번길 210</p>
<p style="margin-top:4px">T: 010-6624-5315 / E: momo8443@daum.net</p>
<p>COPYRIGHT &copy;2026 MOMO DISTRIBUTION ALL RIGHT RESERVED.</p>
</div>
</div>
</div>
+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64">
<defs>
<linearGradient id="fg" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#2E8B57"/>
<stop offset="100%" stop-color="#3CB371"/>
</linearGradient>
</defs>
<rect width="64" height="64" rx="12" fill="url(#fg)"/>
<text x="32" y="42" font-family="Arial, sans-serif" font-size="26" font-weight="800" fill="#ffffff" text-anchor="middle">M</text>
</svg>

After

Width:  |  Height:  |  Size: 521 B

+25
View File
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 120" width="320" height="120">
<defs>
<linearGradient id="momoGrad" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#2E8B57"/>
<stop offset="100%" stop-color="#3CB371"/>
</linearGradient>
</defs>
<g fill="url(#momoGrad)">
<!-- Letter M 1 -->
<path d="M 20 90 L 20 30 L 35 30 L 50 65 L 65 30 L 80 30 L 80 90 L 68 90 L 68 52 L 56 82 L 44 82 L 32 52 L 32 90 Z"/>
<!-- Letter O 1 -->
<path d="M 115 60 A 28 28 0 1 1 114.99 60 Z M 115 48 A 12 12 0 1 0 114.99 48 Z" fill-rule="evenodd"/>
<!-- Letter M 2 -->
<path d="M 155 90 L 155 30 L 170 30 L 185 65 L 200 30 L 215 30 L 215 90 L 203 90 L 203 52 L 191 82 L 179 82 L 167 52 L 167 90 Z"/>
<!-- Letter O 2 -->
<path d="M 250 60 A 28 28 0 1 1 249.99 60 Z M 250 48 A 12 12 0 1 0 249.99 48 Z" fill-rule="evenodd"/>
<!-- Sparkles -->
<circle cx="288" cy="35" r="3"/>
<circle cx="300" cy="50" r="2"/>
<circle cx="295" cy="25" r="1.8"/>
<!-- Fairy wand swoosh -->
<path d="M 280 38 Q 300 20 310 35 Q 302 28 290 32 Z" opacity="0.85"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+11 -13
View File
@@ -1,19 +1,21 @@
version: '3.8'
services:
plm-ilshin:
momo-erp:
build:
context: .
dockerfile: Dockerfile.dev
container_name: plm-ilshin-debug
container_name: momo-erp-debug
ports:
- "9090:8080"
- "5005:5005" # 디버깅 포트
env_file:
- .env
environment:
CATALINA_OPTS: >-
-DDB_URL=jdbc:postgresql://211.115.91.141:11140/fito
-DDB_USERNAME=postgres
-DDB_PASSWORD=intops0909!!
-DDB_URL=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME}
-DDB_USERNAME=${DB_USERNAME}
-DDB_PASSWORD=${DB_PASSWORD}
-Xdebug
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005
-Djava.security.egd=file:/dev/./urandom
@@ -28,19 +30,15 @@ services:
max-size: "10m"
max-file: "3"
volumes:
# 실시간 클래스 파일 마운트 (디버깅용)
- ./WebContent/WEB-INF/classes:/usr/local/tomcat/webapps/ROOT/WEB-INF/classes
# JSP 파일 실시간 반영
- ./WebContent/WEB-INF/view:/usr/local/tomcat/webapps/ROOT/WEB-INF/view
# 정적 리소스 실시간 반영
- ./WebContent/css:/usr/local/tomcat/webapps/ROOT/css
- ./WebContent/js:/usr/local/tomcat/webapps/ROOT/js
- ./WebContent/images:/usr/local/tomcat/webapps/ROOT/images
# 데이터 볼륨
- plm-ilshin-project_data:/data_storage
- plm-ilshin-app_data:/path/inside/container
- momo-erp-project_data:/data_storage
- momo-erp-app_data:/path/inside/container
restart: unless-stopped
volumes:
plm-ilshin-project_data:
plm-ilshin-app_data:
momo-erp-project_data:
momo-erp-app_data:
+11 -9
View File
@@ -1,23 +1,25 @@
version: '3.8'
services:
plm-ilshin:
momo-erp:
build:
context: .
dockerfile: Dockerfile.dev
container_name: plm-ilshin-dev
container_name: momo-erp-dev
ports:
- "9090:8080"
env_file:
- .env
environment:
CATALINA_OPTS: >-
-DDB_URL=jdbc:postgresql://211.115.91.141:11140/fito
-DDB_USERNAME=postgres
-DDB_PASSWORD=intops0909!!
-DDB_URL=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME}
-DDB_USERNAME=${DB_USERNAME}
-DDB_PASSWORD=${DB_PASSWORD}
volumes:
- plm-ilshin-project_data:/data_storage
- plm-ilshin-app_data:/path/inside/container
- momo-erp-project_data:/data_storage
- momo-erp-app_data:/path/inside/container
restart: unless-stopped
volumes:
plm-ilshin-project_data:
plm-ilshin-app_data:
momo-erp-project_data:
momo-erp-app_data:
+11 -9
View File
@@ -1,23 +1,25 @@
version: '3.8'
services:
plm-ilshin:
momo-erp:
build:
context: .
dockerfile: dockerfilelocal.dev
container_name: plm-ilshin-dev
container_name: momo-erp-dev
ports:
- "3643:8080"
env_file:
- .env
environment:
CATALINA_OPTS: >-
-DDB_URL=jdbc:postgresql://211.115.91.141:11140/fito
-DDB_USERNAME=postgres
-DDB_PASSWORD=intops0909!!
-DDB_URL=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME}
-DDB_USERNAME=${DB_USERNAME}
-DDB_PASSWORD=${DB_PASSWORD}
volumes:
- plm-ilshin-project_data:/data_storage
- plm-ilshin-app_data:/path/inside/container
- momo-erp-project_data:/data_storage
- momo-erp-app_data:/path/inside/container
restart: unless-stopped
volumes:
plm-ilshin-project_data:
plm-ilshin-app_data:
momo-erp-project_data:
momo-erp-app_data:
+12 -12
View File
@@ -1,32 +1,32 @@
services:
plm-fito:
momo-erp:
build:
context: .
dockerfile: Dockerfile
container_name: plm-fito
container_name: momo-erp
restart: always
env_file:
- .env.production
environment:
CATALINA_OPTS: >-
-DDB_URL=jdbc:postgresql://211.115.91.141:11140/fito
-DDB_USERNAME=postgres
-DDB_PASSWORD=intops0909!!
-DDB_URL=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME}
-DDB_USERNAME=${DB_USERNAME}
-DDB_PASSWORD=${DB_PASSWORD}
-Xms512m
-Xmx1536m
-XX:MaxPermSize=256m
-Djava.net.preferIPv4Stack=true
-Dfile.encoding=UTF-8
volumes:
- /home/plm-fito/project_data:/data_storage
- /home/plm-fito/app_data:/path/inside/container
- /home/momo-erp/project_data:/data_storage
- /home/momo-erp/app_data:/path/inside/container
labels:
- traefik.enable=true
- traefik.http.routers.plm-fito.rule=Host(`fito.wace.me`)
- traefik.http.routers.plm-fito.entrypoints=websecure,web
- traefik.http.routers.plm-fito.tls=true
- traefik.http.routers.plm-fito.tls.certresolver=le
- traefik.http.services.plm-fito.loadbalancer.server.port=8080
- traefik.http.routers.momo-erp.rule=Host(`momo.junggomoa.com`)
- traefik.http.routers.momo-erp.entrypoints=websecure,web
- traefik.http.routers.momo-erp.tls=true
- traefik.http.routers.momo-erp.tls.certresolver=le
- traefik.http.services.momo-erp.loadbalancer.server.port=8080
networks:
default:
+12 -16
View File
@@ -1,39 +1,35 @@
services:
plm-app:
momo-erp:
build:
context: .
dockerfile: Dockerfile.win
platforms:
- linux/amd64
container_name: plm-ilshin
container_name: momo-erp
ports:
- "7777:8080"
env_file:
- .env
environment:
- CATALINA_OPTS=-DDB_URL=jdbc:postgresql://211.115.91.141:11140/fito -DDB_USERNAME=postgres -DDB_PASSWORD=intops0909!! -Xms512m -Xmx1024m
- CATALINA_OPTS=-DDB_URL=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME} -DDB_USERNAME=${DB_USERNAME} -DDB_PASSWORD=${DB_PASSWORD} -Xms512m -Xmx1024m
- TZ=Asia/Seoul
- APP_ENV=development
- LOG_LEVEL=INFO
- DB_HOST=211.115.91.141
- DB_PORT=11140
- DB_NAME=fito
- DB_USERNAME=postgres
- DB_PASSWORD=intops0909!!
volumes:
- plm-win-project:/data_storage
- plm-win-app:/app_data
- momo-erp-project:/data_storage
- momo-erp-app:/app_data
- ./logs:/usr/local/tomcat/logs
- ./WebContent:/usr/local/tomcat/webapps/ROOT
restart: unless-stopped
networks:
- plm-network
- momo-erp-network
volumes:
plm-win-project:
momo-erp-project:
driver: local
plm-win-app:
momo-erp-app:
driver: local
networks:
plm-network:
driver: bridge
momo-erp-network:
driver: bridge
+4 -4
View File
@@ -1,12 +1,12 @@
package com.pms.common.utils;
public class Constants {
public static final String SYSTEM_NAME = "PMS";
public static final String SYSTEM_TITLE = "FITO PLM";
public static final String SYSTEM_NAME = "MOMO";
public static final String SYSTEM_TITLE = "유통관리 ERP";
// Company Name
public static final String COMPANY_NAME = "(주)피토";
public static final String COMPANY_NAME_ENG = "fito";
public static final String COMPANY_NAME = "모모유통";
public static final String COMPANY_NAME_ENG = "momo";
public static final String COMPANY_OBJID = "1786508140";
public static final String SUPER_ADMIN = "plm_admin";