
이번엔 Docker swarm을 운영하면서 다양한 편리한 Tool 또는 기능을 소개해보겠습니다. 소개할 기술은 총 3가지입니다. 정적 Resource 파일을 관리하기 위한 Docker swarm config Docker 운영 GUI툴인 Portainer apm monitoring 위한 scouter 연동 Docker Swarm Config Docker swarm config는 Kubernetes의 configmap과 비슷한 기능을 제공합니다. 정적인 파일들을 관리하고 서비스 단위로 공유가 가능합니다. 또한 볼륨을 주입해줄 수 있어 클러스터간 파일을 공유할 수 있습니다. 하지만 k8s의 RBAC(Role-Based-Access-Control)이나 etcd를 이용한 전체 데이터 암호화 등의 기능은 제공하지 ..

운영 중인 서비스는 대부분 서비스 포트를 외부로 노출 시키지 않습니다. reverse proxy를 서버에 두고 80포트를 뚫어 요청을 받는경우가 많습니다. 이렇게 했을 때 다음과 같은 장점이 있기 때문인데요. 처리율 제한 알고리즘을 구현하여 서버 부하에 대비할 수 있습니다. 직접적으로 외부에 port 정보를 노출하지 않음으로써 DDoS 공격으로 부터 안전할 수 있습니다. Flow chart로 보면 다음과 같은 구조를 띕니다. 클러스터 환경에서 Nginx의 문제점 보통 reverse proxy로 Nginx를 많이 사용하고 있습니다. 하지만 Docker Swarm 환경에서는 클러스터로 운영되고 있기 때문에 reverse proxy가 도메인이나 서버를 라우팅 하기 위해 여러 domain 정보를 알고 있어야 했..

도커 스웜으로 서비스를 배포해봅시다. 우선 registry에 올리기 위해 dockerfile을 먼저 작성해줘야겠죠? 회사에선 사설 registry를 구축하여 image를 관리했지만 여기선 실제로 구축하기보단 Dockerhub라는 도커에서 제공해주는 registry를 사용해보겠습니다. dockerhub는 이미지를 저장할 수 있게 docker에서 무료로 제공해줍니다. https://hub.docker.com/ Docker Hub Container Image Library | App Containerization Deliver your business through Docker Hub Package and publish apps and plugins as containers in Docker Hub for e..

요즘은 서버를 분산시켜 관리하는 경우가 많습니다. 심지어 MSA로 전환되는 경우에는 각각 서버를 따로 운영하는건 너무 많은 비용을 야기하는데요 이럴 때 효과적인 방법으로 관리하기 위해 나온 클러스터라는 개념이 있습니다. 회사에서 부하 분산 서버를 클러스터로 전환하면서 배운 것들을 공유드리겠습니다. 사전에 이 글을 읽어보시는걸 추천드립니다. https://golf-dev.tistory.com/56 [Docker 4주차] Docker Swarm 도커 스웜을 사용하는 이유 보통 현업에서는 지금까지 한 것 처럼 호스트 하나로만 이루어져 있지 않습니다. 이유는 간단합니다. CPU나 메모리, 디스크 용량같이 자원이 부족한 경우에 스케일 아 golf-dev.tistory.com 부하 분산서버 부하 분산 서버는 하나의..

https://golf-dev.tistory.com/75 동시 접속자가 많은 서비스에서 조회 기능 TPS 개선하기 흔히 요즘 DAU가 많은 서비스들을 흔하게 볼 수 있습니다. 카카오의 실시간 댓글 서비스는 DAU가 60만에 도달하기도 합니다. 그럼 DAU가 뭘까요? Daily Active User의 앞 글자만 따온 용어로 하루 활성화 golf-dev.tistory.com 무엇이 문제인가? Redis는 10만 TPS의 처리량을 보여주기 때문에 DB write 작업에 한번에 많은 트래픽이 몰릴 수 있습니다. 그리고 이러한 요청이 밀려 들어오면 장애로 이어지기 때문에 꽤나 중요한 문제일 수 있습니다. 또한 JPA를 사용하는 경우 자체적으로 Blocking Call을 하기 때문에 병목이 생길 수 있습니다. 그렇..

