Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[team-01][BE] 1주차 1회 PR #50

Merged
merged 3 commits into from Apr 6, 2022

Conversation

ku-kim
Copy link
Member

@ku-kim ku-kim commented Apr 6, 2022

안녕하세요 @Hyune-c! donggi쿠킴 입니다!

현재까지 진행한 프로젝트 진행은 코드 보다 팀원 간의 협업을 위해 그라운드 룰을 정하고 API 설계와 Mockup API Server를 만들어 클라이언트 개발자에게 전달하는 시간이었습니다.

Issues, Projects, Wiki, 브랜치 전략, Commit 컨밴션을 정하며 협업의 첫 시작의 중요성을 알게 되었고 Mockup API Server를 만들며 Rest API에 대해 알 수 있었습니다. 자세한 내용은 > 버튼을 통해 확인할 수 있습니다.

리뷰 감사합니다. 😁

📝 Description

그라운드 룰

스크럼 & 회의

  • 10:00 ~ 10:30 - 아침 스크럼 (금일 컨디션, 팀 별 진행 사항, 어제 한 일, 오늘 할 일, 이슈 공유, 화이팅)
  • 회의할 사항이 있다면 스크럼 종료 후 회의 시간 별도로 요청

브랜치 전략

  • team-01 : 운영 서버 배포 브랜치
  • develop : 안드로이드 & 백엔드 공통 작업 브랜치 (공동 문서, 임시)
  • develop-Android : 안드로이드 개발 브랜치
  • develop-BE : BE 개발 브랜치
  • feature/{소속}
    • feature/{소속}/{내용}
    • 예) feature/Android/board_view
    • 예) feature/BE/hello_api
  • 작업 순서 예
    • develop-BE 브랜치에서 기능을 구현하고자 한다.
    • feature/BE/hello_api 브랜치를 생성하고 코드 작업이 끝났다.
    • develop-BE에 PR 보낸다.
    • PR 리뷰 후 squash merge 한다.
      • feature/BE/hello_api 브랜치 삭제한다.
      • 연관된 issuse, github Project가 있다면 closed, Done으로 변경한다.

참고 : A successful git branching model


커밋 컨밴션

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

e.g.
feat: 00 기능 구현

- 00 클래스 구조 설계
- 00 메서드 기능 구현

Closes #5
  • feat : 새로운 기능 추가
  • fix : 버그 수정
  • docs : 문서 관련
  • style : 스타일 변경 (포매팅 수정, 들여쓰기 추가, …)
  • refactor : 코드 리팩토링
  • test : 테스트 관련 코드
  • build : 빌드 관련 파일 수정
  • perf : 성능 개선
  • chore : 그 외 자잘한 수정

참고 : AngularJS Git Commit Message Conventions

Github 세팅

Projects

  • 소속 별 하나씩 Project 생성 및 관리

Issues

  • Issues Templates 생성 (.github 폴더)
  • 각 Issues에 소속 라벨과 내용 라벨 추가하여 사용 (e.g. BE팀의 Bug Issues라면 BE , Bug 라벨 추가)
  • Issues 생성 시 Projects와 연결
  • 소속 별 Milestones 생성 관리

PR

  • PR Templates 생성 (.gihub 폴더)
  • PR 생성 시 Issues와 연결
API 설계, Mockup API Server

Mockup API 도입 이유

상황
Todo App 개발 프로젝트를 시작했다. 기획서만 주어졌다. API, DB 설계할 시간 없이 동시에 클라이언트(안드로이드), 백엔드 개발이 시작됐다.

문제
API, DB 설계안 없이 시작하다 보니 클라이언트 개발자는 단순 view, 디자인을 그릴 수 있었지만 비즈니스 로직을 구현할 수 없었다. API 서버가 없기 때문이다. 백엔드 입장에서 당장 API 서버를 제공해주고 싶었지만 API, DB 설계할 시간과 서버 구현할 시간도 필요했다.

해결
이런 상황 속에서 Mockup API를 도입하기로 했다.
Mockup API Server 란 말 그대로 가짜(모형)의 API 서버이다. 클라이언트 요청에 실제 서버처럼 동작하기 보다는 미리 저장된 데이터를 단순하게 돌려주는 형태이다. 다시 말해 가짜 서버를 사용해 실제 서버와 통신하는 것처럼 만들 수 있다. 아무것도 없는 상황에서 Mockup API를 간단하게 만들며 API와 DB를 설계를 동시에 했다. 또한 만들어진 Mockup API를 클라이언트 팀에게 전달하여 의견을 공유할 수 있었다.

