Spring Boot에서 Spring MVC 활용
* 이 글은 2016년 1월 개인 위키에 올렸던 글을 옮긴 것임을 알려드립니다.
공식 참조 문서를 토대로 Spring Boot에서 JPA와 Spring Data 활용에서 코드 바꿔가기
기존 코드 변경하기
Spring Boot에서 JPA와 Spring Data 활용에서 작성한 Example 클래스를 수정하여 활용하자. 기존 코드에서 cities와 makeCollection 메소드만 제거한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
package city; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @EnableAutoConfiguration public class Example { @RequestMapping("/") String home() { return "Hello World!"; } public static void main(String[] args) throws Exception { System.setProperty("spring.h2.console.enabled", "true"); SpringApplication.run(Example.class, args); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
package city; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.Collection; @RestController public class CityController { @Autowired private CityRepository repository; @RequestMapping("/cities") public Collection<City> cities(){ repository.save(new City("Seoul", "Korea")); repository.save(new City("Busan", "Korea")); repository.save(new City("Tokyo", "Japan")); repository.save(new City("Beijing", "China")); repository.save(new City("Shanghai", "China")); return makeCollection(repository.findAll()); } private static <E> Collection<E> makeCollection(Iterable<E> iter) { Collection<E> list = new ArrayList<E>(); for (E item : iter) { list.add(item); } return list; } }
실행을 시켜보고 브라우저에서 확인하자.
이번에는 앞서 사용했던 /cities 경로로 접근해보자.
기존에 작동하던 코드의 구조만 바꾸었을 뿐인데 안된다. 왜 그럴까?
기준 설정 클래스 변경
기준 설정 클래스인 Exaple 클래스에서 EnableAutoConfiguration 애노테이션을 SpringBootApplication으로 바꾸자. SpringBootApplication은 자동 설정을 위한 EnableAutoConfiguration과 ComponentScan 애노테이션을 함께 선언하는 효과를 제공한다. 바로 ComponentScan을 통해서 RestController 애노테이션을 부착한 컨트롤러를 등록할 수 있는 것이다. 다시 해보면, 결과가 잘 나오는 것을 알 수 있다.
데모 혹은 테스트를 위한 구조 변경(Refactoring)
다섯 개의 도시 데이터를 추가하는 코드는 데모를 위한 내용이다. 임베디드 DB를 사용하고 있어서 애플리케이션 구동마다 /cities 요청을 보내야 데이터가 들어간다. 완벽한 해결책은 아니지만, 예시 데이터를 home 메소드에서 넣도록 코드를 바꿔보자.
Popit은 페이스북 댓글만 사용하고 있습니다. 페이스북 로그인 후 글을 보시면 댓글이 나타납니다.