728x90
반응형

작성일자 : 2020.04.30

 

GIT 파일 관리 상태

GIT 에 의해 관리되는 파일은 크게 Untracked, Tracked 의 상태를 가지며 Tracked 상태의 파일들은 다시 Unmodified, Modified, Staged 의 상태를 가진다.

 

Untracked : 파일의 수정 여부를 git이 신경쓰지 않는 상태. 

Tracked : 파일의 수정이 일어났을 때 git이 파일의 변경을 감지하는 상태.

Unmodified : 추적중인 파일의 수정이 없는 상태

Modified : 추적중인 파일의 수정이 발생한 상태

Staged : 수정한 내용이 Staged area 에 올라가 Commit 할 수 있는 상태

 

* 새로 파일을 만들면 Untracked 상태가 된다. git add 명령어를 통해 Staging area 에 저장하면서 해당 파일을 Tracked 상태로 변경할 수 있다.

 

 

Git Repository 생성 후, 처음 파일 Push

 

1. Git Repository 생성

 

 

 

2. workspace 설정

 

git bash 를 사용하여 workspace 아래에서 작업

 

$ git init
$ git remote add origin 'git_repository_url'
$ git remote -v

 

 

3. push

 

git bash 를 사용하여 workspace 아래에서 작업

 

$ git add --all
$ git commit -m "comment"
$ git push origin master

 

 

 

 

Git Repository Clone

 

git bash 를 사용하여 workspace 아래에서 작업

 

$ git clone 'git_repository_url'

 

 

 

 

작업 내용 Push

 

$ git pull origin master         // 푸시 전 저장소 동기화
$ git status                            // 스테이징

$ git add -p                           // 스테이징할 파일 선택 y : 스테이징함, n : 스테이징 하지 않음, q : 명령어 종료 
$ git commit -m "comment" // 커밋
$ git push origin master       // 푸시

 

 

++

--allow-unrelated-histories  
서로 관련 없는 두 프로젝트를 병합을 허용하는 옵션

 

$ git pull origin master --allow-unrelated-histories  
728x90
반응형

'도구, 툴' 카테고리의 다른 글

[docker] 기본 명령어  (0) 2020.05.24
[Spring boot] Logback 설정  (0) 2019.07.14
[ELK] Kibana  (1) 2019.01.29
[ELK] Logstash  (0) 2019.01.28
[ELK] Elasticsearch  (0) 2019.01.24
728x90
반응형

// gradle.properties

org.gradle.jvmargs = -Xms512m -Xmx2048m

 

728x90
반응형
728x90
반응형

작성일자 : 2020.02.23

목표 : Spring App 구동 후 특정 작업 실행

 

1. ApplicationRunner 사용 (Parameter 활용 가능)

package com.example.demo.test;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Component
public class RunAfterApplicationStart implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) {
        System.out.println("ApplicationRunner Example");
        System.out.println(Arrays.toString(args.getSourceArgs()));
    }
}

 

2. CommandLineRunner 사용 (Parameter 활용 가능)

package com.example.demo.test;

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Component
public class RunAfterApplicationStart implements CommandLineRunner {
    @Override
    public void run(String... args) {
        System.out.println("CommandLineRunner Example");
        System.out.println(Arrays.toString(args));
    }
}

 

3. EventListener 사용

package com.example.demo.test;

import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Component
public class RunAfterApplicationStart {
    @EventListener(ApplicationReadyEvent.class)
    public void test() {
        System.out.println("ApplicationReadyEventListener Example");
    }
}
728x90
반응형

'Java' 카테고리의 다른 글

[Spring] Web Cache 적용  (0) 2020.12.19
[SpringBoot] H2 연동  (0) 2020.07.21
Stream Example  (0) 2020.01.05
리스트 순환 중 아이템 삭제  (0) 2019.12.08
[Spring] Cache 적용  (0) 2019.09.28
728x90
반응형

작성일자 : 2020.01.26

환경 : npm 6.12.0, react-router-dom 5.1.2, 

목표 : 특정 링크를 클릭하여 경로를 이동하며, 경로 이동 시 특정 위치에 보여지는 Component의 변환

 

 

1. react router 설치

 

# create-react-app 기본 프로젝트 사용

> npm install react-router-dom

 

 

2. Routing Component

 

Rounting에 사용할 단순 문구를 출력하는 Component 생성

 

Hello.js

import React, { Component } from 'react';

class Hello extends Component {
    render(){
        return (
            <div>
                Hello
            </div>
        )
    } 
}

export default Hello;

 

Home.js

import React, { Component } from 'react';

class Home extends Component {
    render() {
        return (
            <div>
                Home
            </div>
        )
    }
}

export default Home;

 

 

3. Router 설정

 

import React, { Component } from 'react';

import Hello from './component/Hello'
import Home from './component/Home'

import { BrowserRouter as Router, Route, Link } from 'react-router-dom';

class App extends Component {
  render() {
    return (
      <div>
      
        <Router>
          <Link to="/"> default </Link> 
          <Link to="/hello"> hello </Link>
          <Route exact path="/" component={Home}/>
          <Route path="/hello" component={Hello}/>
        </Router>
        
      </div>
    )
  }
}

export default App;

 

<Link to="path">"DisplayWord"</Link>

 

-  "DisplayWord" 가 Router Component 위치에 보여지며, 해당 문구를 클릭 시 해당 path로 이동

 

 

<Route exact path="path" component={"ComponentName"}>

 

-  path로 접근할 경우 해당 위치에 ComponentName의 Component가 보여짐

-  exact : Default Matching 규칙

 

 

4. 확인

 

4.1 '/' 경로 접근시 or default 문구 클릭 시 

 

4.2 /hello 경로 접근 시 or hello 문구 클릭 시

728x90
반응형
728x90
반응형

작성일자 : 2020.01.16

 

case1 : 부모 -> 자식 데이터 전달

 

부모 컴포넌트 

 

class Parent extends React.Component {

    parentText = 'parentText';

    render(){

        return (

            <Child childMessage={this.parentText}></Child>

        )

    }

}

 

 

자식 컴포넌트

 

class Child extends React.Component {

    render(){

        return (

            <div>

                {this.props.childMessage

            </div>

        )

    }

}

 

- 부모 컴포넌트에서 자식 컴포넌트에 데이터 직접 전달

 

 

 

case2 : 자식 -> 부모 데이터 전달

 

부모 컴포넌트

 

class Parent extends React.Component {

    parentFunction = (text=> {

        console.log(text);

    } 

    render(){

        return (

            <Child parentFunction={this.parentFunction}></Child>

        )

    }

}

 

 

자식 컴포넌트

 

class Child extends React.Component {

    childText = 'childText';

    

    childFunction = () => {

        this.props.parentFunction(this.childText); 

    }

 

