거의 3주만에 글을 쓴다. 포스팅할 블로그를 만들고 있어서… 시간 날때 마다 잠깐 잠깐 만들었다. 원래는 마이크로서비스를 하려고 했는데 블로그를 먼저 하고 만든 블로그를 마이크로서비스로 할까 생각중이다. 일단 블로그 먼저 하고..
아무튼 뭐 대단한건 아니고 심플한 블로그를 만들 예정이라. 일단 대충 만들어놔서 만든걸 바탕으로 다시 만들 예정이다. 그러면서 이상한 부분은 고치고…
오늘은 프로젝트를 만드는 정도로 일단 끝낼 것이다. 일주일에 한두번? 정도 쓰면 많이 쓰는거고 일주일에 한번 예상해본다.

블로그의 스펙과 간단한 설명을 보자.
제목에도 나와있듯이 Spring boot 1.4를 사용하고 Spring data jpa를 사용한다. 구현체는 당연히 hibernate를 사용할 것이다. 디비는 h2를 사용하고 나중에 메모리 디비 말고 mysql을 설정해서 해보자.
음 그리고 캐시도 사용할 예정인데 이건 그냥 이렇게 쓰면된다? 그정도만 사용할 것이다. 원래는 카페인 캐싱을 사용하려 했는데 설정 방법을 아주 디테일하게 하는걸 몰라서 (일단 찾기가 귀찮) 그냥 JSR-107 JCache로 했다. 구현체는 ehcache로 할 예정이다.
또 뭐가 있나보자. 로그인은 github sso를 이용해서 로그인 할 것이고, 뷰 템블릿은 맨 처음에 mustache로 할려고 했으나 이거 역시 디테일이 부족해서 못하고 다시 thymeleaf3로 할려고 했으나(springsecurity4 인가? 그게 안되는거 같다서 때려쳤다.) 이거 역시 못하고 thymeleaf 2.1 로 다시 내렸다.
그리고 포스팅할 블로그에는 markdown문법으로 하려고 만들긴 했는데 UI이는 영 별로이다. 필자가 UI감각도 없고 만들지도 못해서..
누군가가 markdown을 잘 만들어 놨다.
https://jbt.github.io/markdown-editor 여기 보면 codemirror 까지 있어서 바로바로 뷰를 확인 할 수는 있는데 블로그안에 넣기에는 화면이 작다. 아무튼 UI는 그럭저럭 고친다고 했는데 역시나…
블로그 테마는 clean-blog라고 괜찮은 UI가 있다. 사실 무료이면서 괜찮은 UI가 없는 듯 하다. 있어도 영 마음에 안드는 그런 UI이다. 무료중에 clean-blog가 제일 낫다. 링크는 아래와 같다.
https://startbootstrap.com/template-overviews/clean-blog/

마지막으로 CI 툴과 배포까지 할 예정인데 CI 툴은 semaphoreci 이라는 툴(개인적으로 쓰는거라)을 사용하고 배포할 곳은 무료(하지만 느리고 뭔가 부족하다. 돈내고 사용하면 나쁘지 않은거 같은데 일단 테스트 용도이니 무료로만 사용해서 하겠다.)인 heroku를 사용하겠다.
이것으로 간단하게 설명은 다 한 듯 하다.

그럼 프로젝트를 만들어서 시작해보자. 오늘은 프로젝트를 만들고 hello world만 찍고 마무리하자!

http://start.spring.io/ 여기에서 generate 해도 되고 필자는 인텔리j를 사용하니 그 기준으로 하겠다. spring sts를 사용해도 비슷한 맥략일 듯하다.

1.blog1

파일에 new project를 하면 위와같은 창이 뜬다. 파란색으로 선택된 spring initializr 를 선택하고 Name group Artifact등 설정하고 싶은대로 설정하면 된다.

1.blog2

필자는 위와 같이 설정했다. 다음 next를 누르면 Dependencies를 설정할 수 있다. 일단 web, jpa, h2, lombok를 선택하자. lombok은 선택사항이니 하지 않아도 되거나 만약 모르면 인터넷이 찾아보면 아주 간단하게 설치할 수 있다.

1.blog3

