운영 중인 서비스는 대부분 서비스 포트를 외부로 노출 시키지 않습니다. 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 인증서는 암호화와..
지난번 개인 프로젝트 때 Jenkins 서버에서 배포 서버에 접근하기위해 RSA키와 .pem 파일을 가지고 접근을 허용해주어 배포할 수 있었던 기억이 있었습니다. 그리고 현재 이 방식에 대해 공부해보고 앞으로 프로젝트에서 좀 더 잘 알고 배포하고자 정확히 뭔지에 대해 알기 위해 정리해보려고합니다. 대칭 키 대칭키는 암호화 방식은 암호화와 복호화에 동일한 키를 사용하는 암호화 기법이니다. 데이터를 암호화할 때 사용한 키를 그대로 복호화에도 사용하여 키를 그대로 복호화에도 사용하여 데이터를 해독합니다. 대칭키 암호화는 암호화와 복호화 과정에서의 연산이 빠르기 때문에 대량의 데이터를 빠르게 처리하는 데에 적합합니다. 대칭키 암호화에서는 키라는 값이 중요한 역할을 합니다. 키는 비밀로 유지되어야 하며, 암호화된..
- Total
- Today
- Yesterday
- DB
- 취업준비
- 취준
- thread
- 코드
- Spring
- 게시판
- JPA
- java
- 백엔드
- DevOps
- 인터뷰
- 자바
- Redis
- 개발자
- CS
- 취업
- docker
- 프로젝트
- MySQL
- 면접
- swarm
- 코딩
- 프로그래밍
- Kotlin
- 면접준비
- IT
- 개발
- 면접 준비
- 동시성
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |