GithubHelp home page GithubHelp logo

woowacourse-teams / 2022-ternoko Goto Github PK

View Code? Open in Web Editor NEW
44.0 3.0 6.0 3.33 MB

면담은 찐하게, 예약은 손쉽게! 올인원 면담 예약 서비스 터놓고 💖

Home Page: https://ternoko.site

TypeScript 33.75% JavaScript 0.71% HTML 0.29% Java 65.25%

2022-ternoko's Issues

[BE] feat: 배포를 위한 세팅을 한다.

As-is

  • 코치 더미 데이터를 자동으로 넣어주지 못하고 있다.
  • h2 DB여서 서버를 다시 올리면 데이터가 초기화된다.

To-be

  • 자바 코드상으로 어플리케이션이 실행될때 초기 더미 데이터를 save 하는 코드를 작성한다.
  • production 코드는 mysql를 사용하도록 설정한다.
  • 면담 예약을 삭제하는 api를 작성한다. (mysql 서버로 올리면 데이터가 초기화되지 않으므로)
  • yml 상의 중요 정보를 숨겨서 배포해야한다.

[BE] refactor: 테스트 격리 방법

As-Is

@DirtiesContext(classMode = ClassMode.BEFORE_EACH_TEST_METHOD)
@ActiveProfiles("test")
public class AcceptanceTest 

현재 @activeprofiles("test") 없는 상태에서 인수테스트랑 서비스 테스트 같이 돌리면, 데이터가 남는 에러 발견
그리고 @activeprofiles("test") 로 해결 했지만, 왜 되었는지 모르겠음. 추가 학습 필요

추가로 @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) 로도 가능

[BE] refactor: DTO, Domain 생성 방식 논의

As-is

DTO 에서는 빌더패턴, Domain에서는 생성자패턴을 사용하고 있다.

To-be

다음 네가지 정책중 한가지를 선택한 뒤, 세부사항을 논의한다.

  • DTO에서는 빌더, Domain에서는 생성자
  • DTO에서는 생성자 , Domain에서는 빌더
  • DTO에서는 빌더, Domain에서는 빌더
  • DTO에서는 생성자, Domain에서는 생성자

[BE] refactor: DTO, Domain 생성 방식 논의

As-is
DTO 에서는 빌더패턴, Domain에서는 생성자패턴을 사용하고 있다.

To-be
다음 네가지 정책중 한가지를 선택한 뒤, 세부사항을 논의한다.

  • DTO에서는 빌더, Domain에서는 생성자
    • DTO에서는 빌더, Domain에서는 생성자

[FE] feat: 면담 신청 페이지를 개발한다.

As-is

면담 신청 페이지에 해당하는 컴포넌트를 구현한다.

To-be

  • 공통 컴포넌트 개발
  • 코치 선택 영역 개발
  • 날짜 및 시간 선택 영역 개발
  • 사전 논의 내용 입력 영역 개발
  • 면담 신청 완료 페이지 개발
  • 리팩토링

[BE] fix: 기본 환경설정 수정 및 코치 반환시 Response ERROR 변경

As-is

final 을 붙이면서 DTO 에 기본 생성자가 없어서 반환값 생성시 맵핑이 안되는 이슈 발견

@Getter
@AllArgsConstructor
public class CoachesResponse {

    private final List<CoachResponse> coaches;
}
cannot construct instance of `com.woowacourse.ternoko.dto.CoachesResponse` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

To-be

@Getter
@NoArgsConstructor
@AllArgsConstructor
public class CoachesResponse {

    private List<CoachResponse> coaches;
}

설정 가독성 개선