    render(){

        return (

            <div>

                <button onClick={this.childFunction}>button</button>

            </div>

        )

    }

}

 

- 부모 컴포넌트에서 자식 컴포넌트에 함수를 데이터로서 전달 후, 해당 함수를 통해 자식 데이터를 부모에게 전달

728x90
반응형
728x90
반응형

Java8 Stream 활용 예

 

- List to Result

// 합계
integerList.stream().reduce(Integer::sum); // returnType Optional<Integer>
integerList.stream().reduce((a,b) -> a + b); // returnType Optional<Integer>
integerList.stream().reduce(0, Integer::sum); // returnType Integer
integerList.stream().reduce(0, (a,b) -> a + b); // returnType Integer

// 문자열 변환
stringList.stream().collect(Collectors.joining(",")); // {1,3,2,5,4} -> "1,3,2,5,4"

 

- Grouping

// 객체 내 특정 데이터를 기준으로, 또 다른 특정 데이터를 그룹핑
Map<String, List<Integer>> myVoIntegerMap =
	myVoList.stream().collect(Collectors.groupingBy(MyVo::getKeyString, Collectors.mapping(MyVo::getInteger, Collectors.toList())));

// 객체 내 특정 데이터를 기준으로, 객체 자체를 그룹핑
Map<String, List<MyVo>> myVoMap =
	myVoList.stream().collect(Collectors.groupingBy(MyVo::getKeyString));

// 두 개의 키를 기준으로 이중 Map 생성
Map<String, Map<String, MyVo>> myVoDoubleMap =
	myVoList.stream().collect(Collectors.groupingBy(MyVo::getId, Collectors.toMap(MyVo::getSubId, Function.identity())));

 

- Order By Item

// Normal (오름차순)
list.stream().sorted(Comparator.naturalOrder()).collect(Collectors.toList());
list.stream().sorted().collect(Collectors.toList());
list.stream().sorted((a,b) -> a.compareTo(b)).collect(Collectors.toList());

// Normal Reverse (내림차순)
list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
list.stream().sorted((a,b) -> b.compareTo(a)).collect(Collectors.toList());

// Custom Object
list.stream().sorted(Comparator.comparing(MyVo::getItem)).collect(Collectors.toList());

// Custom Object Reverse
list.stream().sorted(Comparator.comparing(MyVo::getItem, Comparator.reverseOrder())).collect(Collectors.toList());

// Multiple Sort
 list.stream().sorted(Comparator.comparing(MyVo::getItem1).thenComparing(MyVo::getItem2)).collect(Collectors.toList()).forEach(System.out::println);
      

 

- List to Map

Map<Integer, MyVo> myVoMap 
	= myVoList.stream().collect(Collectors.toMap(MyVo::getIndex, Function.identity()));
    
// 중복 제거
Map<Integer, MyVo> myVoMap 
    = myVoList.stream().collect(Collectors.toMap(MyVo::getIndex, Function.identity(), (oldValue, newValue) -> oldValue));

+ Function.indextity()는 현재 인자로 들어온 Item을 그대로 반환

 

- Map to List

List<MyVo> myVoList 
	= myVoMap.entrySet().stream().map(vo->vo.getValue()).collect(Collectors.toList());

 

728x90
반응형

'Java' 카테고리의 다른 글

[SpringBoot] H2 연동  (0) 2020.07.21
[Spring] App 구동 후 자동 작업 실행  (0) 2020.02.23
리스트 순환 중 아이템 삭제  (0) 2019.12.08
[Spring] Cache 적용  (0) 2019.09.28
Spring Boot + MySQL 연동  (0) 2019.09.14
728x90
반응형

특정 Port 사용중인 프로세스 종료

 

작성일자 : 2019.12.26

시나리오 : WIndow에서 특정 포트번호를 사용중인 프로세스 종료

 

1. netstat -ano | findstr 'PortNumber'

2. PID 확인 ( 1. 명령어 결과의 우측 끝 5번째 인자 )

3. taskkill /F /PID 'PID'

 

 

728x90
반응형
728x90
반응형

리스트 순환 중 아이템 삭제 예시

 

 

 

 

List list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);

        System.out.println(list); // [1, 2, 3, 4]

        
        //        for(Integer integer : list ){
        //            System.out.println(integer);
        //            if(integer==2){
        //                list.remove(integer);
        //            }
        //        }
        //  ConcurrentModificationException 발생 !! 


        Iterator it = list.iterator();
        while(it.hasNext()){
            Integer integer = it.next();
            if (integer == 3) {
                it.remove();
            }
        }
        System.out.println(list); // [1, 2, 4]

