블로그

레거시 결제/정산 백엔드 서비스 재구축

1. 프로젝트 소개>프로젝트 목표:현재 운영 중인 레거시 결제/정산 백엔드 시스템의 구조적 문제점(낮은 유지보수성, 강한 종속성, 불안정한 확장성)을 해결하고, 클린 아키텍처를 적용하여 고도로 안정적이며 변화에 유연하게 대응할 수 있는 차세대 결제/정산 시스템으로 전환하는 것입니다.>주요 기능:핵심 결제 로직 재구현: 안정적인 결제 승인, 취소, 환불 로직 처리.정산 시스템 고도화: 일별/월별 정산 데이터 생성 및 관리, 복잡한 수수료 및 분배 로직 처리.PG사 연동 모듈 분리: 다양한 외부 결제대행업체(PG사) 및 금융기관 연동을 위한 인터페이스(Gateway)를 명확히 분리하여, PG사 변경이나 추가에 유연하게 대응.고성능 트랜잭션 처리: 대량의 결제 트래픽을 안정적으로 처리할 수 있는 성능과 트랜잭션 무결성 확보.2. 클린 아키텍처 선택 동기-기존 레거시 방식의 문제점기존 레거시 결제/정산 시스템은 다음과 같은 구조적 문제점을 내포하고 있어, 장기적인 운영 및 개발에 심각한 어려움을 초래했습니다.DB/프레임워크에 종속된 비즈니스 로직:핵심 결제 및 정산 비즈니스 규칙이 데이터베이스 접근 코드(SQL, ORM)나 특정 웹 프레임워크(예: Spring Controller, Django View)의 구현체에 강하게 결합되어 있었습니다.이로 인해 DB 스키마나 프레임워크 버전이 변경될 때마다 핵심 비즈니스 로직까지 대규모의 수정이 필요했습니다.-낮은 유지보수성과 확장성:시스템의 핵심인 결제 로직이 외부 기술과 얽혀있어, 새로운 결제 수단이나 복잡한 정산 정책이 추가될 경우 코드 전체를 건드려야 했으며, 이 과정에서 코드의 유연성과 유지보수성이 현저히 저하되었습니다.-테스트의 어려움:순수한 비즈니스 로직을 테스트하기 위해서도 반드시 데이터베이스 연결이나 웹 환경 설정이 필요하여, 단위 테스트 작성이 어렵고, 기능 변경 후 안정성을 신속하게 검증하기 어려웠습니다.-클린 아키텍처 적용 동기결제/정산 시스템은 회사의 수익과 직결되는 미션 크리티컬(Mission-Critical)한 핵심 도메인입니다. 클린 아키텍처는 이러한 핵심 도메인의 안정성과 장기적인 유지보수성을 극대화하는 최적의 솔루션입니다.-핵심 비즈니스 로직 보호 (Independent of Frameworks, DBs, UIs):클린 아키텍처는 핵심 비즈니스 규칙(도메인)을 DB, Web Framework, UI와 같은 외부 기술 요소로부터 완벽하게 분리하여 보호합니다.이는 시스템의 생명주기가 길어질수록, 프레임워크의 변화나 DB 마이그레이션과 같은 외부적인 변화에도 결제/정산 로직의 안정성을 흔들림 없이 유지할 수 있게 합니다.-높은 테스트 용이성 확보:Use Case(유스케이스, Interactor) 계층에 비즈니스 로직을 집중하고, 이를 외부 인프라(DB Repository)의 구현체에 의존하지 않도록 설계합니다.결과적으로 DB 연결 없이도 순수한 비즈니스 로직만을 독립적으로 테스트할 수 있어, 리팩토링 및 기능 확장 시 안정성을 매우 높일 수 있습니다.-SOLID 원칙 준수 및 장기적인 유지보수 극대화:클린 아키텍처는 SOLID 원칙을 자연스럽게 유도하며, 특히 SRP(단일 책임 원칙)와 OCP(개방-폐쇄 원칙)에 따라 시스템을 설계하도록 장려합니다. 이는 결제, 정산, 환불 등 각 기능별 유스케이스의 책임을 명확히 하고, 기존 코드를 수정하지 않고도 새로운 기능을 추가할 수 있는 유연하고 확장 가능한 구조를 확립합니다.  

[수학로그] 그룹 액션, 실로우 정리 WIP

