@RequestMapping("/courses/{courseId}/lectures")
@RestController
class LectureController {
@PutMapping("/{lectureId}")
fun updateLecture(
@PathVariable courseId: Long,
@PathVariable lectureId: Long,
@RequestBody updateLectureResponse: UpdateLectureResponse
): ResponseEntity<LectureResponse> {
TODO()
}
}
뭔가 본격적인 시작에 앞서 이제 안오면 섭섭할 '위기'가 다시 찾아왔다.
코드를 구석구석 해석해 보려고 한다.
어노테이션이란?
먼저, @로 시작하는 어노테이션은 컴파일러나 프레임워크 등에게 특정한 의미나,
기능을 전달하는 역할을 한다.
@RequestMapping
어노테이션은 클래스나 메서드에 적용할 수 있으며, 다양한 속성을 통해 요청의 경로, 메서드, 헤더, 파라미터 등을 지정할 수 있다.
이 어노테이션을 사용하면 원하는 요청을 쉽고 유연하게 매핑할 수 있다.
@RestController
Rest Controller 어노테이션은 스프링 부트에서 RESTful API를 개발하기 위한 어노테이션이다.
이 어노테이션은 @Controller와 @ResponseBody를 합친 것으로,
컨트롤러의 메서드가 반환하는 값이 뷰 이름이 아니라 HTTP 응답의 본문으로 전달된다.
즉, 이 어노테이션을 사용하면 JSON이나 XML과 같은 데이터를 반환할 수 있다.
이 어노테이션은 @Component의 특수화된 형태이므로, 스프링 컨테이너에 빈으로 등록된다.
@PutMapping("/{lectureId}")
이 어노테이션은 이 함수가 HTTP PUT 메소드를 처리하는 것을 의미한다.
PUT 메소드는 리소스의 전체를 수정하는 데 사용된다.
@PathVariable courseId: Long,
첫 번째 매개변수이다.
@PathVariable이라는 어노테이션은 이 매개변수가 URI의 일부인 '경로 변수' 라는 것을 의미한다.
매개변수의 이름은 CourseId이고, Long 타입이다.
즉, 이 매개변수는 '코스의 아이디를 나타내는 정수값' 이라는 것을 알 수 있다.
@PathVariable lectureId: Long,
두 번째 매개변수이다.
이 역시 위와 같이 매개변수의 이름은 lectureId이고, Long 타입이다.
'강의의 고유 아이디를 나타내는 정수값' 이라는 것을 알 수 있다.
@RequestBody updateLectureResponse: UpdateLectureResponse
): ResponseEntity<LectureResponse>
@RequestBody는 이 매개변수가 HTTP 요청의 본문에 담긴 데이터 라는 것을 의미한다.
매개변수의 이름은 updateLectureResponse이고, 타입은 UpdateLectureResponse다.
즉, 이 매개변수는 강의를 수정하기 위한 정보를 담고 있는 객체이다.
반환 타입이
ResponseEntity <LectureResponse>
인데 강의를 수정한 결과를 담고 있는 객체를 HTTP 응답으로 반환한다는 뜻이다.
찾아보고 쓴 내용인데도 뭘 의미하는지 자세히 알기가 어렵다.
API는 프로젝트의 시작과 끝이라 불릴 정도로 중요하다고 하는 만큼
계속 보면서 익혀야될 것 같다.
또, URI들을 보다 보니 예전에 발생했던 문제가 생각나서 가져와 봤다.
방송통신대학 지원서 URL 중에 개인을 식별할 수 있는 정보가 담겨있는 내용이
URL에 그대로 노출되어, 이 정보를 하나씩 바꾸면 다른 사람들의 지원 정보를 볼 수 있었다.
이런 식으로 서로가 일치할 때에만 지원서 정보를 출력해 줬다면 문제가 발생하지 않았을 것이라고 한다.
내가 지금 하고있는게 요런 거 같은데 참고해야겟다.