생각

  • Mockup API는 비교적 간단하기 때문에 API 설계가 되어있고 API 서버가 아직 개발되지 않은 상황이라면 클라이언트 개발자가 스스로 만들어 사용할 수 있겠다는 생각이 든다.
  • 백엔드 입장에서 Mockup API와 API, DB 설계를 함께할 수 있다. 클라이언트 개발자가 마냥 기다리지 않도록 만들 수 있다.

Mockup API 기술 선택

기술 장점 단점
Postman - Mock Server - GUI로 설치 없이 간단한 사용
- Postman 자체에서 Mock Server에 대한 URI 제공하여 서버 접속 가능
- API 문서화 제공
- 커스텀한 URI 설정이 어려움 (e.g. GET /api/todos/{id} 요청 시 {id}를 특정한 id로 지정해야함)
Node.js - JSON Server - 프론트 엔드 개발자가 있다면 동일한 js 환경이기에 프론트 엔드가 수정하기 손쉬움
- 커스텀한 URI, Json 응답이 쉬움
- js 기초 지식이 있어야 함
- 외부 uri 사용하려면 배포를 따로해야함
Node.js - express - express를 활용한 node 서버 - 위 기술들보다 비교적 더 오래걸림
- js 기초 지식이 있어야 함
- 외부 uri 사용하려면 배포를 따로해야함

현재 상황에서 클라, 백엔드 팀 모두 js가 익숙하지 않고 손쉽게 사용하고 서버 URI를 제공해주는 postman을 사용하기로 결정했다.

Postman을 활용한 Mockup API Server

구현한 Mockup API 문서

요청 서버 {{uri}} : https://f278a12c-c825-466b-aa01-65337bbdf28a.mock.pstmn.io

요청 기능 상태코드
GET {{uri}}/api/todos 모든 Todo를 List 형태로 보낸다. 200
GET {{uri}}/api/todos/{id} 해당 id의 Todo 보낸다. 200
POST {{uri}}/api/todos 새로운 Todo를 생성한다. 201
DLELTE {{uri}}/api/todos/{id} 해당 id의 Todo를 삭제한다. 204
PATCH {{uri}}/api/todos/{id} 해당 id의 Todo를 업데이트한다. 200
GET {{uri}}/api/histories 모든 히스토리를 보내준다. 200

Spring Project
  • 초기 스프링 프로젝트 설정
  • H2 db 연결, TODO 테이블 생성

🤔 궁금한 점

  • 처음 Rest API를 설계했는데 올바르게 되었는지 궁금합니다.

donggi-lee-bit and others added 3 commits April 5, 2022 10:46
* docs: 프로젝트 소개(readme.md)

* chore: Issues, PR templates 추가

Co-authored-by: “kukim” <kukim.dev@gmail.com>
- Java 11 + Spring Boot(2.6.6) + Gradle + Spring Web + H2
- .girignore 생성
- BE 소속 전용 readme.md 생성
- 불필요한 파일 삭제(help.md)

Closes #7
- application.yml에 h2 관련 설정
- TODO 테이블과 더미 데이터 생성 (schema.sql, data.sql)

closes #21
@ku-kim ku-kim added the review-BE Improvements or additions to documentation label Apr 6, 2022
@ku-kim ku-kim requested a review from Hyune-c April 6, 2022 08:23
@ku-kim ku-kim changed the title [team-01][BE] 1주차 1회 리뷰 요청 드립니다. [team-01][BE] 1주차 1회 PR Apr 6, 2022
@donggi-lee-bit
Copy link
Member

PR 을 5시까지 보내기로 되었었는데 빠듯하게 작업하다가 늦었습니다 ㅜㅜ 다음 PR 요청시에는 꼭 시간 지켜서 리뷰 요청 드릴 수 있도록 하겠습니다!

Copy link

@Hyune-c Hyune-c left a comment

Choose a reason for hiding this comment

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

첫 PR이네요! 수고하셨습니다!
아직 프로젝트 세팅만 된 것이기에 코드에 대해서는 크게 말씀드릴게 없습니다.
대신 readme와 repo에 기록하신 내용에 대해서 추가 코멘트를 남겨드립니다.

다음 PR을 기대할게요~

  • pr review간에는 약속된 단어를 통해 의사를 간략하게 전달하기도 합니다.
    • 지금 코드에 남긴 Nit가 그것입니다. 또 무슨 단어가 있을지 검색해보시면 좋을 것 같습니다.
  • Mockup API 세팅을 잘해주셨네요.
    • 이왕 하시는 김에 swagger와 spring docs가 무엇인지도 키워드를 알고가셨으면 좋을 것 같습니다.
  • api 설계는 무난한 것 같습니다.
    • body에 대해서는 조금 의아한 부분이 있긴 하지만, 좀 더 구현해가시는 것을 보고 코멘트하도록 하겠습니다.
    • response의 시간에 대해서는 조금 더 생각해봐주세요. 9시간을 계속 붙이는게 좋은걸까요?
  • pr은 굳이 주 2회라고 생각하지 마시고 수시로 짧게 올려주시면 리뷰의 퀄리티가 더 좋아집니다!

