Files
gtsit/docs/implementation-todo.md
2026-08-10 21:19:10 +09:00

12 KiB
Raw Blame History

구현 TODO

최종 수정일: 2026-08-10

완료한 작업은 체크하고, 설정값이나 URL이 바뀌면 관련 문서도 함께 갱신합니다.

0. 사전 조사

  • [Codex] 프로젝트 문서 상시 동기화 규칙을 AGENTS.md에 추가
  • [Codex] 로컬 저장소 및 작업 대상 확인
  • [Codex] design/ 페이지 구성과 반복 구조 검토
  • [Codex] 공개 화면과 관리자 화면의 모바일 문제 확인
  • [Codex] 브라우저 저장소 및 클라이언트 인증 문제 확인
  • [Codex] Cafe24 호스팅 상품, PHP, MariaDB, 보안 설정 확인
  • [Codex] 도메인 이전 상태, 네임서버 위임, DNS 장애 상태 확인
  • [사용자] 연결할 도메인을 gtsit.co.kr로 최종 확인

1. 임시 페이지 배포

  • [Codex] 외부 리소스 없는 public/index.html 제작
  • [Codex] 데스크톱 화면 확인
  • [Codex] 390px 모바일 화면 및 가로 넘침 확인
  • [Codex] 로컬 검증 서버 종료
  • [사용자] Cafe24 SSH 인증키 다운로드
  • [Codex] 인증키를 .secrets/로 이동, 파일 권한 제한, Git 제외
  • [사용자] Cafe24 FTP/Shell 접속설정에서 SSH key 로그인 재적용
  • [사용자] 인증키 재발급 없이 현재 등록된 SSH 인증키 다시 다운로드
  • [Codex] 새 키 지문 확인, 권한 제한, .secrets/ 보관
  • [Codex] SSH/SFTP 접속 및 실제 웹 루트 확인
  • [Codex] 서버 기존 파일 목록 확인
  • [Codex] 기존 Cafe24 안내 파일 백업
  • [Codex] 임시 페이지 업로드
  • [Codex] gts0201.mycafe24.com HTTPS 200 및 파일 일치 확인
  • [Codex] 실제 브라우저에서 임시 페이지와 가로 넘침 확인
  • [Codex] 임시 페이지 상단 로고와 하단 저작권을 (주)지티에스정보통신으로 변경 및 재배포
  • [사용자] 다운로드 폴더의 인증키 복사본 정리 여부 결정

진행 메모: 2026-08-04 새로 다운로드한 키의 지문이 기존 키와 다른 것을 확인했고 새 키로 SSH 접속에 성공했습니다. 실제 홈은 /home/hosting_users/gts0201, 웹 루트는 www입니다. 기존 hosting_index.htmlhosting_index.html.backup-20260804로 보존했고, public/index.htmlwww/index.html로 배포했습니다. 기본 도메인 HTTPS 200, 로컬·운영 파일 SHA-256 일치, 브라우저 렌더링 및 1280px 가로 넘침 없음까지 확인했습니다.

2. 사용자 도메인 연결

  • [공동] Cafe24의 연결 대상 호스팅 gts0201과 도메인 gtsit.co.kr 재확인
  • [Codex] 사용자 승인 후 호스팅에 도메인 연결
  • [Codex] 루트 도메인 A 레코드 112.175.85.162 응답 확인
  • [Codex] www가 루트 도메인을 거쳐 같은 서버로 연결되는지 확인
  • [Codex] 로컬 및 Google Public DNS에서 기존 SERVFAIL 해소 확인
  • [Codex] Cloudflare DNS를 포함한 전체 전파 완료 확인
  • [공동] 대표 주소를 https://gtsit.co.kr로 결정
  • [Codex] Cafe24 대표 도메인을 gtsit.co.kr로 변경
  • [Codex] HTTP 및 www를 대표 HTTPS 주소로 영구 리디렉션
  • [Codex] 기본 Cafe24 도메인의 운영 노출 정책 결정 및 적용

진행 메모: 2026-08-04 Cafe24 대표 도메인을 gtsit.co.kr로 변경했습니다. 변경 직후 외부 요청에서 http://gtsit.co.krhttps://www.gtsit.co.krhttps://gtsit.co.kr로 301 응답하고, 대표 HTTPS 주소는 200 응답하는 것을 재확인했습니다. Cafe24 자가진단은 같은 시각 서버 연결 및 SSL 오류를 표시했지만 실제 공개 접속과 TLS 검증은 정상이라 진단 표시 불일치로 기록합니다.

3. HTTPS 설정

  • [Codex] 도메인 DNS 전체 전파 확인
  • [Codex] 도메인 연결 직후 HTTP 응답 및 배포 파일 일치 확인
  • [Codex] Cafe24 SSL Basic 신청 가능 상태와 비용 확인
  • [사용자] SSL 발급 및 설치 완료
  • [Codex] 루트 및 www 인증서 적용 확인
  • [Codex] HTTP에서 HTTPS로 301 리디렉션
  • [Codex] www에서 루트 HTTPS 주소로 301 리디렉션
  • [Codex] 혼합 콘텐츠와 인증서 체인 QA

진행 메모: 2026-08-04 Lets Encrypt 인증서가 루트와 www에 적용됐습니다. 인증서 유효기간은 2026-08-04~2026-11-02이며, HTTP와 wwwhttps://gtsit.co.kr로 301 리디렉션됩니다.

4. MariaDB 설정

  • [Codex] DB 주소 localhost, 계정 gts0201, 포트 3306, MariaDB 10.6.5 확인

  • [Codex] PHP 8.4의 PDO MySQL 및 mysqli 확장 사용 가능 여부 확인

  • [Codex] PHP 기본 문자셋 UTF-8 및 시간대 Asia/Seoul 확인

  • [사용자] 기존 DB 비밀번호를 로컬 비밀 설정에 입력

  • [사용자] DB 비밀번호를 .secrets/db.env에 직접 저장

  • [Codex] DB 접속 설정을 서버 웹 루트 밖에 배치하고 권한 600 적용

  • [Codex] DB 비밀번호와 설정 파일의 Git 제외 확인

  • [Codex] 비밀번호 인증 연결 테스트 및 임시 진단 파일 제거

  • [Codex] 빈 DB 기본값을 utf8mb4utf8mb4_unicode_ci로 변경

  • [Codex] database/schema.sql 초안 작성

  • [Codex] 관리자, 게시글, 이미지, 문의, 사이트 설정 테이블 생성

  • [Codex] 초기 관리자 계정의 안전한 생성 절차 마련

  • [사용자] 초기 관리자 아이디 gts0201 확정

  • [사용자] 1회용 등록 URL에서 관리자 비밀번호 직접 설정

  • [Codex] 백업 및 복구 절차 검증

진행 메모: 2026-08-04 웹 진단으로 PHP 8.4.21p1, PDO 드라이버 mysql, mysqli, mbstring, openssl, fileinfo, 업로드 100MB, 메모리 256MB를 확인했습니다. MariaDB 10.6.17 비밀번호 인증에 성공했고, 테이블 0개인 빈 DB의 기본값을 utf8mb4utf8mb4_unicode_ci로 변경했습니다. 서버 접속 설정은 웹 루트 밖의 .gtsit-db.env에 권한 600으로 저장했으며 모든 임시 웹 파일은 삭제했습니다.

관리자 등록 메모: 초기 아이디는 gts0201입니다. 비밀번호는 채팅이나 저장소에 남기지 않고 24시간 유효한 1회용 URL에서 사용자가 직접 입력합니다. 계정 생성 후 서버의 등록 토큰 파일은 자동 삭제됩니다.

5. 디자인 구현 전 확정

  • [Codex] 공개·관리자 전체 디자인 구조 검토
  • [Codex] 접수번호와 비밀번호를 사용한 웹 답변 조회 흐름 구현
  • [사용자] 회사 정보와 대외 표시 실적 수치 최종 확인
  • [사용자] 대표 이메일 gts0201@naver.com 확인
  • [사용자] 주소 서울시 송파구 정의로7길 13, B동 오피스 1020호 확인
  • [사용자] 공개·관리자 전체 회사명을 (주)지티에스정보통신으로 통일
  • [Codex] GTS 글자 기반 워드마크 로고 이미지 생성 및 공개·관리자·임시 페이지 적용
  • [Codex] HTML 템플릿의 네트워크 시공 이미지를 최적화해 메인 비주얼에 적용
  • [Codex] 기존 사이트 백업의 실제 시공 이미지 4장으로 메인 자동 슬라이드 구현
  • [Codex] 기존 사이트의 LAN·무선·키폰·CCTV 글을 재구성한 공개 게시글 5건 등록
  • [사용자] 푸터 전화번호 연결 제거 및 플로팅 전화상담 아이콘 적용
  • [Codex] 네이버 지도 API 연동 방식 및 공식 등록 요건 확인
  • [사용자] NAVER Cloud Maps Application 생성, Dynamic Map 선택, 웹 URL http://gtsit.co.kr 등록
  • [사용자] Maps Client ID 전달·등록, Client Secret은 전달하지 않음
  • [Codex] 오시는 길 지도·회사 마커·네이버 지도 열기 fallback 구현
  • [Codex] 지도 SDK 요소 높이 안정화 및 사용자 정의 전체화면 컨트롤 적용
  • [사용자] 기존 사이트 백업의 실제 시공 이미지 원본 전달
  • [사용자] 최신 시공 이미지 추가 전달
  • [Codex] 관리자 인증·세션·접근 통제 방식 확정
  • [Codex] 모바일 헤더와 관리자 모바일 목록 구조 설계
  • [Codex] 2026 개인정보보호위원회 작성지침 기반 개인정보 수집·이용 고지 및 개인정보처리방침 확정
  • [Codex] 공통 PHP 템플릿과 MariaDB 기반 구현 구조 확정

