배경

공개노트/개발/모듈/LMC 관리자 웹이 구조(역할·기술스택·인증·화면 목록·관리자 계정)를 다루는 데 비해, 이 페이지는 화면별로 실제 무엇이 저장되고 무엇이 안 되는지를 다룸. 근거는 raw/코드분석/LMC-2.md(커밋 73876693, 2026-09-16 기준 코드 분석)임. 결과 코드·화면 문구 원문은 공개노트/개발/모듈/LMC 결과 코드와 안내 문구.

운영팀용 대응 절차는 매뉴얼 쪽에 있음 — 기본매뉴얼/관리사무소/입주민 승인 처리는 어떻게 하나요, 기본매뉴얼/관리사무소/관리비 등록이 안 돼요, 기본매뉴얼/관리사무소/전자투표 항목이 삭제 수정이 안 돼요, 기본매뉴얼/관리사무소/공지사항에 PDF 첨부가 안 돼요.

모든 화면에 공통으로 걸리는 것

아래 7가지를 먼저 알아야 개별 화면 설명이 이해됨.

1. “시스템 오류입니다” 팝업의 정체

  • 모든 컨트롤러 호출을 AOP SQIFrameworkAspect가 감싸지만 SFWException만 잡음(aop/SQIFrameworkAspect.java:81)
  • NullPointerException · NumberFormatException · MyBatis BindingException 같은 런타임 예외는 그대로 빠져나가 HTTP 500이 됨
  • 프론트는 HTTP 오류를 받으면 '시스템 오류입니다.</br>시스템 관리자에게 문의하십시오.' 를 띄움(libs/axios.js:48-53)
  • 분류 기준 — “시스템 오류입니다”를 봤으면 서버 미처리 예외(= 코드 결함), SQIxxxx 문구를 봤으면 정상 예외 처리 경로임
  • 로그 키워드: [SMAH-Framework], Request URI =, SQIFrameworkException :, API[...] Excution Time :(Excution 오타 그대로라 grep 시 주의)

2. 프론트 응답코드 게이트

  • 프론트가 그냥 통과시키는 코드는 SQI0000 / SQI1007 / SQI0002 / SQI0014 / SQI3000 5개뿐임(constants/api-response-code.js:109-115)
  • 그 외 코드는 resMsg를 그대로 띄우는 알림창이 뜨고 프라미스가 거부됨(libs/axios.js:39-46). 거부되면 뒤에 있던 “저장 되었습니다.” 안내와 목록 재조회가 실행되지 않음
  • 그래서 DB에는 반영됐는데 화면만 실패로 보이는 경우가 실제로 있음(거점관리소 직원 계정 승인이 대표 사례)

3. null은 전부 빈 문자열로 내려감

  • config/json/CustomObjectMapper.java:11 + NullToEmptyStringSerializer.java:15 로 모든 null"" 로 직렬화됨
  • 관리비 목록의 등록 여부 판정(ym0 === '')이 여기에 의존함. Jackson 설정을 건드리면 여러 화면이 조용히 어긋남

4. 공통 검색 필터 — 건설/매입이 갈리는 지점

  • 조각 Common.commonTableJoin(mapper-rdb/apicomn/Common_Mapper.xml:5-67)
    • INNER JOIN tb_smah_sbd_d 때문에 스마트홈 단지 마스터에 없는 단지는 목록에서 통째로 사라짐. “단지가 안 보인다” 문의의 1순위 원인임
    • mntnLsTpCd='02'(매입임대) → tb_pch_ls_sbd_dtb_sgg_mtb_fo_mgof_mtb_grp_m 경로, 그 외(건설임대) → tb_grp_sbd_rtb_grp_m 경로
    • 두 분기 모두 grp_ds_cd='ARA'(지역본부) 고정임. 주택관리공단·지자체 같은 다른 그룹구분은 화면에 안 잡힘
  • 조각 Common.smahAplFilter(Common_Mapper.xml:98-113) — 대시보드·보고서 전용
    • 매입임대는 필터 없음. 건설임대는 cmn.tb_hnsvr_mhnet_lnkg_ss_cd NOT IN ('DC','SU') AND del_yn='N' 인 홈넷서버가 있어야 집계에 들어감
    • 대시보드 숫자와 목록 화면 숫자가 안 맞는 대표 원인임
  • 조각 Common.joinGrpSbd(:69-96) — 원패스·승강기 전용. grpSn != 0 and grpSn != 11 하드코딩
  • 건설/매입 구분은 mntnLsTpCd(01/02)임. reportYn은 건설/매입과 무관한 보고서 모드 플래그임(아래 보고서 절 참고) → 공개노트/개발/경영평가 성과지표

5. 페이징

  • 서버 기본값 pageSize=15, pageNum=1(comn/dto/PaginationDto.java:12-14). 목록 화면 대부분은 10을 보냄
  • 총건수는 첫 행의 count(1) over() 값임. 첫 행이 없으면 총건수도 0으로 보임

6. 필수값 검사

  • utils/NecessaryFieldCheckUtil.java:20-44; 로 구분한 필드가 비었는지만 확인함. 누락 시 SQI8000 + 누락 필드명
  • 필수값 상수는 comn/constants/ApiResidentsNoticeNecessaryFieldConstants.java 한 파일에 전부 모여 있음(이름과 달리 공지 전용이 아님)

7. 트랜잭션

  • AOP로 kr.or.lh.smah..*Service.* 에 일괄 적용됨(aop/TransationAspect.java:49)
  • 다만 *ServiceImpl 이름을 쓰는 클래스 일부는 포인트컷에 잡히지 않아 아래에서 “트랜잭션 없음”이라 적은 구간은 실제로 부분 저장이 관찰될 수 있음

아파트 관리 (/apt-mng)

입주민 공지사항

  • 하는 일 — 입주민에게 보낼 공지를 등록·수정·삭제하고 알림 일시를 지정함. 첨부 1개 가능. 매입임대는 시군구 단위 또는 여러 단지 일괄 등록 가능
  • 화면 /apt-mng/rsd-nc/RsdNcList · RsdNcDtl · RsdNcAdd · RsdNcUpd · RsdNcPreview
  • API — 목록·상세만 GET /api/v1/cert/findResidentsNoticeList · findResidentsNoticeDetailInfo(CertController.java:573,607)이고, 등록·수정·삭제·엑셀은 /api/v1/apart/...(ResidentsNoticeController.java:52,84,117,150)임
    • 목록·상세는 인증 헤더 없는 axiosIns로 호출됨(api/cmn/cmnApi.js:107,121). api/apt-mng/rsdNcApi.js:5,16/apart/findResidentsNoticeList는 백엔드에 없는 죽은 정의임
  • 핵심 규칙
    • 알림 일시가 과거면 “알림 등록 일시는 현재 시간 이후여야 합니다.” 로 막음(RsdNcAdd.vue:294)
    • 역할이 FO_로 시작(매입임대 거점관리소)하면 대상기기코드를 "APP" 로 하드코딩하고 공지 범위(sgg/sbd)에 따라 sggId 또는 sbdIdList를 실음(RsdNcAdd.vue:317-328)
    • 첨부 저장 파일명은 현재시각밀리초_나노초_원본파일명 임(ResidentsNoticeService.java:131). sbdIdList가 있으면 단지 수만큼 반복 저장함(:155-165)
    • 삭제는 요청 건수와 조회 건수가 다르면 SQI0005 임(:260-267)
    • 수정해도 작성자명(anncRgprNm)은 원본 유지임(:213)
    • 공지 유형 GNRL(일반)은 화면에서 제외됨. 주석 “시스템관리자가 시스템관리자WEB에서 입주자에게 등록”(useRsdNc.js:41-43)
    • 미리보기 라우트 RsdNcPreviewrequiresAuth가 없고 layout: full 임 → 로그인 없이 URL만 알면 열림공개노트/개발/공지사항 미리보기
  • 알림 일시 이후 수정·삭제 차단이 전부 주석 처리돼 있음useRsdNc.js:30-33,49-53,74-78, RsdNcAdd.vue:298-306, RsdNcUpd.vue:277-285 다섯 군데. TODO 주석 “관리소 불편 절차 재정의 필요”. 백엔드에도 같은 검증이 없어 앱에 이미 뿌려진 공지도 수정·삭제됨
  • 권한 — 화면은 본인 글이 아니면 수정·삭제 버튼을 감추지만(useRsdNc.js:19-36), 백엔드는 rgprId를 전혀 검사하지 않음 → API 직접 호출로 남의 공지 수정·삭제 가능
  • 푸시는 LMC가 쏘지 않음ResidentsNoticeService.java:48-51에 APW 이벤트 클래스 import만 있고 호출부가 없음. RGS_NC_DTTM(알림 일시)만 저장하고 실제 발송은 다른 시스템이 함 → 공개노트/개발/push 알림
  • 엑셀 다운로드는 사실상 사용 불가 — 화면에 버튼 없음, excelYn 분기 미구현으로 페이징이 걸려 15건만 나옴, findResidentsNoticeListForExcel매퍼 XML에 SQL이 없어 호출하면 BindingException임. “홈넷단지명” 칼럼은 DTO 필드명이 hnetsbdNm/hnetSbdNm 로 갈려 항상 빈값임
  • 테이블cmn.tb_rsd_annc_fcts_l(본문, JPA), cmn.tb_ahfl_m(첨부)
  • 로그 키워드입주민 공지사항 목록 조회중 오류 발생, 입주민 공지사항 등록 중 오류 발생, SQL 주석 /* ResidentsNoticeMapper.* */