dependencies {
	// jpa
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

	// spring-boot
	implementation 'org.springframework.boot:spring-boot-starter-validation'
	implementation 'org.springframework.boot:spring-boot-starter-web'

	// DB
	runtimeOnly 'com.h2database:h2'
	runtimeOnly 'mysql:mysql-connector-java'

	// lombok
	annotationProcessor 'org.projectlombok:lombok'
	compileOnly 'org.projectlombok:lombok'

	// test
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'io.rest-assured:rest-assured:4.4.0'

[BE] feat: custom Exception 을 도입한다.

As-is

기존에는 범용적인 Exception 사용하여, 구체적인 에러 내용을 메세지로만 파악했다.

To-be

  • exception 상속 계층 만들기
  • exception 관리 class 구조 생각해보기

[BE] chore: local환경과 배포환경의 yml설정을 분리한다.

As-is

  • 현재 yml파일이 하나이고, h2데이터베이스 접속설정이 되어있다.
  • 배포시에는 mysql db를 사용할 것이기 때문에 설정이 다르게 된다.

To-be

  • local, test, dev, prod yml을 분리한다.
  • default를 dev yml로 설정한다.
  • local환경에서 설정하는 방법을 문서화한다.

[BE] feat: Slack 회원 가입을 구현한다.

As-is

면담 시간 예약을 위해 회원이 필요하다.
추후 슬랙으로 알람 기능까지 도입할 예정이라 Slack social login 을 도입해볼까 ?

To-be

  • slack api 스펙을 확인한다.
  • member table 을 재설계한다.
  • 회원가입 로직을 구현한다.

[BE] feat: 초기 환경을 설정한다.

As-is

  • 프로젝트 진행을 위해, 백엔드 개발 환경을 세팅한다.

To-be

  • Spring Web, Spring Data JPA, Lombok, Mysql driver, H2 database 추가
  • 우아한 테크코스 컨벤션 적용

[BE] refactor: 스프린트 1.5 내용을 refactoring 한다.

As-is

페어로 나뉘어 작성한 코드에 대해 리팩터링이 필요하다.

To-be

business logic 🤔

  • controller return value 를 domain 에서 dto 로 일괄 변경
  • member → Coach/Crew 분류
  • 도메인 검증로직 추가
  • FormItemDto → FormItemReqeust, FormItemResponse로 분리
  • DTO 내의 final 제거 및 @NoArgsConstructor 추가하기
  • MemberService에 line23 공백 추가~~
  • request 검증 어노테이션 추가
  • #50
@Column(nullable = false, length = 30)
private String crewNickname;
  • 전체적으로 회색 import문 제거 → intelliJ에서 설정해놔도 좋을 듯
  • formItem → ManyToOne 양방향 매핑으로
  • 연월 기준으로 조회해오는거 between vs where

test logic 🤔

  • test fixture 정리
  • displayName 규칙 적용

[BE] feat: 코치 가능 시간 조회 기능 구현

As-is

코치 별 면담 예약을 위해 면담 가능 시간을 조회하는 기능이 필요하다.

To-be

  • 코치 별 가능 시간 조회 기능을 구현한다.
    GET /api/coaches/{coachId}/calendar/times?year={year}&month={month}

[FE] feat: UI / UX를 수정한다.

As-is

폰트, 폰트 사이즈, 컴포넌트 간의 간격, 넓이를 수정한다.

To-be

  • 폰트 적용
  • 폰트 사이즈 수정
  • 컴포넌트 간의 간격 수정
  • 넓이 수정
  • 그 외 UI / UX 수정

docs: 팀 컨벤션 수립

논의 사항

  • 배포(main) - 개발(develop) - 기능개발(feat)
    • 기능개발
      • Commit Message - Ex) feat/backend/reservation-#3
  • PR 템플릿
    • 라벨지로 Frontend Backend 표시
    • H2 글씨 크기
    • 제목
      • feat: 제목
    • Feat
      • 구현 기능
      • 논의 사항(선택)
      • 참고 레퍼런스(선택)
    • Fix
      • 수정 내용
      • 논의 사항(선택)
      • 참고 레퍼런스(선택)
    • Refactor
      • (추후)

[FE] refactor: 전반적인 리팩터링

As-is

재활용을 하지 못하는 컴포넌트 및 미처하지 못한 리팩토링

To-be

  • context 사용
  • 도메인 로직이랑 컴포넌트 로직 분리
  • 전반적인 리팩토링(중복 코드 제거, 네이밍 변경 등)

