블로그 이미지

uchacha

개발자 일지

,

- @참고: docs.docker.com/get-started/07_multi_container/

 

가능한 사항

DB 데이터를 local에서 가져오거나 local로 공유하기.

local src 데이터를 container와 공유해서 local src 수정 시 바로 container 에 반영하기.

 

구현방법

두 경우 모두 cli에서는 -v, docker file에서는 volume을 사용하면 된다.

 

- Dockerfile.share.src -> 소스 공유

FROM node:12-alpine
RUN apk add --no-cache python g++ make
WORKDIR /app
COPY app/package.json app/yarn.lock ./
#COPY app/spec ./spec
#COPY app/src ./src

#RUN yarn install --production
RUN yarn install

#CMD ["node", "src/index.js"]

##########################################
Build & Run Code
##########################################
#docker build -t getting-started-share-src -f Dockerfile.share.src .
#docker run -dp 3001:3000 -v "$(pwd)\app:/app" getting-started-share-src sh -c "yarn run dev"

 

- Dockerfile -> DB 데이터 공유

FROM node:12-alpine
RUN apk add --no-cache python g++ make
WORKDIR /app
COPY app/package.json app/yarn.lock ./
COPY app/src ./src
RUN yarn install --production
CMD ["node", "src/index.js"]

##########################################
Build & Run Code
##########################################
#docker build -t getting-started-prod .
#docker run -dp 3000:3000 -v "$(pwd)\todo-db:/etc/todos" getting-started-prod
블로그 이미지

uchacha

개발자 일지

,

- @참고: stackoverflow.com/questions/59526444/error-while-creating-mount-source-path-mkdir-host-mnt-d-file-exists

사용중인 docker version

Docker version 20.10.5, build 55c4c88

 

에러 메세지

Error response from daemon: error while creating mount source path '/run/desktop/mnt/host/f/vsc/getting-started/getting-started': mkdir /run/desktop/mnt/host/f: file exists

 

해결

window 오른쪽 아래 docker icon 오른쪽 클릭, Restart Docker 하니까 업데이트도 같이 되면서(Update/Restart Docker 인가 그랬다.) 해결됐다.. 뭐지..

블로그 이미지

uchacha

개발자 일지

,

- @참고: docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config

 

* config data 고려 순서(with values from lower items overriding earlier ones)
1. jar 안 application.properties 
2. jar 안 application-{profile}.properties
3. jar 밖 application.properties
4. jar 밖 application-{profile}.properties

* application.properties에 추가 속성 override하기
- properties
spring.profile.active=dev,hsqldb
- command line
--spring.profile.active=dev,hsqldb
블로그 이미지

uchacha

개발자 일지

,

[Git] Submodule

Git 2021. 4. 1. 10:50

1.  도입 고려 조건

  • 두 프로젝트를 서로 별개로 다루면서도 그 중 하나를 다른 하나 안에서 사용할 수 있어야 한다.
  • 다른 독립된 Git 저장소를 Clone 해서 내 Git 저장소 안에 포함할 수 있으며 각 저장소의 커밋은 독립적으로 관리한다.
  • MainProject 에서 submodule 의 이력을 관리한다.

 

2.  기존 프로젝트에 submodule 붙이기

  • 가정
    기존 프로젝트를 MainProject, 붙이려는 submodule를 DbConnector 라 하자.

 

  • 실행 명령어

$MainProject>> git submodule add https://github.com/chaconinc/DbConnector 

  • 명령어 실행 시 MainProject 디렉토리에 submodule repository 명으로 서브프로젝트가 추가된다.

 

  • 아래 명령어로 status 를 확인해 보면 .gitmodules, DbConnector 가 추가됨을 알 수 있다.

$MainProject>> git status

 

  • .gitmodules 파일 내용은 서브모듈의 정보를 관리하며 예시는 아래와 같다.
[submodule "DbConnector"]
path = DbConnector
url = https://github.com/chaconinc/DbConnector

 

  • 서브모듈의 변경사항 내역을 보고 싶은 경우 diff에 --submodule을 추가하여 실행한다.

$MainProject>> git diff --submodule

 

  • 서브모듈이 추가된 MainProject 는 기존과 동일하게 commit, push 해주면 remote에 변경사항을 등록할 수 있다.

 

3. 서브모듈과 함께 프로젝트를 clone 하기

  • clone, submodule init, submodule update 세번의 명령어로 실행할 수 있으며,
    한번에 실행하는 방법은 아래 명령어와 같다.