Comment on lines +15 to +19
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
Copy link

Choose a reason for hiding this comment

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

Nit

gradle 설정은 프로젝트가 커지고 모듈 관리 등이 들어가기 시작하면 개발만큼이나 어려운 것입니다.
지금의 단계에서 gradle까지 공부하실 필요는 없지만 나중을 위해 gradle dependency scope라는 키워드 정도는 가져가시면 좋을 것 같습니다.

Copy link
Member

Choose a reason for hiding this comment

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

안그래도 작업을 하다가 의존성 옵션이 각각 어떤 일을 해주고 있는 지 궁금해서 찾아보게 되었습니다. gradle dependency scope 키워드로 한 번 학습해보겠습니다. 감사합니다 😆

Comment on lines +2 to +12
CREATE TABLE TODO
(
id BIGINT NOT NULL AUTO_INCREMENT,
title VARCHAR(255),
contents VARCHAR(500),
user_id VARCHAR(100),
status VARCHAR(10),
created_time TIMESTAMP,
updated_time TIMESTAMP,
PRIMARY KEY (id)
);
Copy link

Choose a reason for hiding this comment

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

Nit

  1. 스키마 정의 sql이라도 컬럼과 타입 사이의 탭을 일정하게 해주어서 가독성을 가져가는 것이 좋다고 생각합니다.
  2. 스키마 정의 sql을 별도로 관리한다면 보통 테이블명 정도는 한글 주석을 달아주는걸 추천합니다.

Copy link
Member Author

Choose a reason for hiding this comment

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

sql 간에도 가독성을 위해 포맷팅을 지켜주고 설명을 위한 주석이 있으면 도움이 되겠군요!

Comment on lines +1 to +11
INSERT INTO TODO (TITLE, CONTENTS, USER_ID, STATUS, CREATED_TIME, UPDATED_TIME)
VALUES ('Github 공부하기', 'add, commit, push', 'sam', 'todo', '2022-04-06T15:30:00.000+09:00', '2022-04-06T15:30:00.000+09:00');

INSERT INTO TODO (TITLE, CONTENTS, USER_ID, STATUS, CREATED_TIME, UPDATED_TIME)
VALUES ('블로그에 포스팅할 것', '*Github 공부내용 \r\n *모던 자바스크립트 1장 공부내용', 'sam', 'todo', '2022-04-07T15:30:00.000+09:00', '2022-04-07T15:30:00.000+09:00');

INSERT INTO TODO (TITLE, CONTENTS, USER_ID, STATUS, CREATED_TIME, UPDATED_TIME)
VALUES ('HTMl/CSS 공부하기', 'input 태그 실습', 'sam', 'doing', '2022-04-07T20:30:00.000+09:00', '2022-04-07T20:30:00.000+09:00');

INSERT INTO TODO (TITLE, CONTENTS, USER_ID, STATUS, CREATED_TIME, UPDATED_TIME)
VALUES ('여자친구와 데이트', '초밥 먹으러 가기', 'sam', 'done', '2022-04-08T15:30:00.000+09:00', '2022-04-08T15:30:00.000+09:00');
Copy link

@Hyune-c Hyune-c Apr 6, 2022

Choose a reason for hiding this comment

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

  1. 지금의 sql은 4번의 insert sql이 발생합니다.
    • 일회성이고 초기 데이터 세팅이긴 하지만 좀 더 효율적인 방법이 있지 않을까요?
  2. timezone을 고려해서 초기 데이터의 시간을 넣어주신 것으로 생각됩니다.
    • 하지만 앞으로도 9시간이 누락되지 않고 들어갈 수 있을까요?

Copy link
Member Author

@ku-kim ku-kim Apr 7, 2022

Choose a reason for hiding this comment

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

  1. insert sql을 한 번만 사용해서 초기 데이터를 넣을 수 있어 보입니다.
예)
INSERT INTO 테이블명 (컬럼1, 컬럼2,,,,)
VALUES
('값1','값2'),
('값1','값2'),
('값1','값2');
  1. DB의 TimeZone이 Asia/Seoul로 설정되어 있다면 9시간이 누락되어도 DB에 데이터를 넣었을 때 문제가 없을거 같다고 생각합니다.

Copy link

Choose a reason for hiding this comment

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

DB의 TimeZone이 Asia/Seoul로 설정되어 있다면 9시간이 누락되어도 DB에 데이터를 넣었을 때 문제가 없을거 같습니다.

