g-market / b-shop-backend

0 stars 0 forks source link

feat: 프로젝트 초기 엔티티 생성 및 redis, jpa 설정과 테스트 추가... #59

Closed halucinor closed 1 year ago

halucinor commented 1 year ago

In GitLab by @halucinor on Feb 9, 2023, 09:58

@mentor/mentor_2023.01

작업 내용

Issue

6

7

8

9

10

11

13

14

15

17

19

주의사항

halucinor commented 1 year ago

In GitLab by @halucinor on Feb 9, 2023, 09:58

marked the checklist item 💯 테스트는 잘 통과했나요? as completed

halucinor commented 1 year ago

In GitLab by @halucinor on Feb 9, 2023, 09:58

marked the checklist item 🏗️ 빌드는 성공했나요? as completed

halucinor commented 1 year ago

In GitLab by @halucinor on Feb 9, 2023, 09:58

marked the checklist item 🧹 불필요한 코드는 제거했나요? as completed

halucinor commented 1 year ago

In GitLab by @halucinor on Feb 9, 2023, 09:58

marked the checklist item 💭 이슈는 등록했나요? as completed

halucinor commented 1 year ago

In GitLab by @halucinor on Feb 9, 2023, 09:58

marked the checklist item 🏷️ 라벨은 등록했나요? as completed

halucinor commented 1 year ago

In GitLab by @halucinor on Feb 9, 2023, 09:58

marked the checklist item 💻 git rebase를 사용했나요? as completed

halucinor commented 1 year ago

In GitLab by @Charlie on Feb 9, 2023, 10:37

LocalHiworksOauthClient / ProdHiworksOauthClient 각각을 나눈 이유가 무엇인가요?

또 로컬 및 테스트 환경에서는 LocalHiworksOauthClient 를 사용하고 있는데, ProdHiworksOauthClient 가 정상적으로 동작하는지는 어떻게 확인해볼 수 있나요?

halucinor commented 1 year ago

In GitLab by @Charlie on Feb 9, 2023, 10:42

Commented on src/main/java/com/gabia/bshop/config/WebConfig.java line 24

~Question

이 값들을 코드 상에서 관리하려는 이유가 있을까요?

halucinor commented 1 year ago

In GitLab by @Charlie on Feb 9, 2023, 10:49

Commented on src/main/resources/application-prod.yml line 30

~Question

운영 환경 로그 레벨을 지정한 기준이 따로 있을까요?

halucinor commented 1 year ago

In GitLab by @Charlie on Feb 9, 2023, 10:58

Commented on src/main/resources/application-prod.yml line 24

~Question

REDIS 포트 번호는 환경 변수 처리하지 않았는데 이유가 있나요?

halucinor commented 1 year ago

In GitLab by @Kai on Feb 9, 2023, 11:24

Commented on src/main/java/com/gabia/bshop/config/ProdOAuthClientConfig.java line 42

여러 선택지 중에서 HttpClientHTTP/2 를 사용한 이유를 알 수 있을까요?

halucinor commented 1 year ago

In GitLab by @haaeee on Feb 9, 2023, 11:24

Q) LocalHiworksOauthClient / ProdHiworksOauthClient 각각을 나눈 이유가 무엇인가요?

A) 저희 팀원에서 Git Clone을 받고 docker-compose 이후에 언제든지 돌릴 수 있는 환경으로 개발을 하자라는 피드백을 받았습니다. 이에 따라 Hiworks Client-id와 Client-secret를 환경변수로 설정하지 않고 Stub으로 진행하기 위해 나눴습니다.

// local
hiworks:
  client:
    id: client-id
    secret: client-secret

// prod
hiworks:
  client:
    id: ${CLIENT-ID}
    secret: ${CLIENT-SECRET}

Q) 로컬 및 테스트 환경에서는 LocalHiworksOauthClient 를 사용하고 있는데, ProdHiworksOauthClient 가 정상적으로 동작하는지는 어떻게 확인해볼 수 있나요?

A) 현재 Postman과 Vue 화면을 통해서 정상적으로 동작을 확인하였지만 외부 서버 연결을 테스트 코드를 작성하지 않았던 것 같습니다.

이에 따라 MockServer를 통하여 테스트를 작성하도록 하겠습니다.

halucinor commented 1 year ago

In GitLab by @haaeee on Feb 9, 2023, 11:24

Commented on src/main/java/com/gabia/bshop/config/WebConfig.java line 24

A)

    private static final String FRONTEND_LOCALHOST = "http://127.0.0.1";
    private static final String FRONTEND_LOCAL_DOMAIN = "http://b-shop.com";
    private static final String MAIN_SERVER_DOMAIN = "https://b-shop.app";

위에 해당하는 Domain만 백엔드 서버에 요청하도록 허용하기 위해서 작성하였습니다.