worspace_dir>> git clone --recurse-submodules https://github.com/chaconinc/MainProject 

 

  • submodule 을 init, update 하는 명령어는 아래와 같이 축약될 수 있다.

$MainProject>> git submodule update --init --recursive

 

4. remote 서브모듈의 최신버전을 pull 하기

  • 서브모듈 디렉토리에서 pull 해올 수도 있으나
    submodule update 명령어를 활용하여 MainProject에서도 가능하다.

$MainProject>> git submodule update --remote DbConnector

  • ** 위 명령어는 새로운 이력이 존재할 때 Head를 detach시키므로
    submodule이 checkout한 branch로 merge하고 싶다면 --merge 옵션을 추가해야 한다.

$MainProject>> git submodule update --remote --merge DbConnector

 

  • 서브모듈 디렉토리의 현재까지의 이력 변경 내용을 자세히 알고 싶다면 diff에 --submodule 옵션을 사용할 수 있다.

$MainProject>> git diff --submodule

 

  • 위 옵션이 딸린 명령어를 diff 의 default 옵션으로 사용하기 위해 config로 등록하는 방법은 아래와 같다.

$>> git config --global diff.submodule log

 

  • MainProject 에서 추적하는 submodule 이력을 commit 하여 update 할 수 있다.

 

  • submodule의 추적 branch 변경하기

$MainProject>> git config -f .gitmodules submodule.DbConnector.branch stable

 

  • status 확인 시 submodule 간단한 변경 이력 상태를 보여주게 설정하기

$MainProject>> git config status.submodulesummary 1

 

  • 서브모듈의 log 함께 보기

$MainProject>> git log -p --submodule

 

5. MainProject 에 등록된 submodule 을 pull 하기

  • MainProject를 pull 한 후 다음 명령어를 실행한다.

$MainProject>> git submodule update --init --recursive

 

  • pull, submodule update 를 합쳐서 --recurse-submodules 옵션을 줄 수 있다.

$MainProject>> git pull --recurse-submodules

 

  • config에서 --recurse-submodules 옵션을 default 로 설정하는 방법은 아래와 같다.
$MainProject>> git config submodule.recurse true
  • 위 설정은 clone 을 제외하고 지원된다.

 

6. MainProject 에서 submodule과 함께 push 하기

- MainProject 에 기록된 submodule 이력이 현재 push 된 상태가 아닌체로 push 되면 remote 에서 pull 할 때 해당하는 submodule 의 이력이 존재하지 않아 문제가 생길 수 있다.

이를 방지하기 위해 push할 때 --recurse-submodules=[check | on-demand] 옵션을 붙여서 사용하면

MainProject push 전에 submodule 이력이 push 됐는지 체크해서 fail시키거나(check option),

MainProject push 전에 submodule을 push 한다(on-demand option).

- 위 command를 git config push.recurseSubmodules [check | on-demand] 로 설정해놓을 수 있다.

 

7. MainProject 에 등록된 submodule 이력이 remote와 다를 때 pull 하기

1. 아래 명령어로 pull 해 올 시 결과적으로  conflict 가 날 것이다.

$MainProject>> git pull --recurse-submodules

 

2. MainProject 가 충돌난 건 충돌난 파일을 수정해주면 되며, submodule이 충돌난 건 submodule단에서 merge 처리가 필요하다.

$MainProject>> git diff
diff --cc DbConnector
index eb41d76,c771610..0000000 //eb41d76은 내가 갖고 있는 DbConnector 이력이며, c771610은 remote의 DbConnector 이력이다.

$DbConnector>> git branch try-merge c771610 //현재 작업중인 브랜치는 master 이며, c771610 은 새로운 branch에 따놓는다.
$DbConnector>> git merge try-merge //master에 새로운 브랜치를 병합한다.

- 위 명령어로  merge시 conflit 가 날 것이다. 그럼 충돌 파일을 고친 후 submodule 단에서 commit 해준다.

- 그 후, MainProject 로 돌아가 고친 파일을 commit 해준다.

 

8. Submodule 팁

1. 아래와 같이 submodule foreach 를 이용하여 작업 중인 모든 submodule 에 대하여 한번에 명령어를 실행할 수 있다.

$MainProject>> git submodule foreach 'git stash'
$MainProject>> git submodule foreach 'git checkout -b featureA' //새로운 브랜치 생성 및 switch

- submodule foreach 를 사용하여 MainProject 와 submodule 의 diff를 확인할 수 있다.

