Commit Graph

12 Commits

Author SHA1 Message Date
infraurp
10cb87ff42 재배포 트리거: 나눔고딕 글꼴 적용 WAR 전개
앞선 배포(task 14)가 WAR 검증 단계에서 실패했다.
서버의 arko.war 는 로컬과 size/md5 동일함을 확인했고(203413124,
b85bc6c25e3cb245c1718e68123e4b33), 동일 검증 명령을 서버에서 재실행하면
정상 통과한다. 러너 컨텍스트 일시 실패로 판단해 재전개만 트리거한다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 13:27:26 +09:00
infraurp
9684437374 관리자페이지 글꼴 나눔고딕 일괄 교체
Some checks failed
deploy-dev / deploy (push) Failing after 0s
개별 CSS에 맑은고딕/돋움/굴림/dotum/Tahoma/Arial 지정이 흩어져 있고,
나눔 @font-face 도 파일마다 4중(nanumttf/nanumeot/_r) 으로 중복 선언되어
화면마다 글꼴이 달라 보이던 것을 하나로 정리한다.

- css/site/mnt/nanumgothic.css 신규: "NanumGothic" 패밀리 단일 정의(400/700/800),
  local() 우선 + eot/woff/ttf fallback, 전역 적용 및 벤더 위젯 override
- head.jsp 에 마지막 스타일시트로 등록 → /mnt/include/head.do 를 가져가는
  관리자 화면 293개(egovframework.com.* 표준화면 포함)에 일괄 적용
- mnt CSS 11개 파일의 font-family 지정 39곳 교체, 레거시 @font-face 16줄 제거
- head.do 를 쓰지 않는 쪽지 팝업 4개는 개별 link 추가
- ckeditor/contents.css: "nanumttf_r" 이 @font-face 선언 없이 사용되어
  실제로는 적용되지 않던 상태를 정상화(관리자 21 / 프론트 26 화면 공용)
- NanumGothicBold.ttf 추가: 기존에 Regular/ExtraBold 만 있어
  font-weight:bold 가 ExtraBold 로 렌더링되던 것을 정상 Bold 로 교정

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 12:57:38 +09:00
URP2026
031f6b85e9 act_runner 폴링 정지 워치독 추가
All checks were successful
deploy-dev / deploy (push) Successful in 34s
러너가 작업 하나를 끝낸 뒤 폴링을 멈추는 문제가 있다. 프로세스는 살아 있고
Gitea로의 TCP 연결도 ESTABLISHED 인데 응답 없이 물려 있으며 CPU 사용량이 완전히
정지한다. nginx 경유 제거(직결 재등록)와 0.2.11->0.2.13 업그레이드로도 재현되어
근본 원인을 잡지 못했다.

arko-runner-watchdog.timer 가 1분마다 "90초 넘게 대기 중인 작업이 있는데
실행 중인 작업은 없는" 상태를 확인해 러너를 재기동한다. 실행 중인 작업이 있으면
건드리지 않으므로 배포 도중 끊길 위험은 없다.

