Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 96 additions & 0 deletions asis/ARCHITETURE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# 요구사항
- [x] 담당 하는 업무에서 비효율적인 프로세스나 기술적 개선을 하고 싶은 부분의 현재 구조를 문서화 한다.
- [x] 비효율적인 부분에 대한 분석내용을 정리한다.
- [x] 비효율적인 부분에 대한 프로세스 또는 시스템 구조를 그려본다.


# 🚀미션
- 이름 : 김신영

# 개선포인트 분석
- 절차지향적 프로그래밍으로 구현된 레거시 코드로 인해, 코드 분석에 많은 시간이 소요되고 유지보수성이 떨어진다.
- 외부 도메인 데이터를 따로 DB에 저장하고 있어서, 동기화 처리 요청이 매일 5~30건 수동으로 처리되고 있다.
- 개발 업무 진행시, 문서화가 부족하여 개발자들이 서로 다른 방식으로 개발을 진행하고 있다.
- 현재 테스트 코드가 모두 개발 DB(MySQL)에 의존하고 있어서, 테스트 코드를 실행하기 위해 개발 DB에 접근하는 것이 필수적이다.
- 개발 DB에 접근하기 위해서는 개발 서버에 접속해야 하고, 개발 서버에 접속하기 위해서는 VPN 접속이 필요하다.
- 개발 서버에 접속하기 위해서는 개발 서버에 접속할 수 있는 IP를 가진 PC가 필요하다.
- Github Actions를 통해 CI/CD를 구축하고 있지만, 테스트 코드를 실행하기 위해 개발 서버에 접속하는 과정은 자동화되어 있지 않다.
- 이에 따라, Github PR을 올렸을 때 자동으로 테스트를 실행하지 못하고 있다.
- Test Container와 Flyway를 이용하여 테스트 코드를 실행하기 위한 개발 DB를 자동으로 생성하는 방안을 고려하고 있다.

# 프로세스
## 레거시 코드 유지보수성 관련 프로세스
- 도메인 모델링이 제대로 되어 있지 않아서, 기능을 추가하거나 수정할 때 마다 코드 분석에 많은 시간이 소요된다.
- 기능을 추가하거나 수정할 때 마다, 수많은 if 분기문과 하드 코딩으로 인해 코드가 점점 더 커지고 복잡해진다.
- 코드 리팩터링을 통해 도메인 모델링을 제대로 하고, 기능을 추가하거나 수정할 때 마다 코드 분석에 소요되는 시간을 최소화하고 싶다.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

전체 구성원들의 참여가 필요해 보입니다.
리펙토링 이후에도 지속적으로 clean code를 하는 개발문화 정착도 필요해 보이네요.
리더를 하고 있기에 개인적인 개선과제를 이런 개발 문화 정착을 위한 것으로 잡아봐도 좋을것 같긴한데 과정기간동안에 진행 하기는 어려울 것 같긴 합니다.
개선 과제를 선정할때 이런 부분에 대한 의견도 고민해 주시면 좋을 것 같아요.


```mermaid
flowchart TD
A[기능요청] --> B(해당 기능 코드 분석)
B --> C(수많은 if 분기문, 하드 코딩)
C --> D(리팩터링, 도메인 모델링 필요)
C --> F(요청사항 구현)
D -- 시간부족 --> E(백로그 생성)
E --> H(무수히 많은 정리되지 않은 백로그)
F -- 더 넓어지고 커지는 레거시 코드 --> B
```

## 외부 도메인 데이터 동기화 관련 프로세스
- 외부 도메인 데이터에 대한 데이터 동기화를 수동으로 처리하지 않고 자동화할 수는 없을까?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수동으로 처리하는 시간이 얼마나 소요되는지 측정할 수 있을까요?

- 안정성, 가용성, 데이터 정합성을 고려하여 어떤 방식으로 구현할 수 있을까?

```mermaid
flowchart TD
USER_A("연관 도메인 사용자") --> Presentation2
USER_B("담당 도메인 사용자") --> Presentation

subgraph 담당_도메인_서비스
Presentation --> DomainService
DomainService(Domain Service) --> Repository[( Repository )]


end

subgraph 연관_도메인_서비스
Presentation2(Presentation) --> OtherDomainService
OtherDomainService(Domain Service) --> Repository2[( Repository )]

Batch -- 매일 아침 7시마다 데이터 주입 --> Repository

Repository2 --> Batch
end

Repository <-- 데이터 정합성 불일치 --> Repository2
```

## 개발 진행 시 문서화와 테스트 코드 관련 프로세스
- 개발 업무 수행시, 개발 문서 템플릿 작성 자동화할 순 없을까?
- 개발 진행 후, Github에서 PR올릴 때 자동으로 테스트 코드 실행할 순 없을까?
- Infra 의존성을 최소화하고, 테스트 코드를 실행할 수는 없을까?

```mermaid
flowchart TD
A[개발 미션 시작] -- 개발 문서 수동 작성 --> 개발_문서_작성
개발_문서_작성 -- JIRA 티켓으로부터 브랜치 생성 --> 개발_수행
개발_수행 --> 배포
배포 --> J(개발 미션 결과 작성: What?)
J --> K(개발 미션 종료)

subgraph 개발_문서_작성
B(개발 요청 사항 작성: Why?)
B --> C(개발 진행 계획 작성: How?)
end

subgraph 개발_수행
direction TB
E -- 코드 리뷰 반영 --> D
D(개발 진행) --> F(개발 진행 관련 테스트 코드 수행)
F --> E(코드 리뷰)
end

subgraph 배포
direction LR
G(PR Merge) -- 테스트 코드 수행 X --> H(배포)
H --> I(모니터링)
end
```
Binary file added asis/architecture-rolroralra1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added asis/architecture-rolroralra2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added asis/architecture-rolroralra3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.