1. Goal 

 - Spring boot web, H2 Database, JPA 를 사용해보기

 - 간단한 REST API 만들기

 - H2 web console 접속해보기


2. 세팅하기

0) main Class

 - 프로젝트 생성하면 알아서 생성해준다.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class H2JpaApplication {

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

1) pom.xml

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- h2 database -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
</dependencies>

2) application.yml

# Database Settings
spring:
datasource:
url: jdbc:h2:mem:h2_jpa_sample;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
platform: h2
username: sa
password:
driverClassName: org.h2.Driver
jpa:
database-platform: org.hibernate.dialect.H2Dialect
hibernate:
ddl-auto: update
properties:
hibernate:
show_sql: true
use_sql_comments: true
format_sql: true

# H2 Settings
h2:
console:
enabled: true
path: /console
settings:
trace: false
web-allow-others: false

3) Entity Class

import javax.persistence.*;
import java.io.Serializable;

/**
* Book Entity
*
* @author akageun
*/
@Entity
@Table(name = "book")
public class BookEntity implements Serializable {
private static final long serialVersionUID = 810457109758530244L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(length = 50)
private String name;
private int price;

@Lob
@Column
private String desc;

public BookEntity() {
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getPrice() {
return price;
}

public void setPrice(int price) {
this.price = price;
}

public String getDesc() {
return desc;
}

public void setDesc(String desc) {
this.desc = desc;
}
}

4) DAO Class

import kr.geun.sample.entity.BookEntity;
import org.springframework.data.repository.CrudRepository;

/**
* BOOK DAO
*
* @author akageun
*/
public interface BookDAO extends CrudRepository<BookEntity, Long> {
}


5) Controller Class

import kr.geun.sample.dao.BookDAO;
import kr.geun.sample.entity.BookEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.transaction.Transactional;

/**
* WEB Rest Controller
*
* @author akageun
*/
@RestController
public class WebController {

@Autowired
private BookDAO bookDAO;

/**
* Get All Book Data
*
* @return
*/
@GetMapping("/book/list")
public Iterable<BookEntity> getList() {
return bookDAO.findAll();
}

/**
* View specific Book by id
*
* @param id
* @return
*/
@GetMapping("/book/{id}")
public BookEntity getDetail(@PathVariable Long id) {
return bookDAO.findOne(id);
}

/**
* New Book Data
*
* @param param
* @return
*/
@Transactional
@PostMapping("/book")
public BookEntity addBook(BookEntity param) {
return bookDAO.save(param);
}

/**
* Modify Book Data
*
* @param param
* @return
*/
@Transactional
@PutMapping("/book/{id}")
public BookEntity modifyBook(BookEntity param) {
return bookDAO.save(param);
}

/**
* Delete Book Data
*
* @param id
* @return
*/
@Transactional
@DeleteMapping("/book/{id}")
public String deleteBook(@PathVariable Long id) {
bookDAO.delete(id);
return "SUCCESS";
}
}

6) data.sql

 - src/main/resources 하위에 data.sql을 만들어놓으면 초기화시에 해당 sql파일 내에 있는 쿼리들을 실행시켜준다.

INSERT INTO book (`id`, `name`, `price`, `desc`) VALUES (1, 'Book no 1', 5000, 'This is Sample Book');


3. 동작 확인해보기

 - Rest Client인 'POSTMAN'으로 호출하였다.


1) 리스트 

 - 응답데이터 내용을 확인해보면 위에 data.sql이 잘 추가되어 있는걸 볼 수 있다.


2) 추가

 - POST 로 호출 한 다음 위 '리스트' API를 호출해보니, 잘 저장되어 있다.

- 리스트 API 호출 


3) 상세보기

 - 방금 전 저장한 데이터를 조회해보자.



4) 수정

 - 추가 입력했던 id가 2번인 데이터를 수정해보자


5) 삭제

 - 2번 글을 삭제해보자



4. Web Console 접속해보기

 - https://localhost:8080/console

 - 해당 페이지에서 언어선택도 변경할 수 있다.

 - 접속해보자