관리비 등록 (엑셀 업로드)

  • 화면 /apt-mng/mngexp/MngexpEdt(등록) · MngexpList(현황) · MngexpDtl(세대별 상세). API MngExpController.java:55,87,119,146,175,193
  • 엑셀 파싱은 100% 브라우저에서 함. 백엔드 POI 파싱 코드(MngExpServiceImpl.java:57-99)는 엔드포인트가 없는 죽은 코드임. 파싱 규칙 상세는 공개노트/개발/관리비 등록 엑셀 파싱
  • 핵심 규칙
    • 확장자는 .xlsx/.xls 만 허용하고 endsWith() 로 판정함
    • 양식 업로드: 첫 시트, 열 A~AK, 2행부터. 청구년월 검증을 아예 건너뜀(clmYm:'skip')
    • XpERP 업로드: 첫 시트, 열 B~BT, 0행부터. 청구년월은 rows[0][3]에서 정규식 /(\d{4})년\s*(\d{2})\s*월분/ 으로 뽑음
    • 필수값은 동·호 둘뿐임. 숫자 검증이 Number.isNaN(value)문자열은 그대로 통과함(사실상 무력)
    • 단지에 없는 동·호는 스킵 셀(파랑)로 빠짐
    • 합계 행은 동합계 전체합계 소계 합계 문자열로 제외함
  • 응답이 항상 성공으로 나감 — 컨트롤러가 성공·실패 분기 없이 무조건 SQI0014 와 “{n}건의 데이터가 업데이트 되었습니다.” 를 돌려줌(MngExpController.java:132). SQI0014는 프론트 통과 코드라 0건이어도 “저장 되었습니다.”가 뜸
  • DB 저장MngExp_Mapper.xml:132-238. 한 덩어리 VALUESUPDATE ... RETURNING 후 남은 행만 INSERT 함. 추가항목은 JSONB 컬럼임
    • 재업로드 시 UPDR_ID가 NULL로 들어감 — 매퍼는 #{updrId}를 쓰는데 화면이 보내지 않음(MngExp_Mapper.xml:224 vs MngexpEdt.vue:557-561)
    • 행 수 제한이 없음. 프론트 axios 타임아웃도 주석 처리돼 무제한임
  • 추가항목(단지별)smah.TB_HSH_MNGEXP_EXT_ITM. 단지 전체 삭제 후 재삽입이고 트랜잭션이 없음(MngExpServiceImpl.java:148-166) → 삽입이 실패하면 추가항목이 전부 사라짐. 단위 옵션은 ['', '원', 'kWh', '㎥'] 하드코딩임
  • 공용관리비차감기타관리비차감이 같은 컬럼 cmusMngexpSbamt에 매핑돼 있음(useMngexp.js:33-34). 둘 다 있으면 뒤 값이 앞 값을 덮어씀
  • 관리비 삭제 기능은 화면에 없음. API(deleteMngExp)는 있으나 호출부가 없어 재업로드로 덮어쓰는 방법뿐임
  • 현황·상세 — 최근 6개월 등록 여부를 6개 CTE로 뽑고, 등록 여부는 화면에서 ym0 === '' 로 판정함(공통 3번에 의존). 상세는 cmn.TB_HSH_MDEL_YN='N' 세대만 봄(커밋 5aba72e6)
  • 로그 키워드관리비 등록 중 오류 발생. 상세조회 오류 로그 문구가 “전자투표 목록 상세조회중 오류 발생”으로 잘못 적혀 있음(MngExpServiceImpl.java:50) → 로그 검색 시 혼선 주의

임대료 등록 (엑셀 업로드)

  • 하는 일 — LH 임대료 시스템(와이즈) 엑셀을 그대로 올려 세대별 임대료·부가세·연체료·납부방법을 등록하고 미납분을 별도 테이블에 적재함
  • 화면 /apt-mng/rfe/RfeEdt. API RentalController.java:46,78,110,141
  • 핵심 규칙 — 파싱
    • 엑셀을 올리면 시트 목록이 나오고 그중 하나를 고름. 고른 시트를 range: 4(5행부터)로 읽음
    • 열 위치를 절대 고정으로 매핑함 — A 순번, B 단지명, C 동, D 호, E 전용면적, I 조정년월, P 임대료, Q 부가세, R 연체료, AF 납부방법(RfeEdt.vue:260-277)
    • 확장자 검사가 includes('xlsx')"xlsx_백업.pdf" 같은 파일명도 통과함(관리비는 endsWith)
    • 문자 칸은 ^[ㄱ-ㅎ|가-힣|a-z|A-Z|0-9|]+$ 만 허용 → 공백·괄호·하이픈이 들어가면 오류로 잡힘
    • 연체료 셀이 표시된 행이 미납 행이고, 오류·스킵·미납 판정은 렌더링된 표의 CSS 클래스를 querySelectorAll로 훑어서 함(DOM 의존)
  • 저장
    • 컨트롤러 필수값이 rgprId;rentalExcelUploadDtoList 둘뿐임clmYm·sbdId가 빠져 있음
    • ON CONFLICT (clm_ym, sbd_id, hsh_id) DO UPDATE 구조라 엑셀의 동·호가 세대 마스터에 없으면 조인에서 조용히 빠짐
    • 서비스가 결과값을 무조건 1로 세팅함(RentalServiceImpl.java:103) → 0건이어도 SQI0000 성공
    • 트랜잭션이 없음 → 기본 데이터는 들어가고 미납만 실패하는 반쪽 저장 가능
  • 양식 다운로드는 없앰 — 주석 “와이즈 시스템에서 다운로드 그대로 업로드 하는 방식으로 변경”(RfeEdt.vue:370-377). .envVUE_APP_RFE_FORM_FILE_SEQ는 남아 있으나 쓰이지 않음. 관리비와 운영 절차가 다른 지점임
  • 테이블smah.TB_HSH_RFE_M, smah.TB_HSH_RFE_NPY_L(미납, 쓰기만 있고 조회·삭제 SQL이 없음 → 임대료를 지워도 미납이 남음), cmn.TB_HSH_M
  • 그 밖 — 미납년월 생성이 replace('-','') 라 첫 하이픈만 지움. 목록은 등록률(%)을 주는데 중복 세대ID가 있으면 100%를 넘음. 삭제 SQL 주석이 /* MngExpMapper.deleteRental */ 로 잘못 적혀 있음(Rental_Mapper.xml:255)
  • 로그 키워드임대료 기본 데이터 등록 시작 - 건수:, 임대료 등록 완료 - 성공, 임대료 등록 중 오류 발생 :

전자투표

  • 화면 /apt-mng/ervt/ErvtList · ErvtAdd · ErvtUpd · ErvtXpn(현황) · ErvtRsl(결과). API ElecVoteController.java:46,75,107,142,177,214
  • 핵심 규칙 checkElecVoteStatus()(ElecVoteServiceImpl.java:185-208)
    1. 알림일시 ≤ 시작일시 ≤ 종료일시
    2. 시작일시가 현재보다 미래
    3. 위반 시 SQI0015&전자투표
    4. 수정·삭제·항목삭제는 DB 상태가 PRE(투표전) 일 때만 됨. 아니면 SQI0013&전자투표
  • 등록·수정
    • 시퀀스 smah.tb_elc_vt_m_elc_vt_sn_seq로 번호를 먼저 받고 기본 1건 + 항목 N건을 저장함. 항목 번호는 1부터 다시 매김
    • 상태는 'PRE' 로 하드코딩해 넣음. 이 저장소 어디에도 VT_SS_CD를 UPDATE 하는 SQL이 없음PRE → ING → CMP 전이는 외부 시스템 소관임
    • 수정은 기존 항목을 전부 지우고 다시 넣음. 설명(VT_DESC)은 값이 있을 때만 UPDATE 해서 빈 값으로 지울 수 없음(ElecVote_Mapper.xml:247-249)
    • 투표 유형 값이 Y/N이 아니라 '1'(단일 선택) / '2'(다중 선택) 임(컬럼명은 VTR_MLTP_CHC_YN)
  • 상세·차트 — 진행 차트는 항상 조회하고 상태가 CMP일 때만 결과 차트를 붙임. 투표중에는 결과를 볼 수 없음
  • 확인된 결함 2건 — 아래 “알려진 이슈” 2·3번
  • 그 밖
    • 동 선택 투표의 차트가 비는 이유: 차트 SQL이 DNG_DS = #{bldId}동 구분값과 건물ID를 직접 비교함(ElecVote_Mapper.xml:83,104,153)
    • 삭제해도 진행·결과 테이블 데이터는 남음(기본·항목만 지움)
    • 등록 확인 문구가 “{일시} 알림 이후 에는 수정/삭제가 불가 합니다.” 인데 실제 규칙은 “상태가 PRE가 아니면 불가 + 시작일시가 과거면 불가”
    • 항목 개수 상·하한이 없음(0개면 SQI8000)
  • 테이블smah.TB_ELC_VT_M / _ITM_L(쓰기), _PGRS_L / _RSL_L(읽기), cmn.TB_HSH_M

DR(수요반응) 발령 현황

  • 조회 전용임. LMC에 등록·수정·삭제 API가 없고 데이터는 외부 DR 시스템이 적재함
  • 화면 /apt-mng/dr-goo-xpn/DrGooXpnList · DrGooXpnDtl. API AutoDRController.java:48,78,110
  • 핵심 규칙
    • 목록은 발령 이력(smah.TB_DR_GOO_L)이 기준임 → 발령·제어 이력이 없는 단지는 목록에 아예 안 나옴
    • 제어 응답코드로 성공·실패를 하드코딩 분류함 — '2000' 성공 / '4004' 기타오류 / 그 외 실패(AutoDR_Mapper.xml:27-30)
    • DR 유형 '22' 국민DR / '31' LHDR / '32' 지자체협력DR, 기간 단위 'M' 월별 / 'Y' 연별
  • 확인된 결함 — “DR 참여 횟수” 컬럼이 항상 빔(화면은 prtcptnNot, DTO에는 ppdrPrtcptnNot/lhDrPrtcptnNot/lgcdrPrtcptnNot뿐), 상세 진입 시 sbdId 누락 팝업, 상세 표 페이징 불가
  • 운영 — 값이 이상하면 LMC가 아니라 DR을 발령·정산하는 쪽 데이터를 봐야 함. “같은 단지가 여러 줄”은 기간별 그룹핑 때문임
  • 테이블smah.TB_DR_CTCTR_M · TB_DR_GOO_L · TB_ATDR_CONT_L · TB_DR_EXA_L

거점관리소 직원 계정 관리

  • 하는 일 — 매입임대 거점관리소가 자기 관리소 직원(FO_HW) 계정을 승인·잠금·삭제함. LMC에서 관리자 계정 상태를 바꾸는 유일한 화면임
  • 화면 /apt-mng/fo-mgof-hw-mng/FoMgofHwMngList. API FoMgofController.java:31,53,79
  • 핵심 규칙
    • 목록 쿼리가 rol_id='FO_HW' + fo_mgof_id=#{foMgofId} 로 고정임(FoMgof_Mapper.xml:27-28)
    • 상태 변경 시 상태만 바꾸는 게 아니라 비밀번호 실패횟수를 0으로 되돌리고 만료일을 오늘+6개월로 다시 잡음(FoMgofServiceImpl.java:61-62). 잠금(LCK) 때도 같음
    • 삭제는 DELETE FROM cmn.tb_mngr_m 물리 삭제이고 복구 불가
    • 표는 여러 행을 고를 수 있게 돼 있지만 2건 이상 고르면 “계정을 선택해주세요.” 가 뜸(실제로는 단건만 처리)
    • “편집” 버튼은 아무 동작도 하지 않음(FoMgofHwMngList.vue:159-161 스텁)
    • 쿠키에 foMgofId가 없으면(건설임대·본사 관리자) 목록이 영구히 빈 화면이 되고 SQI0002만 돌아옴
  • 권한 구멍 — 컨트롤러·서비스에 대상 계정이 FO_HW인지, 내 소속인지 확인하는 코드가 전혀 없음. mngrId만 알면 다른 역할 계정도 상태 변경·물리 삭제가 가능함
  • 수정자 아이디(updrId)에 승인한 사람이 아니라 대상 계정의 아이디를 넣음(:65) → 누가 승인했는지 추적 불가
  • 확인된 결함 — 아래 “알려진 이슈” 4번
  • 테이블cmn.tb_mngr_m(조회·삭제, 상태 변경은 JPA CertEntity 경유), cmn.TB_MNGR_LGN_L

