2016년 1월 26일 화요일

올 상반기 학습 계획

입사한지도 이제 만으로 1년을 채웠고

올해는 누가 시켜서 하는 게 아니라 스스로 공부를 좀 해야겠다.

공부에 중점을 둘 것은 

첫째로 누군가 시킨대로 로직만 짜는 것뿐 아니라 로직을 짤 때 생각을 할 수 있는 힘을 기르는 것

그러기 위해서 알고리즘과 디자인패턴을 다시 제대로 공부 해 보아야겠다.

그리고 신기술에 뒤쳐지지 않는 것... JDBC를 그대로 쓰는 것에 비해 MyBatis가 많은 장점이 있지만 스케일이 커질 수록 효율성이 떨어진다는 느낌을 받았다. 태생이 어플리케이션 개발자쪽에서 시작했으니 JPA나 SPRING DATA같은 신기술을 익혀 나가는 것도 병행해야할 듯하니 저기 JPA책도 공부하고...

소스 코드를 짜는 것뿐 아니라 개발의 모든 사이클을 효과적으로 알기 위해서는 빌드 도구를 제대로 활용할 줄 알아야하니 일단 메이븐부터...

그리고 프로그램을 짜기만 할 것이 아니라 내가 짜는 프로그램이 어떤 것인지 큰 눈을 틔우기 위해서는 소프트웨어 아키텍쳐가 되기 위한 노력을 시작해야겠다. 코더가 나쁜 말은 아니라고 생각하지만 스스로 지향하는 바가 있으면 노력을 하자!!

앞으로 공부를 하면서 블로그에 틈틈이 남기고 복습해야지.

2016년 1월 3일 일요일

SPRING BOOT에서 JSP 사용하기

 JAVA 기반의 WEB 개발은 SPRING을 거의 쓰다시피 했는데 요즘은 SPRING BOOT를 쓰고 있다.

SPRING을 쓰면서 가장 크게 느꼈던 점은 PHP나 node.js로 웹개발을 할 때에 비해서 초기 세팅에 들어가는 노력이 너무 커서 캐주얼하게 쓸 엄두가 나지 않았다는 점인데 SPRING BOOT는 그 점에 있어서 매우 간편하게 웹개발을 할 수 있어서 장점이 많다.

SPRING FRAMEWORK를 기반으로 SPRING MVC 쓸 때와 달리 가장 큰 차이점은 boot는 static폴더와 templates 폴더가 있어서 리소스 파일(css 나 js)은 static 폴더에 템플릿(thymeleaf나 velocity 등등)은 templates 폴더에 넣으면 알아서 기본 설정된 경로로 잘 작동하게 해 준다는 점인데 아무래도 thymeleaf 나 velocity는 그다지 정이 가지 않아서 JSP를 애용하는 편.

SPRING BOOT 프로젝트를 만들기 위해서는 http://start.spring.io/ 에서 프로젝트 정보와 사용할 의존성 정보만 입력해주면 손쉽게 MAVEN 이나 GRADLE 프로젝트를 생성 가능하다. 이 프로젝트를 이클립스에서 IMPORT 하면 기본적인 설정이 끝난다.

그러나 SPRING BOOT 에서 JSP를 쓰려면 약간의 손을 봐줘야 한다.

1. spring-boot-starter-web 에 포함된 tomcat은 JSP엔진을 포함하지 않는다.

  <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
      <scope>provided</scope>
  </dependency>
  
  <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>jstl</artifactId>
  </dependency>

와 같이 jasper 및 jstl 을 의존성에 포함시켜줘야 JSP파일 구동이 가능하다.

2. JSP 파일은 SPRING BOOT 기본 templates 폴더 안에서 작동하지 않는다
위의 사항을 설정하고 나서 templates 폴더 안에 jsp 파일을 만들고 아무리 접속을 하려해도 404 Not found가 뜬다. view resolver의 prefix를 명시적으로 /templates 로 해도 마찬가지

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-jsp-limitations
여기에 있는 JSP와 관련된 제약 사항과 관련이 있는 것 같은데, WAS에 대한 지식은 모자라서 원인을 정확히 설명할 수 없다. 어쨌거나간에 일반적인 웹프로젝트에서 사용했던 src/main/webapp/WEB-INF/ 폴더를 직접 만들어준 다음 그곳에 jsp파일을 넣어야한다. 나는 /WEB-INF/ 밑에 jsp 폴더를 하나 더 만들어봤다.
그런 뒤 application.properties에
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
를 추가 해 주고

@RequestMapping("/")
 public String index(){
  return "index";
 }
이런 함수를 컨트롤러에 추가 해 준 뒤에 src/main/webapp/WEB-INF/jsp/index.jsp 를 만들어 넣으면 localhost/ 에 접속했을 때 index.jsp를 정상적으로 불러올 수 있다.