2022 Masters Course/Project Course

2022 마스터즈 코스(백엔드) 79일차 회고(2022. 4. 28.) - "프로젝트 마지막까지 최선을!!"

ikjo 2022. 4. 28. 22:56

해당 글은 코드스쿼드 2022 마스터즈 코스 "Java 웹 백엔드" 과정을 수강하면서 학습한 내용 등에 대한 회고 글입니다. :)

 

수강 회고

오늘로 마스터즈 코스 과정 79일차 그리고 두 번째 팀 프로젝트 종료 전 날이 되었다. 첫 번째 팀 프로젝트인 투두리스트웹 앱을 구현할 때와 달리 이번 반찬 서비스 웹 앱을 구현할 때는 (같은 백엔드 팀원 피오와 함께) 상당히 분주히 구현 작업을 진행하고 있는 중이다. 아무래도 새로운 기술들을 학습하고 익히고 프로젝트에 적용시키는데 많은 에너지가 소요된 탓이다. 마라톤으로 비유하면 마치 '데드 포인트' 지점과 같이 오늘 하루를 굉장히 피곤하고 무기력한 상태로 하루를 보냈었는데, 이번주 월요일부터 피오와 늦은 시간까지 함께 작업을 이어갔던 탓이었다.

 

피오 역시 나처럼 지친 기색이 역력해 보였지만 힘든 티를 내기 보다는 묵묵히 최선을 다하고자 하려고 노력하고 있기 때문에 나 역시 많은 동기 부여가 되면서 꿋꿋이 작업을 이어가고 있는 중이다. 이제 내일이면 전체 공유 시간과 마스터  피드백 시간과 함께 프로젝트가 종료되고 앞으로 한 주간 방학이 기다리고 있다. (물론 방학 시간 동안 왠종일 놀진 못하겠지만 😂) 아울러 두 번째 팀 프로젝트의 '유종의 미'를 거두고자 남은 시간 끝까지 최선을 다하고자 한다. 💪

 

 

학습 회고

  • 반찬 주문 서비스 웹 앱 구현 프로젝트
    • 팀원들(백 엔드 2명, 프론트 엔드 2명)과 zoom 회의실에서 학습

 

OAuth 연동 시 깃허브 이메일 정보 조회 API 호출하기

Client는 깃허브로부터 리소스 소유자 대신 Access Token을 이용하여 깃허브 내 리소스 소유자의 리소스에 접근할 수 있다. 이때 깃허브에서 정한 규칙대로 API를 호출하면 되는데, https://docs.github.com/en/rest 사이트를 참고해보면 API 명세들을 통해 사용자 관련 여러가지 정보들에 접근 및 제어가 가능하다는 것을 확인할 수 있다.

 

예를 들어, 사용자의 이메일을 조회해볼 수 있는데, 깃허브의 경우 공용(public) 메일과 응답을 받지 않는 사설(private) 메일 일을 조회해볼 수 있다. 이와 관련해서 깃허브가 제공하는 API 명세는 다음과 같다.

 

이미지 출처 : 깃허브

 

위 명세를 보면 HTTP API Method와 URI 그리고 헤더와 파라미터, 응답 예시, 상태 코드 등을 확인해볼 수 있다. 지정된 방식에 따라 다음과 같이 API를 호출해볼 수 있다.

 

    public List<String> getUserEmails(AccessToken accessToken) {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.set("Accept", application/vnd.github.v3+json);
        httpHeaders.set("Authorization", accessToken.getAuthorizationValue());

        HttpEntity<?> request = new HttpEntity<>(httpHeaders);
        ResponseEntity<Object[]> response = new RestTemplate().exchange(
            https://api.github.com/user/emails,
            HttpMethod.GET,
            request,
            Object[].class
        );

        Object[] userEmails = response.getBody();

        String publicEmail = (String) ((LinkedHashMap) userEmails[0]).get("email");
        String privateEmail = (String) ((LinkedHashMap) userEmails[1]).get("email");

        return List.of(publicEmail, privateEmail);
    }

 

위 로직을 보면 우선 API 명세에 명시된 대로 요청 헤더 Accept의 값에 application/vnd.github.v3+json을 할당하고 있다. 또한 리소스 소유자 대신 해당 리소스에 접근하기 위해 Access Token 관련 값을 Authorization 헤더에 할당해주고 있다. (Authorization: token OAUTH-TOKEN 형식으로 할당한다.) 이후 API를 호출하기 위해 RestTemplate의 exchange() 메서드를 활용해볼 수 있다.

 

첫 번째 인자로 이메일 정보를 가지고 있는 리소스 서버의 URL을 명기해주었고, 두 번째 인자로는 HTTP API Method를 할당해주었다. 세 번째 인자로는 앞서 설정했었던 헤더 값들을 담은 HttpEntity를 두었고 네 번째 인자(마지막 인자)로는 입력받을 자료구조로 Object[]를 두었다.

 

다음은 API를 호출 시 JSON 형식으로 응답받은 결과에 대한 예시이다. 이메일 각각의 정보별로 객체에 담겨 리스트 형태로 응답받는 것을 확인해볼 수 있다.

 

[
  {
    "email": "octocat@github.com",
    "verified": true,
    "primary": true,
    "visibility": "public"
  }
]

 

응답 받았을 때 각각의 객체는 자바에서 LinkedHashMap 형태로 저장될 수 있는데 보통 공용 메일에 대한 정보와 사설 메일에 대한 정보로서 총 2개의 객체를 응답받는다.

 

 

 

좋았던 점

  • 같은 백엔드 팀원 피오 역시 많이 힘들텐데 묵묵히 최선을 다하는 모습에 많은 동기 부여를 얻을 수 있었습니다. 👍

 

 

아쉬웠던 점

  • 어제 아주 진한 커피를 마신 탓에 몸은 엄청 피곤한데 잠이 오질 않는 아이러니한 상황이 나타났습니다. 😂 때문에 오늘 정말 컨디션이 안 좋은 상태였기에 아쉬운 마음이 컸습니다. 💦

 

 

이전 보다 개선되었던 점

  • 혼자서 프로젝트를 진행했으면 나타해졌을 텐데 팀원과 함께 프로젝트를 진행하니 좀 더 열심히 작업을 하게 되는 것 같습니다. 이번 팀 프로젝트를 통해서 이전에 나태했었던 부분들이 좀 더 개선된 기분입니다. ⭐