단지 관리 (/sbd-mng)

단지관리 6개 컨트롤러(Construct / HomenetServer / Household / Fns / Wallpad / Opas)가 모두 같은 베이스 경로 /api/v1/complex 를 나눠 씀 → 6개 기능의 권한이 함께 움직임(공개노트/개발/모듈/LMC 관리자 웹 인증·권한 절 참고).

건축 정보 관리

  • 화면 /sbd-mng/arc-inf/ArcInfList · ArcInfDtl · ArcInfUpd. API ConstructController.java:50,78,106,137,178
  • 상세 조회 시 mngrInfo JSON을 파싱해 관리자 전화번호를 ARIA 복호화함. 실패하면 -로 바꿔 내려줌(ConstructServiceImpl.java:107-126) → 전부 -로 보이면 ARIA 키 불일치임. 로그 키워드 연락처 복호화 실패
  • 수정 화면 일부 항목은 SYS_MNGR 역할에게만 보임
  • 엑셀은 화면에서 고른 헤더를 그대로 보내는 동적 헤더 방식이고 상한 10000건(SQI4010)임. 다만 다운로드가 responseType:'blob' 이라 초과 안내가 화면에 제대로 뜨지 않음
  • 이 화면에서 담당자 전화번호를 평문으로 보지만 개인정보 취급 이력은 남지 않음(아래 데이터 절 참고)
  • 수정 화면에서 승강기GW설치여부 칸에 승강기 호출제어 값을 담아 보내는 복붙 결함이 있음(ArcInfUpd.vue:509). 에너지플랫폼 연계여부 값은 아예 전송되지 않음
  • 로그인 관리자 범위 강제가 없음 — 클라이언트가 보낸 단지·지역본부 값을 그대로 씀

홈넷 서버 관리

  • 화면 /sbd-mng/hnsvr-mng/HnsvrList · HnsvrDtl · HnsvrAdd · HnsvrUpd. API HomenetServerController.java:46,74,105,136,168,200,232,266
  • 등록
    1. 스마트홈 단지인지 먼저 확인함. 아니면 SQI0018&스마트홈 단지의 홈넷서버
    2. 신규 등록일 때만 비밀키를 25자 랜덤 ASCII로 서버가 생성함(HomenetServerServiceImpl.java:110). 수정 시에는 기존 값을 복원해 유실을 막음
    3. 홈넷서버 ID는 {단지ID}-{순번} 자동 채번임. 순번 포맷이 3자리라 한 단지에 1000번 이상이면 어긋남. 동시 등록 경합을 막는 잠금도 없음
  • 연동 상태
    • “연동 시험 시작” → LNKG_XM_ST_YMD를 오늘로, HNET_LNKG_SS_CD'ON' 으로 바꿈
    • “홈넷 서버 연동 시작” → HNET_LNKG_ST_YMD(연동 시작 일자)만 기록하고 상태 코드는 건드리지 않음 → “눌렀는데 상태가 그대로”는 정상 동작임
    • LMC 어디에도 상태를 'DC'(연결해제)/'SU'(중지)로 바꾸는 코드가 없음. 읽기 필터로만 쓰임
    • 상태 전이 선행조건 검증이 전혀 없음. 연동 시험 없이 바로 “연동 시작”을 눌러도 막지 않고, 되돌리는 화면도 없음(DB 처리 필요)
    • 두 API 모두 목록을 반복 처리하며 마지막 건 결과만 응답에 반영됨. 트랜잭션도 없음
  • 정상/연동이상 판정 — 목록의 “최종 홈넷 서버 상태”는 smah.TB_HNSVR_BRF_L에 최근 보고가 있는지로 계산함. 구간이 DATE_TRUNC('hour', now) - 1시간 ~ now허용 창이 60~120분 사이에서 시각에 따라 흔들림. “연동이상으로 떴다 안 떴다 한다” 문의의 원인임 → 기본매뉴얼/운영/단지 연동 점검
  • TLS 인증서는 업로드가 아니라 서버가 만들어 줌기본매뉴얼/운영/홈넷 서버 연동 (인증서 발급)
    • 상세 화면 “TLS 인증서 다운로드” → /apicomn/fileDownload(taskDiv=TLS). 파일명 SQISOFT_TLS_인증서_{단지명}_{단지ID}.zip
    • 서버는 최신 인증서 만료일을 보고 오늘이 만료일 이전이 아니면 그 자리에서 재발급함(FileService.java:298-330). openssl 셸 명령 3개 + zip 1개를 순차 실행하고 키 4096bit, 유효기간 365일임
    • CA 파일명에 연도가 박혀 있음(lh-smah-ca-2024-*.pem) → CA를 교체하면 코드 수정이 필요함
    • 보안 주의 — CA 개인키 패스프레이즈가 프로세스 커맨드라인 인자로 들어가고 명령 문자열 전체가 log.debug로 찍힘. 홈넷서버 IP·ID가 검증 없이 셸 문자열에 삽입됨(화면에 IP 형식 검증 없음)
    • zip 단계 실패는 검사하지 않고, 재발급할 때마다 옛 파일을 지우지 않음
  • 보수 내역cmn.TB_HNSVR_RPR_L. 삭제가 일련번호 단독 조건이라 다른 단지 보수내역도 지울 수 있음(HomenetServer_Mapper.xml:166-171)
  • 상세 화면이 홈넷 서버 Secret과 LH 플랫폼 Secret을 평문으로 보여주고 복사 버튼까지 둠(HnsvrDtl.vue:81-103) → 화면 캡처·공유 시 주의 → 기본매뉴얼/운영/보안 점검
  • 응답코드 주의 — 연동시험·연동 시작 실패가 둘 다 SQI0007&홈넷서버 연동시험시작 이라 어느 버튼인지 구분이 안 됨
  • 로그 키워드홈넷서버 연동시험시작 중 오류 발생, 홈넷서버 등록 및 수정 중 오류 발생, 1./2./3. 개인키/인증서생성요청서/인증서 파일 생성 중 오류 발생. 연동 시작 종료 로그는 HOMENETSERVER_LINK_NCSS_FIELD end! 로 찍힘

세대 정보 목록·상세

  • LMC에서 문의가 가장 많은 화면임. 화면 /sbd-mng/hsh-inf/HshList · HshDtl · HshUpd. API HouseholdController.java:52,81,113,145,179
  • 권한 범위 강제(이 도메인에만 있음)applyLoginManagerScope()(HouseholdServiceImpl.java:314-341)가 클라이언트가 보낸 단지·거점관리소 값을 무시하고 로그인 ID로 다시 조회해 덮어씀
    • SBD_MNGR/MVIN_MNGR → 본인 sbdId + 임대유형 / FO_MNGR/FO_HW → 본인 foMgofId + 02 + grpSn / ARA_HDQ_MNGR → 본인 grpSn / 그 외 전국
    • 이어 checkAccessibleHousehold()가 범위를 다시 확인하고 아니면 SQI1001&세대정보
    • 건축정보·홈넷서버·층간소음·월패드·원패스는 이 검증이 없음. 커밋 02cf416f(2026-07-09)에서 세대 기능에만 추가됨
  • 상세를 열면 세대의 앱 사용자 수만큼 개인정보 취급 이력을 남김(useHshInf.js:36-53)
  • 세대정보 수정 — 안전서비스 세대와 주거약자 세대를 각각 업서트하는데 결과값을 두 번 대입해 두 번째 결과만 남음 → 첫 업서트가 0행이어도 성공으로 응답함
    • 화면 라벨이 N=대상 / Y=미대상으로 뒤집혀 있음(useHshInf.js:24-27). 그런데 목록 검색 체크박스는 'Y'를 “안전세대”로 보냄 → 목록 필터와 상세 라벨의 의미가 상충함
    • 저장 후 목록으로 돌아갈 때 검색 조건이 유실됨
  • 세대주 판정 — 주석은 “가입일시가 가장 빠른 1명 && COGO_SS_CD='REQ'”인데 SQL에는 COGO_SS_CD='REQ' 조건이 없음
  • 테이블 — 읽기 cmn.TB_HSH_M · TB_USR_M · TB_COGO_H · TB_SFT_SVC_HSH_M · TB_RDS_HSH_M · TB_MOB_CONN_L · TB_HSH_TER_M

전입 승인 (커밋 73876693으로 흐름이 바뀜)

  • 흐름
    1. 세대 상세에서 사용자 1명 선택 → “전입” → 확인창 “{동}동 {호}호 전입 하시겠습니까?”
    2. PUT /api/v1/complex/modifyCogoSsCdcogoSsCd='CNF' 로 호출함(필수값 cogoSsCd;usrId)
    3. 컨트롤러가 CNF를 보고 별도 경로 approveMoveIn()으로 분기함(HouseholdController.java:187-195)
    4. MoveInApprovalGuard.findTarget()이 로그인 관리자 상태가 USE인지 확인하고 역할별 범위로 대상 세대·사용자·푸시토큰을 다시 조회함. 없으면 SQI1001&입주 승인
    5. 내부 API 주소·키를 cmn.tb_cstt_m에서 읽음. 비어 있으면 “입주 승인 연계 설정을 확인해 주세요. 관리자에게 문의해 주세요.”
    6. APW에 POST {내부API}/api/smh/cogo/move-in 호출(응답 20초·연결 3초·재시도 없음) → 공개노트/개발/모듈/APW 연계 서버
    7. 결과코드가 2000이면 성공. 이어 푸시 POST {내부API}/api/smh/push(5초)로 “전출입 알림 / 입주 확인이 완료되었습니다.”를 보냄
    8. LMC는 이 경로에서 세대 상태·이력을 DB에 저장하지 않음. 주석 그대로 “APW가 계약과 함께 확정한다”
  • APW 결과코드별 화면 문구(HouseholdServiceImpl.java:98-130)