또한 CORS_ALLOWED_METHODS는 따로 관리를 하지 않고 모든 Method를 허용한다의 **를 사용하려 했지만, 이를 명시적으로 표현하였습니다.

halucinor commented 1 year ago

In GitLab by @haaeee on Feb 9, 2023, 11:24

Commented on src/main/resources/application-prod.yml line 30

lcoal 환경 yaml을 복사 붙어넣기 하는 과정에서 운영 환경에서 필요하지 않은 console에 log를 남기는 것이 같이 추가 된 것 같습니다.

수정하겠습니다.

halucinor commented 1 year ago

In GitLab by @haaeee on Feb 9, 2023, 11:24

Commented on src/main/resources/application-prod.yml line 24

Redis default port가 6379이기에 이는 노출되어도 생각했습니다.

host에 해당하는 IP를 환경 변수 처리하면 괜찮다고 생각이 들어 위와 같은 방식으로 작성하였습니다.

halucinor commented 1 year ago

In GitLab by @Kai on Feb 9, 2023, 11:27

Commented on src/main/java/com/gabia/bshop/controller/OrderController.java line 36

단순히 궁금한데 order-infos 로 정한 이유가 무엇인가요?

halucinor commented 1 year ago

In GitLab by @Kai on Feb 9, 2023, 11:30

Commented on src/main/java/com/gabia/bshop/controller/OrderController.java line 38

해당 코드가 있는 이유가 무엇인가요?

halucinor commented 1 year ago

In GitLab by @Kai on Feb 9, 2023, 11:43

Commented on src/main/java/com/gabia/bshop/dto/response/HiworksProfileResponse.java line 13

개인적인 생각이지만 이런 경우는 가능하면 API 그대로 이름을 따라가는 것이 좋다고 생각합니다.

다른 개발자가 이 코드를 볼 때 정말로 hiworksId 가 아이디가 맞을까요? 이 이름으로 나중에 서로 오해할 일이 없을지, 아니면 괜찮을지 한번 다시 생각해보세요. 어쩌면 이대로 진행하는게 맞을 수도 있습니다.

halucinor commented 1 year ago

In GitLab by @Kai on Feb 9, 2023, 11:52

Commented on src/main/java/com/gabia/bshop/repository/ItemImageRepository.java line 12

jdk 17 을 이용하고 있으니 multi line string 에 대해 한번 찾아보세요.

halucinor commented 1 year ago

In GitLab by @Kai on Feb 9, 2023, 11:54

Commented on src/main/java/com/gabia/bshop/repository/OptionsRepository.java line 9

네이밍 실수인 것 같네요 :)

halucinor commented 1 year ago

In GitLab by @Charlie on Feb 9, 2023, 12:05

Commented on src/main/java/com/gabia/bshop/config/WebConfig.java line 24

도메인이 바뀌는 경우는 없나요?

halucinor commented 1 year ago

In GitLab by @Charlie on Feb 9, 2023, 12:10

Commented on src/main/resources/application-prod.yml line 24

포트 노출을 허용할 건지는 보안 수준을 어느정도로 엄격히 가져갈 건지에 따라 다를 겁니다.

다만 관리적 측면에서는 어떤가요? 운영 상의 이유로 Redis 포트를 변경한다면 코드 작업을 해야 하나요?

halucinor commented 1 year ago

In GitLab by @Charlie on Feb 9, 2023, 12:15

모든 로직에 대해 테스트 코드를 작성할 순 없겠지만, 중요한 로직들은 테스트할 수 있도록 방법을 강구하는 편이 좋겠죠.

Mock Server 를 구축하는 것도 좋은 아이디어라고 생각합니다.

halucinor commented 1 year ago

In GitLab by @henry on Feb 9, 2023, 12:15

Commented on src/main/java/com/gabia/bshop/controller/OrderController.java line 58

다른 도메인에 대한 컨트롤러에서도, 목록 조회 api를 구현하고 이때 pagination이 들어가게된다면, 위와 비슷한 메소드가 다른 컨트롤러에 똑같이 중복되는 로직이 들어가게될것같네요.

이러한 반복 및 불필요한 로직 구현을 통일 + 다른 개발자가 쉽게 사용할수있도록 개선하는 작업(ex: annotation 구현)이 후에 이루어지면 좋을것같습니다.

지금 당장은 말고, 후에 한번 고민해보면 좋을것같습니다.

halucinor commented 1 year ago

In GitLab by @henry on Feb 9, 2023, 12:15

Commented on src/main/java/com/gabia/bshop/controller/ItemController.java line 37

dto에 대한 값 유효성 검증은 아예 이루어지지 않는것같네요.

halucinor commented 1 year ago

In GitLab by @henry on Feb 9, 2023, 12:15

Commented on src/main/java/com/gabia/bshop/controller/OrderController.java line 68

