스파르타 Java 단기 심화 과정
코드카타
프로그래머스 155652 둘만의 암호
https://school.programmers.co.kr/learn/courses/30/lessons/155652
— 문제 설명
두 문자열 s
와 skip
, 그리고 자연수 index
가 주어질 때, 다음 규칙에 따라 문자열을 만들려 합니다. 암호의 규칙은 다음과 같습니다.
- 문자열
s
의 각 알파벳을 index
만큼 뒤의 알파벳으로 바꿔줍니다.
index
만큼의 뒤의 알파벳이 z
를 넘어갈 경우 다시 a
로 돌아갑니다.
skip
에 있는 알파벳은 제외하고 건너뜁니다.
예를 들어 s
= "aukks", skip
= "wbqd", index
= 5일 때, a에서 5만큼 뒤에 있는 알파벳은 f지만 [b, c, d, e, f]에서 'b'와 'd'는 skip
에 포함되므로 세지 않습니다. 따라서 'b', 'd'를 제외하고 'a'에서 5만큼 뒤에 있는 알파벳은 [c, e, f, g, h] 순서에 의해 'h'가 됩니다. 나머지 "ukks" 또한 위 규칙대로 바꾸면 "appy"가 되며 결과는 "happy"가 됩니다.
두 문자열 s
와 skip
, 그리고 자연수 index
가 매개변수로 주어질 때 위 규칙대로 s
를 변환한 결과를 return하도록 solution 함수를 완성해주세요.
— 제한 조건
- 5 ≤
s
의 길이 ≤ 50
- 1 ≤
skip
의 길이 ≤ 10
s
와 skip
은 알파벳 소문자로만 이루어져 있습니다.
skip
에 포함되는 알파벳은 s
에 포함되지 않습니다.
- 1 ≤
index
≤ 20
— 입출력 예
s | skip | index | result |
---|
"aukks" | "wbqd" | 5 | "happy" |
입출력 예 #1
본문 내용과 일치합니다.
— 문제 풀이
class Solution {
public String solution(String s, String skip, int index) {
StringBuilder sb = new StringBuilder();
for(int i=0;i<s.length();i++){
char c = s.charAt(i);
int cnt = 0;
for(int j=1;j<=index;){
if(skip.contains((char)((c - 'a' + cnt + 1) % 26 + 'a')+"")){
cnt++;
}else {
cnt++;
j++;
}
}
char nChar = (char)((c - 'a' + cnt) % 26 + 'a');
sb.append(nChar);
}
return sb.toString();
}
}
CSRF ( Cross-Site Request Forgery )
CSRF란?
- Web App의 취약점을 이용해 사용자가 의도하지 않은 요청을 보내도록 하는 공격 기법
- 공격자는 사용자가 인증된 상태를 악용하여 사용자가 원하지 않는 행동을 수행하게 만듦
- ex) 사용자가 로그인된 상태에서 악의적인 웹사이트를 방문하면, 그 웹사이트가 사용자 권한을 이용해 은행 계좌에서 돈을 송금하도록 할 수 있음
CSRF 상황
- 사용자 로그인 : 사용자가 Web App에 로그인함
- 세션 유지 : 로그인 후 세션 쿠키가 브라우저에 저장됨
- 악성 웹사이트 방문 : 사용자가 다른 웹사이트를 방문함. 이 웹사이트는 CSRF 공격 코드를 포함
- 악의적인 요청 전송 : 악성 웹사이트는 사용자의 세션 쿠키를 이용해 원본 Web App으로 요청 보냄
- 서버 처리 : 서버는 정상적인 사용자의 요청으로 인식하고 처리함
CSRF 방지 방법
- Referer 헤더 검증
- 서버는 요청의 Referer 헤더를 확인하여 요청이 신뢰할 수 있는 출처에서 온 것인지 확인할 수 있음
- 그러나 Referer 헤더는 사용자가 조작할 수 있고, 일부 브라우저에서는 이 헤더를 포함하지 않을 수 있음
- CSRF 토큰 사용
- 가장 일반적인 방지 방법으로서, 서버는 각 요청에 대한 고유한 토큰을 생성하고, 이를 폼에 포함시킴. 서버는 요청이 들어올 때 이 토큰을 거증
- form 대신 API 사용
- API를 통해 JSON 데이터로 통신한다면 해당 이슈를 피할 수 있음
CSRF 토큰 실습
- 의존성
- Spring Web
- Spring Security
- Thymeleaf
- SampleSecurityConfig
@Configuration
public class SampleSecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests(authorize -> authorize.anyRequest().permitAll())
.csrf(csrf -> csrf.csrfTokenRepository((CookieCsrfTokenRepository.withHttpOnlyFalse())));
return http.build();
}
}
- SampleController
@Controller
public class SampleController {
@GetMapping("/")
public String showForm() {
return "form";
}
@PostMapping("/sumbit")
public String handleFormSubmit(@RequestParam("name") String name, @RequestParam("csrf") String csrfToken) {
System.out.println("Received CSRF Token : " + csrfToken);
System.out.println("Received name : " + name);
return "result";
}
}
- HTML Files
- form
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>CSRF Example</title>
</head>
<body>
<form th:action="@{/submit}" method="post">
<label for="name">Name:</label>
<input type="text" id="name" name="name"/>
<button type="submit">Submit</button>
</form>
</body>
</html>
- result
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Result</title>
</head>
<body>
<h1>Form submitted successfully!</h1>
<a th:href="@{/}">Go back to form</a>
</body>
</html>
XSS ( Cross-Site Scripting )
XSS 란?
- Web App의 취약점을 이용해 악성 스크립트를 다른 사용자의 브라우저에서 실행시키는 공격
- 이를 통해 공격자는 사용자의 세션을 가로채거나, 악성 코드 실행, 웹사이트 변조 등의 공격을 수행할 수 있음
XSS 공격 유형
- 반사형 XSS (Reflected XSS)
- 사용자가 입력한 데이터가 즉시 웹 페이지에 반영되어 발생하는 공격. 보통 URL에 포함된 악성 스크립트를 통해 이루어짐
- 저장형 XSS (Stored XSS)
- 악성 스크립트가 서버에 저장되어 여러 사용자가 해당 스크립트를 실행하게 되는 경우
- ex) 악성 스크립트를 포함한 게시글 작성 → 게시글을 보는 모든 사용자의 브라우저에서 스크립트 실행
- DOM 기반 XSS (DOM-based XSS)
- 클라이언트 측에서 JS를 통해 DOM을 동적으로 조작할 때 발생. 서버에 요청을 보내지않고, 클라이언트 측에서 스크립트가 실행됨
- ex) 스크립트가 URL 패러미터를 읽어와 DOM에 삽입할 때, 악성 스크립트가 포함될 수 있음
- 반사형 XSS와 DOM 기반 XSS의 차이점
- 반사형 XSS와 DOM 기반 XSS는 발생 위치와 동작 방식에서 차이가 있음
- 반사형 XSS는 서버측에서 발생하며, 입력된 데이터가 서버를 통해 반사되어 클라이언트로 돌아옴
- DOM 기반 XSS는 클라이언트 측에서 발생하며, 클라이언트 측 JS가 직접 데이터를 처리하고 DOM을 조작함
XSS 공격의 위험성
- 세션 하이재킹 : 사용자의 세션 쿠키를 탈취하여 공격자가 사용자의 계정으로 로그인할 수 있음
- 악성 코드 실행 : 악성 스크립트를 실행하여 사용자의 시스템에 피해를 줄 수 있음
- 피싱 공격 : 사용자를 속여 민감한 정보를 입력하도록 유도할 수 있음
- 웹사이트 변조 : 웹 페이지의 내용을 변경하여 사용자에게 잘못된 정보를 제공할 수 있음
XSS 방어 기법
- 입력 검증 및 인코딩
- 사용자의 입력을 철저히 검증하고, 출력할 때 적절히 인코딩하여 스크립트가 실행되지 않도록 함
- ex) HTML 인코딩, JS 인코딩, URL 인코딩 등
- CSP (Content Security Policy)
- CSP는 Web App이 허용된 컨텐츠 소스를 명시하여 XSS및 데이터 삽입 공격을 방지하는 보안 기능
- CSP는 Web App이 로드할 수 있는 리소스의 출처를 정의하는 HTTP 응답 헤더. 이를 통해 개발자는 특정 스크립트, 스타일시트, 이미지 등을 로드할 수 있는 출처를 제한할 수 있음
- ex) Content-Security-Policy: default-src ‘self’ https://trusted.cdn.com;
- HTTPOnly 쿠키 사용
- 세션 쿠키에 HttpOnly 속성을 설정하여 JS에 접근하지 못하도록 함. 이를 통해 세션 하이재킹을 방지할 수 있음
- HTTPOnly 쿠키는 서버측에서 설정함
- ex) Set-Cookie: sessionId=abc123; HttpOnly; Secure
- JavaScript 안전하게 사용하기
- 클라이언트 측에서 사용자 입력을 직접적으로 처리하지 않도록 함. JavaScript를 사용할 때, DOM 조작 시 사용자 입력을 안전하게 처리
SQL Injection
SQL Injection 이란?
- 공격자가 Web App의 DB Query에 악의적인 SQL 코드를 삽입하여 DB를 조작하거나 민감한 정보를 탈취하는 공격. App이 사용자 입력을 제대로 검증하지 않을 때 발생
SQL Injection의 위험성
- 데이터 탈취 : 공격자가 DB에서 민감한 정보를 탈취할 수 있음
- 데이터 변조 : DB의 데이터를 변경하거나 삭제할 수 있음
- 권한 상승 : 공격자가 DB 관리자 권한을 얻을 수 있음
- 전체 시스템 장악 : 심각한 경우 서버 전체를 장악할 수 있음
SQL Injection 공격 예시
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class SqlInjectionExample {
public static void main(String[] args) {
String username = "admin'; --";
String password = "password";
String query = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "password");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query)) {
if (rs.next()) {
System.out.println("User authenticated");
} else {
System.out.println("Authentication failed");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 공격자는 username 필드에 admin'; --를 입력
- SQL 쿼리는 SELECT * FROM users WHERE username = 'admin'; --' AND password = 'password'로 변경됨
- --는 SQL 주석 처리 기호로, 이후의 코드는 무시됨
- 결과적으로 쿼리는 SELECT * FROM users WHERE username = 'admin';가 되어, 공격자가 비밀번호를 입력하지 않아도 인증이 됨
SQL Injection 방어 기법
- Prepared Statements : SQL 쿼리를 미리 컴파일하여 패러미터화된 쿼리를 사용
- Stored Procedures : DB에서 미리 정의된 저장 프로시저를 호출하여 실행
- ORM : Hibernate 같은 ORM 프레임워크를 사용하여 DB 접근을 추상화
- 입력 검증 및 인코딩 : 사용자 입력을 철저히 검증하고 인코딩하여 SQL 쿼리에 직접 포함시키지 않음
- 최소 권한 원칙 : DB 사용자에게 최소한의 권한만 부여
그 외 보안 문제들
Open Redirect
- 공격자가 Web App의 리다이렉션 기능을 악용하여 사용자를 악성 사이트로 유도하는 공격
- 예시
- 공격 시나리오
-
공격자의 준비 : 공격자는 피싱 사이트 http://malicious.example.com를 운영하는데, 이 사이트는 실제 금융 웹사이트와 매우 유사하게 보이도록 만들어져 있음
-
공격자 링크 제작 : 공격자는 다음과 같은 링크를 만듦
http://bank.example.com/login?redirectUrl=http://malicious.example.com
- 이 링크는 사용자가 bank.example.com에 로그인한 후 malicious.example.com으로 리다이렉션 되도록 설정되어 있음
-
사용자 유도 : 공격자는 이메일, 소셜 미디어, 메시지 앱 등을 통해 이 링크를 사용자에게 보냄. 사용자는 이 링크를 클릭하면, 자신이 신뢰하는 bank.example.com 로그인 페이지로 이동함
-
사용자 로그인 : 사용자는 평소와 같이 bank.example.com에 로그인하고, 로그인 성공 후, 사용자는 자동으로 malicious.example.com으로 리다이렉션 됨
-
피싱 사이트 : 사용자는 리다이렉션된 malicious.example.com에서 실제 금융 웹사이트와 매우 유사한 페이지를 보게 됨. 사용자는 자신의 계정 정보를 다시 입력하라고 요구받고, 사용자가 정보를 입력하면, 이 정보는 공격자에게 전송됨
- 방어 기법
- 허용된 URL 목록 사용
- 리다이렉션할 수 있는 URL 목록을 미리 정의하고, 해당 목록에 포함된 URL로만 리다이렉션 함
- 입력 검증
- 리다이렉션 대상 URL을 철저히 검증하여, 신뢰할 수 있는 URL로만 리다이렉션하도록 함
- 상대 경로 사용
- 리다이렉션을 외부 URL이 아닌 App 내의 상대 경로로 제한하여 공격을 방지할 수 있음
Directory Traversal
- 공격자가 WEb App의 파일 시스템에서 허용되지 않은 파일이나 디렉토리에 접근할 수 있도록 하는 공격
- 주로 App이 파일 경로를 사용자 입력을 통해 받아서 처리할 때 발생
- 예시
- 방어 기법
- 서버 설정 강화
- 웹 서버 설정을 통해 허용되지 않은 디렉토리 접근을 차단함
- 경로 검증
- 파일 경로를 검증하여 허용된 디렉토리 내에서만 파일을 접근하도록 함
- 허용된 파일 목록 사용
- 허용된 파일 목록을 미리 정의하고, 해당 목록에 포함된 파일만 접근하도록 함. 이 방법은 파일 이름을 미리 정의된 안전한 목록에서 확인함
Clickjacking
- 공격자가 웹 페이지의 투명한 프레임을 사용하여 사용자가 클릭하도록 유도하는 공격
- 사용자가 알지 못하는 사이에 악성 동작을 수행할 수 있음
- 방어 기법
- X-Frame-Options 헤더 사용
- DENY 또는 SAMEORIGIN 값을 사용하여 웹 페이지가 iframe으로 포함되지 않도록 설정함
- DENY: 어떠한 사이트에서도 이 페이지를 iframe으로 포함할 수 없도록 함
- SAMEORIGIN: 동일 출처에서만 이 페이지를 iframe으로 포함할 수 있도록 함
- Content Security Policy (CSP)
- CSP 헤더를 사용하여 iframe의 포함을 제한함
Sensitive Data Exposure
- App이 민감한 데이터를 충분히 보호하지 않아 공격자가 이를 탈취하는 공격
- 민감한 데이터가 안전하게 저장되거나 전송되지 않을 ㄸ ㅐ발생
- ex) 비밀번호 평문, 신용카드 정보 암호화X 등
- 방어 기법
- 데이터 암호화
- 강력한 암호 정책
- HTTPS 사용 : HTTPS를 사용해 전송시 데이터 암호화
- 접근 제어 : 민감한 데이터에 대한 접근을 최소화
Insecure Deserialization
-
공격자가 악의적으로 조작된 객체를 App에 전달하여 실행시키는 공격
-
시스템 내에서 임의의 코드를 실행하거나 데이터를 조작할 수 있음
-
App이 직렬화된 데이터를 역직렬화할 때, 해당 데이터가 신뢰할 수 있는지 검증하지 않으면, 공격자가 악의적으로 조작된 직렬화 데이터를 주입할 수 있음
-
방어 기법
- 데이터 검증 : 역직렬화된 객체가 예상된 타입인지 검증하여, 신뢰할 수 없는 객체를 역직렬화하지 않도록 함
- 안전한 라이브러리 사용 : Java의 기본 직렬화 대신, 안전한 직렬화 라이브러리를 사용하여 역직렬화 과정에서의 보안을 강화할 수 있음.
- ex) Jackson 라이브러리를 사용하여 JSON 데이터 직렬화 및 역직렬화
-
직렬화와 역직렬화
- 직렬화 (Serialization)
- 직렬화는 객체를 저장하거나 전송하기 위해 객체의 상태를 바이트 스트림으로 변환하는 과정
- 이를 통해 객체를 파일로 저장하거나 네트워크를 통해 전송할 수 있음
- 역직렬화 (Deserialization)
- 바이트 스트림으로 변환된 객체 데이터를 다시 원래의 객체 형태로 복원하는 과정
- 이를 통해 저장된 객체를 다시 사용하거나, 네트워크로 전송된 객체 데이터를 수신하여 사용할 수 있음
Insufficient Loggin & Monitoring
- App이 적절한 로그를 기록하지 않거나, 이상 행동을 감시하지 않아 공격을 조기에 발견하지 못하는 경우
- 방어 기법
- 포괄적인 로깅 : 중요한 이벤트와 에러를 포괄적으로 로그로 기록함
- 실시간 모니터링 : 실시간 모니터링 시스템을 사용하여 이상 행동을 감지
- 로그 검토 : 주기적으로 로그를 검토하여 이상 징후를 발견하고 대응함
CVE, CVSS
- CVE (Common Vulnerabilities and Exposures)는 특정 소프트웨어 및 하드웨어의 취약점을 고유하게 식별하기 위해 사용되는 표준화된 명명 시스템
- 각 CVE 항목은 고유한 CVE ID를 부여받으며, 이는 해당 취약점을 참조할 때 일관된 명칭을 제공하여 커뮤니케이션을 용이하게 함
- CVE 프로그램은 MITRE에 의해 관리되며, 미국 국토안보부(DHS)와 사이버 보안 및 인프라 보안국(CISA)의 후원을 받고 있음
- CVE는 취약점의 심각성을 정량적으로 측정하기 위한 방법론
- CVSS 점수는 0에서 10까지의 범위로, 낮은 점수는 덜 심각한 취약점을, 높은 점수는 매우 심각한 취약점을 나타냄
Log4j 취약점 사태
- 개요
- 취약점 설명
- 이 취약점은 CVE-2021-44228로 등록되었으며, 일반적으로 “Log4Shell”이라고 불림
- 해커가 로그가 기록되는 곳을 찾아 취약점을 이용하는 것
- 영향
- 광범위한 영향 : 많은 Java 기반 App과 서버에서 사용되므로, 많은 장비와 서비스를 위험에 빠뜨렸음
- 즉각적인 패치 필요 : 여러 조직은 즉각적으로 패치를 적용하고 보안 조치를 취해야했음
- 대규모 공격 시도 : 취약점 공개 후, 많은 공격자들이 이를 악용하기 시작했으며, 짧은 시간안에 수많은 공격이 시도됨
- 대응
- 패치 배포 : Apache에서 취약점을 해결하기 위해 Log4j 2.15.0 버전을 신속하게 배포했음. 이후 추가적인 문제를 해결하기 위해 여러 번의 패치가 더 배포되었음
- 보안 권고 : 각국의 보안 기관 및 주요 IT 기업들은 신속히 보안 권고를 발행하고, 사용자들에게 최신 버전으로 업데이트할 것을 권장했음
- 시스템 점검 : 많은 조직이 자사 시스템을 점검하고, 취약점의 영향을 받는지 확인하는 작업을 수행했음
- 예방 조치
- 최신 버전 사용
- 모니터링 및 탐지
- 보안 인식 교육
장애 식별
모니터링
- 시스템의 상태를 지속적으로 관찰하고 분석하여 장애를 조기에 식별하고 대응할 수 있도록 하는 필수 과정.
모니터링 범위
참고 : https://velog.io/@lukeydokey/240816-TIL#모니터링의-범위
- 시스템 모니터링
- 리소스 사용량 추적
- 서버 및 App 상태
- 서버의 가용성, 응답 시간, 오류 로그 등을 모니터링하여 서버 상태와 App 작동 여부 점검
- 장애 예측
- 머신러닝 기반의 예측 분석을 통해 리소스 사용 패턴을 학습하고, 이상 패턴을 사전에 감지하여 장애를 예방
- App 모니터링
- 로그 모니터링
- 중앙 집중형 로그 관리 시스템을 통해 모든 로그를 통합하고 분석하는 것이 효과적
- 성능 모니터링
- 응답시간, 처리량, 오류율 등을 측정하여 성능 문제를 조기에 식별
- 서비스 헬스 체크
- 사용자 경험 모니터링
- End-to-End 모니터링
- 사용자가 서비스를 사용하는 전체 경로를 모니터링하여, 사용자 경험 기반으로 장애 식별. 사용자 지연, 실패 요청 등의 데이터를 수집 ( ex) 셀레니움 )
- 사용자 피드백 수집
- 고객 지원 채널을 통해 사용자 피드백을 수집하고, 이를 분석하여 잠재적인 문제 조기에 식별
- 리얼 유저 모니터링(RUM)
- 실제 사용자의 웹 브라우저에서 데이터를 수집하여 페이지 로드 시간, 응답시간 등을 모니터링하고 사용자 경험을 개선함 (ex) 구글 애널리틱스 )
알림 및 경고 시스템
- 알림 설정 : 임계값을 설정하여 시스템 상태가 비정상일 때 자동으로 알림 전송
- 경고 기준 : 명확한 경고 기준을 설정하여 불필요한 알림을 줄이고 장애에 즉시 대응할 수 있도록 해야함
- 알림 자동화 : 장애 발생 시 자동으로 대응 프로세스를 실행할 수 있도록 자동화된 스크립트를 설정
모니터링 도구
- Prometheus & Grafana : 오픈 소스 모니터링 및 알림 툴로서, 시스템의 메트릭 데이터를 수집하고 시각화하는 데 사용됨. 대시보드를 생성하고 데이터를 시각적으로 분석하는 데 유용
- ELK 스택 (Elasticsearch, Logstash, Kibana) : 로그 데이터를 수집, 저장, 분석 및 시각화하는 데 사용되는 강력한 도구. 각 컴포넌트는 각각의 역할을 수행하여 대규모 로그 데이터를 효율적으로 처리함
- New Relic : App 성능 모니터링 (APM) 및 사용자 경험 모니터링을 위한 도구로, 실시간 성능 데이터를 제공하여 문제를 신속히 해결할 수 있도록 도움
모니터링 고려사항
- 지속적인 모니터링 및 개선 : 정기적으로 점검하고 조정하여 모니터링 시스템을 최신 상태로 유지해야함
- 중앙 집중식 로그 관리 : 로그는 한 곳에 모아 분석하여 시스템의 전반적인 상태를 명확하게 파악할 수 있어야 함
- 협업과 공유 : 모니터링 데이터를 팀 간에 공유하여 보다 효과적인 장애 대응이 가능하도록 함
- 테스트 및 시뮬레이션 : 장애 시나리오를 테스트하고 모니터링 시스템이 정확하게 작동하는 지 검증
장애 분석 및 진단
초기 대응
- 장애 보고 및 인지
- 장애 보고 체계 확립 : 누군가가 계속해서 모니터링 하기에는 실 서비스에서는 많은 인프라가 동작하고 있음. 자동 알림 시스템을 통해 장애 발생을 즉시 인지할 수 있도록 설정함
- 장애 상황 인지 : 장애 발생 시, 즉시 관련 팀에게 통보하여 초동 조치를 취할 수 있도록 함
- 초기 평가
- 장애의 심각도 평가 : 장애의 영향을 평가하여 우선순위를 정함. 서비스 중단, 성능 저하, 데이터 손상 등의 영향을 고려함
- 초기 대응 전략 수립 : 장애 상황에 맞는 초기 대응 계획을 수립하고, 관련 리소스를 할당함
- 장애 원인 분석
- 문제 재현 : 장애 상황을 재현하여 근본 원인을 명확히 파악함. 이를 통해 동일한 상황에서 재발 방지를 위한 구체적인 조치를 설계할 수 있음
- 장애 패턴 인식 : 장애 로그와 메트릭을 기반으로 과거 유사한 장애 패턴을 분석하여 패턴에 따른 원인을 찾아냄
로그 및 메트릭 분석
- 로그 분석
- 로그 수집 : 중앙 집중식 로그 관리 시스템에서 로그 데이터를 수집하고 분석함
- 오류 및 예외 분석 : 로그를 통해 App에서 발생한 오류와 예외를 추적하여 장애의 원인을 파악함
- 로그 패턴 분석 : 패턴 인식을 통해 과거의 유사한 장애 사례를 파악하고 대응책을 도출함
- 메트릭 분석
- 실시간 메트릭 모니터링 : CPU 사용률, 메모리 사용량, 네트워크 트래픽 등 실시간 메트릭을 모니터링하여 비정상적인 활동을 탐지함
- 메트릭 데이터 비교 : 정상 상태와 장애 상태의 메트릭을 비교하여 이상 현상을 식별함
- 임계값 분석 : 설정된 임계값을 초과하는 메트릭을 확인하여 장애의 징후를 발견함
시스템 및 네트워크 분석
- 시스템 분석
- 프로세스 상태 점검 : 프로세스를 점검하여 비정상적으로 작동중인 프로세스를 식별
- 리소스 사용 추적 : 시스템 리소스(CPU, 메모리, 디스크 I/O)의 과도한 사용을 추적하여 장애의 원인을 분석함
- 스레드 덤프 분석 : JVM 스레드 덤프를 분석하여 교착 상태(Deadlock) 및 스레드 고갈 문제를 진단함
- 네트워크 분석
- 네트워크 트래픽 모니터링 : 네트워크 트래픽을 분석하여 패킷 손실, 지연, 대역폭 초과 등의 문제를 식별함
- 네트워크 토폴로지 점검 : 네트워크 구조를 점검하여 구성상의 문제를 진단함
- 연결 상태 분석 : 외부 시스템 및 API와의 연결 상태를 점검하여 네트워크 장애를 진단함
DB 분석
- 쿼리 성능 분석
- 슬로우 쿼리 로그 분석 : 성능이 저하된 쿼리를 식별하고, 인덱스 최적화 및 쿼리 재작성으로 해결함
- DB 락 분석 : 락 대기 및 데드락 상황을 식별하고 해결책을 찾음
- 커넥션 풀 상태 점검 : DB 커넥션 풀(DBCP)의 상태를 점검하여 연결 문제를 진단
- 데이터 일관성 점검
- 데이터 무결성 확인 : DB의 무결성을 점검하여 데이터 손상 여부를 확인
- 데이터 복구 절차 실행 : 손상된 데이터의 복구 절차를 실행하여 DB의 정상 상태를 복구함