| 
					
				 | 
			
			
				@@ -90,19 +90,72 @@ public final class HaClusterEvenAllocator { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int numClients = clients.size(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int numServers = servers.size(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        int baseSize = numClients / numServers;  // 각 서버에 기본적으로 할당할 개수 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        int remainder = numClients % numServers; // 남는 개수 (마지막 서버에 할당) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int allocateSize = numClients / numServers;     // 각 서버에 기본적으로 할당할 개수 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int remainder = numClients % numServers;        // 남는 개수 (마지막 서버에 할당) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int clientIndex = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (int i = 0; i < numServers; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int allocationSize = baseSize + (i < remainder ? 1 : 0); // 마지막 서버에 여분 추가 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            String server = servers.get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (int j = 0; j < allocationSize; j++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                allocation.get(server).add(clients.get(clientIndex++)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 여분을 앞쪽 서버에 우선 배정하는 방식 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        int startIdx = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (int ii = 0; ii < numServers; ii++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String server = servers.get(ii); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<String> serverAllocation = allocation.get(server); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            int additional = (ii < remainder) ? 1 : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            int endIdx = Math.min(startIdx + allocateSize + additional, numClients); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            for (int jj = startIdx; jj < endIdx; jj++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                serverAllocation.add(clients.get(jj)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            startIdx = endIdx; // 다음 서버의 시작 인덱스 업데이트 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 기본적으로 모든 서버에 allocateSize 씩 배정됩니다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 남는 1개(remainder)는 i < remainder 조건에 따라 앞에서부터 순서대로 하나씩 더 추가돼요. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int allocationSize = allocateSize + (ii < remainder ? 1 : 0); // 마지막 서버에 여분 추가 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (int jj = 0; jj < allocationSize; jj++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                serverAllocation.add(clients.get(clientIndex++)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 여분을 뒤쪽 서버에 우선 배정하는 방식 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        clientIndex = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        for (int ii = 0; ii < numServers; ii++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            String server = servers.get(ii); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            // 뒤에서부터 여분을 부여하기 위해 'numServers - i - 1' < remainder 조건 사용 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            int extra = ((numServers - ii - 1) < remainder) ? 1 : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            int allocationSize = allocateSize + extra; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            List<String> serverAllocation = allocation.get(server); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            for (int j = 0; j < allocationSize && clientIndex < numClients; j++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                serverAllocation.add(clients.get(clientIndex++)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 가장 적은 서버부터 추가로 할당하는 방식 (사전 정렬 기반 로드 밸런싱) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 서버별 현재 할당 수를 추적하기 위한 Map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        Map<String, Integer> loadMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        for (String server : servers) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            loadMap.put(server, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        clientIndex = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        while (clientIndex < clients.size()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            // 현재까지 가장 적게 할당된 서버를 찾음 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            String minLoadServer = Collections.min(loadMap.entrySet(), Map.Entry.comparingByValue()).getKey(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            allocation.get(minLoadServer).add(clients.get(clientIndex++)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            loadMap.put(minLoadServer, loadMap.get(minLoadServer) + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        int numClients = clients.size(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        int clusterSize = servers.size(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        int countPerCluster = (int)Math.ceil((double) numClients / clusterSize); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        log.info("numClients: {}, clusterSize: {}, countPerCluster: {}", numClients, clusterSize, countPerCluster); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        for (int ii = 0; ii < clusterSize; ii++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            int startIdx = ii * countPerCluster; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            int endIdx = Math.min(startIdx + countPerCluster, numClients); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            List<String> serverAllocation = allocation.get(servers.get(ii)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            for (int jj = startIdx; jj < endIdx; jj++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                serverAllocation.add(clients.get(jj)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return allocation; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -114,8 +167,9 @@ public final class HaClusterEvenAllocator { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 "L21", "L22", "L23", "L24", "L25", "L26", "L28", "L29", "L30", "L31", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 "L32", "L33", "L34", "L35", "L36", "L37", "L39", "L40", "L41", "L42", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 "L43", "L44", "L45", "L46", "L47", "L48", "L49", "L50", "L51", "L52", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "L53", "L54", "L55", "L56", "L57", "L58", "L59", "L60", "L65", "L66", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "L67", "L77", "L90", "L91", "L95" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "L53", "L54", "L55", "L56", "L57", "L58", "L59", "L60", "L65", "L66", "L67" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                , "L77", "L90" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //, "L91", "L95" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //        Map<String, List<String>> allocation = HaClusterEvenAllocator.allocate(serverList, clientList); 
			 |