java 4

대용량 서비스 - 6. 디비관련 프로그래밍 주의 사항

대용량 서비스 - 6. 디비관련 프로그래밍 주의 사항디비와 연동하는 프로그램을 짤 때 주의해야 할 사항을 정리해보겠습니다. 1. SQL Injection 막기 SQL injection 이라는 기초적인 해킹 기법이 있습니다. 파라미터에 이상한 값을 넣어서 원래 의도와 다르게 쿼리가 돌아가게 하는 방법입니다. 일반적으로 로그인 쿼리는 아래와 같이 만듭니다. String query = "select * from user_table where user='" + request.getParameter("user") + "' and password='" + request.getParameter("password") + "'"; 이 query를 실행시킬 때 사용자가 user 라는 파라미터에 홍길동' -- 와 같이 입력..

java 2016.10.21

대용량 서비스 - 5. 디비 비정규화

대용량 서비스 - 5. 디비 비정규화지난 글에서 디비의 인덱스가 어떻게 작동하는 지 대충 정리했었습니다. 일반적으로 데이터는 정규화를 시키는 게 좋습니다. 디비 정규화의 핵심 아이디어는 사람이 보기 좋게 정리하고 데이터 중복을 방지하는 것입니다. 디비 정규화에 대한 문서는 여기저기 널렸습니다. 먼저 정규화를 이해하신 후에 이 글을 보시기 바랍니다. 나중에 봐야지 .. 라고 생각하시는 분들은... 얼렁 생각을 바꿔서 정규화를 먼저 보고 오세요!!! 정규화를 모르고 비정규화만 시켰다가는 재앙이 일어납니다. 1. 비정규화 주의 사항 디비 비정규화란 말 그대로 디비의 정규화를 깨는 것입니다. 정규화를 깨는 유일한 이유는 속도 향상입니다. 정규화가 잘 된 테이블이 index를 잘 타는 테이블은 아니니까요. 정규화..

java 2016.10.21

대용량 서비스 - 4. 디비 인덱스

대용량 서비스 - 4. 디비 인덱스디비에 대한 내용 중 제일 중요한 인덱스의 기본적인 내용을 다루겠습니다. 디비에 관한 퍼포먼스 향상 기법들 중 제일 중요한 게 인덱스입니다. 다른 건 잘해봐야 속도가 2~3배 정도 향상되지만, 인덱스는 수백 수천 배의 속도 차이도 가져옵니다. 특히 데이터가 많아질 수록 속도차이가 더 커집니다. 다시 얘기하면 인덱스가 제대로 안 걸린 테이블은 어느 정도 이상의 데이터가 쌓이면 서비스가 불가능해집니다.(공갈 협박 아니에요^^) 1. index는 미리 데이터를 정리해놔서 빠르게 찾게 하겠다는 것입니다. 크게 binary 방식과 hash 방식이 있으며 일반적으로는 binary 방식이 많이 쓰입니다.binary 방식은 tree를 구성해서 "순서대로" 정렬하는 것이고, hash 방..

java 2016.10.21

대용량 서비스 - 3. 캐쉬

대용량 서비스 - 3. 캐쉬속도 향상에 관련된 여러 가지 방법 중 캐쉬에 대한 이야기를 하려고 합니다. 저는 ehcache를 사용했습니다. ehcache에 관한 문서는 많습니다. 자세한 사용법은 구글형한테 물어보세요^^ 1. 캐쉬 서버 구성 캐쉬서버를 별도로 둘 것인지 아니면 개별 컨테이너(tomcat, jboss 등등) 에서 직접 메모리에서 관리할 것인지, 또 서버는 몇 대나 둘 것인지를 고려해야 합니다. 별도의 캐쉬 서버를 두는 것은 비교적 좋은 서버 1대에 캐쉬 정보만 모아서 처리하면 되기 때문에 캐쉬 관리가 비교적 용이합니다. 하지만, 컨테이너 서버와 데어터 통신이 일어나며, 컨테이너 서버에서는 네트워크를 통해 읽어온 데이터를 다시 메모리에 올려서 결과를 처리해야 하기 때문에 캐쉬 성능은 상대적으..

java 2016.10.21