어쩌다보니 ci/cd를 인수인계받게 됐다.(devops를 담당하던 팀장이 이직했다) 때문에 내가 알아야할 것들이 많이 늘어났다.(ci/cd 배포 스크립트, aws 권한 관리, aws 인프라 관리, 모니터링 ㅠ) 일단 ci/cd부터 인수인계 받게됐고, 들었던 내용들을 리뷰해보려고한다. 이번 포스팅에서는 CI만 다룬다. 전반적인 github action을 이용한 CI는 아래와 같이 진행된다.1. github action vm에 linux를 설치2. java를 설치 3. 소스 코드 불러오기 4. (java와 gradle을 캐시)5. 빌드(jar 파일 생성)6. 빌드한 파일로 container image 생성7. (AWS 인증 or dockerhub 로그인)8. 원격 container repository로 전송..
이전 글에서 EC2 환경을 구축하고 Docker를 설치한 후 Tomcat을 통해 웹 서버를 배포까지 진행 해봤다. 그런데, EC2에 Docker를 설치 후 Dockerfile로 Build하는 과정에서 정상적으로 진행되지 않고 자꾸 프리징이 발생했다. 여기서 부터 2편을 시작해 보려고 한다. 1편과의 간격이 너무 길었지만 3편과의 간격이 더 길 수도 있다. 1. 스왑 메모리(swap memory) 적용 EC2에서 제공하는 t2.micro 인스턴스는 램의 크기가 1GB이다. 여기에 리눅스를 올리고 Docker 까지 설치하고, Docker 내부에서 Gradle 빌드까지하기엔, t2.micro의 메모리는 매우매우 부족하다, 그래서 프리징 현상이 발생하게 되고, 이를 해결하기 위해서 스왑 메모리라는 기법을 사용했..
DB가 필요해... 이직을 하기 전에는, 사내 DB를 개인용 프로젝트에 써먹었었다. 이직이 결정된 이후에 인프라를 만지작 거리려니까 DB가 문제가 됐다. 어떻게 써야할까 고민하다가 그냥 인프라 구축을 위해 띄워놓은 EC2에 MySQL 서버를 띄우기로 했다. 아쉬운 점은, 난 그동안 오라클만 써왔다는 것이다. 하지만 오라클은 유료라 과감히 버린다. (Oracle 이미지는 Docker Hub에서도 내려버렸다...) AWS EC2 / Docker 설정 및 설치 멈춰버린 인프라 관련 글에 잘 써놨다. MySQL Docker 설치 Docker Hub에 저장된 공식 이미지를 사용하면, 별도의 설치파일 없이 편하게 사용할 수 있다. docker pull mysql:latest 설치 후 아래와 같이 뜨면 정상적으로 설..
이직 전 마지막 작업.. 이 작업이 이직 전 마지막 작업이다. 슬프게도 성공적으로 마무리된 것을 보고 나오진 못했다. Harbor 앞에 별도의 reverse proxy를 두고 내부적으로 redirect해서 사용하는 방식으로 인프라를 구축하는 건데 문제가 생겼기 때문이다. Harbor의 reverse proxy Harbor는 reverse proxy가 nginx를 사용한다. nginx 쪽에서 외부 연결을 받아주고 내부의 component들에게 전달한다. 문제는 사내 서버는 Apache Httpd를 별도의 reverse proxy를 사용하고 있다는 점이다. 그래서 아래와 같은 구조로 동작하도록 구성해야했다. Apache Httpd에서 Redirect 설정을 하고 nginx에서 다시 뿌리도록 구성해야했다. 이..
Private Registry 매번 Docker 이미지를 만들기 위해서 Dockerfile을 빌드하는 건 너무 오래걸린다. 때문에, 만들어 놓은 Docker 이미지를 docker registry에 저장(push)해놓고 다운로드(pull)해서 사용할 일이 생긴다. 그런데 내가 담당하고 있는 프로젝트가 외부로 노출되지 않게(private하게) 사용해야 할 경우 어떻게 해야할까? 기본적으로 사용되는 Docker Registry인 Docker Hub는, 아쉽게도 public Registry만 Free tier로 제공한다. 또한, Docker Hub에서 제공하고 있는 저장소는 로컬에 저장하는게 아니라 외부 저장소기 때문에 무작정 사용하기에는 너무 불안하다. 이러한 문제를 해결하기 위해 Private Contain..
앞서 언급한 적이 있지만, 내가 담당하고 있는 서비스는 CI/CD가 없다. 하지만, 관리해야할 서버군은 요청을 앞단에서 받아줄 Apache Httpd 서버 6개, WAS가 있는 API 서버 6개, 실시간 위치정보를 다루는 WAS 3개, 배치서버 4개다. 한번 배포하는데만 시간 단위로 걸리고, 배포용 WAR파일을 수동으로 올리는데만도 몇 분씩 걸린다... 자사 서비스가 아니다보니 요청하기 어려 운점은 이해하겠지만 솔직히 말이 안된다고 생각한다. 심지어 TC도 따로 없고 데일리 빌드도 하지않으며, 프로젝트에 참여한 개발자가 개별 commit을 하고, pull request로 관리하지 않는다. 불만만 토로하게 되었는데 이러한 사항들 때문에, 다른 서비스는 어떻게 배포 과정을 갖는지 공부하게되는 계기가 됐고, ..
회사에서 어드민 서버를 신규 인프라로 이전하게 됐다. 베이스에서부터 작업하다보니 이전하면서 서버의 구조에 대해 볼 일이 생겼다. 우리 회사에서 사용하는 어드민의 서버 구조는 웹서버와 WAS를 연동시킨 구조였다. 대충 위와 같은 구조이고, 앞라인에 L4 로드밸런서를 둬서 로드밸런싱을 하고 있다. L4 부분까진 정확히 알 수 없으니, Httpd 웹서버와 Tomcat을 연동하면서 기억하고 싶었던 내용을 정리하려고한다. 그리고 위 내용을 정리하기 전에 웹서버와 WAS의 내용을 정리하지 않고 지나갈 수가 없었다.. 1. 웹서버(Web Server) 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램 - 위키백과 위키백과의 정의와 같이 웹서버는..
앞선 포스팅에서 Docker와 VM 구동 방식의 차이를 알아보았다. 여기서 Docker가 "왜 등장하게 됐는지"에 대한 설명은 마무리하고, "어떻게 사용할 것인가"에 대해 초점을 맞추어 정리해보려고 한다. 우선, Docker 웹 사이트에선 Docker를 아래와 같이 설명했다. Docker는 애플리케이션을 개발, 배송 및 실행하기 위한 개방형 플랫폼입니다. Docker를 사용하면 애플리케이션을 인프라에서 분리할 수 있으므로 소프트웨어를 빠르게 제공할 수 있습니다. Docker를 사용하면 애플리케이션을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있습니다. 코드를 신속하게 배송, 테스트 및 배포하기 위한 Docker 방법론을 활용하면 코드 작성과 프로덕션 환경에서 실행하는 사이의 지연을 크게 줄일 수 ..
- Total
- Today
- Yesterday
- serverless
- springboot
- Elastic cloud
- terraform
- Spring
- Kotlin
- 후쿠오카
- java
- 오블완
- elasticsearch
- CloudFront
- MySQL
- JWT
- 스프링부트
- cache
- docker
- EKS
- OpenAI
- AOP
- OpenFeign
- lambda
- 티스토리챌린지
- Log
- GIT
- 람다
- AWS EC2
- ChatGPT
- S3
- AWS
- openAI API
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |