전체 글 (14) 썸네일형 리스트형 대용량 트래픽 속에서도 무거운 DB 조회 연산을 효율적으로 처리하는 방법은 무엇이 있을까요? (1) INTRO 안녕하세요. Soo 입니다. 성능은 프로그램 개발에 있어서 항상 중요하게 회자되는 이슈 중 하나입니다. 어떤 프로그램이 '성능이 좋다'고 했을 때, 평가할 수 있는 요소는 여러 가지가 있겠습니다만, 웹 애플리케이션의 성능을 이야기 해보자면 가장 중요한 부분 중 하나가 바로 사용자로 부터 요청이 들어왔을 때 이를 얼마만큼 빠르게 처리한 뒤 응답을 보내줄 수 있는가를 의미하는 '응답시간'입니다. 한 조사에 따르면 어떠한 서비스를 이용할 때 사용자들이 기꺼이 감내할 수 있는 응답시간은 최대 3초라고 합니다. 때문에 아무리 좋은 서비스라고 하더라도 이를 처리할 수 있는 성능이 뒷받침 되어야만 이를 통해 더 많은 비즈니스 기회를 창출할 수 있을 것입니다. 사실 처리하는 요청, 즉 서버로 들어오는 트래픽.. 대용량 트래픽을 견디는 서버를 만들기 위한 DB Replication 구축 - Microsoft Azure Cloud 서버의 MySQL 8.0.xx을 사용한다면 꼭 주의해야 하는 부분은? (a.k.a DB 구축 삽질기) INTRO 안녕하세요 Soo 입니다. 오늘은 프로젝트를 진행하면서 직면했던 문제점과 이에 대한 해결책을 공유해보고자 합니다. 이번 주제는 데이터베이스 솔루션인 MySQL과 관련이 있습니다. 항상 어떻게하면 더 성능이 좋은 프로그램을 만들까 신경쓰면서 프로젝트를 해나가던 도중에 DB를 마스터와 슬레이브의 구조로 분리하여 성능 향상을 도모할 수 있다는 사실을 알게되었는데요. 이번 글에서는 Replication 구축이 왜 필요한지와 이를 구축하면서 겪었던 작은 에피소드를 다뤄보고자 합니다. Master-Slave Replication 구축의 필요성 애플리케이션을 개발할 때 성능과 관련해서 가장 많은 문제가 생기는 부분 중 하나가 바로 데이터베이스 부분입니다. DB 커넥션 연결, 디스크 IO 발생, 인덱싱의 부.. 로그인 여부 확인기능의 구현과 이를 위한 선택 (Feat. Filter vs Interceptor vs AOP) Intro 안녕하세요! 진행하고 있는 언어교환 플랫폼 프로젝트 Hello-World에 로그인 여부를 확인할 수 있는 기능을 추가했습니다. 세션을 활용한 로그인 방식을 구현했기 때문에 그동안 매번 Argument Resolver와 annotation의 조합으로 세션에서 현재 로그인 중인 사용자에 대한 정보를 주입해주었는데요. 현재 로그인 한 사용자들의 아이디를 주입해주는 부분은 반복 코드의 고리에서 탈출 시킬 수 있었으나, 로그인 여부 확인기능의 경우에는 여전히 대부분의 메소드에서 중복으로 나타나고 있었습니다. 로그인 여부 확인 기능은 핵심로직이라기 보다는 핵심로직을 수행하도록 도와주는 부가로직에 가깝다는 성격을 지니고 있습니다. 그래서 처음에는 무작정 스프링에서 공통되는 부가로직을 분리하는데 대표적으로 .. 다중 서버환경(Scale out)에서 Session 불일치 문제를 어떻게 해결해야 할까요? INTRO 안녕하세요. 지난 글에서는 서비스의 규모가 커짐에 따라 더 많은 트래픽을 수용하기 위해 서버를 확장하는 두 가지 방식에 대해서 알아보았습니다. 각각 방식에 장단점이 존재하기 때문에 개발 중인 서비스의 특징에 맞게 선택할 필요가 있었고, Hello-World는 서비스의 특징을 봤을 때 서비스의 지속성을 유지하는 것이 더 중요하므로 이에 대해 우위가 있는 Scale out을 선택하기로 결정하였습니다. 하지만 Scale out을 선택했을 때 고려해야할 부분은 역시나 데이터의 불일치 문제입니다. 여러 서버가 각각의 메모리 저장 공간을 가지고 있는데, 세션(Session)을 활용한 로그인을 사용할 경우 세션의 특성상 각 서버간에 공유가 되지 않기 때문입니다. 본 글에서는 이러한 문제점을 좀 더 자세히 .. 서버의 가용량을 늘리는 방법은 어떤 것이 있고 무엇을 선택하면 좋을까요? (Feat. 서비스가 급속도로 확장할 때 & Hello-World) INTRO 안녕하세요. 개발자가 되기 위해 오늘도 열심히 공부중인 Soo입니다. 제가 관심을 가지고 있는 분야 중 하나는 언어 학습입니다. 처음에는 영어 공부로 시작했던 것이 계속 이어져 현재는 언어 자체에 흥미를 가지게 되었습니다. (물론 영어 하나도 제대로 못하고 있어서; 지금은 미래에 배우고 싶은 언어들만 정해 놓은 상태입니다.) 그리고 영어를 공부하면서 도움을 많이 받았던 방법 중 하나가 바로 Tandem, Italki 등과 같은 언어교환 사이트를 이용하는 것이었습니다. 때문에 문득 세계 각지의 사람들을 서비스의 대상으로 하는 언어교환 플랫폼을 직접 구현해 보면 재밌을 것이라는 생각이 들었습니다. 그래서 이번 프로젝트 주제 'Hello-World'는 제가 기존에 이용했던 유명한 언어교환 사이트들을.. 스프링은 프록시 객체를 어떻게 만들까? Intro 안녕하세요. 개발자가 되기를 꿈꾸며 학습에 임하고 있는 개발 꿈나무입니다. 지금까지는 공부했던 내용을 따로 정리해서 그냥 모아두기만 했는데요. 이제는 프로젝트를 진행하면서 궁금했던 점이나 문제 해결과정에서 공부한 부분을 글로 풀어서 블로그에 공유하는 일도 함께 해보고자 합니다. 첫 포스팅의 주제는 ‘스프링은 프록시 객체를 어떻게 생성할까?’ 입니다. 왜 프록시에 대해 자세히 공부하기로 했는가? 프록시는 ‘대리인’ 혹은 ‘대리자’라는 뜻을 가진 단어입니다. 무언가를 대신한다는 (주로 요청을 대신 처리) 프록시의 특성상 스프링에만 국한되지 않고 CS관련해서 많은 분야에서 쓰이는 용어라는 것을 알게 되었습니다. (ex. 프록시 서버, reverse 프록시 등) 다른 여러 요인들도 있겠지만, 스프링에.. 이전 1 2 다음