Skip to content

Week1 peer session

kyungpyoda edited this page Oct 30, 2020 · 3 revisions

1주차 피어세션 8그룹

  • 작성일 : 2020. 10. 31.
  • 참여자 :
    • [15조] : 김신우, 유시형, 문혜라, 박진용, 강근우
    • [16조] : 시경덕, 양아림, 김석중, 홍경표, 최철웅

협업방식 공유

  • 프로젝트 초기 설정을 위해서 거의 대부분을 페어프로그래밍으로 진행*
  • 각자 기능 개발을 하고 PR을 올렸을 때 서로 세세하게 코드리뷰 진행
    • PR을 합치는 과정에서 발생한 충돌 같이 해결

기술공유

Web

  • typescript

    • JavaScript의 확장판.
    • 타입을 설정할 수 있어서 더욱 더 안정적인 프로그래밍이 가능.
    • airbnb eslint typescript 버전을 사용하면 더 일관된 코드 스타일 유지 가능.
    • 라이브러리들의 타입을 받기 위해서 @types/libraryName 주로 이런 방식으로 다운로드 받는다.
    • 라이브러리 자체에서 타입스크립트 지원을 해주는 경우도 있으니 자세한 내용은 구글링 하는 것이 좋다.
  • typeORM

    • createConnection 을 하는 과정에서 환경변수들 중 typeorm option 들과 관련된 것들을 인식하여 connect 가 실행된다.
    • ex) .env
      TYPEORM_HOST = 111.111.111.155
      TYPEORM_PORT = 3306
      
    • typescript decorater를 사용하여 entity와 relation을 정의
  • sequelize 라이브러리

    • .sequelizerc 설정 파일을 통해 특정 디렉토리에서 관련 파일이 생성되도록 설정
  • error 핸들링 모듈 구현

    • 라이브러리에서 발생하는 오류와 비즈니스 로직에서 발생하는 error 를 모두 핸들링 해주는 공통 모듈 구현
    • 비즈니스 로직에서 미리 설정한 메세지로 Error 인스턴스를 throw 해주면 공통 모듈에서 적절한 HttpError 객체를 생성하여 해당 status code 로 response 를 반환
  • git hook 라이브러리

    • husky 와 lint-staged 를 사용하여, commit 전 eslint 로 소스코드 품질을 점검
    • client 와 server 의 lint 규칙을 별도로 설정
    • client 와 server 상위에 web 프로젝트를 구성하고, web 프로젝트에서 husky 와 lint-staged 를 돌려서 커밋 시 client 와 server 프로젝트를 모두 점검할 수 있도록 구성
  • docker

    • docker 와 docker-compose 를 사용
    • docker-compose.yml 파일을 통해 직접적인 설치 및 초기 설정 작업 없이 빠르게 개발 환경과 운영 환경을 구성
    • 장점: 설계나 정책 상의 변경으로 인해 DB서버를 엎어야할 때 굉장히 빠른 시간(수초) 내에 DB서버 인스턴스를 구동시킬 수 있다. (비단 DB 서버 뿐만 아니라 linux와 같은 서버도 마찬가지)

물음표 투성이 iOS

  • 혹시 CI 설정하셨나요?

  • 테스트가능한 네트워크모델? <- 여기가 진짜 '갓'입니다!

  • ViewController 의존성 주입

    • TabbarController -> 각각의 ViewController로 ViewModel 주입
      • 제가 찾아봤는데 TabBar의 각 Controller들이 TabBar가 생성될 때 init 되고 버튼이 눌렸을 때마다 load 하는거 같더라구여 그래서 TabBar 생성시 의존성 주입해주도록 해놨어요 -> 💯
  • 캐싱은 어디서..?

    • 레이블, 마일스톤 탭 viewWillAppear() 때마다 서버에서 데이터를 불러오는 작업을 캐싱 처리를 해야하나요...?
    • 아 제가 말했던거는 만약에 Label -> Issue -> Label 이동시에 데이터가 어떻게 되는지에 대해서였습니다!
    • 음.. 그 사이에 서버의 Label 데이터에 변경이 생길 수 있으니 캐싱이 불필요하지 않을까요? 제가 이해한게 맞나요....? -> 오 이것도 일리가 있네요
    • 그러면 데이터 변경이 없을 수도 있을텐데 이런 경우에도 서버 요청을 하는 건 조금 비효율적일 수도 있을거같네용
      -> 데이터 변경이 없는 경우에는 앱의 네트워크 계층에서 보다는 서버에서 캐싱처리를 해서 response를...........모르겠네요 흠 ㅋㅋㅋ ㅋㅋㅋㅋㅋㅋ
      -> 어렵네요... eTag라는 것도 있더라구요 그런거 도입해야되나여...
    • 이게 만약 이미지처럼 무거운 데이터가 있으면 이미지 정도만 캐싱을 하면 좋지 않을가,,
      • 음... LastUpdated 시간을 받아놓고 사용하면 효율적으로 할 수 있지 않을까요? 아!! 종종 어떤 서비스에서 refresh가 너무 많아지면 잠시 후에 새로고침 해달라는 식으로 하지 않나요? LastUpdate가 1분 이내면 캐시를 재사용하고 1분이 넘으면...
  • 아키텍처 패턴

    • MVC
      • 저희는 MVC에서 객체 역할을 잘 분리하면 VIP나 VIPER와 비슷한 구조가 되는 걸 목표로 하고 있습니다
      • 👍
- MVVM
  • 이번에는 MVVM을 도전해보는 마음으로..! :thinking_face:
  • 💯

갓신우 갓시형님 저희꺼 코드리뷰 해주러 종종 놀러오세요

15조화이팅

공통

git

  • rebase 시 commit 하나하나에 대해서 resolve 을 하는 과정에서 코드가 날라가는 현상이 발생했었고 이에 대해 논의

    $ git checkout dev_iOS
    $ git pull origin dev_iOS
    $ git checkout feat/ios/network
    $ git merge dev_iOS
    # 충돌해결 후
    $ git add .
    $ git merge --contiune
    $ git push origin feat/ios/network
    # [Pull Request] feat/ios/network -> dev_iOS
    
    #--------------------------------
    
    # 혹은 
    $ git push origin feat/ios/network
    # [Pull Request] feat/ios/network -> dev_iOS
    # 깃허브에서 Resolve Conflicts
    # 이 과정이 위의 로컬에서 CLI로 하는 방법과 거의 유사함
  • shell alias로 쉽게 명령하기!

    # 커밋 로그 이쁘게 출력하기 (시스템 종료하면 사용불가)
    $ alias gloga=‘git log —oneline —decorate —graph —all’
    
    # 시스템 부팅시마다 적용시키려면 
    # ~/.bash_profile or ~/.zshrc 등의 파일에 위 명령어 삽입

    ex) ~/.bash_profile image

🗂 Project

❗️ Ground Rules

🧩 Trouble Shooting

🗒 API Details

⭐️ Output


🗓 Minutes of meeting
🗓 Daily Scrum
🗓 Peer Session
🗓 Retrospective
Clone this wiki locally