- 생성한 BOOK 테이블이 보인다. 



5. 결론

 - jpa를 사용하면 간단한 CRUD 만드는건 정말 편하다.

 - H2 database를 개발환경에서 사용하면, 편리하다.


6. 소스

 https://github.com/akageun/spring_boot_sample/tree/master/h2_jpa 

1. Spring Interceptor에서 redirect 체크

 - 아래와 같은 경우 등

return "redirect:/testPage";


2. 소스

/**
* Request Checker
* - Redirect
*
* @param modelAndView
* @return
*/
private boolean isRedirect(ModelAndView modelAndView) {
return modelAndView.getView() instanceof RedirectView || modelAndView.getViewName().startsWith("redirect:");
}


1. DevTools 란

 - spring boot 1.3.0부터 추가된 기능

 - 소스가 변경되면 알아서 재시작 해줌.


2. 의존성

 - Maven

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>

 - Gradle

compile("org.springframework.boot:spring-boot-devtools")


3. 영상


4. 링크

https://spring.io/blog/2015/06/17/devtools-in-spring-boot-1-3


-----------2018.07.19 수정-------------------

5. LiveReload

 - 리소스가 변경될 때 브라우저를 갱신시켜주는 서버를 포함하고 있음.

 - http://livereload.com/extensions/ 에서 extension을 다운받을 수 있음.


 - 해당기능을 사용하고 싶지 않을 경우 

spring.devtools.livereload.enable=false

 - 또한 한번에 하나의 서버만 제공함. 여러개를 동작시킬 경우, 제일 처음 동작시킨 서버만 동작함.

1, Code Folding 옵션 변경 

 - 한줄 메소드 폴딩되는거 해제



2. UTF-8 설정

 1) 실행옵션 변경 

  - 설정파일 경로

WINDOWS

 - 32bit : C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.3.5\bin\idea.exe.vmoptions

 - 64bit : C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.3.5\bin\idea64.exe.vmoptions


OSX 

 - {YOUR_INTELLIJ_PATH}/bin/idea.vmoptions


  - 마지막 줄에 "-Dfile.encoding=UTF-8" 추가


 2) WAS 옵션추가

  - RUN -> Edit Configuration -> VM Options 에 "-Dfile.encoding=UTF-8"추가



 3) WIndows일 경우에는 아래 옵션도 변경해주는게 좋다.

  - IED Encoding, Project Encoding, Default Encoding for properties files 3개 옵션을 UTF-8로 변경

  - OSX의 경우 기본이 UTF-8임



3. 메모리 변경

 - 설치파일 경로

WINDOWS

 - 32bit : C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.3.5\bin\idea.exe.vmoptions

 - 64bit : C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.3.5\bin\idea64.exe.vmoptions


OSX 

 - {YOUR_INTELLIJ_PATH}/bin/idea.vmoptions


 - 옵션

-Xms1024m 

-Xmx1024m 

-XX:MaxPermSize=256m 

-XX:ReservedCodeCacheSize=96m 

-XX:+UseCompressedOops



4. Custom 주석 만들기

 - 아래와 같이 Java에서 사용할 공통 Header를 만든다.


  - 사용할 파일들 상단에 조금 전 만든 템플릿을 추가한다.


 - ${USER}값 변경은 설정파일에 아래 내용 추가

 -Duser.name=geunspage



5. Logger Template 자동완성

private static final Logger LOG = LoggerFactory.getLogger($CLASS_NAME$.class);




- LOG를 입력하고 Tab을 누르면 자동완성 된다.


6. javascript console.log 자동완성




7. 패키지 보기


8. implements Serializable 시에 클릭 한번으로 'serialVersionUID' 선언하기

 - 이클립스에서는 Serializable 를 implements하게되면 Class 위에 마우스오버를 하게되면 간편하게 'serialVersionUID'를 추가할 수 있다.

 - 이와 같은 기능을 사용하려면 아래와 같이 설정하면 된다.


8. 커스텀 페이지 추가


1. Lombok

  - Preferences > Plugins > Browse repositories... > "Lombok" > Install > restart




