분류 전체보기 318

2-1.규모조정, 확장성(#대규모 서비스를 지탱하는 기술)

1. CPU 부하 해결방법 : AP서버는 CPU 부하만 걸리므로 2', 2''등 과 같이 서버(동일한 구성을 갖는 서버) 대수만 늘려서 확장한 뒤 요청을 균등하게 분산하는 로드밸런서라는 장치를 달아주면 해결 가능. *AP서버 = CPU바운드한 서버 2. I/O 부하 : 한편, I/O부하는 해결하기 까다롭다. DB를 3, 3'로 놓았을 때 2에서 3으로 쓰기(insert)가 발생하면 3이 지닌 데이터와 3'이 지닌 데이터를 어떻게 동기화할 것인가에 대한 문제가 발생하기 때문이다. *DB서버:데이터를 디스크로부터 검색하는일 주로 함. =I/O바운드한 서버 3. DB 확장성 확보의 어려움 : DB에서는 디스크를 많이 사용하므로 디스트 I/O를 많이 발생시키는 구성으로 되어있으면 속도차 문제가 생긴다. 게다가 ..

마이바티스 설정 파일(mybatis-config.xml)

1. 마이바티스 설정파일의 역할: mabatis-config.xml의 역할을 알기위해서는 JDBC 코드와 비교해보면 이해하기 편하다. JDBC에서 아래 코드에 해당하는 부분을 Mybatis에서는 mybatis-config.xml에 설정하는 것이다. public bbsDAO() { try { String dbURL = "jdbc:mysql://localhost:3306/BBS?autoReconnect=true&useSSL=false"; String dbID = "root"; String dbPassword = "root"; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(dbURL, dbID, dbPassword); } ..

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..