Projects 19

Oauth2 진행 이후 redirect 페이지에서 특정 정보에 접근하기

Oauth2 진행 흐름 문제를 파악하기에 앞서 Oauth2의 진행 흐름에 대해 알아보았습니다. 그림에서의 Resource Owner 사용자를 의미하며 Client는 백엔드 서버를, Authorization Server와 Resource Server는 구글과 같은 3rd-party를 의미합니다. 진행 흐름은 다음과 같습니다. 사용자는 백엔드 서버로 소셜로그인을 요청합니다. 요청받은 백엔드 서버는 3rd-party에서 부여해준 Client ID와 함께 사용자의 인증과정을 해당 3rd-party의 Authorization 서버에 요청합니다. 사용자는 3rd-party에서 인증과정을 진행하고 백엔드 서버는 Authorization 서버에서 받은 엑세스 토큰을 이용하여 3rd-party의 Resource 서버에서..

CORS 문제 해결

문제 발생 프로젝트 진행 중 프론트엔드 분들을 위한 Mock-up data API를 만들어 EC2를 활용해 배포하여 제공하게 되었는데 이때 Cors 문제가 발생하게 되었다. 스프링 시큐리티를 사용하지 않으므로 간단하게 컨트롤러에 @CrossOrigin 에너테이션으로 해결할 수 있을줄 알았지만 계속해서 http status 415 에러가 난다는 보고를 받았다. 문제 해결 이를 해결하기 위해 Cors filter를 직접 작성해 주기로 했다. package com.stub_data_server.cors; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframewor..

팀 프로젝트 일지

프로젝트 목표 StackOverFlow사이트의 클론코딩 프로젝트 기간 2주 개발 인원 6명(프론트 3명, 백엔드 3명) D+1 팀원간의 개인 역량 체크 짧은 시간인 2주간 주니어 개발자 6명에서 해당 웹사이트의 어떤 기능까지 구현을 할것인가, 그 범위에 대해 논의하게 되었다. 주어진 시간은 2주이지만 그안에 프로젝트의 방향을 논의하고 역할을 분배, 어플리케이션의 기능을 코드로 구현, 테스트 실시, 배포까지 하기 위해선 StackOverFlow의 기능을 최소화하여 꼭 필요한 기능들인 회원과 질문, 답변, 댓글에 관한 기본적인 CRUD 서비스와 소셜 로그인 기능까지만 일단 구현한 후 시간이 남으면 팀원 모두 협의 후 새로운 기능을 추가하기로 결정하게 되었고 이를 바탕으로 사용자 요구사항 정의서를 작성하였다...

MockMVC - Multipart form data요청 테스트

아무생각 없이 테스트 코드를 작성하던 도중 Multipart form data 타입의 요청을 테스트 할 차례가 다가 왔다. 일단 Multipart form data 타입의 요청을 테스트하고 해당 테스트를 기반으로 RestDocs를 이용하여 API문서를 만들기 위해서는 두가지 기능을 구현할 방법을 알아야 했다. MockMvc에서 Multipart form data 타입의 요청을 보내는 방법 해당 요청을 테스트한 뒤 RestDocs를 이용하여 API 문서로 만드는 방법 해당 기능을 수행하기에 앞서 request body의 형식이다. "requestBody"라는 key로 json형식의 데이터와 "photoImgs"의 key로 이미지파일이 들어가야 한다. 1. MockMvc에서 Multipart form dat..

Mock test 단계에서 발생한 MockHttpServletResponse: body is empty

드디어 게시판 프로젝트의 마지막 단계만 남았다! 마지막으로 Mock test를 진행하면서 Rest docs를 이용해 API문서를 만드는 도중에 발생한 문제이다. 문제발생 앞서 post 요청에 대한 테스트 코드를 작성한 뒤 통과하고 patch 요청에 대한 코드를 작성한 이후 테스트가 실패하게되었다. 먼저 작성한 테스트 코드이다. @WebMvcTest(value = MemberController.class) @MockBean(JpaMetamodelMappingContext.class) @AutoConfigureRestDocs public class MemberControllerRestDocsTest implements MemberControllerTestHelper { ... ... @Test @WithMo..

파일 업로드를 위한 AWS S3 연결 도중 발생한 문제들과 해결방안

이번 포스트는 개인 프로젝트인 게시판 만들기에서 AWS S3와 연동 도중 발생한 작은 문제들에 관한 포스트이다. 1. API platform API 개발중 API platform으로 주로 Insomnia를 사용했었다. 작성한 컨트롤러에서는 @RequestPart 에너테이션을 이용하여 json 타입과 form data 형식의 데이터들을 각각 받아주게 해주었는데 문제는 요청으로 보낼 각각의 데이터들에 어떤 타입의 데이터들인지 명시해주어 보내야 하는데 Insomnia에는 데이터 타입을 각각 지정해주는 기능이 없었다... StackOverFlow에서 조차도 Postman으로 갈아타라는 답변밖에 얻을수 없었고, 결국 반강제적으로 사용이 익숙한 Insomnia를 버리고 Postman으로 갈아타버리게 되었다. 2. ..

JPQL문에서 Enum 사용하기

멤버 엔티티 @Entity @NoArgsConstructor @Getter @Setter public class Member extends Auditable { ... ... @Enumerated(value = EnumType.STRING) @Column(length = 20, nullable = false) private MemberStatus memberStatus = MemberStatus.MEMBER_ACTIVE; ... ... public enum MemberStatus{ MEMBER_ACTIVE("활동중"), MEMBER_SLEEP("활동 중지"), MEMBER_QUIT("활동 정지"); @Getter private String status; MemberStatus(String status) ..

UnexpectedTypeException과 DTO에서 Enum타입 사용

처음 시작은 게시판의 게시글을 post 하기 위한 DTO를 작성하고 요청을 보내 테스트하던중 UnexpectedTypeException 예외가 발생하였다. (해당 예외 이름에서 알 수 있듯이 요청으로 받은 JSON 파일이 다른 타입을 제공하고 있어서 발생한 예외이다. 이것만 좀더 일찍알았더라면 2시간을 허비하지 않았을텐데...) 발생한 예외의 DTO와 Enum 코드 DTO public class PostsDto { @Getter @Builder @Setter public static class Post{ ... ... @NotBlank private String title; @NotBlank // 예외 발생지점 private Posts.PostStatus postStatus; @NotBlank priva..

DB연동 도중 발견된 버그들(Enumerated, AuditingEntityListener, Optional 메서드)

회원에 관한 CRUD 서비스를 완성하고 회원을 등록했을때 발견된 버그이다. 위의 그림을 살펴보면 CREATED_AT, LAST_MODIFIED_AT, MEMBER_STATUS 컬럼이 비어있다. JPA에서는 참조 타입에 입력값이 없는경우 null로, int와 같이 정수형 원시타입의 경우 0으로 채워져 저장된다. 버그1 - MEMBER_STATUS에 열거형 데이터 적용 public class Member extends Auditable { ... ... @Enumerated @Column(length = 20, nullable = false) private MemberStatus memberStatus = MemberStatus.MEMBER_ACTIVE; ... ... public enum MemberSta..