첫번째는 OOP에서 interface를 사용하는 이유와 같은 이유로 서비스 부분에 interface를 지정하는 것입니다. 
일반적으로 웹 프로그램에서는 서비스 + DAO까지 하나의 컴포넌트로 외부(Controller)에 제공되기 때문에 인터페이스를 사용하여 대체 가능성 등을 고려하는 것이지요.. 
(구체적인 인터페이스의 장점에 대해서는 다음 분께 패스!!)

두번째는 일반적으로 transaction이나 Exception 처리 등의 AOP 설정이 서비스 경계 부분에 지정되기 때문입니다.

Spring의 경우도 이 부분의 인터페이스화 되어 있지 않으면 CGLIB같은 class를 변경하는 추가적인 설정과 library가 필요합니다.

이는 추가 설정이 필요한 측면도 있고, 내부적으로 복잡하게 동작하기 때문인 것 같습니다.


OOP와 AOP를 제대로 갖추기 위해 쓰는건 맞는데
우리나라 IT 현실에서 이걸 쓰는건 사실 회의적일때가 많네요;;
어차피 스파게티 소스도 넘쳐나게 섞어 쓰고, 정작 저렇게 구현해놓고선 제대로 쓰질 않으니
유명무실한 경우가 참 많죠
이걸 이따위로 쓰려면 왜 이걸 가져왔나...참 한탄스럴때가 있는데 어쩔수 없네요;;


service에서 쓰는건 
스프링에서 AOP구현시 사용하는게
JDK의 기본 프록시인데 
프록시는 Inteface기반으로 동작해서
그냥 저게 싫음 CGLib로 쓰면됨
어짜피 스프링도 CGLib는 3버전이후로는 포함되어 있음

인터페이스 자체의 사용 이유는 그냥 규약이 필요할때 쓰면됨

controller는 화면을 return 하고 restcontroller는 주로 데이터를 리턴



@RequestBody 어노테이션이란?

HTTP 요청의 body 내용을 자바 객체로 매핑하는 역할을 합니다.

-> 당연히 method 방식으로 Get을 쓰면 원하는 인자값을 받지 못함

        -> Get은 Body데 데이터를 담지 않기 때문에, POST를 사용


추가적으로 @PathVariable, @RequestParam이 있다

자꾸 딴곳으로 새는데 ,,, 이 부분도 같이 보는것이 좋다.


@PathVariable  

URI 템플릿 변수에 접근할 때 사용


@RequestParam  

Http 요청 파라미터를 매핑



@RestController 어노테이션이란?

@RestController = @Controller + @ResponseBody 

Spring 4 버전이후로 출시

@Controller와 @ResponseBody를 @RestController가 가지고 있기 때문에 데이터 중심의 구현

작동 방식은 @ResponseBody와 동일



get은 인자값 받지 못하고 뿌려주기만
post는 body 데이터를 담아서 수정 삭제가 가능하다.


https://doublesprogramming.tistory.com/105

REST는 'Representational State Transfer'의 약어로 하나의 URI는 하나의 고유한 리소스(Resource)를 대표하도록 설계된다는 개념입니다. 최근에는 서버에 접근하는 기기의 종류가 다양해 지면서 다양한 기기에서 공통으로 데이터를 처리할 수 있는 규칙을 만들려고 하는데 이러한 시도가 REST방식입니다.

 

REST방식은 특정한 URI는 반드시 그에 상응하는 데이터 자체라는 것을 의미하는 방식입니다. 예를 들어 '/boards/123'은 게시물 중에서 123번이라는 고유한 의미를 가지도록 설계하고, 이에 대한 처리는 GET,POST 방식과 같이 추가적인 정보를 통해서 결정합니다.

 

REST API는 외부에서 위와 같은 방식으로 특정 URI를 통해서 사용자가 원하는 정보를 제공하는 방식입니다. 최근에 Open API에서 많이 사용되면서 REST방식으로 제공되는 외부 연결 URI를 REST API라고 하고, REST 방식의 서비스 제공이 가능한 것은 'Restful'하다고 표현합니다.

 

스프링은 3버전 부터 @ResponseBody 에노테이션을 지원하면서 본격적으로 REST방식의 처리를 지원하고 있었고, 그 이전부터 스프링은  Content Negotiation 등을 이용해서 처리할 수 있었습니다. 스프링 4에 들어와서 @RestController가 본격적으로 소개 되었습니다.

 

1.1 @RestController의 소개

스프링 4버전부터 지원되는 '@Controller 애노테이션만을 사용해서 처리하였고, 화면 처리를 담당하는 JSP가 아닌 데이터 자체를 서비스하려면 해당 메소드나 리턴 타입에 '@ResponseBody' 애노테이션을 추가하는 형태로 작성하였습니다. 기능으로 보자면 이전 버전에 비해 크게 달라진 점은 없지만, 컨트롤러 자체의 용도를 지정한다는 점에서 변화가 있다고 할 수 있습니다.

 

@ResponseBody 애노테이션은 메소드나 리턴 타입에 사용할 수 있는 애노테이션입니다. 기존 JSP방식의 처리와 달리 @ResponseBody 애노테이션의 처리는 스프링의 MessageConverter에 의해 영향을 받습니다.

스프링에서는 전달된 데이터의 타입에 따라 MessageConverter가 데이터를 가공해서 브라우저(클라이언트)에 전송합니다.

 

과거에는 개발잦가 직접 MIME 타입을 지정하고, 해당 데이터를 만들어 내는 방식이었는데 지금은 자동화된 처리 방식이라고 이해하는게 좋습니다.

 

 

-----------------------------------------

책 내용

REST는 네트워크 구조 원리의 모음으로, 리소스를 정의하고 자원에 대한 주소를 지정하는 방법에 대한 조건들을 의미한다.

즉, 도메인 지향 데이터를 HTTP위에서 부가적인 전송 레이어 없이 전송하기 위한 간단한 구조를 정의한 것이다.

 

-클라이언트/서버: 웹의 일관된 인터페이스를 따른다는 전제하에 클라이언트와 서버는 독립적으로 구현되어야 한다.

-균일한 인터페이스 : 자원 식별, 표현을 통한 자원 처리, 자기 서술적 메시지, Hypermedia as the Engine of Application State같은 인터페이스 제약에 따라 서로 일관성 있게 상호 운영되어야 한다.

-계층 시스템: 웹의 일관된 인터페이스를 사용해서 프락시 또는 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있어야 한다.

-캐시 처리 : 웹 서버가 응답 데이터마다 캐시 여부를 선언할 수 있어야 한다.

-무상태 : 웹 서버가 클라이언트의 상태를 관리할 필요가 없어야 한다.

-주문형 코드 : 선택사항으로 스크립트나 플러그인 같은 실행 가능한 프로그램을 클라이언트에 전송하여 클라이언트가 실행할 수 있도록 해야 한다.

 

 

+ Recent posts