APW result_code관리자에게 보이는 문구승인
2000전입 승인과 알림 발송 요청이 완료되었습니다.성공
2000(푸시토큰 없음)전입 승인은 완료되었습니다. 알림을 받을 기기가 등록되어 있지 않아 푸시는 발송하지 않았습니다.성공
2000(푸시 실패)전입 승인은 완료되었으나 알림 발송을 확인하지 못했습니다. 승인 처리를 다시 요청하지 마세요.성공
5013계약정보를 확인하지 못해 승인되지 않았습니다. 계약정보와 관리소 확인 처리 결과를 확인해 주세요.실패
5998계약정보 조회에 실패해 승인되지 않았습니다. 연계 상태를 확인해 주세요.실패
4011 / 4017 / 5012입주 승인 연계 요청이 거부되었습니다. 관리자에게 문의해 주세요.실패
그 외 · 무응답 · 타임아웃승인 결과를 확인하지 못했습니다. 상세 화면에서 현재 상태를 확인한 후 처리해 주세요.결과 불명
  • 성공(SQI0000)일 때는 위 상세 문구가 화면에 안 보이고 프론트 자체 문구 “전입 되었습니다.”만 뜸 → “푸시는 발송하지 않았습니다” 같은 안내가 관리자에게 전달되지 않음
  • 실패(SQI0001)일 때는 서버 문구가 그대로 알림창에 뜨고 그 뒤 상세 재조회가 실행되지 않음(공통 2번)
  • 외부 호출은 @Transactional(propagation = NOT_SUPPORTED)로 현재 트랜잭션을 끊고 수행함
  • 치명 결함 — 아래 “알려진 이슈” 1번
  • 로그 키워드입주 승인 응답 확인 불가, 입주 승인 후 알림 응답 확인 불가, SMAH API 호출중 오류 발생

전출 · 반려

  • 흐름 — 세대 상세에서 사용자 선택 → “전출”/“반려” → PUT /api/v1/complex/modifyCogoSsCd(TRR/RJC) → 범위 검증 → 앱 역할을 VSTR(게스트)로 강제하고 cmn.TB_USR_M 갱신 + cmn.TB_COGO_H에 이력 1건 → 내부 API 푸시 1건
  • modifyCogoSsCd는 이제 RJC/TRR만 받음. 다른 값이면 SQI0012&전출입 상태
  • 클라이언트가 rolId를 보내도 서버가 무시하고 "VSTR" 로 덮어씀
  • 푸시는 http://localhost:8084/api/smh/push 하드코딩 주소를 씀(HouseholdServiceImpl.java:288-289). 제목 “전출입 알림({usrId})”, 이벤트코드 ION, 화면ID UI-000-000
  • 푸시 응답은 검사하지 않고 결과값을 무조건 1로 둠 → 푸시가 실패해도 전출·반려는 성공 처리됨
  • 확인된 결함 2건 — 아래 “알려진 이슈” 8번, 그리고 푸시 호출이 트랜잭션 안에서 타임아웃 없이 블로킹함(HouseholdServiceImpl.java:302) → 내부 API 무응답 시 DB 커넥션을 붙잡고, 예외가 나면 상태 변경까지 롤백됨
  • 전출·반려된 사용자는 앱 역할이 VSTR로 내려가 세대 기능을 못 씀. 되돌리려면 앱에서 다시 입주확인요청을 해야 함

스마트홈 연동 확인 모달

  • 세대 상세의 “스마트홈 연동 확인” 버튼으로 여는 모달임. 건설임대(mntnLsTpCd='01') 세대에만 보임
  • 세대 단말기 상태 확인GET /api/v1/complex/gateways(5초). 실패 시 “세대 단말기 상태 확인 중 오류 발생”
  • 세대 전입 상태 확인GET /api/v1/complex/devices. 주석 그대로 “세대 전입 상태를 확인하는 API가 제공되지 않아 기기 목록 조회 API로 대체 구현”임. 응답코드 2000연결, 2102미연결, 그 외 → 알수없음
    • 게이트웨이가 없으면 SFWException("게이트웨이를 찾을 수 없습니다.") 를 던지지만 바로 아래 catch(Exception)이 이를 삼켜 “세대 전입 상태 확인 중 오류 발생”으로 바뀜 → 원인 문구가 유실됨
  • 세대 전출입 요청POST /api/v1/complex/lhHouseholdEvent. cogoSsCd='CNF'H1(전입), 그 외는 H2(전출). 반려(RJC)도 H2로 나감
  • “연결 해제” 버튼이 통째로 주석 처리돼 있음(HshCogoChkModal.vue:60-90)
  • 이 조회가 실패하면 LMC가 아니라 내부 API WAS ↔ 홈넷사 구간 문제임. 여러 번 눌러도 막는 장치가 없음 → 기본매뉴얼/관리사무소/세대 단말기 조회가 안 돼요

층간소음 기기 관리

  • 화면 /sbd-mng/fns-dvc-mng/FnsDvcMngList · Dtl · Add · Upd. API FnsController.java:38,67,99,132,165
  • 등록·수정 시 기기ID + MAC 조합 중복 검사를 함. 중복이면 SQI0019. 수정에서는 기기ID나 MAC이 실제로 바뀐 경우에만 검사함
  • 등록 시 단지ID+동+호로 세대ID·동ID를 찾아 넣음. 세대가 없으면 세대 연결 없이 등록됨
  • 수정 시 아직 전송되지 않은 설정(FRW_DTTM IS NULL)이 있으면 그 행을 갱신하고 없으면 새로 만듦 → “설정을 바꿨는데 반영이 안 된다”면 FRW_DTTM부터 확인함
  • 삭제 예외 코드가 SQI0008층간 소음 기기(구분자 &가 빠져 메시지 치환이 깨질 수 있음, FnsServiceImpl.java:138)
  • 테이블cmn.tb_nsba_dvc_m · _cont_h · _brf_h · _nc_h

세대 단말기(월패드) 관리

  • 화면 /sbd-mng/wallpad-mng/WallpadList. API WallpadController.java:48,76,107
  • 교체 이력은 세대당 두 번째로 등록된 단말기부터 조회함
  • findWallpadInfo하드코딩된 http://localhost:8084/api/smh/getHomenetServerGateways 를 호출함(API 키만 상수 테이블에서 읽음, 타임아웃 없음)
  • 응답을 log.debug로만 찍고 화면에 돌려주지 않음. 성공하면 무조건 “세대 단말기 정보 조회가 완료 되었습니다.”만 뜸 → 화면 값이 그대로여도 정상 동작임(반영은 내부 API WAS가 DB에 쓰는 시점)
  • 확인된 결함useWallpad.js:13이 월패드 Vuex 모듈을 층간소음 모듈 이름('sbd-mng-fns-dvc-mng')으로 등록함 → 층간소음 화면을 거친 뒤 월패드 화면에 들어가면 목록이 비어 보일 수 있음
  • 월패드 상태 HSH_TER_SS_CD: 00 정상 / 그 외 이상

원패스(스마트원패스) 장치 목록

  • 조회 전용임. 화면 /sbd-mng/opas-dvc-mng/OpasDvcList, API GET /api/v1/complex/findOpasDvcList(OpasController.java:38)
  • 장치 상태 OPAS_DVC_SS_CD는 테이블 값이 아니라 최근 7일 내 사용 이력 유무로 계산함 → “살아 있는데 미사용”은 장애 표시가 아님
  • 컨트롤러에 운영현황·설치현황·운용현황 엔드포인트 3개가 통째로 주석 처리돼 있음(OpasController.java:59-114). 같은 지표는 대시보드(/api/v1/dsbd/findOpas*)로 옮겨 감
  • 화면 컬럼 구성은 공개노트/개발/관리자시스템 원패스 기기 목록

제어 관리 (/cont-mng)

컨트롤러 2개(ControlController, ScheduleController)가 같은 베이스 경로 /api/v1/control 을 나눠 씀.

화면경로핵심 규칙
기기 제어 현황 목록/cont-mng/dvc-cont-xpn/DvcContXpnList성공여부 필터는 CONT_RSP_CD='2000' 기준. 기간이 YYYYMM 월 단위 전용이고 일 단위 조회 불가. 기본값 최근 1년
기기 제어 현황 상세DvcContXpnDtl기기유형 코드로 테이블명·컬럼을 ${} 문자열 치환해 조회함. 코드가 enum에 없으면 상세는 뜨고 기기속성만 빈값임
기기 제어 분석(홈넷사별)/cont-mng/dvc-cont-anl/DvcContAnl 탭1sortDt='M' 월별 / 'Y' 연별. 정렬은 총건수 내림차순
기기 제어 분석(기기유형별)같은 화면 탭2공통코드 IOT_DVC_TP_CD로 동적 피벗 컬럼을 만듦
기기 스케줄링 현황/cont-mng/dvc-schdl-xpn/DvcSchdlXpnList입주민이 앱에 등록한 예약을 조회만 함. 기간 필터 없음. 매입임대는 동 필터가 숨겨짐
기기 스케줄링 이력/cont-mng/dvc-schdl-hst/DvcSchdlHstListsortDt='D' YYYYMMDD / 'M' YYYYMM
  • API를 직접 호출해 endDate를 빼면 조건이 NULL이 돼 0건이 나옴(Control_Mapper.xml:49-51)
  • 제어 상세 화면이 mntnLsTpCd를 보내지 않아 매입임대 건이 건설임대 경로로 조인돼 지역본부가 비거나 행이 누락될 수 있음(DvcContXpnDtl.vue:188)
  • 공통코드에 기기유형을 추가해도 화면 표·시리즈가 9종 하드코딩이라 새 유형이 보이지 않음(DvcContAnlDvc.vue:57-66,160-171)
  • 스케줄 이력 조건이 hasText(startDate) and hasText(startDate)startDate를 두 번 검사함 → 종료일 없이 시작일만 오면 0건임(Schedule_Mapper.xml:106)
  • 스케줄 이력↔마스터 조인 키가 RQ_USR_ID + CONT_HM이라 같은 사용자가 같은 시각에 2건 등록하면 행이 곱해지고 총건수가 부풀려짐
  • 기기유형 9종과 대응 테이블은 공개노트/개발/모듈/LMC 결과 코드와 안내 문구
  • 최근 수정 — 커밋 50e396a2(2026-09-04) “기기제어분석 차트 중복 및 IoT 집계 쿼리 수정”

이벤트 관리 (/evn-mng)

