Skip to main content Link Search Menu Expand Document (external link) Copy Copied

특강

5분 기록보드

내 경험을 정리하기 시작할 때 가장 좋은 시점은 지금 당장이고 정리는 5분이면 충분하다.


취업에 있어서 최종 프로젝트의 의미

  • 기술적인 역량을 보여주기 위한 방법. 프로젝트에 어떤 고민이 녹아 있는지를 보여준다.
  • 소통과 협업 능력을 키우는 기회. 이는 실무에서 매우 중요한 요소이다.

이력서와 면접의 차이

  • 이력서: 내가 뭘 했는지 기록한다.
  • 면접: 사실 검증 및 무엇을 할 줄 아는지 확인한다.

기록 방법

  • 대분류: 7~8가지 중 1개 선택 (예: 기능 구현, 트러블슈팅, 기술적 의사결정, 오류 개선 등).
  • 내용: 1~3줄 정도로 간결히 작성하며, 참조 링크, 사진, 커밋 링크 등을 포함.
  • 일정 분류: 주차별로 정리.

  • 모든 것을 일단 적어보고 시작하라.
  • 매일 5분 기록보드 → 매주 멘토링 노트 → 이력서 작성으로 이어진다.

이력서 작성 예시

  • 지나치게 길지 않게 요약한다.
  • 주변 상황을 묘사하기보다는 핵심 내용을 간결히 전달한다.

모니터링

애플리케이션 개발 후, 안정적이고 효율적인 운영을 위해 모니터링은 필수적이다. 모니터링을 통해 시스템 성능, 가용성, 안정성을 지속적으로 감시하고 문제를 조기에 발견할 수 있다.


모니터링 범위

  • 서버: CPU, 메모리, 디스크 사용량 등 서버 자원 사용
  • 애플리케이션: 상태, 성능, 로그 등
  • 네트워크: 트래픽, 대역폭 사용량, 네트워크 지연 등
  • 데이터베이스: 쿼리 성능, 연결 수, 데이터베이스 사용량등
  • 보안: 이벤트, 침입 시도, 취약점 등

Actuator

헬스 체크, 메트릭, 환경 정보, 로그 정보 등 애플리케이션의 중요한 정보를 쉽게 확인할 수 있게 해준다.


엔드포인트

application 파일에서 활성화할 수 있다. 보안 위험을 고려해 필요한 엔드포인트와 상세 정보만 노출하는 것을 권장한다. Actuator 엔드포인트의 포트를 따로 지정하거나 Security를 이용해 인가 처리를 할 수 있다.

  • /actuator/health : 애플리케이션의 상태 확인
  • /actuator/metrics : 애플리케이션의 메트릭 정보
  • /actuator/loggers : 로깅 설정 조회 및 변경
  • /actuator/env : 환경 변수 및 설정 정보
  • /actuator/beans : 애플리케이션 컨텍스트의 Bean 확인
  • /actuator/threaddump : 스레드 덤프 확인
  • /actuator/httptrace : 최근 HTTP 요청 및 응답 추적

Prometheus

Prometheus는 오픈소스 시스템 모니터링 및 경고 도구이다. 타깃 시스템에서 메트릭 데이터를 수집하고 저장하는 핵심 컴포넌트다.


구성 요소

  • 시계열 데이터베이스 (TSDB): 시간에 따라 변화하는 데이터를 저장하는 DB이다.
  • Exporter: 메트릭 데이터를 Prometheus가 이해할 수 있는 형식으로 변환한다.
  • Pushgateway: 비지속 작업의 메트릭 데이터를 푸시 가능하다.
  • Alertmanager: 다양한 방법으로 알림을 관리할 수 있는 도구다.
  • Grafana: Prometheus 데이터를 대시보드 형태로 시각화하는 도구이다.

Grafana

Grafana는 다양한 데이터 소스를 시각화하고 분석하는 오픈소스 도구이다.


