일개미 : 일상과 개발의 미학
[이노베이션 캠프] 8주차 회고록_실전프로젝트(W8-1) 본문
실전 프로젝트 1주가 지났다. 파이널인 만큼 마지막까지 체력관리도 잘 하면서 좋은 성과 거두었으면 🙏🏻
이번 프로젝트의 주제 키워드로는 '제로 웨이스트'로 골랐다. 평소 관심있던 내용이기도 하고, 환경문제로 떠오르는 주제로 찾아볼 수 있는 관련 자료들이 많을 것 같다고 생각되었다. 주제를 기반으로 커뮤니티 사이트를 만들어내기로 했다.
[ 어스어스 : Earth Us ]
제로웨이스트를 위한 커뮤니티로 유저들의 일상과 노하우를 공유하고, 미션을 제공받아 완수하여 장기&지속적인 환경보호 운동 실천을 독려하고 개인 미션 수행완료를 통한 뱃지획득 기능으로 성취감을 부여하여 일상에 자연스레 녹아드는 제로웨이스트를 추구하는 서비스
구현할 기능의 API 명세서는 아래와 같다. 노션은 다양하게 활용 가능한 기능이 많아서 팀프로젝트에 정말 좋은 플랫폼같다.
실전주차의 팀원은 총 7명으로 백엔드 3 & 프론트엔드 4 으로 구성되었다. 프론트 쪽의 한 분의 타 부트캠프 수료경력을 제외하고는 전부 노베이스의 팀원으로 구성된 팀이다.
그래서 들었던 생각은 내가 젤 백에서는 자신이 없었기 때문에ㅎㅎ... 새 기능이 주어지더라도 구현을 할 수 있을지가 의문이였는데,
토요일에 멘토링시간을 갖고 말씀하신 바로는 자신이 없어도 일단 해보고 정 기한이 되서 안되는 경우에만 정리를 하라고 하셨다. 겁먹지 말라고.
어차피 부트캠프 자체가 배우러 오는 것인데 잘못 생각하고 있었구나를 또 한번 느꼈다.
맡은 API로는 oAuth2를 활용한 소셜 로그인이였는데, 그 중에서도 구글 로그인을 맡았다. ㅎ....며칠동안 자료를 수백개를 찾아보고도 이해를 못해서 거의 끌어다 쓴 코드로 구성되버렸다..ㅠㅠ 덕분에 코드컨벤션 다같이 맞추지 못한게 너무 아쉽다... 그 조차도 겨우겨우
아직 구현하지 않은 기능을 제외하고 있는 현재 파일 경로 구조이다. 기본 로그인 없이 우선 소셜 로그인으로만 진행을 해보고 추후 확장성을 고려해보기로 했다.
자료 내용을 워낙 많이 끌어오다보니 처음으로 VO클래스까지 사용하게 되었다.
* VO 클래스(Value Object)
DAO 클래스를 이용하여 데이터베이스에서 데이터를 관리할 때 데이터를 일반적인 변수에 할당하여 작업할 수도 있지만, 별도의 VO 클래스를 작성하여 데이터베이스와 관련된 변수들의 모음 역할을 한다. 값 오브젝트로 값을 위해 쓰이며, ReadOnly의 성격을 가진다. DTO와 유사하나 Getter 기능만 존재한다.
배포 후에 DB테이블 미처 직접 체크 못하고 팀원분께서 알려주셨는데 어이없게도 Service에서 생성자 순서를 제대로 안맞춘탓에 패스워드가 닉네임으로 들어가고 닉네임이 패스워드 컬럼으로 들어갔다..ㅋㅋㅋ...아무튼 바로 찾아서 수정
깃에 푸시하는 건 이제 익숙해지고 어렵지 않은데,,,,,,Pull & Merge가 제일 어렵고..무섭^-^
충돌나더라도 수정을 잘하면 모르는데 혹시 모르기 때문에 ㅎ
사실 merge 제대로 잘해서 충돌 안나게 하는게 ... :)
Controller------------------
@RequestMapping(value = "/login/oauth2/code/google", method = RequestMethod.GET)
public ResponseEntity<?> redirectGoogleLogin(@RequestParam(value = "code") String authCode, HttpServletResponse response) throws JsonProcessingException {
return googleMemberService.googleLogin(authCode, response);
}
Service------------------
private GoogleLoginDto getGoogleUserInfo(String authCode) throws JsonProcessingException {
RestTemplate restTemplate = new RestTemplate(); // HTTP 통신을 위해 RestTemplate 활용
GoogleLoginRequestVo requestParams = GoogleLoginRequestVo.builder()
.clientId(googleConfigUtils.getGoogleClientId())
.clientSecret(googleConfigUtils.getGoogleSecret())
.code(authCode)
.redirectUri(googleConfigUtils.getGoogleRedirectUri()) // 오류시
.grantType("authorization_code")
.build();
서버 측에서 인가 과정을 거치기 때문에 프론트에서는 별도 리퀘스트를 날릴 필요가 없이 GET요청만 주면 된다.
사실 뜯어보면 엄청 복잡하지는 않은 과정이기 때문에 서버측에서 충분히 전부 구현해도 된다고 생각한다. 비록 나는 스프링 자체를 제대로 못다루기 때문에 많이 끌어온 코드지만 ^-^;
그 외에 별 내용으로는 멘토링 때 피드백 주신 내용을 토대로 구현 방식에 대한 코드를 짜고 이 내용은 다음 주차에서 어떻게 나오는지 다음 회고록에서 작성하겠다.
'Innovation Camp' 카테고리의 다른 글
[이노베이션 캠프] 14주차 회고록_실전프로젝트 및 수료 후기 (0) | 2022.11.04 |
---|---|
[이노베이션 캠프] 7주차 회고록 (0) | 2022.09.18 |
[이노베이션 캠프] 5주차 회고록 (0) | 2022.09.04 |