Skip to content

urung.lee (이우형) BE 사전과제 제출#27

Open
uhyunglee wants to merge 19 commits intoej31:mainfrom
uhyunglee:feature
Open

urung.lee (이우형) BE 사전과제 제출#27
uhyunglee wants to merge 19 commits intoej31:mainfrom
uhyunglee:feature

Conversation

@uhyunglee
Copy link

@uhyunglee uhyunglee commented Feb 16, 2025

진행상황

  • 필수: API 디자인
  • 필수: 유효성 검사
  • 필수: API 응답값
  • 옵션: Test Code
  • 옵션: 응답 형식
  • 옵션: API Throttling
  • 옵션: Custom Exception
  • 옵션: 배포 후 녹화 및 댓글에 적용

@uhyunglee
Copy link
Author

uhyunglee commented Feb 16, 2025

사용한 라이브러리

Spring Boot Starter 라이브러리

  • spring-boot-starter-web
    • REST API 개발을 위한 기본적인 Web 기능 제공 (내장 Tomcat 포함)
  • spring-boot-starter-data-jpa
    • JDBC와 고민하였지만 확장성을 고려하여 JPA 선택

데이터베이스 및 JPA

  • com.mysql:mysql-connector-j
    • MySQL DB 사용을 위한 JDBC 드라이버
  • spring-boot-starter-data-jpa
    • 객체 지향적인 DB 접근 방식 구현

Lombok

고려한 부분 정리

  • API 설계 시 고려 한 부분
    • @Autowired 지양 생성자를 통한 의존성 주입 -> 순환참조 방지
    • 응답코드 -> 일관성, 문서화와 테스트 용이성
    public ResponseEntity<JsonResponse> testResponse(@RequestPart("test") Test test) {
    
          ...
    
          return ResponseEntity.ok(new JsonResponse(true, 200, "Test", response));
      }
image
  • API 버저닝 고려
    • URL에 버전을 명시 ex) /api/v1/
  • 예외 처리
    • 세부적인 에러코드로 custom exception
    • 400번 4001, 4002...로 세분화
    public enum ErrorResponseStatus {
      // 400 Bad Request
      MISSING_API_KEY(false, 4001, "API키를 확인해주세요."),
      INVALID_DATE_FORMAT(false, 4002, "날짜 형식이 맞지 않습니다."),
      INVALID_DATE_RANGE(false, 4003, "조회 시작일이 종료일보다 늦습니다."),
      MISSING_REQUIRED_PARAMETER(false, 4004, "입력값을 확인해주세요."),

프로젝트 구조

 src
├── main
│   ├── java
│   │   └── com.urung.ktbbedevassignment
│   │       ├── KtbBeDevAssignmentApplication.java
│   │       ├── api
│   │       │   ├── v1
│   │       │   │   └── domain
│   │       │   │       ├── controller
│   │       │   │       │   └── StockController.java
│   │       │   │       ├── dto
│   │       │   │       │   └── StockPriceDto.java
│   │       │   │       └── service
│   │       │   │           └── StockService.java
│   │       │   └── v2
│   │       ├── domain
│   │       │   ├── company
│   │       │   │   ├── entity
│   │       │   │   │   └── Company.java
│   │       │   │   └── repository
│   │       │   │       └── CompanyRepository.java
│   │       │   └── stocksHistory
│   │       │       ├── entity
│   │       │       │   └── StocksHistory.java
│   │       │       └── repository
│   │       │           └── StocksHistoryRepository.java
│   │       └── global
│   │           ├── config
│   │           │   └── BaseTime.java
│   │           ├── exception
│   │           │   ├── BadRequestException.java
│   │           │   ├── ErrorResponse.java
│   │           │   ├── ErrorResponseStatus.java
│   │           │   ├── ForbiddenException.java
│   │           │   ├── GlobalException.java
│   │           │   └── NotFoundException.java
│   │           ├── handler
│   │           │   └── GlobalExceptionHandler.java
│   │           └── response
│   │               └── JsonResponse.java
│   └── resources
│       ├── application.yml
│       ├── static
│       └── templates
└── test
   └── java
       └── com.urung.ktbbedevassignment
           └── KtbBeDevAssignmentApplicationTests.java

회고

Keep: 끈기 있게 한 점
Problem: 과제에 시간 배분이 아쉬웠음. 구현력이 많이부족.
Try: 쿼리사용과 데이터 재사용할 수 있게 연습하고 많은 코드 보기

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant