서비스를 이용하는 유저를 로그인유저, 게스트유저 두개로 나누었습니다.
처음 생각한 것은 /members/guest로 GET요청을 하면 임의의 이메일과 비밀번호를 생성하여
데이터베이스에 저장을 하고 이메일과 비밀번호를 Response값으로 넘겨주면 클라이언트에서 다시
/members/login 경로로 POST요청을 보내고 토큰을 전달해주는 방식을 생각했었습니다.
하지만 비효율적이고 클라이언트에서의 번거로움으로 다른 방식을 생각한게 게스트의 정보를 데이터
베이스에 저장하고 로그인 요청을 직접 보내는 방식입니다.
RestTemplate를 이용하여 컨트롤러간의 통신을 하기 위해 먼저 빈으로 등록해줍니다.
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
작성한 메서드 입니다.
@GetMapping("/guest")
public ResponseEntity getGuestUser() {
String email = EmailPasswordGenerator.generateRandomEmail();
String password = EmailPasswordGenerator.generateRandomPassword();
User user = new User(email, password);
User savedUser = userService.createUser(user);
savedUser.setPassword(password);
// 요청 보낼 데이터 준비
LoginDto loginDto = new LoginDto(email, password);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<LoginDto> requestEntity = new HttpEntity<>(loginDto, headers);
// 요청
ResponseEntity<String> loginResponseEntity = restTemplate.exchange(
"{주소}/members/login", HttpMethod.POST, requestEntity, String.class);
// 헤더 추출
HttpHeaders allHeaders = loginResponseEntity.getHeaders();
// 데이터 리턴
return new ResponseEntity<>(allHeaders, HttpStatus.OK);
}
먼저 임의의 이메일과 비밀번호를 생성하여 데이터베이스에 저장했습니다.
생성되는 이메일은 guest + "랜덤한 문자" 로 만들어져 게스트 역할로 저장됩니다.
그 후 데이터를 가공하고 원하는 주소와 HttpMethod, 가공한데이터를 요청으로 보냅니다.
주의할점은 주소에 http 또는 https 가 포함된 주소 전부를 적어야됩니다.
요청을 보낸 값이 loginResponseEntity에 저장됩니다.
저는 헤더의 데이터만 필요했기에 헤더를 추출해서 리턴을 보냈습니다.