개발자

서버 설계 어떻게 해야 하나요? 너무너무 궁금하고 급합니다.

2022년 11월 16일조회 4,764

부끄럽지만 서버 설계를 바꿔야 할 시기가 와서 선배님들께 여쭈어봅니다. 지금 aws에서 ec2 1대를 이용해서 서비스를 이용하고 있습니다. 당연 오픈한지 얼마 안 돼서 고객 유입도 적어 문제가 안됐는데 마케팅 이후 300명이 되면서 서버를 다시 작업해야 할 시기가 된 거 같아 아무리 찾아도 무얼 봐야 하는지 몰라서 여쭈어봅니다. 추가 마케팅 이후 예상 고객이 천명이 이상의 접속자가 생길 예정입니다. 프론트 : react 백엔드 : node.js DB : RDS (db.t3.micro) PC : aws EC2 1대 (t2.medium) 배포 : 젠킨스 git - 회원가입 - 상품1,상품2,고객 리스트 페이지 - 회원 정보 페이지 - 채팅(+결제) - 관리자 - 이미지 저장 이렇게 크게 나누어져 있습니다. 이런 작업이 회바회고 케바케이다 보니 어떻게 해야 할지 맞는것이 뭔지 못 찾고 있습니다. 프론트는 8080포트에서 서버를 3000 포트에서 돌리고 있습니다. 1. 컴퓨터 댓수를 늘린다. 가 서버를 분산해서 개발하는걸 말하는 걸까요? 2. 아니면 큰 PC 라지 이상의 PC를 구매하면 문제가 없는 걸까요? 부끄럽지만 이미지도 한번 추가해서 올려봅니다. ㅠㅠ

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 7

인기 답변

김형준님의 프로필 사진

관련 작업을 많이 해보지는 않아서 많은 도움을 드릴수는 없지만, 비슷한 작업을 해본 경험을 바탕으로 방향성 정도만 남겨 드릴게요. 먼저 성능 문제에대한 측정 & 분석을 먼저 해보는걸 추천드려요. 어떤 API 혹은 Query 가 오래걸리는지 그리고 각각의 문제를 어느정도의 리소스로 어디까지 개선 가능한지를 먼저 분석해 보는게 좋아요. 아키텍쳐를 변경하는 작업은 큰 작업이기 때문에 무턱대고 적용하기 보다는 현재 상황에서 들어가는 리소스 대비 가장 큰 효과를 얻을 수 있는 작업을 먼저하는게 더 좋아요. (80 대 20 규칙을 찾아봐 주세요.) 문제를 분석하기 위해서 보통 실행시간 (API, Query) 를 분석하고, 분석을 위한 툴은 다양하게 있으니 현재 상황에 맞는 툴을 찾아서 사용해주세요. 많이 사용해본게 아니라서 ‘이런 툴이 좋다’ 라는 추천을 해주기가 어렵네요. 개인적으로 경험한 부하가 많이 발생하는 상황을 공유드리면 - DB 의 Write 혹은 Transaction 로직이 오래걸리는 상황 - DB 의 Read Query 에서 Index 가 없거나 잘못 적용된 상황 - DB 의 Read Query 에서 Join 이 효율적으로 되지 못하는 상황 - (ORM 을 사용한다면) 특정 로직의 Query 가 효율적으로 동작하는 상황 - 호용된 DB Connection Pool 을 초과하는 접속이 발생하는 상황 이렇게 DB 와 관련된 문제가 자주 발생합니다. API, Query 최적화 이후에 간단하게 적용 가능한 아키텍쳐는 Event Driven 아키텍쳐 인듯 합니다. 실시간으로 처리할 필요가 없는 작업들을 Queue 에 저장해서 Worker 에서 따로 돌리는 방식으로 서버의 부하를 크게 줄일 수 있어요. 이 방법도 마찬가지로 성능 문제를 파악해보고 어느정되의 효과를 얻을 수 있는지 파악하고 도입해보는걸 추천드려요.