네. 이것은 글로벌라이제이션, 로컬라이제이션 전략의 일부인데요.
지금 말씀하신 방법도 좋고, 백엔드는 UTC로 두고 클라이언트가 알아서 수정해서 출력하는 방법도 있습니다.
지금의 단계에서는 크게 고려할 부분이 아니니 키워드만 알고 지나가시길 추천드립니다.

Copy link
Member Author

Choose a reason for hiding this comment

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

서버에서 UTC로 두고 클라이언트가 알아서 사용하는 방법도 있군요! 너무 재미있네요 ㅎㅎ
안그래도 AWS에 배포할 mysql-server에 Timezone 설정을 Asia/Seoul로 했는데 클라이언트 개발자와 이야기 나눠봐야 겠네요!
감사합니다.

Copy link

Choose a reason for hiding this comment

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

노파심에 추가로 말하자면, 이것은 정책이라 정답이 없습니다.
글로벌라이제이션을 먼저 생각하느냐, 로컬라이제이션을 먼저 생각하느냐의 차이라서요.

VALUES ('HTMl/CSS 공부하기', 'input 태그 실습', 'sam', 'doing', '2022-04-07T20:30:00.000+09:00', '2022-04-07T20:30:00.000+09:00');

INSERT INTO TODO (TITLE, CONTENTS, USER_ID, STATUS, CREATED_TIME, UPDATED_TIME)
VALUES ('여자친구와 데이트', '초밥 먹으러 가기', 'sam', 'done', '2022-04-08T15:30:00.000+09:00', '2022-04-08T15:30:00.000+09:00');
Copy link

@Hyune-c Hyune-c Apr 6, 2022

Choose a reason for hiding this comment

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

공부는 안하고 데이트만 done한 sam이라니..!

Copy link
Member

Choose a reason for hiding this comment

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

😂

@Hyune-c Hyune-c merged commit 8d07b6a into codesquad-members-2022:team-01 Apr 6, 2022
@donggi-lee-bit
Copy link
Member

생각한 것 이상으로 더 신경 써서 리뷰해주셔서 감사합니다 😆 리뷰해주신 내용을 반영하여 프로젝트 진행하도록 하겠습니다!!! 🙇‍♂️ 🙇‍♂️

@ku-kim
Copy link
Member Author

ku-kim commented Apr 7, 2022

첫 리뷰 빠르게 피드백 주셔서 감사합니다.
이렇게 써도 되는진 모르겠지만.. SGTM 한 리뷰였습니다

wooody92 pushed a commit that referenced this pull request Apr 13, 2022
[BE] 카드 삭제 기능 구현 및 테스트코드 작성
Dae-Hwa pushed a commit that referenced this pull request Apr 13, 2022
[BE] 현재까지 진행상황 배포
guswns1659 pushed a commit that referenced this pull request Apr 13, 2022
[Riako] ActivityLog Mvc 구조 구체화 작업
SangHwi-Back pushed a commit that referenced this pull request Apr 15, 2022
Type 보다는 조금 더 직관적인 APIPath 로 변경
eve712 pushed a commit that referenced this pull request May 9, 2022
* 메뉴 - 사용자 액션 리스트 추가 기능 구현(추가, 삭제, 변경) (#48)

* refactor: deleteListTask 수정

* 맨 마지막 task의 경우 pop 으로 별도 처리하던 로직을 제거

* feat: postData 기능 추가

* 서버에 post 요청하는 함수 구현

* feat: 추가, 수정, 삭제 히스토리 등록 기능 구현

* refactor: sidebar -> history, 데이터 수정

* fix: fetch 응답 유효 상태코드 범위 수정

* fix: task 변경 액션 이름 수정 -> 변경

* Feature47 4 (#49)

* feat: 카드 삭제 시 리스트 리렌더링 기능 추가

* fix: alertDelete 오타 수정, author 기본값 설정

* 카드 이동 - 리스트 중간에 카드 추가 기능 구현(2) (#50)

* feat: 칼럼 사이 카드이동
마우스 이동 방향(위/아래)에 따라 기준좌표를 이용해 카드 이동 구현

* feat: 드래그앤드랍 복사본에 기능추가
복사본을 task 인스턴스로 생성하여 task의 기능을 적용

* merge develop4

* Feature50 (#51)

* feat: getTodoListData 분리

* style: handelClickEvent 조건문 중괄호 스타일 수정

* refactor: 카드 수정 비활성화 조건문 개선

* refactor: defaultValue 디폴트값 수정

* refactor: 불필요한 Task 인스턴스 속성 초기화 로직 제거

* chore: db 데이터 추가

Co-authored-by: mogooee <92701121+mogooee@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
review-BE Improvements or additions to documentation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants