애드소프트 기술블로그

개발·서버 운영 실무 기록

애드소프트 박재호입니다. IIS·ASP.NET 웹 서비스와 메일서버를 직접 운영하고, Unity 게임과 데스크톱 앱을 만들며 겪은 문제와 해결 과정을 기록합니다.

최신 글

기상청 초단기예보와 체감온도 계산 — 날씨로 메뉴 추천하기 (C# BackgroundService)

기온 12℃ 는 쌀쌀한가? 숫자 하나로는 답이 안 나왔다. 앞으로 6시간을 주는 초단기예보를 단기예보 위에 겹치고, 끼니 시간의 기온과 바람으로 기상청 체감온도를 계산하고, 어제와 비교하고, 계절까지 보정해서 식단서랍이 '국물이 당기는 날'을 고르는 방식을 정리했다. 요청마다 기상청을 부르지 않는 백그라운드 갱신 구조도 함께.

기상청 격자 좌표 nx, ny 변환 — 위경도 C# 코드와 단기예보 응답 파싱

기상청 단기예보는 위도·경도가 아니라 5km 격자 번호 nx, ny 로 묻는다. 활용가이드의 람베르트 정각원추 변환식을 C# 으로 옮겨 시·도 대표 지점으로 검증하고, 사용자 위치를 받지 않기로 한 이유, 944줄짜리 세로 목록을 시각별 날씨로 펼치며 만난 '강수없음'·'1mm 미만' 같은 값까지 정리했다.

기상청 단기예보 API 첫 호출 — 서비스 키 403, base_time, resultCode 정리 (C# 예제)

활용 신청을 마친 키로 기상청 단기예보를 불렀더니 403 SERVICE_KEY_IS_NOT_REGISTERED_ERROR 가 돌아왔다. 키는 맞았고, 한 번 더 인코딩한 것이 문제였다. 서비스 키 인코딩, 발표 시각 base_time 고르기, HTTP 200 안에 숨어 오는 resultCode 10·03 까지, 식단서랍에 날씨를 붙이며 확인한 것들을 C# 코드로 정리했다.

업로드는 끝났고 빈칸이 남았다 — TestFlight 에서 App Store 심사 제출 앞까지

TestFlight 업로드가 성공했다는 메시지를 보고 반은 끝났다고 생각했다. App Store Connect 에는 연령 등급 설문, 앱이 수집하는 개인정보 신고, 6.9형 스크린샷, 빌드 선택이 줄지어 기다리고 있었다. 내부 테스트와 심사의 경계부터 심사 제출 버튼 앞까지 채운 칸들, 그리고 아직 심사 전인 지금의 이야기로 연재를 마친다.

카카오 로그인 옆에 사과 버튼 — 웹 로그인에 Apple 로그인을 넣고 앱 안에서 열기까지

식단서랍 웹에는 이메일 가입과 카카오 로그인이 있다. 그대로 아이폰 앱에 담으면 App Store 가이드라인 4.8 에 걸린다. 서버에 Sign in with Apple 을 넣고, Apple 이 form_post 로 돌아오는 웹 흐름을 WKWebView 안에서 끝까지 이어지게 하고, 내친김에 카카오 쪽에서 연결이 끊길 때의 처리까지 붙였다.

Kings Online Security 를 지운 뒤 남은 것 — KOSSvc.exe 방화벽 규칙 6개와 Local Root CA 정리하기

Kings Online Security(KOSSvc.exe, KOSinj.exe)는 킹스정보통신의 키보드 보안 프로그램이다. 이 PC 에서는 프로그램 폴더도 서비스도 앱 목록 항목도 이미 사라졌는데, 들어오고 나가는 연결을 모두 허용하는 방화벽 규칙 6개와 20년짜리 Local Root CA, 빈 레지스트리 키가 남아 있었다. 무엇이 남는지, 왜 신경 써야 하는지, 직접 정리하는 방법을 적었다.

ExECM.exe 와 ExEcmInstallerService 는 무엇인가 — CoreB2B ExEcm, 설정은 127.0.0.1 인데 0.0.0.0:18181·18281

작업 관리자의 ExECM.exe 는 CoreB2B ExEcm 1.1.5.4 로, 이노가드 서명이 붙은 .NET 프로그램이다. 서비스 ExEcmInstallerService 가 띄우고, 설정 파일에는 host 127.0.0.1 이라고 적혀 있지만 실제로는 0.0.0.0:18181·18281 에서 연결을 받는다. 설정 파일에 드러난 파일 전송 기능, 2023년에 만들어진 ExEcm-Root-CA, 지우는 방법을 정리했다.

UniCRSLocalServer.exe 와 CCDaemon.exe 는 무엇인가 — 한국전자인증 CrossCert UniCRS, 0.0.0.0:15018 과 OpenSSL 1.0.2a

작업 관리자의 UniCRSLocalServer.exe 와 CCDaemon.exe 는 한국전자인증(CrossCert)의 "CROSSCERT UniCRSV3" 다. 서비스 없이 Run 키 세 개로 뜨고, CCDaemon 이 로컬 서버를 띄우며, 0.0.0.0:15018 에서 연결을 받고 방화벽 허용 규칙도 있다. 폴더 안의 OpenSSL 1.0.2a, 그대로 남은 설치 파일, 지우는 방법을 정리했다.

kpmcnt.exe 와 KicaPMSvc 는 무엇인가 — 한국정보인증 SecuKit NXS, 127.0.0.1:14315 와 KICA NXS Root CA

작업 관리자의 kpmcnt.exe 와 kpmsvc.exe 는 한국정보인증(KICA)의 프로그램이고, 설치된 앱 목록에서는 SecuKit NXS 라는 다른 이름으로 보인다. 서비스 KicaPMSvc 가 kpmcnt.exe 를 띄우고 다시 살리는 구조, 127.0.0.1:14315, 2016년에 만들어진 KICA NXS Root CA, 이름이 세 갈래라 지울 때 헷갈리는 점을 정리했다.

SKCertService.exe 와 SignKoreaWD 는 무엇인가 — 코스콤 SignKorea 인증 프로그램, 127.0.0.1:14098 과 1년짜리 루트

작업 관리자의 SKCertService.exe 와 SignKoreaWD.exe 는 코스콤의 "SignKorea NA Certification Toolkit" 이다. 증권사 사이트가 공동인증서 서명용으로 설치를 요구하는 프로그램으로, 서비스가 프로세스를 지켜보며 띄우고 127.0.0.1:14098 에서 https 로 답한다. 실제 PC 에서 본 구조, 1년짜리 루트 인증서, 알려진 취약점과 지우는 방법을 정리했다.