EventControllerSmsController같은 베이스 경로 /api/v1/event 를 나눠 씀.

이벤트 이력

  • 화면 /evn-mng/evn-hst/EvnHstList, API EventController.java:46
  • EVN_CD != 'NT008' 이 하드코딩돼 있어 NT008 이벤트는 목록·코드목록·분석 차트에서 영구 제외됨(Event_Mapper.xml:31,127,172)
  • 기간 필터는 발생일시가 아니라 등록일시(RGS_DTTM) 기준임(화면 라벨은 “수행기간”)
  • 조치내역 테이블을 조인만 하고 선택하지 않아 조치가 여러 건이면 목록 행이 중복될 수 있음
  • 결함 — 화면이 “월별”에 YYYYMM을 보내는데 매퍼는 항상 'YYYYMMDD'로 파싱함(Event_Mapper.xml:42) → 202509가 2025-09-01로 해석돼 기간이 엉뚱해짐

이벤트 조치내역 등록

  • 목록의 “조치내용보기” 버튼 → 모달 components/EvnActnHstModal.vue. API EventController.java:74(조회) / :105(저장, 필수값 actnrId;evnCaus;actnDtls)
  • 설계cmn.TB_EVN_ACTN_L 업서트 후 evnOccSn != 0이면 cmn.TB_EVN_OCC_L.EVN_SS_CD를 갱신하는 것임
  • 현재 동작이 설계와 다름 — 아래 “알려진 이슈” 6번. “저장 되었습니다.”가 떠도 목록의 이벤트상태가 그대로인 것이 현재의 정상 동작임
  • ON CONFLICT (EVN_OCC_SN)을 쓰므로 그 컬럼에 unique 제약이 필요함. 없으면 저장할 때마다 SQI0006&이벤트 조치내역이 뜸

이벤트 분석 차트 · SMS 발송 내역

  • 이벤트 분석(/evn-mng/evn-anl/EvnAnl) — 화면 옵션이 일별·월별뿐이라 매퍼의 연별 분기는 도달 불가임. “월별”을 고르면 startDate={연도}01, endDate={연도}12를 보내 사실상 1년치를 조회함. 이 쿼리만 TB_EVN_OCC_L/TB_EVN_M을 스키마 접두어 없이 씀 → search_path가 바뀌면 이 화면만 깨짐
  • SMS 발송 내역(/evn-mng/sms-sndg-hst/SmsSndgHstList) — 조회 전용이고 기간 필터가 없음. LMC에 SMS를 직접 발송하는 화면은 없음공개노트/개발/모듈/SMS 발송
    • 쓰기는 SMS 인증 발송 경로(Sms_Mapper.xml:41-70)가 하고 EVN_CD='CERT', RGPR_ID='LHM'을 하드코딩함
    • “첨부이미지경로명” 컬럼이 항상 빔 — 화면 컬럼 키가 hoDs로 잘못 적혀 있음(실제 필드는 atchImgPthNm)

헬스케어 (/hc) — 건강생활정보 컨텐츠 관리

  • 화면 /hc/cnts-mng/CntsMngList · Dtl · Add · Upd. API HealthController.java:45,74,106,143
  • 저장은 hltLfInfSn0이면 등록, 아니면 수정으로 필수값 검증이 갈림. 매퍼는 ON CONFLICT (HLT_LF_INF_SN) DO UPDATE 업서트임
  • 매입임대 일괄 등록 — 임대유형 02 + foMgofId가 있으면 그 거점관리소 산하 단지를 전부 조회해 단지 수만큼 INSERT를 반복함(HealthServiceImpl.java:61-81)
    • 산하 단지가 0건이면 SQI9000을 던지는데 바깥 catch가 다시 잡아 최종적으로 SQI0006&컨텐츠로 바뀜. 원인은 로그에서만 확인됨
  • 컨텐츠 유형이 HLTH(건강정보)면 지역본부·거점관리소·단지 입력행 자체가 숨겨짐(단지 없이 전사 공통 등록). SBD_MNGR/FO_MNGR/FO_HW 계정은 HLTH 옵션 자체가 안 보임
  • 삭제는 물리 DELETE임(Health_Mapper.xml:99-104). DEL_YN 컬럼이 있는데도 논리삭제를 안 함 → 복구 불가
  • 미리보기는 window.open(url,'_blank','width=450, height=915') 임(특정 단말 기준 하드코딩)
  • 확인된 결함 — 아래 “알려진 이슈” 5번, 그리고 상세의 “스마트홈 단지명”이 항상 빔(화면 hnetSbdNm vs 매퍼 별칭 SBD_NM_SMART), 다건 삭제 시 마지막 1건이 0건이면 전체가 실패로 보고됨
  • 테이블hc.TB_HLT_LF_INF_M(이 도메인만 hc 스키마를 씀)

대시보드 (/dashboard)

지표 정의는 공개노트/개발/대시보드 세대수와 단지 현황.

  • 어느 대시보드로 들어가는지(views/dashboard/Dashboard.vue:45-65) — 건설임대(01)는 sbdId가 있으면 SbdMngr, 없으면 LhMngr / 매입임대(02)는 foMgofId가 있으면 FoMngr, 없으면 LhMngr / 그 외 LhMngr
  • 3개 화면 모두 30분 주기로 자동 갱신함. LhMngr는 갱신 시 sbdId/foMgofId를 다시 넣지 않아 일부 필터가 초기화되는 효과가 있음
  • 위젯은 모두 GET /api/v1/dsbd/... 임(컨트롤러 DsbdController.java:47~727, 매퍼 Dsbd_Mapper.xml 1428줄)
위젯API기준 시점주요 규칙
운영단지 현황findSbdStatus전일매입임대는 원패스 설치 동 수, 건설임대는 HNSVR_OPR_YN로 기축·신축 카운트
상태별 신축·기축 차트findSbdStatusBld전일매입임대 3단 드릴다운(시군구 → 거점관리소 → 지역본부)
운영단지 현황(홈넷사별)findSbdStatusFrm전일화면 탭이 주석 처리돼 현재 호출되지 않음
앱 이용 지표findUseApp전일가입률·접속률·제어율·제어성공률, nullif로 0 나눗셈 방지
안전지원 이벤트 합계findEventStatus금일 0시~현재EVN_TP_CD='SFN' 또는 EVN_CD IN ('NT008','NT009')
안전지원 이벤트 차트findEventStatusCrtcondition별SGG·FOMGOF는 기간조건 없음, GRP·DAY는 금일, RPT는 최근 12개월
안전지원 이벤트 테이블findEventStatusTbl금일 또는 trgYmreportYn='Y'면 월별 보고서 모드
앱·웹 가입/접속 현황findUserCrt어제·오늘필수값 condition(APP/WEB)
AutoDR 현황findDrCrt올해 1/1~어제발령중 판정은 DR_ED_TM IS NULL 또는 현재가 발령 구간 안
제어 현황findCtrlStatus금일(시간별)reportYn='Y'면 최근 12개월 월별
관리비·임대료 등록 현황findFeStatus전일관리비 위젯과 임대료 위젯이 같은 API를 각각 호출함(동일 쿼리 2회)
단지 투표 현황findVtStatus금일VT_SS_CD='ING'만 집계
최근 입주단지findNewSbdList / findNewSbdCrt최근 31일LTL_MVIN_SBD_YN='Y'
전출입 세대 현황findSbdCngStatus이번 달 1일~어제일자별 전입·전출 + 누적합계
원패스 동작 현황findOpasRunStatus금일(시간별)run_ty_cd 'A' 자동 / 'M' 수동
원패스 설치 현황findOpasIstlStatus누적설치대상 = 출입문 수
원패스 운영 현황findOpasOprStatus누적정상운영 = 최근 7일 이내 사용 기록이 있는 장치
승강기 호출 현황findElvCallStatus금일(시간별)alog.tb_elv_gw_api_rq_l 스키마를 이 쿼리만 사용
  • 대시보드 숫자와 목록 화면 숫자가 안 맞는 가장 흔한 원인은 smahAplFilter(공통 4번). 홈넷 연동상태가 DC/SU인 건설임대 단지는 집계에서 빠짐
  • 대부분의 위젯이 전일·금일 기준 집계 테이블을 읽음. 집계 배치가 돌지 않으면 숫자가 멈춤. LMC에는 이 집계를 만드는 배치가 없음(아래 배치 절)
  • findSbdCngStatus / findOpasRunStatus / findOpasIstlStatus / findOpasOprStatus 네 곳은 필수값 검사가 주석 처리돼 있어 sbdId 없이 호출하면 전국 집계가 나감
  • 안전지원 이벤트 모집단이 API마다 다름 — 합계·테이블은 SFN + NT008,NT009, 차트는 SFN + RSN합계와 차트 총합이 어긋날 수 있음
  • 단지 투표율 계산에 nullif가 없어 전체세대수가 0이면 SQI9000 이 남(Dsbd_Mapper.xml:1178)
  • 앱·웹 통계 API 하나가 거대한 CTE 쿼리 3개를 순차 실행함(매퍼 452~1031줄). 대시보드가 느리면 이 쿼리를 먼저 봄
  • 단지 정보 위젯에서 단지명을 수정할 수 있고, 저장은 건축정보 API를 dsbd:'Y' 플래그로 재사용함

보고서 (/rpt)

  • 화면 /rpt/opr-rpt/OprRpt/LhMngrRpt(LH 관리자용) · SbdMngrRpt(단지 관리자용). 화면 제목은 “운영 보고서”, 문서 제목은 “통합운영 플랫폼 월간 보고서” 임 → 기본매뉴얼/운영/월간보고 작성
  • 기본 조회월은 전월임. 표지 문구는 “{연도}년 {월}월 전국 운영보고서”, 다운로드는 html2pdf 기반임
  • 구성 API는 전부 GET /api/v1/report/...findSbdStatus · findKpiStatus · findUseApp · findCtrlStatus(reportYn='Y') · findEventStatusCrt(condition='RPT') · findBldStatus · findCtrlBldStatus · findEventStatusTbl(reportYn='Y')(ReportController.java:51~280)
  • 보고서 숫자도 smahAplFilter를 타므로 홈넷 연동상태가 DC/SU인 건설임대 단지는 빠짐
  • 대상 월의 단지 현황은 그 달 안에서 가장 늦은 TRG_YMD 한 건을 씀(Report_Mapper.xml:36-42)
  • 경영평가 성과지표는 독립 메뉴가 아니라 LH 관리자용 보고서 안의 두 표(“과년도 성과지표 관리” · “월별 운영 현황”)임. 상세는 공개노트/개발/경영평가 성과지표
  • reportYn은 건설/매입 필터가 아니라 “보고서 화면에서 부른 호출인가”를 알리는 보고서 모드 플래그임. 같은 쿼리를 대시보드(금일·시간별)와 보고서(월별·최근 12개월)에서 나눠 쓰려고 넣은 값이고, 쓰이는 곳은 Dsbd_Mapper.xml 6군데뿐임. 정의는 lhmngr/dsbd/dto/req/DsbdReqDto.java:79

