Git을 오래 사용하였지만 

commit.. pull.. merge..push...

이외에는 잘 사용하지 않았던거 같다..

(사실 지금도 그렇당 ㅎㅎ)

 

쓰다보니 다른기능도 

알아두면 좋을거같은데..

매번 내가 헷갈려서 쓰는 포스팅,, ㅎ1ㅎ1

 

 

 

1. amend : commit 수정

$ git add sample.txt
$ git commit --amend

이걸 쓰는건 못봤지만.. Git 홈페이지에 있길래 

쓸진 모르겠당

 

2. revert : commit 취소

$ git revert HEAD

제일 많이 쓰는것중 하나,,! intelliJ에서는 undo도 가능하다.

둘다 써보니 revert는 취소하는 comiit을 하나 더 치는거고 undo는 아예 없애는것이 다른점이다.

 

3. reset : master 브랜치 앞의 commit을 삭제

$ git reset --hard HEAD~~

실수로 reset을 잘못 했을 경우 , 'ORIG_HEAD'로 reset전 상태로 되돌릴 수 있다.

$ git reset --hard ORIG_HEAD

 

4. cherry-pick : 특정 commit을 선택해서 반영하기 

체리나무에 달려 있는 체리를 하나씩 골라 따듯이,, 커밋들을 골라서 반영하는것이 체리픽!

이건 잘 쓸거 같당

 

$ git checkout master
Switched to branch 'master'
$ git cherry-pick 99daed2

 

5. rebase : 여러개의 commit을 반영하기 

$ git rebase {branch name}

브랜치에 여러 커밋을 하나로 합쳐준다.

 

rebase -i 옵션을 붙여서 commit 순서를 바꾸거나 첨삭 할 수 있다. 

$git rebase -i HEAD~3

 

6. merge : 두개의 branch를 하나로 합치기

개발하다보니 더 추가할사항이 있어서 추가해보겠당~!

 

1. Liquibase 란?

데이터베이스 변경관리를 체계적으로 자동화 해주는 오픈소스 (스키마 버전 관리)

 

개발하다보면 DB가 어쩔수 없이 변경되는 경우가 있을 수 있다. 이경우 갑자기 DB를 변경할 경우

각 개발자 로컬에서 수많은 버그들이 발생할것이다.. 그리고 관리도 어렵고

그래서 관리를 하기위해서 git처럼 형상관리로 하는거다 project 안에 파일이 있으니까 더 수월히 된다 

 

2. 사용법

1. maven 에 liquibase를 pom.xml에 추가해준다.

 

<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>

 

2. liquibase.xml 파일을 생성해준다.

부모가 되는 xml 파일이다. 다른 각각 테이블 별로 된 xml 파일을 여기서 include 해준다.

 

<include file="~~~.xml" relativeToChangelogFile="true" />

 

3. 각 테이블마다 xml을 만들어 주면된다. 

 

https://www.liquibase.org/documentation/xml_format.html

 

Liquibase | Database Refactoring | XML Format

XML Format Liquibase supports XML as a format for storing your changelog files. XSD Support XSD schema definitions are available for each Liquibase version. Since there are no changelog format changes in patch versions, there are only xsd files that corres

www.liquibase.org

 

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> <preConditions> <runningAs username="liquibase"/> </preConditions> <changeSet id="1" author="nvoxland"> <createTable tableName="person"> <column name="id" type="int" autoIncrement="true"> <constraints primaryKey="true" nullable="false"/> </column> <column name="firstname" type="varchar(50)"/> <column name="lastname" type="varchar(50)"> <constraints nullable="false"/> </column> <column name="state" type="char(2)"/> </createTable> </changeSet> <changeSet id="2" author="nvoxland"> <addColumn tableName="person"> <column name="username" type="varchar(8)"/> </addColumn> </changeSet> <changeSet id="3" author="nvoxland"> <addLookupTable existingTableName="person" existingColumnName="state" newTableName="state" newColumnName="id" newColumnDataType="char(2)"/> </changeSet> </databaseChangeLog>

 

 

 

4. spring에 databaseConfig 파일d에 liquibase관련 내용을 Bean으로 만들어준다.

 

SpringLiquibase liq = new SpringLiquibase();

 

liq에 필요한 내용을 set해준다( datasource등..)

 

 

 

5. 그이후 서버를 기동하면 다음과 같은 테이블이 생성함을 확인 할 수 있다.

databasechangelog

databasechangeloglock

databasechangelog는 한번 돌았던 xml파일을 다시 반영하지 않기 위해 어떤파일을 database에 반영했는지

기록하는 테이블이고

 

 

databasechangeloglock은 기동하면서 xml파일이 반영될때 lock을 잡고 있을때 테이블에 데이터가 들어갔다가

lock이 해제되면 빠진다

 

 

 

 

 

'DEVELOP > DB' 카테고리의 다른 글

[MariaDB] general log 설정하기  (0) 2020.05.25
DB (mysql) 설정 변경  (0) 2020.03.13
NewSql 이란? All in one DBMS  (0) 2019.12.16
NoSql DB 종류  (0) 2019.12.13
DB(database)의 종류  (0) 2019.12.11

1. RestTemplate이란?

Spring 3.0부터 지원하며 스프링에서 http 통신에 유용하게 쓸수 있도록 제공해주는 템플릿이다.

즉, API 통신해서 가져 올수 있도록 도와준다.

 

2. 예시코드