2. Jrebel

  - Preferences > Plugins > Browse repositories... > "Jrebel" > Install > restart


3. Grep Console

  - Preferences > Plugins > Browse repositories... > "Grep Console" > Install > restart



4. SVN Disconnect



1. 개요

 - ElasticSearch를 사용하던 중 index mapping을 변경 해야하는 문제가 발생.

 - 재인덱싱(reindex)을 해야한다.

 - 데이터 양이 있어, 재인덱싱 시간이 길다.

 - ........

 - alias를 활용해 보자!


2. 기본작업

 1) Alias 만들기 

  - test_v1 이라는 index에 test라는 alias를 만든다.


curl -XPOST 'http://localhost:9200/_aliases' -d '

{

    "actions" : [

        { "add" : 

          { 

            "index" : "test_v1", 

            "alias" : "test" 

          } 

        }

    ]

}'


 2) Alias 확인

  - 호출

curl -XGET 'http://localhost:9200/test?pretty=true'


 - 결과 

{

  "test": {

    "aliases": {

      "test_v1": {}

    }

}


 3) Application

 - Application에서 바라보는 index를 alias로 만든 test로 변경한다.


3. 새롭게 작업할 index를 생성 작업 한다.


4. Alias를 변경한다.

curl -XPOST localhost:9200/_aliases -d '

{

    "actions": [

        { "remove": {

            "alias": "test",

            "index": "test_v1"

          }

        },

        { "add": {

            "alias": "test",

            "index": "test_v2"

            }

        }

    ]

}

'


5. Alias 확인

 - 호출

curl -XGET 'http://localhost:9200/test?pretty=true'


 - 결과

{

  "test": {

    "aliases": {

      "test_v2": {}

    }

}




1. Github 연결시 에러

 - Preferences -> General -> Security -> Secure Storage -> Contents Tab -> Secure관련 데이터 Clean하면 됨.


2. 참고 링크 

 - http://stackoverflow.com/questions/31263221/is-eclipse-bug-471813-related-to-aptana/31267252

1. 개요

 - 개인 라이브러리를 메이븐 중앙 저장소에 올려, 다른 사람들과 손쉽게 공유할 수 있도록 한다.

 - https://bintray.com 와 같은 대행 서비스가 있다.

 - 저장소 관리 솔루션인 sonatype nexus 사에서 제공하는 OSSRH(Open Source Project Repository Hosting)가 있다. 이걸로 업로드 진행 할 예정.


2. 사전 작업

 1) 계정 생성

  - https://issues.sonatype.org/secure/Signup!default.jspa 에 접속한다.

  - 계정을 생성하고, 이슈를 등록한다.

  - "CREATE"를 눌러 이슈를 생성한다.

  - https://issues.sonatype.org/browse/OSSRH-28348 와 같이 입력한다. (project 이름, group Id, url 등 입력)

  - 생성 후 몇시간 또는 며칠이 지나면 이슈 상태가 "Resolved"로 변경되면, 댓글을 달아준다. 그럼 배포 준비 끝


 2) pom.xml 작업하기.

  - 저장소(scm), 개발자정보(), 라이센스 등 필수



 3) $HOME/.m2/settings.xml 에 아래 텍스트 추가


 

 4) snapshot deploy

  - version 항목에 -SNAPSHOT 붙인다.

mvn clean deploy


  - https://oss.sonatype.org/content/repositories/snapshots 에 본인 groupId를 들어가보면 확인 할 수 있다.


3. PGP 등록 및 Signing 하기

 - Maven 프로젝트 각각의 보안을 위해 PGP라는 정보를 통해 확인


 1) PGP 생성

  - https://www.gnupg.org/download/index.html 에서 제공하는 툴로 생성


 2) PGP 등록하기

  - 생성한 키는 http://pgp.mit.edu/ 사이트에 등록해야한다. 일부 툴은 업로드도 제공해준다.


4. 배포하기

mvn clean deploy


