Skip to content

📚 백엔드 개발 문서

Dabeen Jeong edited this page Jul 13, 2023 · 5 revisions

1. 기술 스택 및 선택 이유

  • java : 11
    • 모든 팀원들이 사용해온 자바 버전이다.
    • 더 낮은 버전을 안 쓰는 이유는 팀원들에게 익숙한 기능이 낮은 버전에서는 지원하지 않을 수 있기 때문이다.
    • 더 높은 버전을 안 쓰는 이유는 따로 배워야하고, 활용을 제대로 못할 것으로 판단된다.
  • spring boot : 2.7.13
    • 3.x 버전은 Java 17부터 지원 → Java 11을 지원하는 가장 최신 버전이 2.7.13
  • mysql 8.0
    • 검색했을 때 참고 자료가 많다.
    • MySQL은 버전이 높아질 수록 안정성과 성능이 개선되고 있다.
  • spring data jpa
    • 기본 CRUD에 대해 직접 메서드를 만들어도 되어서 생산성이 늘어난다.
  • gradle
  • junit5
  • OAuth2.0
    • 카카오 로그인을 사용할 예정
    • 회원가입 페이지를 따로 만들어서 가입하는 것보다 사용자 정보를 얻기 쉽다.
  • rest docs, swagger
    • 테스트 코드로 문서화를 진행하면서, 클라이언트에서 편하게 API 테스트를 할 수 있다.
      • [REST Docs]
        • 테스트 코드로 문서를 관리할 수 있다는 장점
        • 클라이언트가 직접 API 테스트를 할 수 없다는 단점
      • [Swagger]
        • UI가 깔끔하다는 장점
        • 백엔드단 코드가 깔끔해지지 않는다는 단점

2. 개발문화

1) 코드설명시간

  • 시간 : 평일 17:00-17:30
  • 장소 : 회의실
  • 방법
    • pr 작성자가 구현한 코드 플로우 설명
    • 해당 코드에 대한 논의

2) 코드리뷰

  • 당일 자정 안에 코멘트 또는 approve (주말, 공휴일 제외)
  • 나머지 3명의 approve가 있어야 merge

3) 기타

  • ATDD 방식으로 개발
  • 개발 중에 3시간 안에 해결되지 않으면 논의하기
  • 매주 금요일 다음 스프린트를 정할 때, 페어 프로그래밍이 필요한지 결정

3. 코드 컨벤션

1) 일반

  • wooteco-style 자바 컨벤션을 따른다.
  • 변수와 메서드 파라미터 final로 선언
  • dto명
    • controller로 들어오거나 나가는 dto : ~request / ~response
    • 그 외 dto : ~dto
  • @Transactional(readOnly = true)를 클래스 레벨에 붙이고 변경이 필요한 메서드에서만 재정의

2) 순서

  • 코드 선언 순서

    public class FunEat {
    
        // private static final
        // 상수
        // 클래스 변수
        // 인스턴스 변수
        // 생성자 (파라미터 개수 순서)
        // 팩토리 메서드
        // 일반 메서드 (호출 순서)
        // getter, setter
        // equals, hashCode, toString
    }
  • 메서드 파라미터에서 순서

    • final과 어노테이션 : @Pathvariable final String name
    • @Valid와 어노테이션 : @Valid @RequestBody
  • class에 붙는 어노테이션 : 길이 순서

    @Controller
    @RequestMapping(...)
    ...
    public class FunEat {
    	...
    }
  • 필드와 필드 사이는 어노테이션이 하나라도 있을 경우 줄바꿈으로 구분을 하고, 어노테이션이 존재하지 않으면 전부 붙여서 작성한다.

    • 어노테이션이 하나라도 존재하는 경우
    public class FunEat {
    
    	@Id
    	private final Long id;
    
    	private final String name;
    
    	private final String contents;
    }
    • 어노테이션이 존재하지 않는 경우
    public class FunEat {
    
    	private final Long id;
    	private final String name;
    	private final String contents;
    }

3) 테스트

  • 테스트명은 한글로 작성한다.
    • OOO은_OOOO을_할_수_있다
    • OOO인_경우_예외가_발생한다
  • 테스트 코드에서 given, when, then 주석을 추가
    • 둘 다 같이 있을 경우 : // when & then
  • 인수 테스트, 문서 테스트 - RestAssured
  • 서비스 테스트 - 실제 데이터

🔐 공통

🔑 프론트엔드

🔒 백엔드

📝 회의록

🤩 데모데이

Clone this wiki locally