시스템 정보 (/sys-inf)

  • 자료실(ARC) · FAQ(FAQ) · 시스템 공지사항(ANN) 세 화면이 같은 API 2개를 natTpCd만 바꿔 씀 — GET /api/v1/cert/findSystemList · findSystemDetail(CertController.java:640,673)
  • 이름은 findSystemList지만 서비스는 findPublicSystemList() 를 호출함. 2026-07-07 감사원 보안 조치 커밋(688f96eb/daa48de8)에서 공개용 조회를 분리하며 이렇게 됨
  • 상세는 게시물 1건 + 첨부 N건 조인 결과에서 첨부만 모아 fileList로 묶고 첫 행만 반환함
  • 상세유형(natDtlTpCd) 옵션은 공통코드 전체를 받아 코드 접두어로 프론트에서 걸러냄(ARC*/ANN*/FAQ*) → 코드 네이밍 규칙이 깨지면 옵션이 사라짐
  • 작성자 검색(condition='W')이 조용히 무시되고 “등록자” 컬럼이 항상 빔 — 해당 분기와 rgprId 컬럼은 호출부가 없는 죽은 쿼리 쪽에만 있음(System_Mapper.xml:61-82)
  • FAQ 화면은 자동완성을 위해 진입할 때마다 pageSize:9999로 전체를 끌어옴
  • 첨부파일 다운로드 경로가 두 개임
    • 인증 필요 POST /api/v1/apicomn/fileDownloadtaskDivRNTC/FIL/ANN/TLS 로 저장 경로가 갈림. 필수값이 없어도 log.error만 찍고 그대로 진행함(FileDownloadController.java:53-61)
    • 비인증(공개) POST /api/v1/cert/fileDownloadtaskDiv를 서버가 'ANN'으로 강제 고정하고, 최종 경로가 공지 업로드 경로 하위인지 canonical path로 검증함. 위반 시 로그 [SMAH-Framework] : 잘못된 파일 경로 접근 시도 + SQI4004
    • 시스템 공지 상세에 <!-- TODO 다운로드 API 확인후 수정(taskDiv 값 확인 필요) --> 주석이 남아 있음(SysNcDtl.vue:18). 공지(ANN) 첨부를 FIL 경로로 요청하면 파일을 못 찾음
  • 잔재SystemController.java@RequestMapping("/api/v1/system")만 있고 엔드포인트가 하나도 없는 빈 컨트롤러임

외부 연동

LMC는 홈넷사·FCM·SMS 게이트웨이·LG ThinQ·삼성 SmartThings·에너지플랫폼·바로처리를 직접 호출하지 않음. 전부 SMAH 내부 API WAS에 위임하고 계약 관련 승인만 APW로 보냄 → 공개노트/개발/시스템 구성

대상호출 방식주소 출처인증타임아웃
SMAH 내부 API WASSpring WebClient(동기 block)상수 SMAH_INTERNAL_API_WAS_ADR, 일부는 코드에 박힌 http://localhost:8084헤더 ApiKey 에 상수 SMAH_INTERNAL_API_KEY 값을 실음5초 / 20초 / 없음 혼재
APW(입주 승인·푸시)WebClient(CogoMoveInClient)상수 SMAH_INTERNAL_API_WAS_ADR헤더 ApiKey승인 20초 · 푸시 5초 · 연결 3초 · 재시도 없음
APW 이벤트(/api/lmw/event)WebClient설정 lh.smah.apw.protocol·domain·port헤더 ApiKey없음
  • 내부 API 주소와 키는 설정 파일이 아니라 DB 테이블 cmn.tb_cstt_m(상수)에서 읽음(ApiComnService.java:282-286). 값이 없으면 SQI0002가 남
  • 프로필별 APW 대상은 local localhost:8084 / dev [IP]:8094(개발 서버 직접) / prod homez-api.lh.or.kr:8094(LB) 임

호출 지점 전체

호출경로트리거타임아웃실패 시
입주 승인POST {내부API}/api/smh/cogo/move-in세대 상세 “전입”20초 / 연결 3초결과코드별 안내 문구, 재시도 없음
입주 승인 푸시POST {내부API}/api/smh/push승인 성공 직후5초승인은 성공 유지
전출·반려 푸시POST http://localhost:8084/api/smh/push”전출”/“반려”없음(무한 대기 가능)검사하지 않음
OTP SMS 발송POST http://localhost:8084/api/smh/sms가입·비밀번호 재설정없음SQI1009
세대 게이트웨이 조회GET {내부API}/api/smh/gateways스마트홈 연동 확인5초”세대 단말기 상태 확인 중 오류 발생”
세대 기기목록 조회GET {내부API}/api/smh/{세대ID}/devices스마트홈 연동 확인5초”세대 전입 상태 확인 중 오류 발생”
세대 전출입 이벤트POST {내부API}/api/smh/lhHouseholdEvent연동 확인 모달5초”전입 및 전출(lh2hn) 중 오류 발생”
홈넷서버 게이트웨이 조회GET http://localhost:8084/api/smh/getHomenetServerGateways”세대 단말기 정보 조회”없음SQI9000
APW 공지 이벤트POST {apw}/api/lmw/event없음(호출부 없음)없음-

공통 클라이언트

  • comn/webclient/service/SmahWebClientService.java — 응답 5초, 연결 타임아웃 미지정, proxyWithSystemProperties() 사용, 매 호출마다 WebClient를 새로 만들어 커넥션 풀이 재사용되지 않음
  • lhmngr/household/client/CogoMoveInClient.java타임아웃이 제대로 설정된 유일한 클라이언트임(승인 20초 / 푸시 5초 / 연결 3초, disableRetry(true))
  • 외부 응답코드2000 정상 / 2102 미연결 / 4004 DR 기타오류 / 4011·4017 API 키 문제 / 5011 세대정보 없음 / 5012 필수 파라미터 누락 / 5013 계약정보 확인 실패 / 5998·5999 서버 오류
  • 홈넷 세대 이벤트 코드H1 전입(cogoSsCd='CNF') / H2 전출(그 외, 반려도 여기로 감)
  • ApwApiResCode.findCode()가 코드가 아니라 메시지를 돌려주는 결함이 있음(현재 호출부 없음)

스케줄·배치 — 해당 없음

  • 백엔드 전체에 @Scheduled · @EnableScheduling · Quartz · TaskScheduler하나도 없음(build.gradle에도 스케줄러 의존성 없음)
  • LMC는 배치를 돌리지 않는 순수 요청-응답 웹 애플리케이션임. 메뉴의 “기기 스케줄링 현황/이력”은 입주민이 앱에 등록한 예약을 조회만 하는 기능임
  • 다만 화면·보고서는 다른 시스템이 채우는 집계 테이블에 크게 의존함공개노트/개발/모듈/통계 배치 서버, 공개노트/개발/모듈/통계 집계 DB 함수
집계 테이블쓰는 화면
cmn.tb_sbd_opr_dly_y · cmn.tb_bld_opr_dly_y운영단지 현황, 동별 현황, 최근 입주단지
cmn.tb_app_us_dly_y앱 이용지표, 보고서 가입·접속 현황
cmn.tb_app_jn_conn_* · cmn.tb_web_jn_conn_* · cmn.tb_fo_jn_conn_*앱·웹 통계
cmn.tb_iot_cont_dly_y / _hly_y제어 현황, 기기 제어 분석
cmn.tb_dr_dly_yAutoDR 현황
cmn.tb_cogo_hsh_dly_y전출입 세대 현황
cmn.tb_mngexp_rfe_rgs_dly_y관리비·임대료 등록 현황
cmn.tb_kpi_pfm_y경영평가 성과지표
  • LMC가 값을 바꾸지 않아 외부 처리에 의존하는 상태값 — 전자투표 VT_SS_CD(PREINGCMP), 홈넷 연동상태의 DC·SU, 전입 승인 이후의 세대 상태(APW가 확정)

데이터

스키마

스키마용도
cmn공통·마스터·집계·이력(대부분)
smah스마트홈 업무 데이터(제어·투표·DR·관리비·임대료)
hc헬스케어 컨텐츠
alog승강기 API 요청 로그(tb_elv_gw_api_rq_l 하나만 사용)

쓰기가 일어나는 테이블

테이블용도쓰기 시점
cmn.tb_mngr_m관리자 계정가입·비밀번호·상태변경·물리 삭제
cmn.tb_mngr_lgn_l / tb_mngr_refsh_tkn_m로그인 이력 / 리프레시 토큰로그인·갱신 시
cmn.tb_sys_conn_l시스템 접속 내역메뉴 이동할 때마다
cmn.tb_inif_trt_l개인정보 취급 내역세대 상세 조회 시
cmn.tb_usr_m / cmn.tb_cogo_h앱 사용자 / 전출입 이력전출·반려 시
cmn.tb_hnsvr_m / _rpr_l / cmn.tb_tlscrtf_pblc_l홈넷서버 / 보수내역 / 인증서 발급 이력등록·수정·재발급
cmn.tb_nsba_dvc_m / _cont_h층간소음 기기 / 설정등록·수정·삭제
cmn.tb_sft_svc_hsh_m / cmn.tb_rds_hsh_m안전서비스 / 주거약자 세대업서트
cmn.tb_rsd_annc_fcts_l / cmn.tb_ahfl_m입주민 공지 / 첨부등록·수정·삭제
cmn.tb_evn_actn_l이벤트 조치 이력저장 시(상태 연결은 현재 끊겨 있음)
cmn.tb_sms_sndg_lSMS 발송 이력인증 SMS 발송 시
smah.tb_hsh_mngexp_m / _ext_itm세대 관리비 / 추가항목업로드·삭제 / 전삭제 후 재삽입
smah.tb_hsh_rfe_m / _npy_l세대 임대료 / 미납업로드·삭제 / 쓰기만 있고 조회·삭제 없음
smah.tb_elc_vt_m / _itm_l전자투표 기본 / 항목등록·수정·삭제
hc.tb_hlt_lf_inf_m건강생활정보 컨텐츠등록·수정·물리 삭제