profile picture

익명

작성자

2022년 11월 16일

감사합니다 DB쿼리문 부터 확인하고 안정화를 적용해야겠습니다. 혹시 부하테스트는 어떻게 하는지 알 수 있들까요?

Benjamin Kim님의 프로필 사진

Benjamin Kim

Sharetreats Devops2022년 11월 16일

부하 테스트는 자주 콜 되는 api 를 기준으로 호출 테스트를 하시면 되고 네이버에서 만든 테스팅 툴을 쓰시면 편합니다 이름이 기억이 안나는군요 ㅠㅠ

profile picture

익명

작성자

2022년 11월 17일

감사합니다

유성국님의 프로필 사진

유성국

쌍용정보통신 수석2022년 11월 23일

Jmeter는 사용자도 많은편이고, 오픈소스 성능테스트 툴 중에서도 상위에 랭크된 툴입니다

유성국님의 프로필 사진

유성국

쌍용정보통신 수석2022년 11월 23일

덕분에 저도 많은 도움이 되었습니다. 수년간 레거시 인프라 위주의 업무만 해오다가 최근 1~2년전부터 성능테스트 업무를하면서 비즈니스 로직을 들여다 보게되었고, 형준님께서 말씀해주신것이 귀에 팍팍 꽃히네요

인기 답변

Benjamin Kim님의 프로필 사진

고객이 300명인데 느려지는게 이상하기는 하네요, 동시 접속 시간대가 아주 겹치거나 다른 분 말씀대로 쿼리의 응답속도를 확인해보시는게 좋을거 같습니다 대부분의 디비 쿼리 응답 속도는 30ms 내로 아무리 느리더라도 200ms 를 넘어가는게 좋은건 아닙니다 서버 여러대를 두려면 트랜젝션이 멀티 인스턴스에 맞게 코딩 되어 있는지, 서버의 유저 세션이 멀티서버에 트래픽이 분산되어도 괜찮은지부터 확인하셔야 합니다 1대에서 2대 만들기가 가장 어렵습니다 차라리 급하다면 당장 서버 성능을 높이는게 낫습니다 그리고 이미지가 많을 거 같아 보이네요 80쪽에서 이미지 다운로드 트래픽에 캐쉬처리가 되어 있으면 널럴해집니다 더해서 클라우드플레어 같은 cdn 경유하게 만들면 거의 서버가 놉니다 저희 케이스의 경우는 데일리 활성유저가 10만정도 인데 서버 1대로도 놀고 있습니다

profile picture

익명

작성자

2022년 11월 16일

감사합니다. ~ ㅠㅠ 300명에서는 느리지 않지만 천명이상 들어올 경우 걱정이 되서요 ㅠㅠ 역시 1번은 쿼리 응답속도 확인해 봐야 하는 건가보네요 1. 혹시 cdn은 어디 쓰시는지 알 수 있을까요?? 2. 선배님 서비스가 어디인지 알 수 있을까요??

Benjamin Kim님의 프로필 사진

Benjamin Kim

Sharetreats Devops2022년 11월 16일

1. 네 cloudflare 를 쓰고 있고 이미지들만 따로 도메인을 따서, img.example.com 등과 같이 이 아이만 cloudflare 에 등록하고 nginx 등의 웹서버에서 추가 등록해줍니다 이미지들이 80 말고 8080쪽 서버에 있다면 거기에도 추가로 nginx 하다 더 설치하시고 8081 포트같이요 img.example.com 으로 들어오는 요청은 80을 거쳐서 8081 이미지 있는 서버쪽으로 라우팅을 하시고 이미지가 있는 서버에서는 상품이미지가 있는 디렉토리에 직접으로 라우팅을 해주세요. 이미지가 있는 서버의 Nginx 설정에서는 etag 처리와 캐쉬 시간을 적정하게 늘려잡아주시고, node.js 가 이미지를 서비스해주면 답이 없어요 특히나 node.js 는 쓰레딩 모델이 아니라서 무거운 static 파일을 서비스 하거나 쿼리 응답속도가 조금이라도 느린 http 요청이 쌓이면 하늘나라로 바로 갑니다 http 요청을 엄청난 속도로 처리해줄 자신이 있을때, node.js 는 큰 힘을 발휘할거에요