5. 스테이징에서 릴리즈하기

 - https://oss.sonatype.org/#welcome 에 접속하여 로그인한다.

 - Staging Repositories 에서 본인 프로젝트 확인

 - 내용 확인 후 "Close" 문제가 없으면 "Release"버튼 활성화 됨.


 - "Release"를 누르면 끝!


6. 확인

 - 10분정도 후에 릴리즈 되고

 - 2시간 정도 후면 검색이 됨.

 - http://search.maven.org/ 


7. 참고자료

 - https://www.lesstif.com/pages/viewpage.action?pageId=30277671

 - http://zerobrain.tistory.com/53

 - http://central.sonatype.org/pages/ossrh-guide.html

 - http://stackoverflow.com/questions/23235892/how-long-does-sonatype-staging-take-to-sync-my-artifacts-with-maven-central

 - https://www.youtube.com/watch?v=dXR4pJ_zS-0&feature=youtu.be


'프로그래밍 > Maven' 카테고리의 다른 글

Maven Test Skip 하는 법  (0) 2018.04.17
[Maven] Plugin 개발하기.  (0) 2018.04.09
Maven Central에 Library Upload하기!!  (0) 2017.02.21
[MAVEN] Exec Maven Plugin 사용하기  (0) 2016.12.01

1. Nexus란?

  - Maven에서 사용할 수 있는 무료 repository

 - 로컬 Nexus에 Proxy를 사용하면, 빠르게 라이브러리를 다운로드 받을 수 있다.

 - 회사에서 사용하는 공통 라이브러리들을 로컬 Nexus에 배포하여 회사 내부에서 손 쉽게 공유가 가능하다.

 - 오픈소스 버전(Nexus OSS)과 상용 버전(Nexus Pro) 두개 버전이 있다.

 - 상용버전의 경우 아티팩트 취약점 관리, SSO(single Sign On) 지원, 기술 지원 등 장점이 많다.


2. Nexus Install

 - 다운로드 

wget http://www.sonatype.org/downloads/nexus-latest-bundle.tar.gz


 - 압축 풀기

tar xzf ./nexus-latest-bundle.tar.gz 


 - 끝


3. 폴더 구조

bin : 실행과 관련된 스크립트가 잇다.

conf : 설정 파일들이 있다.

logs : 로그가 저장된다. 파일명은 wrapper.log 다.

nexus: 어플리케이션 소스가 있다.


4. Nexus Setting

 - 이동(최신 버전 설치기 때문에 버전이 다를 수 있다.)

cd ./nexus-2.14.3-02/


 - 설정 변경

vi ./conf/nexus.properties


 - 설정 값 설명

#어플리케이션 포트

application-port=8081


#어플리케이션 context 경로

nexus-webapp=${bundleBasedir}/nexus


#localhost:${application-port}/nexus로 사용할 것이냐. localhost:${application-port}/ 로 사용할 것이냐의 차이.

#뒤에 /nexus를 /로 변경하면 변경 가능하다.

nexus-webapp-context-path=/nexus


4. Nexus Run

 - ./bin/nexus start


5.. 참고 

 - http://bcho.tistory.com/790

 - https://www.lesstif.com/pages/viewpage.action?pageId=20775149

'OS > Linux' 카테고리의 다른 글

Install redis on Centos 7  (0) 2017.04.18
Centos User Add(+Aws EC2)  (0) 2017.04.03
Maven 내부 Repo 만들기(Nexus install)  (0) 2017.02.17
ImageMagicK 설치  (0) 2016.12.20
Jdk 8 Install on AWS EC2  (0) 2016.11.17
[Pyton3] python 3.5.2 Install  (0) 2016.09.09

1. 확인

ll

-bash: ll: command not found


2. alias 추가

 - 환경설정 수정

vi ~/.profile


 - alias 추가

alias l='ls -l'

alias ll='ls -l'


 - 환경설정 적용

source ~/.profile



'OS > Mac' 카테고리의 다른 글

사용중인 포트 확인 및 닫기  (0) 2017.04.02
Mac Terminal에서 ll 사용하기  (0) 2017.02.17
Mac 터미널에서 EC2 접속하기  (0) 2016.08.13

+ Recent posts