읽기 전용 마스터·집계 테이블 전체 목록은 raw/코드분석/LMC-2.md 10.2에 있음.

개인정보 취급 내역(cmn.tb_inif_trt_l)

  • 적재 SQL mapper-rdb/user/User_Mapper.xml:63-81, 경로 POST /api/v1/user/inputUserRecordUserService.inputUserRecord
  • 유일한 호출 지점은 세대정보 상세 화면 하나뿐임. 세대 상세를 열면 그 세대의 앱 사용자 수만큼 1건씩 기록함(useHshInf.js:36-53)
  • 취급자 접속 IP는 서버가 요청 헤더에서 추출해 채움
  • 주의
    • inifTrtTpCd'R'(조회)로 고정돼 있어 수정·출력·삭제 등 다른 유형은 기록되지 않음
    • picId · inifOwnrId · rgprId클라이언트가 보낸 값 그대로 저장함(SecurityContext 로그인 ID로 덮어쓰지 않음). 컨트롤러 필수값 검사도 주석 처리돼 있음
    • 건축정보 상세에서 담당자 전화번호를 복호화해 보여주는 것은 기록되지 않음
    • 입주민 앱 서버(MAW)도 이 테이블에 적재하지 않음(2026-09-18 확인, MAW 코드 전체 검색 0건). 이 테이블에 쓰는 시스템은 현재 LMC 하나뿐임. 입주민이 앱에서 자기 정보를 보는 것은 여기 남지 않음 → 공개노트/개발/모듈/MAW 세대·헬스케어 API
  • 함께 보는 이력: 시스템 접속 내역 cmn.tb_sys_conn_l(메뉴 이동마다 1건) → 기본매뉴얼/운영/보안 점검

이번에 확인된 상태·구분 코드

공개노트/개발/모듈/LMC 결과 코드와 안내 문구의 상태·구분 코드 표에 합쳐 둠. 이 페이지에서만 쓰는 값은 아래와 같음.

구분
그룹 구분 GRP_DS_CDARA지역본부 — 화면에는 이 값만 노출(하드코딩)
공급유형 SPL_TP_CD14 / 15국민임대 / 영구임대(대시보드 단지정보 하드코딩)
대시보드 차트 conditionSGG / FOMGOF / GRP / DAY / RPT시군구 / 거점관리소 / 지역본부 / 시간 / 월

프로그램 구분 코드 pgmDsCd

  • 설정 값은 LHW 이고 local·dev·prod 세 프로필 모두 같음(resources-*/application.properties:2)
  • 다만 이 설정을 읽는 자바 코드가 없음. 실제로는 매퍼 SQL에 문자열 'LHW'가 직접 박혀 있음(ApiComn_Mapper.xml:22,50)
  • 결론: 설정 파일 값을 바꿔도 동작이 달라지지 않음. SMC는 같은 자리에 SYS를 씀 → 공개노트/개발/모듈/SMC 통합운영시스템

알려진 이슈

심각도는 운영 영향 기준임. 근거는 모두 코드에서 확인한 사실이고, 확정이 아닌 것만 “추정:“으로 표시함.

지금 기능이 안 되거나 잘못 동작하는 것

#심각도증상근거
1치명전입 승인 시 “시스템 오류입니다”가 뜰 수 있음HouseholdMapper.findMoveInApprovalTarget(HouseholdMapper.java:26)의 SQL이 어느 매퍼 XML에도 없음 → MyBatis BindingException → AOP 미포착 → HTTP 500. 관련 테스트 MoveInApprovalMapperSqlTest.java:57-61도 실패 상태임. 추정: 매퍼 XML이 빠진 미완성 커밋(배포본에 다른 파일이 들어갈 가능성이 있어 아래 확인 필요 ①에 올림)
2치명전자투표 삭제 버튼을 누르면 무조건 “시스템 오류입니다”삭제 필수값이 elcVtSn 하나뿐인데 checkElecVoteStatus()Long.parseLong(vtStDttm)을 먼저 수행 → NumberFormatException. ApiResidentsNoticeNecessaryFieldConstants.java:71, useErvt.js:72, ElecVoteServiceImpl.java:189
3치명전자투표 수정 화면의 저장이 눌리지 않음ErvtUpd.vue:283이 선언되지 않은 변수 inputErvt를 참조 → ReferenceError로 저장 함수가 즉시 중단됨(등록 화면에서 복사하며 생긴 실수)
4치명거점관리소 직원 계정 승인·잠금 시 “수정 요청 대상 데이터가 존재하지 않습니다”(SQI0004) 팝업. 새로고침하면 상태는 바뀌어 있음JPA 저장은 성공하지만 결과값을 채우는 줄이 주석 처리돼 있어 반환값이 항상 -1 임(FoMgofServiceImpl.java:66-67) → resFlag > 0 거짓 → SQI0004 → 프론트가 알림창을 띄우고 재조회를 건너뜀
5치명헬스케어 컨텐츠 수정 저장이 동작하지 않음(HLTH 외 유형)CntsMngUpd.vue:264가 선언되지 않은 변수 selectedSbd를 참조 → 자바스크립트 오류로 API가 호출되지 않음
6높음이벤트 조치내역을 저장해도 이벤트 상태가 바뀌지 않고, 조치 팝업이 늘 빈 폼임조회 결과 바인딩 4줄과 evnOccSn 전송이 주석 처리됨(EvnActnHstModal.vue:114-120,139-146) → 서버에서 evnOccSn=0이 되어 누를 때마다 새 조치 행이 생기고 EVN_SS_CD는 갱신되지 않음
7높음DR 상세 화면에 들어가면 “필수 입력 파라미터 [sbdId] 값이 누락되었습니다.”가 뜨고 참여 표가 빔DrGooXpnDtlHshPrtcptn.vue:119-121initData()를 인자 없이 호출해 검색조건이 undefined가 됨
8높음전출·반려 이력(cmn.TB_COGO_H)의 세대ID가 항상 NULL, 동거인 수가 0cmn.TB_USR_M.HSH_ID를 NULL로 만든 직후에 그 값을 다시 읽어 이력에 넣는 순서 결함(Household_Mapper.xml:207-245). 매퍼 주석의 의도와 정반대로 동작함
9높음이벤트 이력을 “월별”로 조회하면 기간이 엉뚱해짐화면은 YYYYMM을 보내는데 매퍼는 YYYYMMDD로 파싱(Event_Mapper.xml:42)
10중간자료실·시스템공지의 작성자 검색이 무시되고 등록자 컬럼이 항상 빔findPublicSystemListcondition='W' 분기와 rgprId 컬럼이 없음
11중간DR “참여 횟수” 컬럼이 항상 빔, 상세 표 페이징 불가응답 DTO에 prtcptnNot 필드가 없고 상세 쿼리가 총건수를 안 줌
12중간SMS 발송 내역의 “첨부이미지경로명” 컬럼이 항상 빔화면 컬럼 키 오타(SmsSndgHstList.vue:153)
13중간헬스케어 상세의 “스마트홈 단지명”이 항상 빔화면은 hnetSbdNm, 매퍼 별칭은 SBD_NM_SMART
14중간월패드 목록이 비어 보일 수 있음Vuex 모듈을 층간소음 모듈 이름으로 등록(useWallpad.js:13)
15중간공지사항 엑셀 다운로드가 15건만 나옴(화면 버튼은 없음)엑셀 전용 분기 미구현
16중간건축정보 엑셀 건수 초과 안내가 안 보임responseType:'blob' 이라 오류 본문을 해석하지 못함
17낮음기기 제어 분석에서 같은 달을 다시 골라 검색하면 반응이 없음감시 대상 값이 바뀌지 않으면 재조회하지 않음

성공으로 보이지만 실제와 다를 수 있는 것

  • 관리비 등록은 컨트롤러가 항상 SQI0014를 돌려줌 → 0건이어도 “저장 되었습니다.”가 뜸. 실제 건수는 응답 메시지의 숫자로만 확인됨
  • 임대료 등록은 서비스가 결과값을 무조건 1로 세팅함 → 0건이어도 성공임
  • 세대정보 수정은 두 업서트 중 두 번째 결과만 남김
  • 홈넷서버 연동시험·연동 시작은 목록을 반복 처리하며 마지막 건 결과만 응답에 반영함
  • 헬스케어 다건 삭제는 마지막 1건이 0건 삭제면 전체를 실패로 보고함
  • 전출·반려 푸시는 성공 여부를 검사하지 않음

트랜잭션이 없어 부분 저장이 생길 수 있는 곳

  • 임대료 등록(기본은 들어가고 미납만 실패 가능)
  • 관리비 추가항목(전체 삭제 후 재삽입인데 트랜잭션 없음 → 추가항목이 전부 사라질 수 있음)
  • 공지사항 삭제(DB 행 삭제 후 첨부 파일 삭제 실패 시 물리 파일만 고아로 남음)
  • 홈넷서버 연동 상태 반복 처리

권한·보안 주의

  • 서버측 범위 검증이 세대(Household) 기능에만 있음. 건축정보(엑셀 포함)·홈넷서버·층간소음·월패드·원패스·관리비·임대료·공지사항은 클라이언트 값을 그대로 씀
  • 입주민 공지 수정·삭제 시 백엔드가 작성자를 검사하지 않음 → API 직접 호출로 남의 공지를 고칠 수 있음
  • 거점관리소 직원 계정 상태 변경·삭제에 역할·소속 검증이 없음mngrId만 알면 다른 역할 계정도 상태 변경·물리 삭제 가능
  • 홈넷서버 보수내역 삭제가 일련번호 단독 조건임 → 다른 단지 내역도 지울 수 있음
  • 홈넷서버 상세 화면이 홈넷 Secret과 LH 플랫폼 Secret을 평문으로 노출하고 복사 버튼을 둠
  • TLS 인증서 재발급 시 CA 개인키 패스프레이즈가 프로세스 인자로 들어가고 명령 문자열 전체를 log.debug로 남김. 홈넷서버 IP·ID가 검증 없이 셸 명령에 삽입됨
  • 개인정보 취급 내역의 취급자·대상자 ID를 클라이언트 값 그대로 저장함(필수값 검사도 주석 처리)
  • 파일 다운로드(인증 경로)에서 필수값이 없어도 log.error만 찍고 그대로 진행함
  • 개선 이력: 커밋 688f96eb/daa48de8(2026-07-07 감사원 조치, 공개 게시물 조회 분리 + 경로 조작 방어), 4bd69924(리프레시 토큰 검증 강화), 02cf416f(세대 조회·승인 범위 검증 추가)

주석 처리된 검증 (지금 동작하지 않는 규칙)