@GetMapping("/test")
    public ResponseEntity<List> testList(testVo testVo) {
        String url = "http://testurl.com"; // api url
      

  //get parameter 담아주기
        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
                .queryParam("test1", testVo.getUserId())
                .queryParam("test2", testVo.getValue());
       HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
        httpRequestFactory.setConnectTimeout(30000); // 연결시간 초과
        //Rest template setting
        RestTemplate restTpl = new RestTemplate(httpRequestFactory);
        HttpHeaders headers  = new HttpHeaders(); // 담아줄 header
        HttpEntity entity = new HttpEntity<>(headers); // http entity에 header 담아줌

        ResponseEntity<JSONArray>  responseEntity = restTpl.exchange(url, HttpMethod.GET, entity, JSONArray.class);
        L.info("responseEntity.getBody()" + responseEntity.getBody());
        List result = (List) responseEntity.getBody();

        return ResponseEntity.ok(result);
    }

 

3. 설명

HttpComponentsClientHttpRequestFactory :  RestTemplate 는 ClientHttpRequestFactory 로 부터 ClientHttpRequest 를 가져와서 요청을 보낸다.

 

RestTemplate template = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
이렇게 써도 가능하나 다양한 설정을 추가하지 못한다.

 

POST 방법으로 하고 싶으면 HttpEntity를 선언할때 body부 를 넣어주면된다.

String body =~~; // 보통 map형식

HttpEntity entity = new HttpEntity(body,headers);

 

그리고 여기서는 return을 List로 받고싶어서 JSONArray를 썼는데, 

List<Object> 형태가 아닌 다양한 JSon 형태라면 JSONObject로 리턴받아 해당 값을 get해도 된다.

ResponseEntity<JSONObject>  responseEntity = restTpl.exchange(url, HttpMethod.GET, entity, JSONObject.class); 

responseEntity.getBody().get("example");

4. 참조 문서

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html

 

RestTemplate (Spring Framework 5.1.7.RELEASE API)

Synchronous client to perform HTTP requests, exposing a simple, template method API over underlying HTTP client libraries such as the JDK HttpURLConnection, Apache HttpComponents, and others. The RestTemplate offers templates for common scenarios by HTTP m

docs.spring.io

해당 페이지에 Get, Post등 다양한 방법이 나와있다. 

나는 여기서 exchange 방법을 썼는데 HTTPMETHOD.GET / POST로 바꿔서 쓰면된다.

JPA(Java Persistent API)


 JPA는 여러 ORM 전문가가 참여한 EJB 3.0 스펙 작업에서 기존 EJB ORM이던 Entity Bean을 JPA라고 바꾸고 JavaSE, JavaEE를 위한 영속성(persistence) 관리와 ORM을 위한 표준 기술이다. JPA는 ORM 표준 기술로 Hibernate, OpenJPA, EclipseLink, TopLink Essentials과 같은 구현체가 있고 이에 표준 인터페이스가 바로 JPA이다.

  ORM(Object Relational Mapping)이란 RDB 테이블을 객체지향적으로 사용하기 위한 기술이다. RDB 테이블은 객체지향적 특징(상속, 다형성, 레퍼런스, 오브젝트 등)이 없고 자바와 같은 언어로 접근하기 쉽지 않다. 때문에 ORM을 사용해 오브젝트와 RDB 사이에 존재하는 개념과 접근을 객체지향적으로 다루기 위한 기술이다.


따로 쿼리 없이 vo와 db를 연결해준다.








CRUDRepository를 extends 하는것만으로도

기본적인 CRUD는 모두 제공한다.


따라서 추가적으로 구현할 것은 없다.

다만 SQL이 필요 할때만 @Query로 annotation을 추가하여

쿼리를 추가해주면 된다.


Query를 추가하는 방식은 두가지가 있는데

1. db query

2.vo  클래스에 관해서 쿼리를 날리는 방법



안녕하세요

요새 가장 큰 취미중 하나인 스윙댄스!
스윙화가 따로 팔긴하지만
일반 운동화에 가죽밑창만 대도 된답니닷!!

저도 스윙을 그냥 하다가
스위블을 배우면서
발목이 아파서 ㅠㅠ 더이상은 안되겠다 싶어서
바로 가죽을 붙였어요~

가죽은 ‘가죽 자투리’ 로 검색해서
샀습니다!



온가죽이에요..5천원어치인데 많져?
남아서 나눔 했어요,,,



우선 신발 밑창크기에 맞게 본을 뜨고 잘라줍니다
저는 가죽이 잘 잘려서
가위로 잘랐어요~
안되면 먼저 칼로 모양을 내고 그다음
가위로 자르면 더 잘된다고 하네요



본드도 다이소에서 그냥 본드 하나와(500원)
록타이트(3000원)을 준비해줬습니다

이쯤에서 궁금했어요


어느쪽에 본드칠을 해야할까...
여기저기 여쭤본 결과
2번에 본드칠을 하면 된답니다!! ㅎ_ㅎ

그래서 그냥 본드를
신발 밑창 + 가죽에 칠해주고
가죽 가장자리에는 록타이트를 발라줬어요~~


그다음! 붙이고
가죽이 튀어나와서 좀 남는 부분은 잘라줬어요!!
아직 헐렁~ 한 부분을 록타이트로 다시 끝부분
마무리!! 해줬습니다



짜잔 완성샷!!!!
이거 하고 스위블하니 발목하나도 안아프고
잘되요

모두 가죽 예쁘게 붙이고
즐스윙하시져 ㅎ_ㅎ!!

그럼 이만
뿅!!

+ Recent posts