개인적으로 수학 공부를 하고 있었는데 이걸 기록으로 남겨도 누군가에겐 쓸모가 있겠다는 생각이 들었다.(설명을 위한 글이 아니라 뭐라도 남기는 것이라 설명이 깔끔하지 못한 점 양해 부탁드립니다.)An infinitely large napkin이라는 책을 예전에 한 번 읽어본 적이 있는데, 그 때는 실로우 정리를 그냥 확인만 하고 넘어갔다.며칠 전에 문득 그룹 액션이 궁금해져서 이 부분만 확인하는 과정에서 실로우의 정리의 앞부분까지 보게 되었다.실로우 정리 중반부에서 "여기서 미친 발상이 나옵니다!" 이러는데 내가 미쳐버릴 것 같아서 책을 덮었다.  그룹 액션(G, X) -> X의 타입을 가지는 함수를 정했지만 G -> (X -> X)로 해석해도 좋은 것 같다.상황에 따라 유리한 관점으로 해석하면 좋을 것 같다.그룹 액션의 정의만 만족한다면 X에 아무거나 들어갈 수 있어서 첫인상보다 범용성이 넓다는 느낌을 받았다. 실로우 정리 앞부분에 그룹 액션 적용하는 것 보면서 느낀 점이다G랑 X의 구조에 따라 그룹 액션의 의미도 달라지는 것 같은데 이걸 엄밀한 수식으로 표현할 줄 몰라서 아쉽다.Orbit-Stabilizer Theorem각 Orbit을 { Gx | x in X }의 원소로 생각하자.Orbit을 사용하면 G와 X를 연결지을 수 있다.각 Orbit과 동형사상을 이루는 G의 subgroup이 존재한다.뭔가 이상하다, 왜 kernel이 아니라 image가 subgroup인 거지? kernel이 normal한가? 검토가 필요하다. 앞부분 차근차근 복습해서 오개념을 확실히 잡아야겠다.Sylow 정리에서 X도 군인 경우에 그룹 액션을 적용해서 착각한 것 같다.각 Orbit은 X를 분할한다.그룹 액션을 a: G -> X -> X로 보고, X가 Orbit들 O_1, O_2, ... O_k로 분할된다고 가정하자.이 때 임의의 g: G에 대해 a(g): X -> X를 각각 O_1 -> O_1, O_2 -> O_2, ..., O_k -> O_k에 속하는 k개의 함수들의 순서쌍(= 곱집합의 원소)으로 나타낼 수 있다. Stabilizer얘는 G의 부분군이 맞다.임의의 Orbit의 임의의 두 원소 x, g*x에 대해서 Stab(g*x) = g Stab(x) g^(-1)이라는 사실이 이해에 도움이 많이 되었다.실로우 정리 증명에서 이 2가지를 가지고 주구장창 우려먹는 느낌을 받았다.Bernstein's Lemma처음 볼 때는 집합 { (g, x) | x = g * x }의 크기를 2가지의 서로 다른 방법으로 세는 방식으로 증명했었다.지금은 각 Orbit에 대해 |O| |S| / |G|를 합해서 Orbit의 갯수를 구했는데 더 직접적으로 증명하는 것 같아서 마음에 들었다.실로우 정리Napkin에 나온 증명은 Sylow p-group의 존재성 증명 -> p-group의 성질 밝히기 -> 실로우 정리 증명이었다.존재성 증명까지는 따라갔던 것 같은데 p-group의 성질은 따라가는 데 급급해서인지 지금은 까먹었고 실로우 정리 증명에서 책을 덮었다.모르는 부분은 나중에 다시 보면 된다.증명에서 새로운 개념을 많이 도입하는데 이 때 이 개념의 타입을 명시적으로 생각하는 게 이해에 도움이 많이 된다.

수학군론학습일기

테온

반도체 Thin film 증착 공정 엔지니어는 어떤 일을 하는 사람일까요?

