전체 글 316

2장. 대규모 데이터 처리 입문(#대규모 서비스를 지탱하는 기술)

1. 메모리 내에서 계산할 수 없다. 1. 탐색 속도(메모리 vs 디스크) - 메모리 내에서 계산할 수 없기 때문에 디스크에 두고 특정 데이터를 검색해야 한다. 하지만, 디스트는 느리므로 I/O에 시간이 걸린다. ※ 메모리 내의 특정 번지에 있는 데이터를 찾는 데이터 탐색 속도 vs 디스크의 특정 원반 내에 있는 데이터를 찾는 속도 : 메모리는 디스크보다 약 10의 5승배 이상 빠르다. *디스크의 탐색 속도가 느린 이유 : 물리적인 동작인 원반의 회전을 통해 데이터를 찾기 때문에 수 밀리 초가 걸리는 것이다. 반면 메모리는 물리적인 동작 없이 실제 데이터 탐색의 오버헤드가 거의 없어 1회 탐색 시 마이크로초면 충분하다. 더욱이, 탐색에 사용되는 것이 CPU의 캐시에 올리기 쉬운 알고리즘이나 데이터 구조일..

1. 대규모 서비스에서 발생가능한 문제(#대규모 서비스를 지탱하는 기술)

1. 대량의 액세스가 있는 서비스에서 서버 1대로 처리할 수 없는 부하를 처리하는 방법 1) Scale-out : 저가의 하드웨어를 횡으로 나열해서 확장성 확보하는 전략 ※ scale-out 전략 도입 시 발생 가능한 문제 : 로드밸런서 사용에 따른 데이터 동기화 처리 문제, 네트워크 통신의 지연시간 발생 문제 2) Scale-up : 하드웨어의 성능을 높여 처리능력을 끌어올리는 방법 2. 다중성 확보 - 특정 서버가 고장 나거나 성능이 저하될 때 서비스를 계속할 수 있도록 구성해야 함. 3. 서버가 100대일 경우 - 어떤 서버가 무슨 역할을 하는지 파악 어렵다. - 뿐만 아니라 각 서버가 어떤 상황에 처해있는지 이를 테면 해당 서버에 대한 부하가 괜찮은지, 디스크 용량이 충분한지, 보안 설정에 미비한..

웹 개발자를 위한 대규모 서비스를 지탱하는 기술

1. 책에서 다루는 주요 내용 : 1) 대규모 데이터를 다뤄야 하는 웹 서비스 개발자들이 알아두어야 할 메모라나 디스크 2) CPU와 I/O 부하 3) DB분산 등의 서버 및 하드웨어에 대한 기초지식과 대규모 데이터에 적합한 알고리즘 4) 데이터 구조, 인덱싱, 네트워크 등 1. 대규모 웹 서비스 = 거대한 데이터를 처리하는 웹 서비스 - 이 책은 크게 3 분야로 나뉜다. 1) 제2~제5장 :(운영체제) 데이터가 많을 때 어떻게 처리해야 하는지, 확장성 문제가 발생하지 않도록 코드를 어떻게 작성해야 하는지 ex) 대규모 데이터란, 대규모 데이터 처리의 바탕인 OS캐시, MYSQL을 대규모 환경에서 운용 시 주의해야 할 점, 대규모 데이터를 다루는 애플리케이션 개발 시 핵심이 되는 내용 2) 제6~제10장..

0. Java-iterator에 관하여

1. 의미 : Iterator는 java CollectionFramework에 저장되어 있는 요소들을 읽어오는 방법을 표준화한 것이다. 대표적으로 Set,List,Map에서 iterator 기능 사용가능하다. 2. 기능 : Boolean hasNext() : 읽어올 요소가 남아있는지 확인하고 있으면 true, 없으면 false Object next() : hasNext()가 true이면 다음 요소를 읽어오게 하는 것이다. void remove() : next()로 읽어온 요소를 삭제한다. next()를 호출 한 다음에 remove()를 호출해야한다. 3. 사용예시 ex1) 표준 List list = new ArrayList(); Iterator it = list.iterator(); while(it.ha..

+a, SpringSecurity 인증, 인가 처리 과정 정리

1. Spring Security 구조도 : 2. 인증, 인가 처리 과정 - 대략적인 과정 : SecurityContextPersistence Filter를 가장 먼저 적용해서 SecurityContext에 Authentication 객체를 보관한다. 이후, 인증을 위해 SecurityContext를 이용해 Authentication객체를 구하고 Authentication에 포함되어있는 권한 목록(GrantedAuthority)을 확인해 특정경로에 접근할 권한이 있는지 파악한다. UsernamePasswordAuthenticationToken클래스 : Authetication(interface)을 implement한 AbstractAuthenticationToken의 하위 클래스로 첫 번째 생성자 : 인..

- SecurityContext, SecurityContextHolder, Authentication간의 관계, 현재 로그인 중인 사용자 가져오기

1. Authentication : Authentication에는 사용자의 인증 여부(enabled), 사용자가 가진 권한(authority), 이름 및 접근 주체(username=principa)에 대한 정보를 담고 있다 - 관계 : SecurityContextHolder class의 getContext() 메서드는 SecurityContext 객체를 리턴하고, 이 SecurityCotnext 객체의 getAuthentication() 메서드는 Authentication을 리턴함 따라서 현재 로그인한 사용자명을 획득하기 위해서는 //String username = SecurityContextHolder.getContext().getAuthentication().getName(); public Calen..