TIP게시판

제목 CI로 실서비스 운영 리뷰
글쓴이 정다운 작성시각 2017/01/24 12:05:28
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 1332   RSS

안녕하세요 지난 아이디가 기억이 안나서 새로 가입했네요 ㅎㅎ

이번에 새로운 서비스를 CI로 개발 했었습니다.

 

물론 전에 서비스들도 많이 CI로 개발한 부분이 있었지만

인트라넷 성격이 강해서 부하라던지 DDOS 라던지..에 대한 이슈가 거의 없었는데요.

 

개인 프로젝트겸 전부터 계속 운영하고 싶었던 주제로 커뮤니티를 만들어서 운영을 하고 있습니다.

근 몇개월 동안 잠잠하다가

어느 순간 검색량이 늘고 (대충 3개월 전부터 실시한 SEO최적화나 기타 등등의 이유로..)

실방문자가 늘기 시작하면서 가상서버 한대로는 감당하기 힘든 트래픽이 발생했습니다.

하지만 커뮤니티에서 나오는 뚜렷한 수익모델을 정하지 않은터라 서버를 늘리거나 확장하기에 부담이 되어서

최적화를 통해 이 상황을 모면해 보려고 힘을 썼습니다.

 

결론을 먼저 말씀드리자면 현재 가상서버 저렴한걸로 동시접속자 1000~1500 피크타임 2500 정도를 무리없이 서비스 중입니다.

이번에 최적화 하면서 같이 공유하면 좋을거 같은 몇가지 팁을 적어볼까합니다.

 

1. 불필요한 session_start 를 하지 말자.

이것은 따로 서버를 운용중이 아니시더라도 클라우드 플레어 같은 캐싱을 사용하시는 분들이 알아두시면 좋을거 같습니다.

varnish, fastcgi 캐시 같은 클라우드 플레어 뒤에 바로 사용하는 또는 클라우드플레어 는 캐시 적중률이라는 것이 있는데

set cookie가 되게 되면 캐시 적중이 되지 않습니다.

세션을 스타트 하게 되면 당연히 쿠키가 구워지고 이는 캐시 적중률을 낮추게 됩니다.

보통 커뮤니티나 사이트의 성격은 비 로그인 회원이 글을 읽거나 검색 유입이 많습니다.

따라서 무조건 적인 세션스타트가 아닌 선택적 세션스타트를 하여 캐시 적중률을 높였습니다.

메인페이지에서의 결과는 캐시 적중률이 99% 정도를 유지 하게 되었습니다.

 

2. 메모리 기반 캐시를 적극 활용하자.

많은 방문자가 있을시 서버가 힘들어 하는 경우를 저는 하드디스크의 사용량과 연관지어 생각했습니다.

mysql(mariadb)의 innodb를 사용하신다 하더라도 하드디스크는 필수적으로 사용을 하게 되어 있고

방문자가 방문시 매번 템플릿 파일을 읽는 등의 하드디스크 사용량만 줄여도 반응속도가 훨씬 좋아 질것으로 예상했습니다.

하지만 이미 모든 템플릿이 CI기본 템플릿으로...ㅠ

모든 템플릿을 변환하는게 힘들다는 판단으로 같은 기능을 하는 템플릿 라이브러리를 제작 후

템플릿을 읽을때 템플릿자체를 메모리에 올려두었습니다.

(템플릿을 가져올때 실서비스라서 만료시간을 정해두지 않았습니다. 만약 템플릿에서 수정이 있을경우 메모리 캐시를 flush 했습니다.)

(단순한 HTML 캐시는 REDIS보다 MEMCACHE가 좋습니다. 물론 REDIS를 사용하셔도 됩니다.)

템플릿만 저렇게 처리했을 뿐인데도 체감속도는 너무나도 달라졌습니다.

 

-db의 경우-

게시글의 경우는 누가 읽게되면 만료기간을 예를 들면 10초로 정해두고 캐싱한다음

만료기간전에 또 누가 읽게되면 만료기간을 늘려가는 식으로 캐싱을 했습니다.

무조건 적으로 모든 게시물을 캐싱하기에는 가상서버의 메모리는 너무 적습니다ㅠ

가끔 핫한키워드들이 네이버 상단에 뜨는경우 한 게시물로도 방문자가 만명이상 들어올때가 있습니다.

그럴때에 최상의 캐시사용률을 자랑했습니다.

 

속도와는 다른 이야기

저는 보안에 생각보다 민감하지만 보안쪽으로는 아무것도 모릅니다.

가끔 ci의 업뎃 내역을 보면 최근 3.1.2->3.1.3 패치 내역을 보더라도 xss 취약점이 있다고 나오는걸 봐선

white list 기법이 아닌 black list 기법이라는 생각을 하고 있습니다. 따라서 HTMLPurifier를 이용했습니다.

다른 분들은 보여줄때 필터를 하는거 같았지만 저는 디비에 넣을떄 필터를 해서 넣었습니다.

볼떄 필터를 하게되면 보는 사람마다 필터를 거쳐야 하고 HTMLPurifier 특성상 메모리 사용량으 1mb가 정도 입니다.

 

글을 못써서 죄송합니다.

읽어주셔서 감사합니다.

 다음글 CI 3.1.3 버전에서 HMVC 에러 (1)
 이전글 svg방식으로 구현된 우리나라 시도별 지도 입니다. (1)

댓글

양승현 / 2017/01/24 13:13:56 / 추천 0

어느정도 방문자수가 나오는 사이트의 경우 많은 도움이 될법한 글이네요.

감사합니다.

한대승(불의회상) / 2017/01/24 13:24:29 / 추천 0

중요한 포인트만 골라서 최적화 팁을 올려 주셨네요.

이후 개발에 잘 활용하도록 하겠습니다.

참고로 view 폴더를 램디스크에 올린후 심볼릭으로 링크를 거시면 메모리에 손쉽게 view 파일을 올릴수가 있습니다.

저렴한 가상서버라면 램디스크 용량이 작을테니 큰 의미 없는 팁 같긴 하네요...

정다운 / 2017/01/24 13:29:20 / 추천 0

@양승현 제가 글을 못써서 더 적고 싶은 내용은 많았으나 다 적질 못했습니다. 시간이 나면 천천히 적어보도록 하겠습니다.

@한대승 심볼릭으로 처리하면 솔직히 더 좋았을것을...개인의 개발 욕심에 메모리캐시로 개발을 하게되었습니다. 반대로 생각하면 필요한 부분만 메모리에 올리게 되서 경제적일거라고 스스로 자위해봅니다ㅠ