[인프런 워밍업 스터디 클럽] 1기 백엔드

[인프런 워밍업 스터디 클럽] 1기 백엔드

문제 1


두 수를 입력하면, 다음과 같은 결과가 나오는 GET API만들기
image

@GetMapping("api/v1/calc")
public ResponseEntity<?> calc(Calculator request){
    CalculatorResponse response = calculatorService.calc(request);
    return ResponseEntity.ok(response);
}

CalculatorController에 Post 요청 메서드로 외부 파라미터를 받기 위해 응답 객체로 Calculator 를 정의했습니다.

 

@Getter
@AllArgsConstructor
public class Calculator {
    private final int num1;
    private final int num2;
}

 

calulatorService 정의하여 비지니스 로직을 작성했습니다.

@Service
public class CalculatorService {

    public CalculatorResponse calc(Calculator request) {
        return new CalculatorResponse(
                add(request),
                minus(request),
                multiply(request));
    }

    private static int add(Calculator request) {
        return request.getNum1() + request.getNum2();
    }

    private static int minus(Calculator request) {
        return request.getNum1() - request.getNum2();
    }

    private static int multiply(Calculator request) {
        return request.getNum1() * request.getNum2();
    }
}

응답용 객체로 CalculatorResponse를 정의를 했습니다.

@Data
@NoArgsConstructor
@AllArgsConstructor
public class CalculatorResponse {
    private int add;
    private int minus;
    private int multiply;
}

그리하여 calulatorService에 요청 받은 두 데이터를 처리하여 CalculatorResponse로 ResponseEntity에 담아 200 응답으로 JSON 반환값으로 보냅니다.
image

문제 2

날짜를 입력하면, 몇 요일인지 알려주는 GET API 만들기

@RestController
@RequestMapping("/api/v1")
public class DateController {

    @GetMapping("/getDayOfWeek")
    public ResponseEntity<?> getDayOfWeek(@RequestParam String date) {
        try {
            LocalDate localDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
            String dayOfTheWeek = localDate.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.ENGLISH).toUpperCase();

            return ResponseEntity.ok(Collections.singletonMap("dayOfTheWeek", dayOfTheWeek));
        } catch (DateTimeException e) {
            return ResponseEntity.badRequest().body("Invalid date format");
        }
    }
}

클라이언트 요청을 처리하고 응답을 반환하기 위해 @RestController 어노테이션을 씁니다.
@GetMapping("/getDayOfWeek") 어노테이션을 써서 GET 요청이 오면 메소드가 호출됩니다.
@RequestParam을 써서 date 파리미터를 받습니다.


받은 날짜 문자열을 'LocalDate' 객체로 반환하기 위해 'DateTimeForrmatter'를 사용하여 날짜 형식을 지정합니다.
그리고 LocalDate 객체의 getDayofWeek() 메서드를 사용하여 요일을 구할 수 있습니다.

마지막으로 JSON 형식으로 반환하기 위해 Collections.singletonMap을 사용하여 간단하게 키-값 쌍을 만들어 JSON형식으로 반환할 수 있습니다.
image


문제3

여러 수를 받아 총 합을 반환하는 POST API 만들기

 

@Data
public class CalculatorRequest {
    private List<Integer> numbers;
}

클라이언트로 부터 받기 위해 숫자 배열릉 받기 위해 List<Integer> 필드를 가진 클래스를 만듭니다.

 

@PostMapping("/sum")
public int calculateSum(@RequestBody CalculatorRequest request) {
    return request.getNumbers().stream()
            .mapToInt(Integer::intValue)
            .sum();
}

CalculatorController에 Post요청을 처리하기 위해 @PostMapping 어노테이션을 사용합니다.
@@RequestBody를 사용하여 JSON 데이터를 CalculatorRequest 객체로 변환됩니다.

stream을 돌려 합계를 계산한 다음, 그 결과를 반환합니다.

image

댓글을 작성해보세요.