[BE] fix: 크루입장 면담 예약 생성 시 interviewQuestions 필드가 저장 안되는 문제를 해결한다.

As-is

문제

localhost:8080/api/reservations/coaches/1로 post 요청 시,
interviewQuestions 필드(fromItem)가 저장 안되는 문제가 발생하였습니다.

원인

image

다음과 같이 from_item 테이블의 interview_id 외래키가 null 값이여서 생기는 문제입니다.

To-be

  • ReservationService의 create함수를 수정한다.
  • formItem 저장 시 interview_id 외래키 값이 저장되게 수정한다.

[FE] feat: Calendar 고도화를 한다.

As-is

코치가 면담을 만들 때 날짜 선택시 활성화 되는 시간을 어떻게 할지 불분명하다.

To-be

  • Calendar 일괄 선택시 활성화하는 시간 분명하게 하기
  • Calendar 버그 수정
  • 요청시 날짜 중복 버그 수정

[BE] refactor: crew, coach 도메인을 분리한다.

As-is

  • 현재 크루와 코치의 도메인이 Member로 공유되고 있다.
  • 크루와 코치의 필드정보가 다르다
    • 코치에게는 상세정보 (한줄소개, 약력 등)이 존재한다.
  • 가독성이 떨어진다.

To-be

  • 크루도메인과 코치도메인을 분리해 Member를 상속하는 구조로 변경한다.

[BE] chore: 환경변수 세팅 변경

As-is

MySQL 접근값인 username, password 값을 환경변수로 관리하고 있다.

To-be

서브모듈을 도입하여 환경변수가 아닌 실행환경별 설정파일(yml) 단위로 관리하게끔 변경한다.

[BE] refactor: 예약 일시 필드명 변경

As-is

면담 예약 일시 필드명이 변경 필요
현재 : reservationDate
이유 : Reservation에 대한 정보가 아닌 Interview에 대한 일시 정보

To-be

  • reservation이 아닌 interview로 수정

[BE/FE] git: PR merge 방식 변경 제안

As-is

터놓고 기존 PR은 create merge commit 방식임.
이 방식은 모든 커밋이력이 남게되어 이력이 깔끔하지 않다. + 머지커밋도 추가됨

스크린샷 2022-07-08 오전 9 55 58

To-be

PR 머지 방식을 Squash Merge 방식으로 변경하는 것을 제안합니다.

Result

Squash Merge 방식을 택한다.

[FE] feat: 초기 환경을 설정한다.

As-is

  • 프로젝트 진행을 위해, 프론트엔드 개발 환경을 세팅한다.

To-be

  • eslint, prettier 설정
  • webpack 환경 설정
  • tsconfig.json 설정
  • 각종 라이브러리 설치(styled-components, storybook)

[BE] 배포를 위한 CORS 충돌을 해결한다.

As-is

프론트 포트 번호와 백엔드 포트 번호가 달라서 나는 CORS 를 해결한다.

To-be

coach 데이터를 추가한다.

  • config 에서 url 허용
  • exposedHeader에 Location Header 허용

[BE] fix: 코치의 되는시간 설정 API를 수정한다.

As-is

  • 현재 api로는 요청으로 빈 리스트를 받았을 때 year, month를 파싱하지 못한다.
  • 그래서 빈리스트를 보내줄 때 year, month를 알지 못해 delete를 할 수 없다.

To-be

  • api 명세를 아래와 같이 수정한다.
  • Request
PUT /api/coaches/{coach_id}/calendar/times  HTTP/1.1
Accept: application/json
Host: localhost:8080
{
	"calendar" : [
		{
			"year" : 2022,
			"month" : 7,
			"times" : 
			[
				"2022-07-07 14:00",
				"2022-07-07 15:00",
				"2022-07-07 16:00"
			]
		},
		{
			"year" : 2022,
			"month" : 8,
			"times" : 
			[
				"2022-07-08 14:00",
				"2022-07-09 14:00",
				"2022-07-09 15:00"
			]
		}
	]
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.