diff --git "a/.github/ISSUE_TEMPLATE/\360\237\214\237-\352\270\260\353\212\245-\352\265\254\355\230\204.md" "b/.github/ISSUE_TEMPLATE/\360\237\214\237-\352\270\260\353\212\245-\352\265\254\355\230\204.md" new file mode 100644 index 0000000..64868a7 --- /dev/null +++ "b/.github/ISSUE_TEMPLATE/\360\237\214\237-\352\270\260\353\212\245-\352\265\254\355\230\204.md" @@ -0,0 +1,22 @@ +--- +name: "\U0001F31F 기능 구현" +about: 해당 템플릿을 사용해서 기능 구현 이슈를 생성해주세요 +title: "[Feat]" +labels: "\U0001F31F Feat" +assignees: '' + +--- + +## 🖍️ 기능 설명 + +> 추가하려는 기능에 대해 간결하게 설명해주세요 + + +## 🔎 작업 상세 내용 + +- [ ] TODO +- [ ] TODO +- [ ] TODO + + +## 📄 참고 자료 (선택) diff --git "a/.github/ISSUE_TEMPLATE/\360\237\225\270\357\270\217--\353\262\204\352\267\270-\353\260\234\354\203\235.md" "b/.github/ISSUE_TEMPLATE/\360\237\225\270\357\270\217--\353\262\204\352\267\270-\353\260\234\354\203\235.md" new file mode 100644 index 0000000..cfc3930 --- /dev/null +++ "b/.github/ISSUE_TEMPLATE/\360\237\225\270\357\270\217--\353\262\204\352\267\270-\353\260\234\354\203\235.md" @@ -0,0 +1,25 @@ +--- +name: "\U0001F578️\b 버그 발생" +about: 해당 템플릿을 사용해서 버그 발생 이슈를 생성해주세요 +title: "[Bug]" +labels: "\U0001F578️ Bug" +assignees: '' + +--- + +## 🚨 오류 설명 + +> 어떤 오류인지 간결하게 설명해주세요 + + +## 🔧 상세 내용 + +> (가능하면) Given-When-Then 형식으로 서술해주세요 + + +## 🙏 예상 결과 + +> 예상했던 정상적인 결과가 어떤 것이었는지 설명해주세요 + + +## 📄 참고 자료(선택) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..a07126e --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,18 @@ +## 🔎 작업 내용 + +> 기능에서 어떤 부분이 구현되었는지 설명해주세요 + + +## 💬 리뷰 요구사항 (선택) + +> 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 +> ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭이 있을까요? + + +## 📸 이미지 첨부 (선택) + + + +## ➕ 이슈 링크 + +- [레포 이름 #이슈번호](이슈 주소) diff --git a/README.md b/README.md index eea6fa7..cbabf66 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,14 @@ # Team29_BE 29조 백엔드 + +## 3주차 코드리뷰 질문 +- 프로젝트 구조 + - 프로젝트의 전체적인 구조에 대한 피드백을 받고 싶습니다. 처음으로 이런 규모의 프로젝트를 진행하다 보니 좋은 구조로 진행하고 싶은 욕심이 있습니다. 개선해야 할 점이 있을까요? +- 코드 이해도 관련 + - 서비스 규모가 커질수록 타인이 작성한 코드를 이해하기 점점 어려워질 것 같습니다. 어느정도의 단위로 주석을 작성하는것이 좋을까요? +- 미구현 기능 처리 + - 협업 중 아직 구현되지 않은 클래스 또는 메서드 등을 사용해야 할 때, 어떻게 접근하는게 좋을까요? +- PR 단위 + - 금요일까지 제출로 정해진 상황에서, 기능이 완전히 구현되지 않아도 PR을 보내야 하는 상황이 있을 거 같습니다. 개발 내용이 어렵거나 여러 이유로 개발이 늦어질 수 있는데, 아직 구현중인 기능도 PR을 보내는 것이 괜찮을까요? +- 협업 방식 + - PR로만 소통하는 것과 공통 레포(공용 Organization에 작업 레포를 포크해 온 레포)에서 커밋 단위로 어려움이 생겼을 때 코드를 공유하며 확인하는 것 중 어떤 방식이 더 효율적일까요? diff --git a/src/main/java/notai/common/config/SwaggerConfig.java b/src/main/java/notai/common/config/SwaggerConfig.java index f3f77db..3b79924 100644 --- a/src/main/java/notai/common/config/SwaggerConfig.java +++ b/src/main/java/notai/common/config/SwaggerConfig.java @@ -1,43 +1,27 @@ -package notai.common.config; +package notai.client.oauth.kakao; -import io.swagger.v3.oas.models.Components; -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.info.Info; -import io.swagger.v3.oas.models.security.SecurityRequirement; -import io.swagger.v3.oas.models.security.SecurityScheme; -import io.swagger.v3.oas.models.servers.Server; -import org.springframework.beans.factory.annotation.Value; +import lombok.extern.slf4j.Slf4j; +import notai.common.exception.type.ExternalApiException; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpStatusCode; +import org.springframework.web.client.RestClient; -@Configuration -public class SwaggerConfig { - - private final String serverUrl; +import static notai.client.HttpInterfaceUtil.createHttpInterface; - public SwaggerConfig(@Value("${server-url}") String serverUrl) { - this.serverUrl = serverUrl; - } +@Slf4j +@Configuration +public class KakaoClientConfig { @Bean - public OpenAPI openAPI() { - String jwt = "JWT"; - SecurityRequirement securityRequirement = new SecurityRequirement().addList(jwt); - Components components = new Components().addSecuritySchemes(jwt, new SecurityScheme().name(jwt) - .type(SecurityScheme.Type.HTTP) - .scheme("bearer") - .description("토큰값을 입력하여 인증을 활성화할 수 있습니다.") - .bearerFormat("JWT")); - Server server = new Server(); - server.setUrl(serverUrl); - return new OpenAPI().components(new Components()) - .info(apiInfo()) - .addSecurityItem(securityRequirement) - .components(components) - .addServersItem(server); - } - - private Info apiInfo() { - return new Info().title("notai API").description("notai API 문서입니다.").version("0.0.1"); + public KakaoClient kakaoClient() { + RestClient restClient = RestClient.builder().defaultStatusHandler(HttpStatusCode::isError, + (request, response) -> { + String responseData = new String(response.getBody().readAllBytes()); + log.error("카카오톡 API 오류 : {}", responseData); + throw new ExternalApiException(responseData, response.getStatusCode().value()); + } + ).build(); + return createHttpInterface(restClient, KakaoClient.class); } }