6. 공통 마크업 및 기반 구축

  • [Codex] 디자인 토큰과 공통 CSS 정리
  • [Codex] 공통 헤더, 내비게이션, 푸터 템플릿화
  • [Codex] 모바일 공개 헤더 구조 구현
  • [Codex] 관리자 목록 모바일 카드 구조 구현
  • [Codex] 공통 버튼, 입력 필드, 표, 상태 UI 정리
  • [Codex] 접근 가능한 포커스, 오류, 빈 상태 정의
  • [Codex] PHP 라우팅 및 오류 페이지 구성

7. 공개 페이지 구현

  • [Codex] 홈 구현
  • [Codex] 게시글 목록 및 페이지네이션 구현
  • [Codex] 게시글 상세 동적 템플릿 구현
  • [Codex] 주제별 공개 게시글과 대표 이미지 데이터 반영
  • [Codex] 대표 이미지 없는 게시글의 브랜드형 임시 썸네일 적용
  • [Codex] 메인 서비스 카드의 네트워크·키폰·CCTV·유지보수 고정 아이콘 구현
  • [Codex] 메인 서비스 카드 아이콘 테스트 경로 배포 및 시각 QA
  • [Codex] 문의 작성 및 서버 검증 구현
  • [Codex] 문의 이메일 도메인 선택·직접입력 전환 적용
  • [Codex] 단일 연락처 필드의 휴대전화·지역번호·대표번호 자동 형식 적용
  • [Codex] 문의 입력 안내 제거·placeholder 대비·드롭다운 꺾쇠 여백 조정
  • [Codex] 문의 조회 및 본인 확인 구현
  • [Codex] 숫자 4자리 조회 PIN과 접수번호별 5회 실패·15분 잠금 적용
  • [Codex] 개인정보 수집·이용 요약 고지와 최종 개인정보처리방침 적용
  • [Codex] 공개 페이지 반응형 QA

8. 관리자 구현

  • [Codex] 서버 세션 기반 관리자 로그인 구현
  • [Codex] 클라이언트 코드의 기존 관리자 인증값 제거
  • [Codex] 대시보드 구현
  • [Codex] 게시글 목록, 작성, 수정, 소프트 삭제 구현
  • [Codex] 이미지 업로드 검증 구현
  • [Codex] 문의 목록, 상세, 처리 상태 및 공개 답변 구현
  • [Codex] 회사 및 사이트 설정 구현
  • [Codex] CSRF, 세션 만료, 로그인 시도 제한, 권한 검증 적용

9. 운영 설정 및 출시

  • [Codex] 운영 루트를 유지한 채 /site-preview-7c2a91f4 테스트 라우팅 배포
  • [Codex] 테스트 경로 검색엔진 차단 및 세션 쿠키 경로 격리
  • [Codex] 만료 문의 파기 명령의 정기 실행 일정 등록
  • [공동] ModSecurity와 실제 기능 호환성 QA
  • [공동] PHP 안티웹쉘 활성화 여부 결정 및 QA
  • [Codex] 업로드 디렉터리 PHP 실행 차단 설정 작성
  • [사용자] 하드 용량 및 트래픽 알림 수신처 결정
  • [공동] 용량 및 트래픽 알림 활성화
  • [공동] 검색 봇 차단 정책과 공개 시점 결정
  • [사용자] 대표 메일 서비스 결정
  • [공동] Cafe24 백업 외 별도 외부 백업 위치 결정
  • [Codex] 운영 QA 전체 실행
  • [공동] 임시 페이지를 본 사이트로 전환
  • [Codex] 출시 후 DNS, HTTPS, 오류 로그, 문의 흐름 재확인

진행 메모: 2026-08-04 기존 임시 안내 페이지는 https://gtsit.co.kr/에 유지하고 본 사이트 테스트 빌드를 https://gtsit.co.kr/site-preview-7c2a91f4/에 배포했습니다. 테스트 경로는 X-Robots-Tag와 HTML robots 메타로 색인을 차단하며, 세션 쿠키 경로도 테스트 경로로 제한합니다.

지도 연동 메모: 2026-08-05 Client ID 0xuekem2qnncpKeyId로 등록했습니다. 고정된 회사 위치는 주소 변환 API를 매번 호출하지 않고 확인된 위·경도로 표시하며, Dynamic Map만으로 회사 마커를 렌더링합니다. 지도 SDK 로드·인증 실패 시에도 주소와 네이버 지도 검색 링크를 유지합니다.