위치주석 처리된 것영향
useRsdNc.js, RsdNcAdd.vue, RsdNcUpd.vue 5군데알림 등록 일시 이후 공지 수정·삭제 금지앱에 이미 나간 공지도 수정·삭제됨
EvnActnHstModal.vue:114-120,139-146조치내역 조회 결과 바인딩, evnOccSn 전송조치 이력이 이벤트에 연결되지 않음
DsbdController.java:583,616,649,682대시보드 4개 API의 sbdId 필수값 검사단지 지정 없이 호출하면 전국 집계가 나감
UserController.java:259-261,294개인정보·접속 이력 필수값 검사검증 없이 적재됨
HshCogoChkModal.vue:60-90월패드 “연결 해제” 버튼해제 기능이 화면에 없음
OpasController.java:59-114원패스 운영·설치·운용 현황 API 3개대시보드로 이관됨
LhMngrAllOprSbdXpn.vue:183-191대시보드 “홈넷사별” 탭findSbdStatusFrm 미사용
FoMgofServiceImpl.java:67결과값 대입위 4번의 원인
libs/axios.js:9전역 타임아웃프론트 타임아웃 무제한

하드코딩된 값 (바뀌면 코드 수정이 필요한 것)

위치의미
'LHW'ApiComn_Mapper.xml:22,50프로그램 구분(설정 대신 SQL에 박힘)
'ARA'Common_Mapper.xml:29,48지역본부만 노출
grp_sn != 11Dsbd_Mapper.xml:1341,1361, lhMngrStoreModule.js:54,98특정 그룹 제외
http://localhost:8084HouseholdServiceImpl.java:289, WallpadServiceImpl.java:82, CertService.java:428내부 API 주소(상수 테이블 미사용)
'NT008' 제외Event_Mapper.xml:31,127,172이벤트 목록에서 영구 제외
lh-smah-ca-2024-*.pemFileService.java:357연도가 박힌 CA 파일명
25자 / 4096bit / 365일HomenetServerServiceImpl.java:110, FileService.java:355,357홈넷 비밀키 길이, 키 길이, 인증서 유효기간
"M","6"CertService, FoMgofServiceImpl.java:62비밀번호 만료 +6개월
'동 호' / A~AK / B~BTuseMngexpExcelUtils.js관리비 엑셀 파싱 기준
A/B/C/D/E/I/P/Q/R/AF, 49RfeEdt.vue:260-275임대료 엑셀 열 매핑
최근 6개월, pageSize 10목록 화면들격자 개월 수, 페이지 크기(서버 기본 15와 불일치)
30분대시보드 3종자동 갱신 주기
UI-000-000HouseholdServiceImpl.java:276,152푸시 화면ID

로그에서 조심할 오타·오기

잘못된 문구실제위치
Excution TimeExecutionSQIFrameworkAspect.java:113
전자투표 목록 상세조회중 오류 발생관리비 상세조회MngExpServiceImpl.java:50
/* MngExpMapper.deleteRental */RentalMapperRental_Mapper.xml:255
HOMENETSERVER_LINK_NCSS_FIELD end!modifyHomenetServerLink end!HomenetServerController.java:289
[홈넷서버 연동시험시작] 수정중 오류연동시작 실패인데 연동시험 문구HomenetServerServiceImpl.java:150-151
attachement; filename=attachmentAbstractExcel.java:111
'YYYY-MM-DD HH24;MI:SS'콜론이어야 함Dsbd_Mapper.xml:248,288,352

죽은 코드·미연결 엔드포인트

  • SystemController.java — 엔드포인트 0개인 빈 컨트롤러
  • System_Mapper.xmlfindSystemList/findSystemDetail — 호출부 없음(작성자 검색과 등록자 컬럼은 여기에만 있음)
  • ResidentsNoticeMapper.findResidentsNoticeListForExcelSQL 없음(호출하면 BindingException)
  • MngExpServiceImpl.uploadMngExp / RentalServiceImpl.uploadRental — 서버측 POI 파싱, 엔드포인트 없음
  • utils/excel/ExcelUploadService 와 검증기 9종 — 참조 코드 없음(엑셀 검증은 전부 프론트)
  • /api/v1/code, /api/v1/menu, /api/v1/rolenauth, /api/v1/user의 대부분 — 대응 화면이 없음
  • views/sbd-mng/opas-dvc-mng/OpasList.vue, views/evn-mng/sms-sndg-hst/SmsRcvHstModal.vue — 라우트 미연결·미구현

최근 커밋 (2026)

커밋날짜내용
7387669309-16[LMC] 관리소 전입 승인 APW 연계 및 푸시 처리 — 이 페이지의 기준 커밋. 매퍼 XML 누락(이슈 1)
e7c44b0a09-14로그인 후 인트로 컨텐츠 이용 가능
50e396a209-04기기제어분석 차트 중복 및 IoT 집계 쿼리 수정
99a19cbd09-03임대료 상세 조회 오류 수정
5aba72e607-23관리비 상세조회 시 삭제 세대 제외
4578cb0a / 5fc69e4207-22대시보드 매입임대 오류 수정 / 경로명 오타 수정
02cf416f / 4bd6992407-09입주민 조회·승인 범위 검증 추가 / 관리자 ID 조작 권한상승 차단
688f96eb / daa48de8 / ddb8f02107-07감사원 보안 취약점 조치
03a171d6 / 800a55ef07-06 / 06-29관리비 등록 버그 수정(엑셀 파서)

확인 필요

확인 필요

① 전입 승인 매퍼 SQL 누락 — 즉시 확인 필요 전입 승인이 쓰는 SQL 문장(findMoveInApprovalTarget)이 저장소 어느 매퍼 XML에도 없음. 관련 테스트도 실패 상태임. 매퍼 XML이 빠진 미완성 커밋인지, 배포본에는 다른 파일이 들어가는지 개발팀 확인 필요. 이 상태로 운영에 나가면 전입 승인이 전부 “시스템 오류입니다”로 실패함.

확인 필요

FO_HW 외 관리자 계정의 RDYUSE 승인 경로 LMC에서 관리자 계정 상태를 바꾸는 화면은 거점관리소 직원 계정 관리 하나뿐이고, 대상이 매입임대 거점관리소 직원(FO_HW)으로 고정돼 있음. FO_MNGR(관리소장) · SBD_MNGR(건설임대 단지관리자) · MVIN_MNGR(Q+매니저) · ARA_HDQ_MNGR의 승인은 어디서 처리하는지(시스템관리자 웹인지 DB 직접 처리인지) 운영 담당자 확인 필요. 승인 API가 대상 계정의 역할·소속을 검증하지 않으므로, 이 화면으로 다른 역할 계정을 승인해 온 사례가 있는지도 함께 확인 필요.

확인 필요

③ 홈넷 연동상태 DC / SU 로 바꾸는 주체 건설임대 단지가 대시보드·보고서에서 빠지는 기준이 이 두 값인데 LMC에는 이 값으로 바꾸는 코드가 없음. 어느 시스템·배치·수동 작업이 이 값을 바꾸는지 확인 필요. “단지가 갑자기 집계에서 사라졌다” 문의의 근본 원인 추적에 필요함.

확인 필요

④ 집계 테이블 적재 주체와 수행 시각 위 배치 절의 집계 테이블은 전부 LMC 밖에서 채워짐. 어느 시스템의 어떤 작업이 몇 시에 적재하는지 확인해야 “대시보드 숫자가 어제 것에서 멈췄다”는 문의에 답할 수 있음. 특히 cmn.tb_sbd_opr_dly_y, cmn.tb_app_us_dly_y, cmn.tb_kpi_pfm_y가 중요함.

확인 필요

⑤ 전자투표 상태(VT_SS_CD)를 바꾸는 주체 PREINGCMP 전이 SQL이 LMC에 없음. 앱 서버인지 배치인지 확인 필요. “투표 시작 시각이 지났는데 상태가 그대로”라는 문의가 이 경로와 직결됨.

확인 필요

⑥ 시스템 공지(ANN) 첨부가 실제로 어느 경로에 저장돼 있는지 시스템 공지 상세 화면에 “다운로드 API 확인 후 수정” TODO 주석이 남아 있음. 자료실은 FIL 경로를 쓰는데 공지 첨부가 ANN 경로에 있다면 현재 공지 첨부 다운로드가 실패함. 서버의 실제 업로드 경로 확인 필요.

확인 필요

⑦ 안전세대 여부 Y / N 의 업무 정의 세대 상세·수정 화면은 N을 “대상”, Y를 “미대상”으로 표시하는데 목록 검색의 “안전세대” 체크박스는 Y를 보냄. 둘 중 어느 쪽이 맞는 업무 정의인지 확인 필요. 지금은 운영자가 화면마다 반대로 읽을 수 있음.

확인 필요

⑧ 개인정보 취급 기록 대상 범위 취급 내역은 세대정보 상세 조회 한 곳에서만, 유형 “조회” 고정으로 남음. 건축정보 상세에서 관리사무소 담당자 전화번호를 복호화해 보여주는 것은 기록되지 않음. 기록 대상 범위가 이대로 맞는지 업무·감사 기준 확인 필요.

확인 필요

⑨ TLS 인증서 CA 교체 계획 인증서 재발급 명령이 파일명에 연도가 박힌 CA 파일을 참조함. CA를 교체하면 코드 수정 없이는 재발급이 실패함. 현재 CA 유효기간과 교체 계획 확인 필요.

확인 필요

⑩ 홈넷서버 ID 채번 한계 홈넷서버 ID 자동 채번의 숫자 포맷이 3자리임. 단지당 홈넷서버가 1000대를 넘으면 채번이 어긋남. 현재 최대 대수와 증설 계획 확인 필요.

관련

공개노트/개발/모듈/LMC 관리자 웹 공개노트/개발/모듈/LMC 결과 코드와 안내 문구 공개노트/개발/모듈/APW 연계 서버 공개노트/개발/경영평가 성과지표 공개노트/개발/대시보드 세대수와 단지 현황 공개노트/개발/관리비 등록 엑셀 파싱 공개노트/개발/관리자시스템 원패스 기기 목록 공개노트/개발/공지사항 미리보기 공개노트/개발/시스템 구성 기본매뉴얼/관리사무소/입주민 승인 처리는 어떻게 하나요 기본매뉴얼/관리사무소/관리비 등록이 안 돼요 기본매뉴얼/관리사무소/전자투표 항목이 삭제 수정이 안 돼요 기본매뉴얼/관리사무소/공지사항에 PDF 첨부가 안 돼요 기본매뉴얼/운영/보안 점검