본문 바로가기

반응형

분류 전체보기

(65)
[Jenkins] 젠킨스를 도커 컨테이너로 사용할 때 주의할 점 + (어떤 aws instance를 사용할까?) 개인 프로젝트에 빌드 자동화를 하기 위해서 젠킨스를 도입하려고 작업 중이다.생각하고 있는 작업의 흐름은 push(혹은 pull request) -> web hook으로 jenkins에 http 요청 -> 빌드(gradle build) -> 성공시 docker build -> docker push으로 진행된다. 1. 정품 = 좋은 것 = Jenkins Official = 정품 Official이라는 말에 공식 이미지를 pull해서 사용했었다.그런데 처음에 실행하고 필요한 라이브러리를 받을 때 부터 뭔가 이상하다.버전때문에 다운받아지지 않는 라이브러리가 꽤나 많다.Docker Hub repository에 들어가보면 update 날짜가 5달 전이다. 2. simple is best? alpine is best?..
[docker machine] docker machine으로 lightsail instance 제어하기( aka 삽질기) 현재 개인 프로젝트에서 docker container를 aws lightsail에 띄워서 서버 구성을 하고 있다. RDBMS, Redis, application web server(using spring boot), Nginx(Image Storage) 이런식으로 구성되어 있는데.사용하는 컨테이너들이 5개가 되다 보니 변경사항이 생길때 마다 Mobaxterm으로 접속해서 커맨드를 치는게 슬슬 귀찮아졌다.그리고 젠킨스를 이용해서 CI Server를 구축하려고 하는데 Jenkins는 다른 Instance를 띄워서 구성하려고 한다.그러면 내가 관리해야하는 Docker Host가 하나 더 늘어나는 셈이라 관리하기 힘들어 질 것같아서. Docker Host들을 효과적으로 관리할 수 있는 Docker Machine..
[aws lightsail] AWS 라이트세일에 도커 이용해서 운영 서버 구성 최근 디자이너와 클라이언트 개발자 분들과 협업할 수 있는 기회가 두번 있었다.그때마다 heroku라는 PaaS 서비스(aws의 elastic beanstalk와 비슷한 무료 서비스)의 Free Plan을 사용했었다.그런데 헤로쿠의 문제점이 네가지 정도 있었다.1) 서버의 위치가 미국에 있어서 한국에서 사용하면 성능이 느리다. (데모로 보여주면 눈치 보임..) 2) 30분 동안 서버에 네트워크의 요청이 없을 경우 서버가 멈춘다.(이떄 스케줄링으로 20분에 한번정도 요청을 보내주면 해결되기 한다.)3) 무료로 사용할 시 데이터베이스 연동의 어려움(기본으로 제공해주는 RDB의 용량이 5MB였다.)4) 도커를 써먹을 수 없다. 이건 부차적인 문제이긴하지만 공부한 걸 써먹을 수 있어야... 그래서 평소에 좋다고 ..
[docker] 도커 컨테이너 사이의 네트워킹 도커를 이용해 스프링 부트로 구현한 was를 배포해봤다.이제 배포한 백엔드 로직을 도커 컨테이너를 이용해 띄워놓은 MariaDB와 Redis와 상호작용할 수 있도록 서로 연결해야한다.내가 사용할 수 있는 선택지는 세가지 있었다. 1) 도커 컨테이너의 열어놓은 포트와 ip주소를 이용해 연결한다.기존에 이용하고 있던 방법 개발하는 중에는 컨테이너의 열어놓은 포트와 ip주소를 입력해서 개발하였다.application.yml에 datasource url에 192.xx.xxx.xx:3306 이런 식으로 입력해서 db에 접근했었다. 배포 환경에서도 동일하게 적용할 수 있지만 고정된 ip값을 사용한다는 것에서 기각했다. 2)link 옵션을 사용한다.기존에 가장 많이 사용하던 link 옵션이 있다. docker run..
[docker & spring boot] jar file을 docker container를 이용해서 배포 개인 프로젝트를 약 두달간 하고 있는데 처음 시작할 때 부터 배포가 스트레스였다.docker와 aws를 이용해서 배포를 해야하는데. aws는 경험이 있지만 docker는 경험이 별로 없었고 자료도 별로 없다고 생각해서(찾아보니깐 많음) 스트레스였다.동아리에서 프로젝트를 하면서도 heroku로 때워서 항상 속도가 느린 이슈가 있었는데.2주전에 예비군갈 떄 부터 꺠작깨작 공부하기 시작해서 오늘 간단한 배포를 하게 되어서 글을 올린다. 1. DockerFile 이용해서 image로 만들기 우선 배포한 애플리케이션을 빌드해서 jar 파일을 임의의 폴더로 옮겨줍니다. DockerFile도 같이 생성해줍니다. 그리고 DockerFIle을 작성 FROM openjdk:8-jdk-alpineVOLUME /tmpEXPO..
[spring] redis로 caching해서 dbms의 부하 줄이기 - 3 한참 관련 로직을 작성하던 중 클래스를 잘못 설계한 벽에 부딪히고 말았다.그리고 토요일 kt 기지국 화재로....모든 의욕을 잃었다.백엔드 프로그래밍에서는 계층마다 dto를 둔다. db에서 데이터를 읽고 쓸때는 entity class를 사용한다.클라이언트와 통신할 때는 entity class를 그대로 노출할 수 없으니 request의 parameter와 response와 mapping해주는 dto를 둔다.그리고 현재 redis를 사용할 경우에는 dto를 하나 더 사용하는 경우가 생길 수 있다.그런데 맨 처음 rdbms를 사용할 때는 redis를 고려하지 않고 dto를 하나만 두고 service 객체에서 하나의 dto 타입만을 반환해줘서 문제가 생겼다. 위와 같이 클라이언트에 보내줄 데이터타입으로 전환하는..
[spring] redis로 caching해서 dbms의 부하 줄이기 - 2 1. 필요한 기능 테스트 코드로 작성 EventCacheService라는 객체를 이용해서 캐싱과 관련된 기능들을 구현한다. 우선 test를 작성해서 필요한 메소드들을 명세해보자 컨텐츠를 조회하는 work flow 1. 사용자는 서버에 컨텐츠 요청(페이징과 검색 조건 있습니다.)2. 검색조건으로 조합한 키로 레디스에 관련 컨텐츠가 캐싱되어 있는지 확인(exist()에 해당)(레디스에 키가 없는 경우) 3. 값이 없는 경우 mariadb에서 입력받은 검색조건으로 모든 컨텐츠 조회하고 redis에 저장(save()에 해당)4. key에 대해서 expire 속성을 넣어준다.(다음 크롤링할 떄 까지로(최소 일주일 가량 될 것)5. 이제 사용자에게 컨텐츠를 리턴해줌(레디스에 키가 있는 경우)3. 레디스에서 해당하는..
[spring] redis로 caching해서 dbms의 부하 줄이기 - 1 평소에 Nosql에 관심이 많았는데. 이번에 퇴사하고 개인프로젝트를 하면서 redis로 caching을 해보기로 결심했다.본래 목적은 캐싱이었는데 사용자의 이벤트 조회 로그를 저장해서 서비스의 메인에 내가 조회한 상품을 노출하는 기능을 먼저 구현하게 되었다. (이것도 차후 글을 올려야겠다.)로그를 기록하고 메인에 노출하는 기능을 구현하면서 레디스가 제공하는 여러 자료형에 대해 이해하고 성능도 테스트해볼 수 있었는데 역시 In-memory db라서 I/O 성능이 꽤 좋다고 느꼈었다.그래서 전격적으로 db의 데이터를 redis로 옮겨서 캐싱을 해보기로 결정했다. 1. 어떤 자료형으로 구현할 것인가? 레디스가 제공하는 자료형은 set, sorted set,hash, list, string으로 네가지가 있다.모..

반응형