현재 구현된 내용으로만 봤을땐,

내가 아닌 타인이 주문한 정보라도 id값만 알면 주문취소가 가능해보이네요.

이게 의도한 바인가요?

halucinor commented 1 year ago

In GitLab by @henry on Feb 9, 2023, 12:15

Commented on src/main/java/com/gabia/bshop/entity/enumtype/MemberGrade.java line 9

~QUESTION

요구사항에 등급별 할인율이 적용되는것으로 알고 있습니다.

이러한 할인율은 어디에 명시할 생각이죠?

따로 enum을 하나 더 만들생각인가요? 아님 아직 고려되지 않은건가요?

halucinor commented 1 year ago

In GitLab by @henry on Feb 9, 2023, 12:15

Commented on src/main/java/com/gabia/bshop/entity/Item.java line 119

primitive type의 argument를 refrence type으로 캐스팅하여, null 체크하는게 옳은 방식이라고 볼수있을까요?

halucinor commented 1 year ago

In GitLab by @henry on Feb 9, 2023, 12:15

Commented on src/main/java/com/gabia/bshop/entity/Item.java line 137

~Question

상품 관리자 기준에서, 상품 판매에 대한 사이클을 몰라서 여쭤봅니다.

상품에 대한 판매를 open -> close -> reopen 이 가능한 라이프사이클인가요?

halucinor commented 1 year ago

In GitLab by @Kai on Feb 9, 2023, 12:16

Commented on src/main/java/com/gabia/bshop/controller/OrderController.java line 63

해당 endpoint 에서 주문을 악용할 수 있지 않을까요?

halucinor commented 1 year ago

In GitLab by @Luke on Feb 9, 2023, 12:31

Commented on src/main/java/com/gabia/bshop/entity/Options.java line 31

다른 엔티티들은 단수형인데 Orders와 함께 Options 엔티티만 복수형으로 명명하신 이유가 따로 있으신가요?

halucinor commented 1 year ago

In GitLab by @henry on Feb 9, 2023, 12:31

Commented on src/main/java/com/gabia/bshop/security/redis/RefreshTokenServiceImpl.java line 22

레디스를 사용하는 줄알았는데, refresh-token을 rdb에 저장하고있네요.

레디스 구축이 덜끝나 임시로 사용중인건가요?

halucinor commented 1 year ago

In GitLab by @Luke on Feb 9, 2023, 12:34

Commented on src/main/java/com/gabia/bshop/repository/ItemRepository.java line 11

소프트 삭제 때문에 이런식으로 작성하신거라면 @SQLDelete, @Where 어노테이션을 활용해보세요.

halucinor commented 1 year ago

In GitLab by @Luke on Feb 9, 2023, 12:36

Commented on src/main/java/com/gabia/bshop/exception/CustomException.java line 17

실제로 예외가 발생했을때 지정한 HTTP 상태를 반환해주고 있나요?

halucinor commented 1 year ago

In GitLab by @Kai on Feb 9, 2023, 12:46

Commented on .gitlab-ci.yml line 3

보통 테스트를 한 후에 빌드를 하지 않을까 생각하는데 빌드를 우선한 이유가 있나요?

halucinor commented 1 year ago

In GitLab by @Charlie on Feb 9, 2023, 12:54

Commented on .gitlab-ci.yml line 9

$CI_MERGE_REQUEST_TARGET_BRANCH_NAME 변수는 써본적이 없어서 정확히 모르겠는데 이 조건을 건 이유가 무엇인가요?

halucinor commented 1 year ago

In GitLab by @Charlie on Feb 9, 2023, 12:59

Commented on README.md line 9

~Question

README 파일 변경은 왜 있는 건가요? 내용이 바뀐 것도 아니고 줄바꿈만 생겨서 불필요한 변경으로 보여서요.

halucinor commented 1 year ago

In GitLab by @Luke on Feb 9, 2023, 13:00

Commented on src/main/java/com/gabia/bshop/entity/Options.java line 79

동시성 이슈에 대한 고려사항이 있으신가요?

halucinor commented 1 year ago

In GitLab by @Charlie on Feb 9, 2023, 13:01

Commented on docker-compose.yml line 17

민감 정보는 노출하지 않는 편이 좋을 것 같습니다.

halucinor commented 1 year ago

In GitLab by @Charlie on Feb 9, 2023, 13:02

Commented on docker-compose.yml line 22

포트가 바뀔 여지는 없나요?

halucinor commented 1 year ago

In GitLab by @Charlie on Feb 9, 2023, 13:07

Commented on src/main/java/com/gabia/bshop/dto/response/OrderInfoPageResponse.java line 16

~Question

이 들여쓰기는 의도한 코딩 컨벤션인가요?

halucinor commented 1 year ago

In GitLab by @haaeee on Feb 9, 2023, 13:12

Commented on src/main/java/com/gabia/bshop/config/ProdOAuthClientConfig.java line 42

HttpClient를 추상화한 스프링의 RestTemplate를 사용하려 했지만 이를 사용하여 코드를 작성할 때 추상화가 되어 있기에 이를 구체적으로 작성하려다보니 HttpClient로 사용하였습니다.

추가적으로 RestTemplate를 사용해본 경험이 있어서 이번에는 Java11 부터 도입된 HttpClinet를 사용하였습니다.

기존 코드

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("client_id", clientId);
params.add("client_secret", clientSecret);
params.add("grant_type", "authorization_code");
params.add("auth_code", authCode);
params.add("access_type", "offline");

HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers);
        ResponseEntity<HashMap> response = 

restTemplate.postForEntity("https://api.hiworks.com/open/auth/accesstoken", request, HashMap.class);

if (response.getStatusCode() == HttpStatus.OK) {
    return new Gson.fromJson(response.getBody().get("data").toString(), HiworksTokenResponse.class);
}
return null;

HTTP/2 를 사용한 이유

응답 Response Http1.1

image

그러나 이에 대해서 조사해본 결과 HTTP 2.0에는 HTTP1.1에서 지원되지 않는 멀티플렉싱 및 서버 푸시와 같은 지원되지 않는 새로운 기능이 있으며 부분 응답을 받거나 요청이 단순히 시간 초과되는 문제가 발생할 수 있다라고 검색되어동일한 버전으로 수정하겠습니다.

테스트 해본 결과 이러한 문제는 발생하지 않았지만 수정하도록 하겠습니다.

halucinor commented 1 year ago

In GitLab by @haaeee on Feb 9, 2023, 13:12

Commented on src/main/resources/application-prod.yml line 24

관리적 측면에 대해서 고민을 해보지는 않아서, 깊게 생각해보지는 못하였지만,

현재 Production yaml에서는 Redis 포트를 수정해야될 것 같습니다.

따라서 이 또한 환경 변수 처리로 진행해야 할 것 같습니다.

halucinor commented 1 year ago

In GitLab by @haaeee on Feb 9, 2023, 13:12

Commented on src/main/java/com/gabia/bshop/config/WebConfig.java line 24

현재 FRONTEND_LOCAL_DOMAIN은 Henry님의 DNS를 사용하여 변경되는 일은 없지만,

MAIN_SERVER_DOMAIN은 변경이 발생할 것 같습니다.

halucinor commented 1 year ago

In GitLab by @haaeee on Feb 9, 2023, 13:12

Mock Server 만들어 테스트 코드를 작성해보도록 하겠습니다.

다만, 걱정되는 부분은 postman을 활용한 MockServer를 테스트 코드로 작성하면, 테스트 할 떄 이 서버를 띄워야하는데 CI에서 테스트 코드가 돌아가는지에 대해서 찾아보고 테스트 코드를 작성해보겠습니다.

halucinor commented 1 year ago

In GitLab by @haaeee on Feb 9, 2023, 13:12

Commented on src/main/java/com/gabia/bshop/controller/OrderController.java line 36

이 부분은 Summer님이 네이밍을 하여 정확한 이유는 모르지만, 주문 조회를 할 때 orders 대신 더 의미를 부여하여 order-infos라고 정하신 것 같습니다.

halucinor commented 1 year ago

In GitLab by @haaeee on Feb 9, 2023, 13:12

Commented on src/main/java/com/gabia/bshop/dto/response/HiworksProfileResponse.java line 13

이 부분에 대해서는 팀원들과 함께 의논해보고 결정짓고 말씀드리겠습니다!

halucinor commented 1 year ago

In GitLab by @haaeee on Feb 9, 2023, 13:12

Commented on src/main/java/com/gabia/bshop/repository/ItemImageRepository.java line 12

multie line string으로 변경하도록 하겠습니다.

halucinor commented 1 year ago

In GitLab by @haaeee on Feb 9, 2023, 13:12

Commented on src/main/java/com/gabia/bshop/entity/Options.java line 31

Msyql 예약어(option, order)와 충돌이 되는 것 떄문에 Entity 클래스 명을 복수형으로 처리하였습니다.

halucinor commented 1 year ago

In GitLab by @haaeee on Feb 9, 2023, 13:12

Commented on src/main/java/com/gabia/bshop/security/redis/RefreshTokenServiceImpl.java line 22

import org.springframework.data.annotation.Id;

@Builder
@RedisHash(value = "refresh_token")
public record RefreshToken(
    @Id String refreshToken,
    Long memberId,
    LocalDateTime expiredAt
) {

    public boolean isExpired() {
        return expiredAt.isBefore(LocalDateTime.now());
    }
}

현재 refresh-token은 Redis에 저장하고 있습니다.