cloud-barista / cm-data-mold

Apache License 2.0
2 stars 1 forks source link

Feature/datamold #18

Closed jjang-go closed 11 months ago

jjang-go commented 11 months ago
yunkon-kim commented 11 months ago

@jjang-go 작업하시느라 고생 많으셨습니다!

오랜만에 100개 가량의 파일을 리뷰해 보는 것 같습니다 ^^

아래 사항을 중점적으로 테스트 및 리뷰를 진행했습니다. 혹시 추가로 살펴봐야할 부분이 있다면 말씀해 주시기 바랍니다.

  1. cm-data-mold 구동 테스트 (환경, AWS EC2 Ubuntu 20.04, Go 1.21.3)
  2. CLI (./cm-data-mold server)를 활용한 웹 서버 실행 및 페이지 둘러보기
  3. Gin Web Framework (Handler, Route) 코드 리뷰 및 Echo Web Frameowork와 개발상 차이점 분석
  4. service 디렉토리의 controller(?)가 cmd 디렉토리에서 활용되는 것 정도만을 파악한 상태
  5. logrus를 활용한 logging 추가 확인
  6. 데이터 종류 및 생성 파트 확인

질문/요청 드립니다.

  1. React에서 "web : form data binding으로 변경하여 코드 간소화"로 변경하신 사항이 맞으신지요?
  2. service 디렉토리와 cmd 디렉토리의 관계를 간략히 설명 부탁드립니다. (이후 문서상에 관련 내용을 정리해 주시기 바랍니다.)
  3. 데모 영상에 나오는 각종 스토리지와 pkg 내의 스토리지의 연관성이 있는 부분인지요? 1:1 매핑이 되지 않는 것 같아 문의를 드려봅니다.
  4. cmd 디렉토리의 내용은 CLI에 대한 구현체가 맞을까요? Standard Go Project Layout과 상이하여 문의드립니다.

이번 PR에 많은 파일들이 관련되어 있어 마이너한 수정의견들을 Issue로 생성해 놓도록 하겠습니다. 차차 개선해 주시기 바랍니다 ^^

jjang-go commented 11 months ago

@yunkon-kim 많은 파일 하나하나 리뷰 해주셔서 감사합니다!

아래는 질문에 대한 답을 정리했습니다!

Q: React에서 "web : form data binding으로 변경하여 코드 간소화"로 변경하신 사항이 맞으신지요? A: 원래 중복된 코드 리팩토링을 적기 전 간단하게 작성해 놓은 히스토리를 실수로 그대로 작성했습니다. 기존에는 gin에서 ctx.PostForm함수를 통해 하나하나 postData를 받아왔는데 ctx.ShouldBind()이용하여 구조체를 받아오면서 web코드를 간소화 작성했습니다. React와는 관계가 없습니다!

Q: service 디렉토리와 cmd 디렉토리의 관계를 간략히 설명 부탁드립니다. (이후 문서상에 관련 내용을 정리해 주시기 바랍니다.) A: service 디렉토리는 동일한 함수를 가진 패키지들을 하나로 사용하려고 만든 디렉토리이고 cmd디렉토리는 사용자가 요구하는 명령을 service내 controller들을 이용하여 다양한 CSP의 서비스를 실행 가능도록 구성되어있습니다. 추가적으로 설명 드리면 cmd디렉토리에 별다른 명령을 추가하거나 코드를 수정하지 않아도 여러 csp의 objectstorage나 rdbms, nosql을 손 쉽게 추가하려고 구성했습니다. 현재 objectstorage로 예을 든다면 gcsfs와 s3fs는 다른 csp이지만 service에 osc의 osfs인터페이스를 이용하여 둘 다 osc를 이용하여 명령을 실행할 수 있습니다. 이렇게 구성한 이유는 추후 여러 csp들을 추가할 때 큰 문제가 없다면 cmd나 웹코드를 많이 수정하지 않고 pkg내에 해당 csp의 pkg만 추가하면 손 쉽게 이용 가능하도록 하려고 구성했습니다.

Q: 데모 영상에 나오는 각종 스토리지와 pkg 내의 스토리지의 연관성이 있는 부분인지요? 1:1 매핑이 되지 않는 것 같아 문의를 드려봅니다.

A: 현재 영상에 나오는 각종 스토리지와 pkg 내의 스토리지(s3fs, gcsfs)는 연관되어있습니다. 패키지 명으로 봤을 때 s3fs는 aws s3, gcsfs는 google cloud storage의 패키지입니다. 1:1 매핑이 되지 않는 이유는 ncp는 objectstorage를 자체적으로 제어하는 sdk를 제공하지 않고 스토리지 관리와 사용에 필요한 S3 API를 제공합니다. 그래서 ncp는 aws.Config생성 시 endpoint를 별도로 추가하여 s3fs패키지를 이용합니다. 추후 다른 csp를 objectstorage를 추가하게 되더라도 별도의 sdk가 없고 s3 api를 제공한다면 ncp와 같은 방식으로 구성될 것입니다. (nhn cloud도 네이버와 동일하게 s3 api만 제공합니다)

Q: cmd 디렉토리의 내용은 CLI에 대한 구현체가 맞을까요? Standard Go Project Layout과 상이하여 문의드립니다. A: cli에 해당되지 않는 코드가 있습니다. 이부분은 빠른 시일 내 /internal로 코드를 옮겨놓겠습니다!

yunkon-kim commented 11 months ago

@jjang-go 상세히 설명해 주셔서 감사합니다.

덕분에 모든 내용을 잘 이해했습니다 ^^