마지막으로 projectName을 설정하면 끝난다. 필자는 위에 썼던 Artifact과 동일하게 썼다. 완료를 누르자. 참고로 maven 관련 쉘들은 지웠다.

패키지 아래의 하나의 클래스가 있는데 이게 메인 클래스이다. Spring boot를 요즘 많이 사용하다보니 굳이 이것까지는 설명 하지 않아도 될 듯 싶은데.. 그래도 모르는 사람을 위해서 간단하게 설명하자면 spring boot는 톰캣이 내장되어 있다. (정확히는 web을 디펜더시 받아야..) 굳이 서버를 셋팅하지 않아도 spring-boot-starter-web만 디펜더시 받는 다면 톰캣이 내장되어 들어 가 있다. 그리고 boot의 핵심이라고 할 수 있는 autoconfiguration 이 있다. @SpringBootApplication이 어노테이션은 마법의 어노테이션이다. 우리가 xml로 또는 javaConfig 기본 설정들이 해당 라이브러리가 클래스 패스에 있으면 자동으로 설정해준다. 이것은 나중에 기회가 된다면 살펴보기로 하고 일단 자동으로 해주는게 많다고 생각하면 된다. 이렇게 좋은 자동 설정이지만 자동설정만으로 모든걸을 할 수 없다. 실제 프로젝트를 해보면 예외상황이 많다. 내가 원하는 설정이 이게 아닐 수도 있고 설정이 되어 있는데 몰라서 다시 설정하는 경우에도 있고 그러다보면 설정이 이상하게 먹고.. 아무튼 변수가 적지 않다. 무작정 도입하는 것보다 좀더 익숙해지고 어노정도 자유롭게 다룰 수 있다면 그때 도입해도 늦지 않다. 잘 모르는 상황에서 도입했다가 더 미궁으로 빠질 수도 있다고 생각한다.

@SpringBootApplication
public class SpringBootCleanBlogApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootCleanBlogApplication.class, args);
    }
}

우리는 메인 클래스를 실행만 하면 된다. 이것만으로는 진짜로 잘되는지 알 수 없기에 hello world를 출력해보자.

@SpringBootApplication
@RestController
public class SpringBootCleanBlogApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootCleanBlogApplication.class, args);
    }

    @GetMapping
    public String hello(){
        return "hello world";
    }
}

우리가 흔히 message를 전송할 때 쓰는 @RestController를 추가 했고 @GetMapping이라는 Spring 4.3에 추가된 어노테이션을 추가 했다. 그리고 단순하게 hello world라는 문자열만 출력하였다.
어디 잘되나 보자. 메인 클래스를 실행하면 서버의 로그가 쭉쭉 출력된다.. 서버가 다 기동이 되었다면 웹브라우저에 http://localhost:8080 을 쳐서 들어가보자.
그럼 빈페이지에 hello world라는 문자열이 출력 된걸 확인 할 수 있다. 완벽하다.
우리는 이렇게 아주 빠르고 심플하게 서버를 띄우는데 성공했다. hello world 찍는데 불과 몇분 걸리지 않았다. 예전에는 spring 설정만 반나절 혹은 길게는 하루가도 걸렸는데 몇 분안에 할 수 있다는게 아주 맘에 쏙 든다.

오늘까지한 소스는 여기에 올려 놨다.

다음 시간에는 뭘할지는 생각해보고 해야겠다. 딱히 떠오르는게 없어서.. 일단 도메인을 만들고.. 그떄 생가하자.

  1. [spring-boot] 블로그를 만들자 (1)

  2. [spring-boot] 블로그를 만들자. (2) JPA

  3. [spring-boot] 블로그를 만들자. (3) Category 와 Comment

  4. [spring-boot] 블로그를 만들자. (4) thymeleaf

  5. [spring-boot] 블로그를 만들자. (5) markdown, catetory

  6. [spring-boot] 블로그를 만들자. (6) 댓글과 Navigation

  7. [spring-boot] 블로그를 만들자. (7) 캐시와 에러페이지

  8. [spring-boot] 블로그를 만들자. (8) GitHub login

  9. [spring-boot] 블로그를 만들자. (9) CI 와 배포