Thin film 증착 공정엔지니어는 어떤 일을 하는 사람일까요??제 나름대로의 정의해보자면,공정엔지니어는 "공학적 지식을 기반으로 실용적인 공정 문제를 해결하는 사람"입니다. 그렇다면, 실용적 공정 문제 해결이란 게 무엇이냐? 크게 두 가지로 나누어볼 수 있습니다. 첫번째로, 공정조건 : 레시피를 개선하는 업무입니다.요구되는 특정 스펙을 갖는, 어떤 박막을 증착하기 위해 압력, 온도, 가스, 유량과 같은 파라미터(parameter)를 수정하면서 해당 레시피를 개선하는 일을 합니다. 두번째로 설비 문제 개선 관련 업무입니다.공정 설비가 생각보다 고장이 매우 자주 일어납니다. 그렇기에 설비에 Error가 발생하면, 어떤 원인으로 Error가 났는지 확인하고 복구시키는 작업이 필요합니다.설비를 직접적으로는 설비 엔지니어가 담당하지만, 공정엔지니어 역시 설비엔지니어와 함께 issue를 follow up해야하며,설비 issue가 모두 clear된 이후 공정을 진행해보고, 설비가 정상인지: 이전 공정 결과와 동일한지 비교하는 업무를 수행합니다. 학교에서 배웠던 전공지식도 중요하겠지만, 실제 회사에서 업무를 수행해보면 학교에서 배우는 것과는 조금 거리가 있습니다.제가 실제 일을 해보면서 중요하다고 느꼈던 것은,공정 결과 데이터를 해석하고 간결하게 설명할 수 있는 능력이 중요하다는 것입니다.공정엔지니어는 주로 공정을 진행해서 데이터를 얻고, 그 데이터를 해석 및 간결화하여 상부에 보고하는 일을 합니다.그렇기에 데이터를 해석하고 설명하는 것이 가장 중요합니다. 이때 필요한 역량으로는 2가지를 꼽아볼 수 있습니다. 첫번째로, 통계적인 해석입니다.저는 통계적인 부분이 가장 중요하다고 생각하는데요.CVD공정 같은 경우에는(다른 공정도 마찬가지일 것입니다.) 워낙 parameter나 장비가 복잡하기 때문에,공정을 진행하면서 나온 방대한 데이터를 이론적으로 따져 보는 데에는 한계가 있고, 심지어는 이론이랑 잘 맞지 않는 결과가 나올 가능성도 많습니다.그래서 이 방대한 데이터에서 통계적으로 어떤 경향성을 띄거나 의미 있어 보이는 데이터를 추출하고 이를 해석하여 가설을 설정, 그리고 실험을 계획해서 공정 평가를 진행하고 결과를 해석하는 과정을 반복합니다. 예를 들어, 우리가 Silicon nitride라는 박막에서 요구되는 스펙으로 uniformity를 1% 이하로, 균일하게 만들어야 하는 업무를 받았다고 생각해보겠습니다.지금까지 진행했던 공정 데이터를 죽 모아서, 열심히 통계적으로 해석해봤는데.. 파라미터 A를 건드렸을 때 uniformity가 변한다는 걸 발견했다고 해보겠습니다.그렇다면 우리는 데이터 해석을 바탕으로 파라미터 A가 Silicon nitride의 uniformity를 변화시킨다는 가설을 설정합니다.이어서 파라미터 A를 건드려보는 실험 계획을 짜고, 평가를 진행하여 데이터를 확인합니다. 이때 예상대로 파라미터 A가 uniformity에 큰 영향을 준다는 것이 확인되면,파라미터 A를 적절히 변화시켜 우리가 원하는 스펙의 박막을 증착할 수 있습니다. 방대한 데이터를 다루는 일이기 때문에, 엑셀이나 Python, JMP 등 통계기반 툴을 다룰 줄 알거나, 통계 지식을 활용할 수 있다면, 업무를 수행하는 데 큰 도움이 될 것이라고 생각합니다. 두 번째로 공학적 지식입니다.데이터를 해석한 뒤에 타부서 엔지니어들에게 설명해야 하는 일이 많을 것입니다.단순히 통계 기반으로 공정을 진행하여 된다...에서 그치는 게 아니라,"이론적으로 어떤 원리로 파라미터 A를 증가시켰더니 uniformity가 1% 이하로 떨어진다"라고 설명하여 설득력을 높여야 합니다.또한 관련하여 이론적인 공부가 받침이 되어야 데이터를 추출하거나 실험을 계획할 때 훨씬 수월합니다. 혼자 찾아볼 때에는 구글링으로 논문이나 자료를 찾아보고,회사에 다니게 된다면 직장 선배에게 질문하는 것이 가장 효과적입니다.아무래도 이론과 실제 회사 업무에서의 차이가 있기 마련이기 때문에, 질문을 통해 배우고자 하는 자세를 갖는 것이 중요합니다.

반도체공정기술공정개발반도체

채널톡 아이콘