주요 기능

  • 대시보드 구성: 다양한 그래프, 차트, 게이지 등 으로 시각적으로 표현한다.
  • 데이터 소스 지원: Prometheus, InfluxDB, Elasticsearch 등 다양한 데이터 소스를 제공한다.
  • 알림 설정: 특정 조건에 따라 알림을 보낼 수 있다.
  • 플러그인 확장: 다양한 플러그인을 통해 기능 확장이 가능하다.
  • 사용자 관리: 접근 권한을 설정하여 보안을 유지한다.

로그 모니터링

Loki

Grafana Labs에서 개발한 로그 집계 시스템이다. Prometheus의 메트릭 수집과 유사하게 로그 데이터를 수집하고, 쿼리할 수 있도록 설계되어있다. 라벨 기반의 메타데이터를 사용하여 로그를 효율적으로 검색할 수 있는 특징이 있다.


보안

CORS

동일 출처 정책(Same-Origin Policy)

보안 매커니즘으로, 웹 브라우저가 스크립트가 로드된 출처와 동일한 출처의 리소스만 접근할 수 있도록 제한한다. 웹 애플리케이션에서는 기본적으로 동일 출처 정책에 따라 동작한다. 출처는 스키마, 호스트, 포트의 조합으로 정의된다.


CORS가 필요한 상황

  • SPA와 같이 클라이언트 중심의 웹 애플리케이션은 다른 도메인에서 호스팅되는 API를 호출해야 한다.
  • 이미지, 스타일시트, 스크립트, 폰트 등의 리소스는 여러 도메인 간에 공유된다.

Preflight

브라우저가 실제 요청을 보내기 전에 서버에 요청할 권한이 있는지 확인하는 과정이다.

  • HTTP 메소드가 단순 요청이 아닐때(GET, HEAD, POST 이외)
  • 커스텀 헤더 또는 특정 표준 헤더를 사용할 때
  • 특정 Content-Type을 사용할때(application/json 포함)

CORS 설정시 주의사항

보안적인 측면

  • 신뢰할 수 없는 출처를 허용하지 않도록 주의해야 한다.
  • allowedOrigins에 와일드카드를 사용하면 모든 출처에서의 요청을 허용하므로 주의해야한다.
  • 민감한 정보를 보호하기 위해 Access-Control-Allow-Credentials를 신중하게 설정해야한다.

성능적인 측면

  • Preflight 요청이 빈번하면 성능 저하가 발생할 수 있으므로, Access-Control-Max-Age를 설정하면 Preflight 요청을 캐싱할 수 있다.

전역으로 CORS 설정하기

@Configuration
public class WebConfig {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOrigins("http://localhost:3000")
                        .allowedMethods("GET", "POST", "PUT", "DELETE")
                        .allowCredentials(true)
                        .maxAge(3600);
            }
        };
    }
}

컨트롤러 레벨로 CORS 설정하기

@CrossOrigin(origins = "http://localhost:3000")


XSS (Cross-Site Scripting)

XSS는 사용자가 웹 애플리케이션의 취약점을 이용해 악성 스크립트를 실행하는 공격이다.


방어 기법

  • 입력 검증 및 인코딩: 사용자 입력을 철저히 검증하고 적절히 인코딩한다.
  • CSP(Content Security Policy): 허용된 콘텐츠 소스를 명시한다.
  • HTTPOnly 쿠키 사용: JavaScript에서 접근하지 못하도록 설정한다.

SQL Injection

SQL Injection은 사용자 입력을 통해 악의적인 SQL 쿼리를 삽입하여 데이터베이스를 조작하는 공격이다.


방어 기법

  • Prepared Statements를 사용하여 쿼리의 파라미터화를 보장한다.
  • 최소 권한 원칙을 준수하여 DB 사용자 권한을 제한한다.

그 외 보안 문제들

  • Open Redirect
  • Directory Traversal
  • Clickjacking
  • Sensitive Data Exposure
  • Insecure Deserialization
  • Insufficient Logging & Monitoring

실습자료