Rest API로 처리하고자 하면 클래스에
@RestController
@RequestMapping("/api")
를 선언해 주어야 한다.
()안의 값은 바뀔수 있다.
Mapping, @PathVariable, @RequestParam으로 나눌수가 있다.
Mapping의 종류에는
@PathVariable 는 입력할떄마다 주소의 값을 수정해주는 어노테이션으로 유동적이다.
@RequestParam 는 쿼리를 사용할떄 사용하며
지정된 값을 쿼리로써 입력받아서 사용된다.
보통 명시적으로 변수를 받고 싶을떄 사용되며
현업에서는 대게 class의 객체를 받아서 사용 된다.
-> 이것을 dto라고 한다.
변수는 있지만 따로 입력받는 값이 없다면 파싱이 되지 않는다(누락된다)
postMapping는 리소스를 새로 생성하기 떄문에 @RequestBody를 작성해야한다.
마찬가지로 객체를 입력받아서 Get방식과 동일하게 사용된다.
== 거의 모든 부분이 GetMapping과 같다. ==
PostMapping과 다를바 없다.
PutMapping, PostMapping 은 보통 201k로 응답이 들어오지만 ResponseEntity를 통해서 강제로 200k로 내려받을수가 있다.
200k, 200k : http의 상태를 의미
위 세가지 Mapping의 차이점은 어떤 방식으로 통신할지를 정하는 것 뿐이며 RequestMapping을 하는 방법중 하나이다.
말그대로 들어온 값을 삭제하는 mapping이다.
삭제하기 떄문에 많은 값을 받지 않으며 GetMapping과 완전 반대되는 역할이다.
객체를 직접 생성하는 것이 아니라 외부에서 입력을 받아서 사용한다 라는 내용이다.
Spring 에서는 container를 통해서 객체를 관리하게 된다.(프로그래머가 관리를 하는 것이 아니다)
이 container에 저장된 객체들을 bean이라고 하며 필요할떄마다 container에서 뽑아서 사용하는 원리이다.
--> 싱글톤 패턴을 사용하게 된다.
실제로 DI가 잘 적용된 설계는 new생성자가 보이지 않는다.
앞서 DI에서 말한 container에 대한 내용이다.
@Component롤 클래스에 입력해줌으로써 Spring에서 관리를 해달라고 지정해 준다.
-> 사용시 자동으로 main에도 적용이 된다.
사용할떄에는 값을 꺼내오는 또다른 class를 만들어 주어야 한다.
-> 내 코드에서는 ApplicationContextProvider class가 그역할을 하고 있다.
ApplicationContextAware 인터페이스를 상속받게 되면 ApplicationContext 인터페이스를 사용 가능하다.
ApplicationContext 에는 Spring이 실행될떄의 값이 담겨 있기 때문에 변수를 입력받아 저장해서 사용하면 된다.
쉽게 이해하면 반복되는 코드를 줄여주는 것이다.
시스템을 설계할떄에는 3가지 영역이 있는데
Web Layer, Business Layer, Data Layer 가 있다.
이중 Business Layer 는 실제 코드가 수행이 되는 것을 적는 영역인데 보통 Data Layer에서 값을 받아서 수행 하게 된다.
별다른 어려운 내용은 없다.
직접 노드를 수정하는 방법과 utf-8로 바꿔주는 내용이 들어있다.
@RequestBody와 @PathVariable는 동시에 사용이 가능하다.
@JsonInclude : class에 적용되는 어노테이션으로 값을 내려 받을떄 입력받지 않는 변수들을 처리해주는 어노테이션
@Bean같은 경우는 class에 붙일수가 없다.(메서드만 가능)
@component는 class에 붙여서 속한 모든 메서드들을 bean 처리해준다.
@configlation는 하나의 클래스에 여러가지 bean을 처리할떄 class에 사용
@component, @Bean 같은 경우에는 ("") 이름을 설정해줄수 있다(class와 같으면 안된다)
@Target : 사용할 곳을 지정(메서드 class 등등)
@Retention : 언제 작동 시킬지를 지정
@AfterReturning : 실행이 완료된후 실행된 값을 반환한다.
@Before : 실행전에 먼저 실행한다.
@Pointcut : 클라이언트가 실행될떄 실행되는것들을 joinPoint라고 하는데 JoinPoint중에서 실행할 것들을 지정할떄 사용된다(메서드, 패키지, 클래스 등등 지정 가능)
-> 사용법이 굉장히 다양하기 떄문에 검색해보면서 사용할것!
class.cast의 내용이 아직 이해가 되지 않으니 후에 공부해볼 예정!!