Benjamin Kim님의 프로필 사진

Benjamin Kim

Sharetreats Devops2022년 11월 16일

2. https://www.sharetreats.ph 필리핀 기프티콘 서비스랍니다 요즘 인도네시아도 따로 확장하고 있어요

profile picture

익명

작성자

2022년 11월 17일

감사합니다

gik님의 프로필 사진

저도 서버프로그래머가 아니라 궁금한데 보통 동시접속이 아니고서야 1000명은 거뜬히 커버가능하지 않나요? aws ec1 스펙이 어느정도인지는 모르나. 저도 지금 nodejs 서버프로그래밍하고 있는데 컴퓨터 한대당 1만명으로 잡고있어서요. 궁금하네요.

profile picture

익명

작성자

2022년 11월 16일

다른 선배님들도 1000명은 거뜬하다고 하시네요 ㅠㅠ 저도 또 다른 선배님들은 어떻게 운영을 하는지 궁금하네요

알사탕님의 프로필 사진

좋은 내용 감사합니다

kevin님의 프로필 사진

노예들에게 과부하가오면 회식을해야합니다

임대환님의 프로필 사진

저라면 디비를 스케일업 (스펙올리기) 하고 프론트와 백엔드 서버를 분리해서 스케일아웃(서버여러개)하기 쉬운 구조로 변경할듯합니다 프론트는 react를 사용하시면 react 빌드된 파일을 s3에 올려서 cloudfront 에 서비스를 할것같고 alb를 이용하여 백엔드 서버에 접근가능 하도록 변경하고 백엔드서버는 2대 정도로 구축하고 트래픽을 살펴볼듯합니다

김효민님의 프로필 사진

제일 간단한건 사양을 올리는 것일거같아요 부하테스트를 통해서 어느정도 규모까지 안정적인 서비스가 가능한지 확인해보시고 필요에따라 서버를 늘려 부하를 분산시키는 방법을 찾아보시거나 서버 사양을 올리시면 되지 않을까요?

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

비슷한 질문 1

Q. 개발자들이 말하는 대규모 트래픽 경험은 뭔가요?

안녕하세요. 이번에 백엔드 개발자로 취준을 하고 있는 학생입니다. 문득 면접 정리를 하다보니 "대규모 트래픽을 경험해보고 싶습니다"라고 말한 것이 사람마다 느끼는 점이 다를 수 있겠다 라고 생각이 되더라구요. 저는 저 표현을 썼을때 1000만명이 써도 서비스가 안 죽고 요청을 잘 처리하는 서버 운영 방법을 알고 싶다라는 의미에서 썼는데요. 생각해보니 대규모 트래픽이 몰려서 서버가 죽는 경우는 일상에서 그렇게 흔하지 않을 수도 있다고 생각이 되었습니다. 혹시 선배님들은 위와 같은 말은 하면 어떤 것을 경험해보고 싶다인지 구체적인 사례를 알려주실 수 있나요? 예를 들면 대규모 트래픽이란 어느정도고 서버가 트래픽 때문에 죽는 경우가 실제로 흔한 사례인지도 궁금합니다. 감사합니다.

말씀하신 것처럼 여러명이 사용하는 서비스를 잘 운영하는 부분도 있지만 예상하지 못한만큼 사용자가 증가하는 경우도 포함한다고 생각합니다. MAU가 1000만명이면 월 1000만명이 사용했을 때 문제가 없도록 구현을 잘 해놓았을텐데, 이게 갑자기 동시에 100만명이 리퀘스트를 보내는 것과는 또 다른 개념이라고 생각합니다!

외 3개 답변 보러 가기

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!