현재 코드에는 Github Web과 iOS
@RestController
@RequestMapping("/login")
public class GitHubLoginController {
private final GitHubLoginService loginService;
public GitHubLoginController(GitHubLoginService loginService) {
this.loginService = loginService;
}
@GetMapping("/github")
public ApiResponse<GitHubUserResponse> githubLogin(@RequestParam String code) {
GitHubUserResponse response = loginService.login(code);
return ApiResponse.ok(response);
}
@GetMapping("/github/iOS")
public ApiResponse<GitHubUserResponse> githubIOSLogin(@RequestParam String code) {
GitHubUserResponse response = loginService.loginIOS(code);
return ApiResponse.ok(response);
}
}
💡 커스텀 헤더 네이밍?
[ 참고 : Custom HTTP headers : naming conventions ]
- The recommendation is was to start their name with "X-". E.g. X-Forwarded-For, X-Requested-With
- On June 2012, the deprecation of recommendation to use the "X-" prefix has become official as RFC 6648.
- 결론은, "X-" prefixed headers를 계속 사용해도 좋지만, 더 이상 공식적으로 권고하는 방식은 아니다.
public class ApiResponse<T> {
private T data;
private ApiResponse() { }
}
@GetMapping("/github")
public ApiResponse<GitHubUserResponse> githubLogin(@RequestParam String code) {
GitHubUserResponse response = loginService.login(code);
return ApiResponse.ok(response);
}
그런데 ApiResponse 를 사용하는 것이 레거시 느낌이 강하게 나는 패턴이라는 리뷰를 받았다. 이것을 사용했을 때와 사용하지 않았을 때를 구분해서 생각해보시면 좋을 것 같다고 말씀해주셨다.
흠.. 근데! 통신을 할 때 공통 포맷이 있다면 서버와 클라이언트가 좀 더 쉽게 소통할 수 있지 않을까라는 생각?
구글 json 가이드에서 YouTube JSON API를 보면 error를 리턴하는 형태가 다르다는 것만 제외하면, data 필드 아래에 실제 데이터를 래핑해서 응답을 보내는 형식은 같은데.. 훔 어떤게 맞는건지 잘 모르겠다;;😂 스터디에서 같이 이야기해봐야지
// Environment 빈을 사용해서 주입하는 방식
public LoginController(Environment environment) {
this.CLIENT_ID = environment.getProperty("github.client.id");
this.CLIENT_ID_IOS = environment.getProperty("github.client.id.ios");
}
// @Value 어노테이션을 사용해 특정 값을 주입받는 형식
public LoginController(@Value("github.client.id") String clientId, @Value("github.client.id.ios") String iOSClientId) {
this.CLIENT_ID = environment.getProperty("github.client.id");
this.CLIENT_ID_IOS = environment.getProperty("github.client.id.ios");
}
@Configuration
public class AwsConfig {
@Value("${cloud.aws.s3.access-key}")
private String accessKey;
@Value("${cloud.aws.s3.secret-key}")
private String secretKey;
@Value("${cloud.aws.s3.region}")
private String region;
@Value("${cloud.aws.s3.bucket}")
private String bucket;
@Bean
public S3Client s3Client() {
final AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
final AmazonS3 amazonS3 = AmazonS3ClientBuilder
.standard()
.withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
.build();
return S3Client.create(amazonS3, region, bucket);
}
}