Springboot CLI
yarn
• public, private
• getter/setter
• import
• 세미콜론
• 빌드 명세 (maven, gradle)
JAVA의 규칙
불필요한 규칙
Spring boot CLI
• CLI로 개발하면 빌드명세가 필요없다.
• CLI는 코드 잡음을 대부분 제거하는 개발 모델을 지원 하여 저항 없는 개발 경험
을 제공한다.
CLI 프로젝트 준비하기
• $ mkdir readinglist
• $ cd readinglist
• $ mkdir -p static/css
• $ mkdir templates
*.groovy
• public, private
• 세미콜론
• getter, setter
필요 없다
class Book {
Long id
String reader
String isbn
String title
String author
String description
}
interface ReadingListRepository {
List<Book> findByReader(String reader)
void save(Book book)
}
@Repository
class JdbcReadingListRepository implements ReadingListRepository {
@Autowired
JdbcTemplate jdbc
List<Book> findByReader(String reader) {
jdbc.query(
"select id, reader, isbn, title, author, description " +
"from Book where reader=?",
{ rs, row ->
new Book(id: rs.getLong(1),
reader: rs.getString(2),
isbn: rs.getString(3),
title: rs.getString(4),
author: rs.getString(5),
description: rs.getString(6))
} as RowMapper,
reader)
}
void save(Book book) {
jdbc.update("insert into Book " +
"(reader, isbn, title, author, decription) " +
"values (?, ?, ?, ?, ?)",
book.reader,
book.isbn,
book.title,
book.author,
book.description)
}
}
create table Book (
id identity,
reader varchar(20) not null,
isbn varchar(10) not null,
title varchar(50) not null,
author varchar(50) not null,
descrition varchar(2000) not null
);
@Controller
@RequestMapping("/")
class ReadingListController {
String reader="craig"
@Autowired
ReadingListRepository readingListRepository
@RequestMapping(method=RequestMethod.GET)
def readersBooks(Model model) {
List<Book> readingList=readingListRepository.findByReader(reader)
if (readingList) {
model.addAttribute("books", readingList)
}
"readingList"
}
@RequestMapping(method=RequestMethod.POST)
def addToReadingList(Book book) {
book.setReader(reader)
readingListRepository.save(book)
"redirect:/"
}
}
@Grab("h2")
@Grab("spring-boot-starter-thymeleaf")
class Grabs{}
$ spring run .
• 스프링 구성은 어떻게? (bean)
• 빌드 파일은 어디에?
• import ?
• where is web server?
• 세미클론? getter, setter?
groovy code compile
• maven repository에서 필요한 의존성을 찾아 적용(default : maven
Central)
• 기본 패키지 임포트를 사용자 정의 할 수 있다는 이점을 살려 필요한 패키지를 모두
그루비 컴파일러의 기본 임포트 리스트에 추가
• main() method와 비슷한 내부 부트스트램 메소드로 실행
필요한 의존성을 CLI가 알지 못하는 상황에는 어떻게 할까?
@Grab
• @Grab은 groovy의 Grape에서 특징에서 왔다, Grape는 런타임에 메이븐이나 그레이들 같은 빌드 도구를 사용하지 않고
의존성 라이브러리를 다운로드 한다.
• @Grab 선언 방법
• @Grab(group=“com.h2database”, module=“h2”, version=“1.4.192”)
• 속성을 명시적으로 지정
• @Grab(“com.h2database:h2:1.4.192”)
• 콜론으로 구분
• @Gab(“com.h2database:h2”)
• 현재 사용중인 CLI 버전으로 결정
• @Grab(“h2”)
• 모든것을 생략하고 id로 적용
@GrabMetadata
• 기본 의존성 버전을 오버라이드
• @GrabMetadata를 사용하면 그루비 스크립트 파일중 하나에 애너테이션을 추
가하고 프로퍼티파일 위치와 오버라이드할 의존성 메타데이터를 제공해야한다.
• GrabMetadata(“com.myorg:custom-version:1.0.0”)
maven or spring repository에도
없는 라이브러리가 필요할때는?
@GrabResolver
• 기본적으로 @Grab에 선언된 의존성은 메이븐 센트럴 리포지토리에서 가져온다.
• 스프링 부트는 스프링 프로젝트의 프리릴리스 의존성을 가져 올수 있도록 마일스톤과 스냅
샷 리포지토리를 등록한다.
• @GrabResolver를 사용하면 의존성을 가져올 추가 리포지토리를 지정 가능하다.
• @GrabResolver(name=‘jboss’, root=‘https://
repository.jboss.org/nexus/content/grops/public-jboss')
배포 가능한 jar 만들기
• $ spring jar ReadingList.jar .
• 모든 의존성과 그루비, 내장된 톰캣을 포함 하여
프로젝트 전체를 실행가능한 jar파일로 묶는다.
• $ java -jar ReadingList.jar
• CLI없이도 실행가능.

Spring boot 5장 cli

  • 1.
  • 2.
    • public, private •getter/setter • import • 세미콜론 • 빌드 명세 (maven, gradle) JAVA의 규칙 불필요한 규칙
  • 3.
    Spring boot CLI •CLI로 개발하면 빌드명세가 필요없다. • CLI는 코드 잡음을 대부분 제거하는 개발 모델을 지원 하여 저항 없는 개발 경험 을 제공한다.
  • 4.
    CLI 프로젝트 준비하기 •$ mkdir readinglist • $ cd readinglist • $ mkdir -p static/css • $ mkdir templates
  • 5.
    *.groovy • public, private •세미콜론 • getter, setter 필요 없다
  • 6.
    class Book { Longid String reader String isbn String title String author String description }
  • 7.
    interface ReadingListRepository { List<Book>findByReader(String reader) void save(Book book) }
  • 8.
    @Repository class JdbcReadingListRepository implementsReadingListRepository { @Autowired JdbcTemplate jdbc List<Book> findByReader(String reader) { jdbc.query( "select id, reader, isbn, title, author, description " + "from Book where reader=?", { rs, row -> new Book(id: rs.getLong(1), reader: rs.getString(2), isbn: rs.getString(3), title: rs.getString(4), author: rs.getString(5), description: rs.getString(6)) } as RowMapper, reader) } void save(Book book) { jdbc.update("insert into Book " + "(reader, isbn, title, author, decription) " + "values (?, ?, ?, ?, ?)", book.reader, book.isbn, book.title, book.author, book.description) } }
  • 9.
    create table Book( id identity, reader varchar(20) not null, isbn varchar(10) not null, title varchar(50) not null, author varchar(50) not null, descrition varchar(2000) not null );
  • 10.
    @Controller @RequestMapping("/") class ReadingListController { Stringreader="craig" @Autowired ReadingListRepository readingListRepository @RequestMapping(method=RequestMethod.GET) def readersBooks(Model model) { List<Book> readingList=readingListRepository.findByReader(reader) if (readingList) { model.addAttribute("books", readingList) } "readingList" } @RequestMapping(method=RequestMethod.POST) def addToReadingList(Book book) { book.setReader(reader) readingListRepository.save(book) "redirect:/" } }
  • 11.
  • 12.
  • 13.
    • 스프링 구성은어떻게? (bean) • 빌드 파일은 어디에? • import ? • where is web server? • 세미클론? getter, setter?
  • 14.
    groovy code compile •maven repository에서 필요한 의존성을 찾아 적용(default : maven Central) • 기본 패키지 임포트를 사용자 정의 할 수 있다는 이점을 살려 필요한 패키지를 모두 그루비 컴파일러의 기본 임포트 리스트에 추가 • main() method와 비슷한 내부 부트스트램 메소드로 실행
  • 15.
    필요한 의존성을 CLI가알지 못하는 상황에는 어떻게 할까?
  • 16.
    @Grab • @Grab은 groovy의Grape에서 특징에서 왔다, Grape는 런타임에 메이븐이나 그레이들 같은 빌드 도구를 사용하지 않고 의존성 라이브러리를 다운로드 한다. • @Grab 선언 방법 • @Grab(group=“com.h2database”, module=“h2”, version=“1.4.192”) • 속성을 명시적으로 지정 • @Grab(“com.h2database:h2:1.4.192”) • 콜론으로 구분 • @Gab(“com.h2database:h2”) • 현재 사용중인 CLI 버전으로 결정 • @Grab(“h2”) • 모든것을 생략하고 id로 적용
  • 17.
    @GrabMetadata • 기본 의존성버전을 오버라이드 • @GrabMetadata를 사용하면 그루비 스크립트 파일중 하나에 애너테이션을 추 가하고 프로퍼티파일 위치와 오버라이드할 의존성 메타데이터를 제공해야한다. • GrabMetadata(“com.myorg:custom-version:1.0.0”)
  • 18.
    maven or springrepository에도 없는 라이브러리가 필요할때는?
  • 19.
    @GrabResolver • 기본적으로 @Grab에선언된 의존성은 메이븐 센트럴 리포지토리에서 가져온다. • 스프링 부트는 스프링 프로젝트의 프리릴리스 의존성을 가져 올수 있도록 마일스톤과 스냅 샷 리포지토리를 등록한다. • @GrabResolver를 사용하면 의존성을 가져올 추가 리포지토리를 지정 가능하다. • @GrabResolver(name=‘jboss’, root=‘https:// repository.jboss.org/nexus/content/grops/public-jboss')
  • 20.
    배포 가능한 jar만들기 • $ spring jar ReadingList.jar . • 모든 의존성과 그루비, 내장된 톰캣을 포함 하여 프로젝트 전체를 실행가능한 jar파일로 묶는다. • $ java -jar ReadingList.jar • CLI없이도 실행가능.