        // Java 8 이상
        list.removeIf(integer -> integer == 2);
        System.out.println(list); // [1,4]

 

 

 

728x90
반응형

'Java' 카테고리의 다른 글

[Spring] App 구동 후 자동 작업 실행  (0) 2020.02.23
Stream Example  (0) 2020.01.05
[Spring] Cache 적용  (0) 2019.09.28
Spring Boot + MySQL 연동  (0) 2019.09.14
[spring boot] AOP 설정  (0) 2019.07.21
728x90
반응형

작성일자 : 2019.11.03

환경 : npm 6.12.0

 

 

1. create-react-app 설치

 

> npm -g install create-react-app 

 


2. Project 생성

 

> create-react-app "ProjectName"

 

# VSCode 내 터미널에서는 명령어 안먹힘 -> CMD 사용


3. Project 실행

 

> cd "PrjoectName"
> npm start

 

확인 

Port : 3000

 

 

 

 

728x90
반응형

'도구, 툴 > 세팅' 카테고리의 다른 글

[vue] vuetify 사용 설정  (1) 2019.07.21
SVN 저장소 설정  (0) 2018.07.21
GIT 저장소 설정  (0) 2018.07.15
node.js 설치  (0) 2018.06.10
VSCode 설치  (0) 2018.06.10
728x90
반응형

Cache 적용

 

작성일자 : 2019.09.28

환경 : Spring Boot 2.1.8

 

 

1. Cache 사용 설정

 

import org.springframework.cache.annotation.EnableCaching;

 

@SpringBootApplication
@EnableCaching
public class MybatistestApplication {
   public static void main(String[] args) {
      SpringApplication.run(MybatistestApplication.class, args);
   }
}

 

 

2. Cache 사용 대상 선언

 

  • @Cacheable: 캐시 채우기를 트리거합니다.

  • @CacheEvict: 캐시 제거를 트리거합니다.

  • @CachePut: 메소드 실행을 방해하지 않고 캐시를 업데이트합니다.

  • @Caching: 메소드에 적용 할 여러 캐시 조작을 재 그룹화합니다.

  • @CacheConfig: 클래스 수준에서 몇 가지 일반적인 캐시 관련 설정을 공유합니다.

 

import org.springframework.cache.annotation.Cacheable;

 

@Cacheable("CacheName")
public void method(){

   ... 

   ...

}

 

해당 설정 이후, 캐시 적용

 

 

3. 확인

 

*주의 : 같은 클래스 내의 캐시 적용 함수를 호출 시 캐시 기능 미적용 ( this.cacheMethod() 등 )

 

import org.springframework.cache.CacheManager;

 

public class MyClass {

        @RequestMapping("/cacheTest")
                public String cacheTest() {       
                      service.cacheMethod();  // Cache가 적용 된 함수 호출
                      return "test";
                }

}

 

@Cacheable("CacheName")
public String cacheMethod(){
         return "Test"
};

 

 

위와 같이 작성 후 cacheTest를 호출 하면 아래와 같이 진행

 

 

- 첫 접근 시

 

1. cacheTest 실행 

2. cacheMethod Cache 확인 ( 캐시 데이터 없음 )

3. cacheMethod 실행

4. cacheMethod 결과 값 캐싱

5. cacheMethod 결과 값 반환

5. cacheTest 결과 값 반환

 

 

- 이후 접근 시

 

1. cacheTest 실행 

2. cacheMethod Cache 확인 ( 캐시 데이터 존재 )

3. 캐시 데이터 반환 ( cacheMethod 미실행 )

 

 

캐싱 상황은 CacheManager를 통해 확인 가능

 

@Autowired 
CacheManager cacheManager;

 

 

첫 접근 시, 캐시 데이터 X

- Spring은 CacheManager로 ConcurrentMapCacheManager를 Default로 사용

 

 

이후 접근 시, 캐시 데이터 존재 확인

- 어노테이션 내 설정 아이디로 Key 생성 ( @Cacheable("CacheName") )

- 캐시 된 데이터 존재

 

 

728x90
반응형

'Java' 카테고리의 다른 글

Stream Example  (0) 2020.01.05
리스트 순환 중 아이템 삭제  (0) 2019.12.08
Spring Boot + MySQL 연동  (0) 2019.09.14
[spring boot] AOP 설정  (0) 2019.07.21
[Spring Boot-Vue] 프로젝트 빌드  (0) 2019.07.21

+ Recent posts