이번 포스팅은 인프런 강의를 보고 작성한 포스팅입니다. https://www.inflearn.com/course/%EC%84%A0%EC%B0%A9%EC%88%9C-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%8B%A4%EC%8A%B5/dashboard 실습으로 배우는 선착순 이벤트 시스템 - 인프런 | 강의 선착순 이벤트 시스템을 구현할 때 어떤 문제가 발생할 수 있고 어떻게 해결할 수 있는지 배워봅니다., - 강의 소개 | 인프런 www.inflearn.com 쿠폰 서비스 개발하기 100개의 쿠폰을 선착순으로 개발할 예정이고 1000명이 해당 쿠폰을 사려고 대기하고 있습니다. 다음 상황을 구현해봅시다. @Entity class Coupon(..

흔히 요즘 DAU가 많은 서비스들을 흔하게 볼 수 있습니다. 카카오의 실시간 댓글 서비스는 DAU가 60만에 도달하기도 합니다. 그럼 DAU가 뭘까요? Daily Active User의 앞 글자만 따온 용어로 하루 활성화된 유저 수를 뜻합니다. 이러한 서비스는 TPS가 절대적으로 중요할 수 밖에 없는데 예를 들어 60만의 사용자중 1/60 인 1만명이 댓글 새로고침을 눌렀을 때 만약 분산 서버환경 sacle 서버 5대가 있어도 하나의 WAS당 2000개의 요청을 받아야합니다. 만약 여기서 병목이 생긴다면 굉장히 치명적일 것입니다. 문제 상황 다음 문제는 이렇습니다. 게시판 서비스이고 현재 상태 단일 서버 Tomcat 기본 thread pool size인 200개로 open했습니다. 그리고 현재 MySQL..
https://golf-dev.tistory.com/53 Redis INCR을 이용한 분산환경에서의 동시성 제어하기 문제 상황 회사에서 분산환경에서 하루에 한 번만 요청이 가능한 기능이었지만 한 사람이 3번 이상 요청을 보낸 기록이 있어 원인을 찾아보았습니다. 우선 샘플 코드는 다음과 같습니다. fun save( golf-dev.tistory.com 위 글을 보면 Redis의 INCR (increment)은 분산환경에서도 연산의 원자성을 지켜주기 때문에 이 성질을 이용하여 분산환경에서 동시요청에 대한 count를 한 후 일정 count 이상의 요청이 들어오면 해당 요청을 discard 시킬 수 있었습니다. 그렇다면 별 다른 로직 없이 분산환경에서 Redis로 동시성을 제어할 수 있었던 이유는 무엇일까요?..

코드를 살펴보면서 좋아요 기능에 멀티 스레드로인한 동시성이나 성능을 개선할 수 있는 방법이 떠올라 개선해보았습니다. 제가 계속해서 개선해나간 기록들을 남겨두며 누군가에게 도움이 됐음 좋겠습니다. 문제 상황 @Transactional public Long likeBoard(final Long boardId, final Long memberId) { Board board = boardReadService.getBoardOne(boardId); board.getBoardCount().plusLike(); return likeRepository.save(Like.createLike(memberId, boardId)).getId(); } 여러 스레드가 Board 객체를 조회하고 plusLike를 한 후 마지막으로..

https://golf-dev.tistory.com/71 [보안] 개인키와 대칭키 지난번 개인 프로젝트 때 Jenkins 서버에서 배포 서버에 접근하기위해 RSA키와 .pem 파일을 가지고 접근을 허용해주어 배포할 수 있었던 기억이 있었습니다. 그리고 현재 이 방식에 대해 공부해보고 golf-dev.tistory.com 먼저 읽고 오시는 걸 추천드립니다. 개인키와 대칭키에 대해선 설명 따로 없을 예정입니다. 회사에서 ssl 인증서를 새로 붙이는데 문제가 생겨 고생했던 기억이 있는데, 반드시 ssl을 붙이는 이유가 무엇일까 궁금하여 포스팅을 해보려고합니다. SSL 인증서란? SSL 인증서는 웹 사이트나 애플리케이션과 사용자 사이의 안전한 통신을 위해 사용되는 디지털 인증서 입니다. SSL 인증서는 암호화와..
- Total
- Today
- Yesterday
- 동시성
- 백엔드
- docker
- 면접
- 게시판
- 자바
- 인터뷰
- 프로젝트
- JPA
- DB
- thread
- 개발
- java
- 취업준비
- 개발자
- 취업
- lock
- CS
- 면접 준비
- 면접준비
- Spring
- Redis
- 코드
- DevOps
- 취준
- 코딩
- 프로그래밍
- IT
- Kotlin
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |