개발 경험
외부서비스(통신사, 페이코) API연동 개발
현 프로젝트의 회원 멤버십등급과 국내 통신사(SKT, LGU+)의 멤버십등급을 활용한 마케팅(오퍼지급) 을 위한 통신사 시스템 연동과 Payco의 결제수단을 지원하기 위한 소셜로그인 연동 개발을 했습니다. 외부의 통신 관련해서는 다음과 같은 처리 흐름으로 진행 했습니다.
-> Client 입력(외부로 전달할 데이터)
-> 통신(TCP/IP, HTTP)
-> 외부 시스템 처리 및 응답
-> 응답 데이터 활용한 내부 비즈니스 로직 수행
처리 흐름 중 통신(TCP/IP, HTTP) 부분은 공통적으로 사용이 되어 인터페이스 설계를 통해 각 통신사별 구현체를 만들어 구현 하였고, 통신하는 부분은 모듈화하여 사용 되도록 구조를 잡았습니다. 또한, 통신 후 응답 데이터의 처리 방식은 외부 서비스 마다 데이터 형식(Json, Xml, String)이 상이하여 컨버터모 듈을 만들어 사용가능하도록 구현했습니다. 그 외로는 버전관리를 위해 URL Path의 버전경로를 "~/ v1/~" 구분, Timeout, IP, Port는 Property로 값을 분리하여 관리되도록 구현했습니다.
회원그룹 분리 및 관리 구조 설계
현 프로젝트에는 면세품을 대량 구매하는 도매상이 있고 해당 도매상 들은 총 매출의 약 60 ~ 70%를 차지하고 있습니다. 이러한 도매상을 시스템 내부적으로 관리 및 일반 고객과의 차별화가 필요 하였고 제가 맡은 부분으로는 회원을 일반그룹과 도매그룹으로 나누어 현업에 의해 관리가 가능하게 개발 하 는 것 이였으며, 구조와 개발은 다음과 같이 진행했습니다.
-> DB 스키마 추가 및 변경
-> Interceptor를 통한 도매그룹 Table과 도매회원 추가, 변경시 동기화
DB 스키마 추가 및 변경은 "관리자"와 "도매그룹"은 1:1관계, "도매그룹"과 "도매고객"은 1:N관계로 설계 하였습니다. 1:1 관계에 대해서는 도매그룹에 관리자의 PK를 갖고있는 속성을 두었으며 1:N관계 에 대해서는 서비스가 되고 있으며 빈번하게 수정, 추가되는 회원테이블의 스키마 변경에 대해서 지양 하기 위해 도매그룹과 회원(도매고객)의 PK를 갖는 릴레이션 테이블을 추가로 만들어 사용했습니다. 위 와 같이 설계하여 추가한 그룹을 통해 현업에 의해 관리가 되고 도매고객의 경우 주문을 할때 상품의 일 일 판매 재고량 을 별개로 두어 도매상에 의해 인기상품이 품절 되는 현상을 방지할 수 있었습니다.
기존 시스템을 활용한 모니터링 알림 구현
현 프로젝트의 서버관리 주체는 삼성SDS에 있었고, SDS에서의 시스템과 공통으로 설정된 임계수치값 을 사용하기에 변경할 수 없는 환경입니다. 이러한 환경으로 서버 모니터링에 어려움이있어 내부인력 에 한해 알림이 되도록 구현한 경험이 있습니다. 관제하는 목록으로 크게 서버, 서비스, DB데이터 상태 를 체크하는 것을 모니터링 대상으로 설정하였습니다.
서버 -> Busy Worker, Memory, CPU, close_wait, Log 디렉토리 사용률 서비스 -> Log File 기반으로 OOM으로 인한 서비스 다운여부
DB -> Tablespace 사용률, DB Lock체크
상태 체크와 임계설정은 각각의 관제하는 ShellScript를 만들어 사용했으며, ShellScript의 위치는 모든 서버의 공용으로 사용되는 NAS의 Storage영역에 배치하여 접근하도록 했습니다. ShellScript 동작 주 기는 Linux의 Crontab을 활용해 Critical한 체크는 1분, Noarmal한 체크는 1일 1회 스케줄 등록하여 사용 중이며 발송 대상은 xml의 Key, Value 형식으로 발송대상을 그룹화 했습니다. 발송 채널은 현 서 비스의 주문, 회원가입, 회원탈퇴 등.. 정보성 알림으로 사용중인 Kakao알림톡을 활용하여 발송되도록 구현했습니다.
해당 구조를 적용 후 현재는 서버모니터링을 유지하며 추가적으로하며 파트별 필수 데이터 누락으로 인 한 이슈발생 여부를 알림으로 수신되게 하였습니다.
Apache 차단 정책을 활용한 Bot 차단처리
온라인 면세점으로 경쟁사들이 있으며, 각 서비스별 상품가격 및 할인율 비교를 통한 구매를 위해 크롤 링 Bot이 전체 트래픽 중 최소 30~40%를 차지하고 있습니다. 이를 막고자 ShellScript를 작성하여 다 음과 같이 처리하였습니다.
-> WEB Server Access Log의 현재시간 ~ 지난 60분 동안의 IP리스트를 추출 -> 추출한 Raw Data를 IP기준으로 카운팅하여 카운트가 높은 순으로 정렬
-> 설정한 임계카운트 이상의 IP를 필터링
-> Apache .htaccess에 "SetEnvIf ip_info alias" 형식으로 추가
최초 deny IP List는 Apache의 .htaccess file에 "SetEnvIfNoCase"를 설정하여 사용하였습니다. 지속 적으로 추가되다 보니 누적된 IP가 총 8000여개가 넘어가게 되었고 WEB(Oracale HTTP Server)의 모 든 요청을 8000여개가 넘는 IP를 체크를 하게 되며 CPU가 상당히 높아졌습니다. 이러한 현상을 해결 하기 위해 deny.conf를 새롭게 정의하고 httpd.conf file에 include를 통한 인스턴스 기동 시 메모리 에 올리는 정적방식으로 변경하여 CPU의 수치가 줄어드는 효과를 얻었습니다. 현재 악의 적인 접근을 차단하는 방식으로.htaccess를 통해 agent와 ip를 동적으로 차단하고 있으며, 일주일정도 모니터링 후 deny.conf인 정적차단 리스트로 대상을 이관하여 관리하고있습니다.
그 외 개발 경험
Ksign 솔루션을 통한 개인정보 암호화 처리
1) WEB(OracleHTTPServer)의httpd.conf의랜딩URL수정을통한작업공지처리.
2) DBCpucore개수를비교하여Parallel수치를설정하여몇천만의타겟데이터마이그처리
휴면회원 처리 및 복원처리
1) 배치를통한미로그인11개월고객휴면처리법적고지메일발송기능
2) 배치를통한미로그인12개월고객휴면처리(휴면테이블로고객데이터이관) 3) 휴면계정로그인시휴면테이블로부터고객테이블로데이터이관처리하여복원
Kakao 알림톡 기능 추가
1) 솔루션서버에Agent설치
2) 솔루션DB에사용DB스키마생성
3) 정보선알림로직에Kakao알림기능으로대체추가
WAS 모니터링 구현
1) WAS의응답상태노출
2) FILE기반으로WAS상태기록
3) 기록된WAS의상태(응답시간)을통해그래프화(JUI오픈소스활용)
더보기