일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- docker
- REPLICATION
- springboot
- Jenkins
- ci/cd
- ELB
- ASG
- Typesript
- Elastic Load Balancing
- 아키텍처
- codepresso
- Redis
- TypeScript
- 코드프레소
- Auto Scaling Group
- NoSQL
- kubernetes
- AWS
- k8s
- Today
- Total
목록codepresso (11)
Study Note
저번에 Github에 Commit을 하면 Jenkins에서 다운로드와 Build를 하고 다른 EC2에 자동 배포하는 것까지 했습니다. 이번에는 저번 사용하던 jenkins 서버와 docker를 사용하여 빌드 / 배포 자동화를 해보겠습니다. 저번에 Jenkins로 Build하여 jar파일을 만드는 부분까지 같습니다. [ ] Dockerfile과 jar파일로 docker image를 생성하여 docker hub에 업로드 합니다. 배포서버인 ec2에 접속하여 docker hub에 업로드 되어있는 docker image를 다운받고 실행합니다. 이전 글을 보고 이 글을 보시는걸 추천드립니다. 2020/02/22 - [Jenkins] - Github + Jenkins 연동과 Jenkins로 Build 후 ssh로 ..
저번에는 jenkins에서 build 하는 것까지 했습니다. 이번에는 build를 한 후에 다른 ec2에 ssh로 연동을 통해서 배포를 하겠습니다. 먼저 이전에 jenkins가 설치되어 있는 ec2에서 cat /home/ubuntu/.ssh/id_rsa.pub를 통해 id_rsa.pub을 복사합니다. 복사한 값을 배포할 ec2의 authorized_keys에 추가합니다. authorized_keys는 ubuntu의 경우 /home/ubuntu/.ssh/authorized_keys에 기본적으로 만들어져 있습니다. vim /home/ubuntu/.ssh/authorized_keys 명령어에서 알 수 있듯이 vim 에디터로 붙여 넣습니다. 1번 값은 ec2 접속할 때 사용하는 .pem 파일의 인증 값입니다. ..
다음 그림과 같은 형식 CI/CD를 구현해 보겠습니다. Jenkins 설치 OS가 ubuntu인 ec2에 jenkins를 설치하겠습니다. jenkins는 java가 설치되어 있어야 하기 때문에 java를 설치하겠습니다. 다음과 같이 openjdk-8-jdk를 설치합니다. 1 2 3 sudo add-apt-repository ppa:webupd8team/java sudo apt update sudo apt-get install openjdk-8-jdk java -version을 통해 java가 잘 설치되었는지 확인합니다. 저는 maven으로 build할 예정이기 때문에 sudo apt-get install maven를 통해서 maven을 설치합니다. mvn -vsertion 또는 mvn -v를 통해 버전을..
Technical Debt은 개발 단계에서 제대로 개발을 하지 않으면, 나중에 이자가 붙어 더 많은 일을 해야 한다는 뜻이다. 여러 원인중 다음과 같은 주요 원인을 통해 Technical Debt가 발생한다. 비스니스 조직으로부터으 무리한 압박 부정확한 요구 사항이나 잦은 변경 잘못된 의사 결정 프로세스 부족한 협업 부족한 테스트 부족한 문서화 리팩토링 지연 낮은 수준의 아키텍처 설계 Technical Debt가 꼭 나쁜 것은 아니다. 회사에서 부채를 유지하면서 다른 곳에 투자할때 이익이 생길수 있다. 이처럼 Technical Debt이 발생 시키면서 개발 인력을 다른 곳에 투자함으로써 더 좋은 효과를 낼수 있다. 중요한건 Technical Debt의 비율이다. Technical Debt, 아키텍처, 기..
도구를 사용하는 이유 멀리 떨어져 있어도 쉽게 공유가 가능하다. 검색 등을 이용하여 지난 이슈애 대한 내용 추적이 좋다. 업무 프로세스에 맞춰 플로 등을 커스터 마이징 할 수 있다. 다음과 같이 태스크 관리에 많은 효율성을 부여 하지만 중요한건 프로세스와 조직 문화 자체임을 인지해야 한다. 도구 선택시 고려 사항 워크플로 사용자 정의(Workflow Customization) [필수] 태스크는 처리과정에 따라 상태 값을 가진다. 상태 값의 변화는 일종의 흐름인 워크플로를 가진다. 워크플로는 개발 조직의 업무 프로세스에 맞추어서 다시 정의되기 때문에 워크플로를 커스터마이징해야 한다. 계층(Hierachy) [필수] 태스크의 종류별로 상하, 평행의 관계를 설정해야 한다. 일반적인 링크 기능은 연결성만 제공하..
요구 사항 저장 요구 사항이 지족성으로 변경된다. 변경된 요구 사항을 일관된 하나의 문서로 관리한다. 만약 그렇지 않고 워드, 파워포인트 같은 문서로 저장하면 요구 사항이 변경될때 마다 문서를 수정하고 재배포 해야한다. 그 과정에서 예전 문서의 요구 사항이 참조될수 있다. 온라인으로 문서를 저장해서 공유하면 일관된 하나의 문서로 관리된다. 공유 파일 저장소 / 마이크로소프트의 셰어포인트 / 위키 등등 그 중 위키 페이지 사용시의 장점이다. 요구사항이 변경 될때마다 최신 문서를 볼수 있다. 업데이트 내용에 대한 히스토리를 저장해 놓기 때문에 문서 변경 내용도 함깨 관리할 수 있다. 요구 사항 변경 협의 요구 사항이 변경될 경우 근거 자료인 회의록(Meeting Minutes)을 남겨야 한다. 회의록에서 나..
태스크란 상세 요구 사항을 구현하기 위해 디자인, 문서 작성, 코딩, 테스트 과정에서 발견된 버그들을 처리하는 행위를 태스크라고 한다. 태스크는 1~2일 단위로 처리할 수 있도록 분리한다. 요구사항 ~ 태스크까지 계층 구조를 갖는 연결성을 부여한다. 개발 프로세스에 맞는 태스크 종류를 정의한다. 태스크의 종류 작업 아이템 (Working Item) 디자인, 구현, 디버깅 작업등에 해당한다. 문서화 (Documentation) 산출물/매뉴얼을 작성하는 문서화 작업이다. 테스트 (Test) 태스크를 테스트한다. 코딩에서 테스트 작업, 문서화에선 리뷰를 통한 테스트 이다. 버그 (Bug) 테스트 과정에서 생긴 버그에 해당하며, 추적성을 부여하기 위해 서브 요구 사항과 연결한다. 우선순위 결정 보통 1달 주기의..
MyBatis에서 동적 쿼리를 만들어서 사용하듯이 JPA에서 동적 쿼리를 사용하기 위해서는 QueryDSL를 사용해야 한다. @Query는 project가 로딩되는 시점에서 파싱 되기 때문에 고정된 SQL만 사용할 수 있다. QueryDSL는 오픈소스로서 자바 코드로 작성된 일종의 JPQL( Java Persistence Query Language) 빌더이다. JPA, JDBC Lucene, Hibernate Search, MongoDB, 자바 컬렌션등을 지원한다. QueryDSL 설정하기 QueryDSL를 사용하기 위해 pom.xml에 다음과 같이 작성하여 라이브러리를 사용한다. 특정 버전을 사용하려면 을 추가하면 되지만 POM에서 이미 라이브러리의 버전을 명시되어 있기 때문에 없어도 된다. 라이브러리..