$MainProject>> git diff; git submodule foreach 'git diff'

 

2. submodule 을 자주사용할 때 세팅해야 할 alias는 아래와 같다.

$MainProject>> git config alias.sdiff '!'"git diff && git submodule foreach 'git diff'"
$MainProject>> git config alias.spush 'push --recurse-submodules=on-demand'
$MainProject>> git config alias.supdate 'submodule update --remote --merge'

- git config --global 을 통해 전역으로 alias를 설정할 수 있다.

 

개인적 감상

submodule 을 다룰 때 실수할만한 부분이 꽤 많다는 생각이 든다.
개인적으로 git clone --recurse-submodule은 편리한 것 같지만,
특히 push할 때 submodule에 대한 push 없이 MainProject를 push 해버려 이력을 찾지 못하게 하는 경우를 방지하기 위해
config spush 로 설정해두고 주의해서 사용해야 하며,
git config submodule.recurse true를 설정해 놓아 실수를 방지해야 할 것 같다.
블로그 이미지

uchacha

개발자 일지

,
[Intellij 단축키]
Auto-completion for Spring is an Ultimate feature.

- Run a class with a main() method: shift + f10
- Re-run applications: "
- Stop a program: ctl +f2

- Settings: ctl + alt + s
- doc 보기: ctl + q
- fix error: f2
- Go to declaration: ctl + b
- System.out.println() 자동완성: sout + tab
- 한줄 지우기: ctl + y
- 한줄 복사: ctl + d
- 줄단위 이동: shift + alt + 위아래
- 특정 문자열 검색: ctl + shift + f
- 다중 커서: alt + 마우스 왼쪽 키 드래그
- import 정리: ctl + alt + o
- test class 생성: 클래스명에 마우스 위치 후 alt + enter
- test method 생성: alt + insert
- test 실행: ctl + shift + f10
- try catch 생성: 감쌀 코드 블럭 후 ctl + alt + t
- 되돌리기 취소: ctl + shift + z
- 이전커서로 이동: ctl + alt + 왼쪽 오른쪽
- 탭이동: alt + 왼쪽 오른쪽
- 클래스 structure 보기: alt + 7
- 클래스로 가기: ctl + n
- 변수명바꾸기: shift + f6
- 터미널 창 띄우기: alt + f12
- replace word: ctl + r
- 구현 클래스로 가기: ctl + alt + click

- refactor: ctl + shift + alt + t
- find action: ctl + shift + a
- search everywhere: shift + shift // command를 찾을 땐 /로 시작하면 됨
- 코드 완성 후 엔터: ctl + shift + enter
- 참고 정보 보기: alt + enter
- 프로젝트 구조 <-> 코드화면 전환: alt + 1
- View most recent file: ctl + e
- run anywhere: ctl + ctl
- extend selection: ctl + w (확장) / ctl + shift + w (축소)
- format: ctl + alt + l
블로그 이미지

uchacha

개발자 일지

,

- @참고: codechacha.com/ko/java-convert-localdatetime-to-timestamp/

- @참고(LocalDateTime 시간 더하기): jekalmin.tistory.com/entry/%EC%9E%90%EB%B0%94-18-%EB%82%A0%EC%A7%9C-%EC%A0%95%EB%A6%AC

 

LocalDateTime <-> Timestamp

LocalDateTime localDateTime = LocalDateTime.now(); //2019-10-31T08:45:54.874

// LocalDateTime -> Timestamp
Timdstamp timestamp = Timestamp.valueOf(localDateTime); //2019-10-31 08:45:54.874

// Timestamp -> LocalDateTime
LocalDateTime localDateTime = timestamp.toLocalDateTime() //2019-10-31T08:45:54.874

 

LocalDateTime 시간 더하기

LocalDateTime.of(2015, 4, 17, 23, 47, 5).minus(Period.ofWeeks(3)); //(2015년4월17일 23시47분05초 - 3주간) = 2015년3월27일 23시47분05초

'Java' 카테고리의 다른 글

[Java] Heap 모니터링 & Heap Dump 분석하기  (1) 2023.05.10
[Java] 연산자 우선순위  (0) 2022.12.18
[Java] Set to List, List to Set  (0) 2021.02.25
[Java] Optional 사용법  (0) 2021.02.19
[Java] 파일 입출력  (0) 2021.01.27
블로그 이미지

uchacha

개발자 일지

,

 

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

logging.level.org.hibernate=info
logging.level.org.hibernate.type=trace

블로그 이미지

uchacha

개발자 일지

,