검증: 대기 중이던 run 67을 워치독이 감지해 재기동했고 배포가 정상 완료됐다.
2026-07-29 18:45:25 +09:00
URP2026
afbdba5ba1 act_runner 0.2.11 -> 0.2.13 업그레이드 스크립트 추가
All checks were successful
deploy-dev / deploy (push) Successful in 28s
0.2.11은 기동 직후 대기 작업 하나를 처리한 뒤 폴링을 멈췄다.
프로세스는 살아 있는데 새 작업을 가져오지 않아 매번 재기동이 필요했고,
nginx 경유를 걷어내고 Gitea 직결로 바꾼 뒤에도 재현되어 러너 자체 문제로 판단했다.
2026-07-29 18:04:33 +09:00
URP2026
7d1182ecc3 배포 구조 문서화 및 runner 직결 재등록 스크립트 추가
All checks were successful
deploy-dev / deploy (push) Successful in 28s
runner를 nginx 경유(https://git.zioinfo.co.kr)로 등록하면 declare까지는 되는데
작업을 가져오지 않고 재기동해야만 처리하는 문제가 있었다. long-poll이 nginx의
proxy_buffering(기본 on)에 물리는 것으로 보인다. Gitea가 같은 서버에 있으므로
127.0.0.1:9003 직결로 재등록해 해결했고, 재발 시 쓰도록 스크립트로 남긴다.

deploy/README.md에 전체 구조(개발 WAS/DB 단일, 운영은 웹 티어 전용),
접속 방향이 양쪽으로 다른 이유(NAT), 키 제한 범위, 알려진 이슈를 정리했다.
2026-07-29 17:57:17 +09:00
URP2026
7376c99f17 운영 웹서버(csv.wise.ai.kr) 구축 및 개발→운영 자동 배포 연결
All checks were successful
deploy-dev / deploy (push) Successful in 36s
웹 티어(211.37.173.197 / Rocky 8):
- csv.wise.ai.kr nginx vhost + Let's Encrypt SSL
- WAS는 SSH 터널(arko-was-tunnel.service)로 연결 — 개발서버가 NAT 뒤라
  8088이 포워딩되지 않고 Tomcat도 127.0.0.1 바인딩이기 때문이다.
  키는 WAS에서 restrict,permitopen="127.0.0.1:8088" 로 묶어 셸 접근 불가.
- 정적 리소스는 운영 웹이 직접 서빙하고 없으면 @was 폴백 — 전환 중에도 깨지지 않는다.

파이프라인:
  git push -> 개발 WAS 배포 -> 개발 헬스체크 -> 운영 웹 정적 배포 -> 운영 검증
개발 헬스체크를 통과한 뒤에만 운영으로 넘어간다.
접속 방향은 개발->운영(개발서버는 NAT 뒤라 역방향 접속이 불가능하다).
2026-07-29 17:50:32 +09:00
URP2026
62ef19c78f Gitea 1.22 호환: 워크플로에서 workflow_dispatch 제거
All checks were successful
deploy-dev / deploy (push) Successful in 31s
Gitea 1.22.3은 workflow_dispatch(수동 실행)와 inputs 컨텍스트를 지원하지 않아
워크플로가 Actions 목록에 표시되지 않았다. 트리거를 push 하나로 단순화한다.
롤백은 서버에서 직접 수행하도록 README에 절차를 남긴다.

Tomcat 힙도 768m -> 448m로 낮춘다. 가용 메모리 1G 안팎인 서버에서
Tomcat 재기동 직후 서버 전체가 응답 불능이 된 사례가 두 번 있었다.
2026-07-29 17:03:55 +09:00
URP2026
7c574922d8 개발서버(csv.zioinfo.co.kr) 배포 구성 및 Gitea Actions 파이프라인 추가
- 00-server-setup.sh: JDK8(Temurin)·Tomcat9·systemd·nginx·act_runner 구축 (멱등)
- arko-dev-deploy.sh: WAR 검증→백업→ROOT 재전개→환경설정 주입→기동→헬스체크→실패 시 롤백
- build-and-upload.sh: 개발자 PC에서 JDK8 빌드 후 WAR 업로드 (서버 자원 보호)
- deploy-dev.yml: master push 시 자동 배포, 수동 재배포·롤백 지원

서버가 2코어/메모리 여유 1G에 40여 개 서비스가 동거하는 환경이라
Maven 빌드는 서버에서 돌리지 않고 개발자 PC에서 수행한다.
JSP가 리소스를 컨텍스트 경로 없이 하드코딩해 ROOT 전개만 가능하며,
globals-{dev,live}.properties는 .gitignore 대상이라 서버 config/에 두고 배포 시 주입한다.
2026-07-29 15:44:02 +09:00
infraurp
1288fc6396 다중 역할 계정의 좌측메뉴 조회 SQL 오류 수정 (SFR-001 후속)
권한 신청·승인 워크플로(N:신설=추가부여)로 사용자가 AUTHOR_CODE를 2개 이상
갖게 되면, 레거시 eGov 표준 메뉴 쿼리(selectMainMenuHead/Left/LastMenuNo(Cnt))의
"= (서브쿼리)"가 다중 행을 반환해 Subquery returns more than 1 row로 500 오류가
발생했다(2FA/OTP 등록 직후 /mnt/main.do 진입 시 재현). 서브쿼리를 IN으로,
상위 SELECT에 DISTINCT를 추가해 다중 역할을 지원하도록 수정.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-28 11:14:30 +09:00
infraurp
462e55bcd5 권한 신청·승인 워크플로 화면 및 2단계인증 UX 개선 (SFR-001)
관리자 메뉴에 권한 신청·승인 화면(#46)을 노출하고 신청/승인 처리 로직을 보강했으며,
2단계 인증(OTP) 등록·인증 화면의 사용성을 개선했다.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 14:52:16 +09:00
infraurp
2a2ab99d10 개인정보보호 기능개선 사업 구현 (SFR-001~004, 권한관리·인증체계·접속기록)
권한관리(SFR-001):
- getAuthorities() 구현(EgovUserAuthorityDAO), AuthorityInterceptor 역할별 URL 접근제어
  (COMTNMENUCREATDTLS×COMTNMENUINFO×COMTNPROGRMLIST 메뉴권한 기반, 캐시/TTL, ROLE_ADMIN 바이패스)
- 권한 신청·승인 워크플로 + AUTHOR_CHANGE_HISTORY 이력(3년 보관), 조회·다운로드
계정관리(SFR-002): 계정관리정책, 장기미사용(휴면) 확장(취급자 포함)·사전알림, 계정잠금 5회
인증체계(SFR-003): 로그인 통합 2단계 인증(SecondFactorInterceptor+SecondFactorController),
  OTP QR 등록(ZXing)·비밀키 DB 영속(OTP_DEVICE, AES-GCM), 세션재발급(고정공격 방지), 자동로그아웃 30분
접속기록(SFR-004): PERSONAL_DATA_ACCESS_LOG(월파티션), PersonalDataLogAspect 한정수집,
  SHA-256 해시체인 무결성, 업무유형매핑, IP 취득보정, 비정상접근 탐지, 정기점검 리포트
DB: privacy DDL 11종 + 설치용 통합 SQL(privacy.install_mysql.sql, DDL+시드 DML)
빌드복구: pom.xml 시스템 jar/JAXB 선언, iBatis2 SQL주석 '#'→'No.' 정정

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 18:03:02 +09:00
ythong
fde7598b48 Initial commit - ARKO (대용량 미디어 파일 제외)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 14:24:16 +09:00