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
Conversation
* 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
PR 을 5시까지 보내기로 되었었는데 빠듯하게 작업하다가 늦었습니다 ㅜㅜ 다음 PR 요청시에는 꼭 시간 지켜서 리뷰 요청 드릴 수 있도록 하겠습니다! |
There was a problem hiding this 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회라고 생각하지 마시고 수시로 짧게 올려주시면 리뷰의 퀄리티가 더 좋아집니다!
dependencies { | ||
implementation 'org.springframework.boot:spring-boot-starter-web' | ||
runtimeOnly 'com.h2database:h2' | ||
testImplementation 'org.springframework.boot:spring-boot-starter-test' | ||
} |
There was a problem hiding this comment.
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
라는 키워드 정도는 가져가시면 좋을 것 같습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안그래도 작업을 하다가 의존성 옵션이 각각 어떤 일을 해주고 있는 지 궁금해서 찾아보게 되었습니다. gradle dependency scope
키워드로 한 번 학습해보겠습니다. 감사합니다 😆
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) | ||
); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit
- 스키마 정의 sql이라도 컬럼과 타입 사이의 탭을 일정하게 해주어서 가독성을 가져가는 것이 좋다고 생각합니다.
- 스키마 정의 sql을 별도로 관리한다면 보통 테이블명 정도는 한글 주석을 달아주는걸 추천합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sql 간에도 가독성을 위해 포맷팅을 지켜주고 설명을 위한 주석이 있으면 도움이 되겠군요!
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'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 지금의 sql은 4번의 insert sql이 발생합니다.
- 일회성이고 초기 데이터 세팅이긴 하지만 좀 더 효율적인 방법이 있지 않을까요?
- timezone을 고려해서 초기 데이터의 시간을 넣어주신 것으로 생각됩니다.
- 하지만 앞으로도 9시간이 누락되지 않고 들어갈 수 있을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- insert sql을 한 번만 사용해서 초기 데이터를 넣을 수 있어 보입니다.
예)
INSERT INTO 테이블명 (컬럼1, 컬럼2,,,,)
VALUES
('값1','값2'),
('값1','값2'),
('값1','값2');
- DB의 TimeZone이 Asia/Seoul로 설정되어 있다면 9시간이 누락되어도 DB에 데이터를 넣었을 때 문제가 없을거 같다고 생각합니다.
There was a problem hiding this comment.
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로 두고 클라이언트가 알아서 수정해서 출력하는 방법도 있습니다.
지금의 단계에서는 크게 고려할 부분이 아니니 키워드만 알고 지나가시길 추천드립니다.
There was a problem hiding this comment.
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로 했는데 클라이언트 개발자와 이야기 나눠봐야 겠네요!
감사합니다.
There was a problem hiding this comment.
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'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
공부는 안하고 데이트만 done한 sam이라니..!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
😂
생각한 것 이상으로 더 신경 써서 리뷰해주셔서 감사합니다 😆 리뷰해주신 내용을 반영하여 프로젝트 진행하도록 하겠습니다!!! 🙇♂️ 🙇♂️ |
첫 리뷰 빠르게 피드백 주셔서 감사합니다. |
[Riako] ActivityLog Mvc 구조 구체화 작업
Type 보다는 조금 더 직관적인 APIPath 로 변경
* 메뉴 - 사용자 액션 리스트 추가 기능 구현(추가, 삭제, 변경) (#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>
안녕하세요 @Hyune-c!
donggi
와쿠킴
입니다!현재까지 진행한 프로젝트 진행은 코드 보다 팀원 간의 협업을 위해 그라운드 룰을 정하고 API 설계와 Mockup API Server를 만들어 클라이언트 개발자에게 전달하는 시간이었습니다.
Issues, Projects, Wiki, 브랜치 전략, Commit 컨밴션을 정하며 협업의 첫 시작의 중요성을 알게 되었고 Mockup API Server를 만들며 Rest API에 대해 알 수 있었습니다. 자세한 내용은
>
버튼을 통해 확인할 수 있습니다.리뷰 감사합니다. 😁
📝 Description
그라운드 룰
스크럼 & 회의
브랜치 전략
team-01
: 운영 서버 배포 브랜치develop
: 안드로이드 & 백엔드 공통 작업 브랜치 (공동 문서, 임시)develop-Android
: 안드로이드 개발 브랜치develop-BE
: BE 개발 브랜치feature/{소속}
feature/{소속}/{내용}
예) feature/Android/board_view
feature/BE/hello_api
참고 : A successful git branching model
커밋 컨밴션
참고 : AngularJS Git Commit Message Conventions
Github 세팅
Projects
Issues
BE
,Bug
라벨 추가)PR
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 기술 선택
- Postman 자체에서 Mock Server에 대한 URI 제공하여 서버 접속 가능
- API 문서화 제공
- 커스텀한 URI, Json 응답이 쉬움
- 외부 uri 사용하려면 배포를 따로해야함
- 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
GET {{uri}}/api/todos/{id}
POST {{uri}}/api/todos
DLELTE {{uri}}/api/todos/{id}
PATCH {{uri}}/api/todos/{id}
GET {{uri}}/api/histories
Spring Project
🤔 궁금한 점