네로개발일기

개발자 네로의 개발 일기, 자바를 좋아합니다 !

'web'에 해당되는 글 82건


반응형

 

Controller

Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있다.

전통적인 Spring MVC 컨트롤러인 @Controller와 Restful 웹 서비스의 컨트롤러 @RestController의 큰 차이점은 HTTP Response Body가 생성되는 방식이다.

 

1. @Controller (Spring MVC Controller)

[Controller - View]

전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용한다. 아래와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로부터 View를 반환한다.

1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.

2. Mapping 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.

3. Controller가 요청을 처리한 후에 응답을 DispatcherServlet으로 반환하고, DispatcherServlet은 View를 사용자에게 반환한다.

 

[Controller - Data]

Spring MVC Controller 에서 Data를 반환해야 하는 경우가 있다. Spring MVC의 컨트롤러에서는 데이터를 반환하기 위해 @ResponseBody 어노테이션을 활용해야 한다. 이를 통해 Controller도 JSON 형태로 데이터를 반환할 수 있다. 

1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.

2. Mapping 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.

3. @ResponseBody를 사용하여 Client에게 Json 형태로 데이터를 반환한다.

 

2. @RestController (Spring RESTful Controller)

Spring MVC 프레임워크에서 REST API를 구현할 때, 컨트롤러에 @RestController 어노테이션을 붙인다.

RestController의 액션 메소드가 리턴하는 Java 객체는 자동으로 JSON 포맷으로 변환되어 클라이언트에 전송된다.

RestController의 액션 메소드는 데이터를 클라이언트에 전송하기 때문에 뷰(view)가 필요 없다.

Spring MVC Controller에 @ResponseBody가 추가된 것이다. RestController의 주용도는 Json/xml 형태로 객체 데이터를 반환하는 것이다.

 

 

1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.

2. Mapping 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.

3. RestController는 해당 요청을 처리하고 데이터를 반환한다. 

 

 

컨트롤러의 엑션 메소드 앞에 @ReponseBody 어노테이션을 붙이면, 이 액션 메서드가 리턴하는 Java 객체는 자동으로 JSON 포맷으로 변환되어 클라이언트에 전송된다.

@Controller 
public class StudentController { 
	public @ResponseBody List<Student> students() {
    		List<Student> list = ...; 
        	return list; 
    }
}

컨트롤러 앞에 @RestController 어노테이션을 붙였다면, 그 컨트롤러의 액션 메소드 앞에 @ResponseBody 어노테이션을 붙이지 않고 생략해도 된다.

@RestController
public class StudentController { 
	public List<Student> students() { 
    		List<Student> list = ...; 
        	return list; 
    }
    
}

RestController의 액션 메서드가 액션 메서드를 호출할 때 전송하는 request parameter 데이터도 JSON 포맷으로 전송하는 것이 일관적이라 좋다.

이렇게 JSon 포맷으로 전송된 request parameter 데이터를 받을 액션 메서드의 파라미터 변수에는 @RequestBody 어노테이션을 붙여주어야 한다.

public String update(@RequestBody Student student) { ... }
728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형
import org.springframework.data.jpa.repository.JpaRepository; 

import domain.Member; 

public interface SampleRepository extends JpaRepository<Member, Integer> {

}

이 인터페이스를 구현한 클래스를 spring JPA가 자동으로 구현한다.

자동으로 구현된 클래스에는 아래와 같은 기본 메서드를 포함한다.

 

findAll() 메소드

Member 테이블에서 레코드 전체 목록을 조회

List<Member> 객체가 리턴

 

findById(id)

Member 테이블에서 기본키 필드 값이 id인 레코드를 조회

Optional<Member> 타입의 객체가 리턴

이 객체의 get 메서드를 호출하면 Member 객체가 리턴 예) Member m = memberRepository.findById(id).get();

 

save(member)

Member 객체를 Member 테이블에 저장

객체의 id(기본키) 속성값이 0이면 INSERT / 0이 아니면 UPDATE


saveAll(memberList)

Member 객체 목록을 Member 테이블에 저장

 

delete(member)

Member 객체의 id(기본키) 속성값과 일치하는 레코드를 삭제

 

deleteAll(memberList)

Member 객체 목록을 테이블에서 삭제

 

count()

Member 테이블의 전체 레코드 수를 리턴

exists(id)

Member 테이블에서 id에 해당하는 레코드가 있는지 true/false를 리턴

 

flush()

지금까지 Member 테이블에 대한 데이터 변경 작업들이 디스크에 모두 기록

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !