반응형 분류 전체보기438 [BOJ] 15657번: N과 M (8) https://www.acmicpc.net/problem/15657* 백트래킹: "경로를 탐색하다가 해가 될 가능성이 없으면 즉시 되돌아가 다른 경로를 탐색하는" 알고리즘문제 정리N개의 자연수 중에서 M개를 고른 수열: N개의 주어진 숫자들 중에서 M개를 선택하여 수열을 만듭니다.같은 수를 여러 번 골라도 된다: 중복 선택이 허용됩니다.고른 수열은 비내림차순이어야 한다: A1≤A2≤⋯≤AM 와 같이, 뒤에 오는 숫자는 앞에 오는 숫자보다 작으면 안 됩니다.수열은 사전 순으로 증가하는 순서로 출력: 최종 결과도 사전 순으로 정렬되어야 합니다. (이 조건은 입력으로 주어진 N개의 수를 미리 정렬하고, DFS 탐색 시 올바른 순서로 탐색하면 자동으로 만족됩니다.)백트래킹의 적용 원리백트래킹은 "경로를 탐.. 2025. 6. 11. 정적, 동적 IP 주소 할당 방식 네트워크에서 호스트에게 IP를 할당하는 방식은 크게 정적 할당 방식과 동적 할당 방식이 존재합니다.정적 할당 방식정적 할당 방식은 호스트에게 IP를 할당할 때 수동으로 설정하는 것을 의미합니다. 일반적으로 정적으로 IP를 할당하기 위해서는 부여하고자 하는 IP 주소, 자신의 네트워크의 서브넷마스크, 자신의 게이트웨이, DNS 주소가 필요합니다. 만약, IP 주소를 정적으로만 할당한다면 호스트의 수가 많아질수록 IP 할당이 번거로워질 수 있으며, 중복 IP를 입력하는 등 실수를 유발할 수 있습니다. 이러한 경우에 동적 할당 방식을 사용할 수 있는데요.동적 할당 방식동적 할당은 호스트 IP를 자동으로 할당하는 방식이라는 점에서 정적 할당 방식과 차이가 있습니다. 동적 할당 방식은 주로 DHCP(Dynamic.. 2025. 6. 11. 단일 장애 지점(SPOF) 단일 장애 지점(Single Point of Failure, SPOF) 이란 전체 시스템에서 제대로 동작하지 않는 경우, 전체 시스템이 중단되는 특정 구성 요소를 의미합니다. 서버와 네트워크, 프로그램 등 정보 시스템이 정상적으로 사용할 수 있는 정도를 가용성(Availability) 이라고 합니다. 가용성은 정상적인 사용 시간(Uptime)을 전체 사용 시간(Uptime+Downtime)으로 나누어 구할 수 있습니다. 이때, 가용성이 99.999% 처럼 높은 경우에 고가용성(High Availability, HA) 이라 합니다. 시스템이 고가용성을 만족하기 위해서는 SPOF를 식별하고, 개선하는 작업이 필요합니다.SPOF 식별 및 개선1. API Server 1대를 운용합니다.2. DB는 Master .. 2025. 6. 10. JWT 특징과 주의 사항 JWT(Json Web Token) 은 통신 정보를 JSON 형식을 사용하여 안전하게 전송하기 위해 사용됩니다. JWT는 토큰 자체에 정보가 포함되어 있는 클레임 기반 토큰입니다. 일반적인 애플리케이션에서 JWT는 주로 인증과 인가를 구현하기 위해 사용됩니다. JWT는 헤더, 페이로드, 시그니처로 구분됩니다.헤더에는 토큰의 암호화 알고리즘이나 타입을 가집니다.페이로드에는 데이터(만료일, 사용자 정보 등)을 가집니다.시그니처는 헤더와 페이로드가 변조되지 않았는지 판단하기 위해 사용됩니다. 헤더와 페이로드를 비밀 키를 사용하여 헤더에 명시된 암호화 알고리즘으로 암호화하여 시그니처가 만들어집니다.JWT를 사용하여 인가를 구현하는 경우, 클레임 기반 토큰의 특성 덕분에 세션 기반 인증에 비해서 사용자 정보를 조.. 2025. 6. 9. 트랜잭셔널 아웃박스 패턴 트랜잭셔널 아웃박스 패턴(Transactional Outbox Pattern) 은 분산 시스템에서 단일 작업에 데이터베이스 쓰기 작업과 메시지 혹은 이벤트 발행이 모두 포함된 경우 발생하는 이중 쓰기 문제를 해결하기 위해서 사용할 수 있습니다. 예를 들어, 다음과 같은 코드가 존재한다고 가정하겠습니다.@Transactionalpublic void propagateSample() { Product product = new Product("신규 상품"); productRepository.save(product); eventPublisher.propagate(new NewProductEvent(product.getId()));}위와 같이 신규 상품을 생성하고, 이벤트를 발행하는 코드를 트랜잭션 AO.. 2025. 6. 5. CSRF 공격 사이트 간 요청 위조(Cross-site Request Forgery, CSRF) 공격은 사용자가 자신의 의지와 상관없이 공격자가 의도한 행위를 특정 웹사이트에 요청하도록 하는 것을 의미합니다.예를 들어, 특정 사용자가 매일메일 서비스에서 로그인을 수행하고 서버는 해당 사용자에 대한 세션 ID를 Set-Cookie 헤더에 담아서 응답합니다. 그리고, 클라이언트는 쿠키를 저장하고 요청마다 자동으로 전달합니다.이러한 사용자를 대상으로 공격자는 악성 스크립트가 담긴 페이지에 접속하도록 유도합니다. 유도하는 방법은 다양한데요. 악성 스크립트가 포함된 메일이나 게시글을 작성하거나, 악성 스크립트가 포함된 공격자 사이트 접속 링크를 전달하는 것이 대표적입니다.사용자가 악성 스크립트가 포함된 페이지에 접속하게 되면 .. 2025. 6. 4. NAT 기능을 사용하는 이유 "공인 IP 주소 사설 IP 주소 변환" IP 주소는 공인 IP 주소(Public IP Address) 와 사설 IP 주소(Private IP Address) 가 존재합니다. 공인 IP 주소는 고유하며, 사설 IP 주소는 고유하지 않고 특정 사설 네트워크에서만 사용됩니다. 이때, 사설 네트워크는 외부 네트워크에 공개되지 않은 네트워크를 의미합니다. 사설 IP는 일반적으로 라우터가 할당하며, 할당받은 사설 IP 주소는 사설 네트워크 상에서만 유효합니다.사설 IP 주소만을 가지고 외부 네트워크와 통신하기 어렵습니다. 이 문제를 해결하기 위해서 라우터 혹은 공유기의 NAT(Network Address Translation) 기능을 사용하는데요. NAT는 IP 주소를 변환하는 기술입니다. 해당 기능을 사용하면.. 2025. 6. 2. 연결 리스트 연결 리스트(Linked List) 는 리스트 내의 요소(노드)들을 포인터로 연결하여 관리하는 선형 자료구조입니다. 각 노드는 데이터와 다음 요소에 대한 포인터를 가지고 있는데요. 이때, 첫 번째 노드를 HEAD, 마지막 노드를 TAIL 이라고 합니다. 연결 리스트는 메모리가 허용하는 한 요소를 계속 삽입할 수 있으며, 시각 복잡도는 탐색에는 O(n), 노드 삽입과 삭제는 O(1)라는 특징을 가지고 있습니다. 해당 아이디어로 파생된 자료구조는 단일 연결 리스트(Singly Linked List), 이중 연결 리스트(Doubly Linked List, Circular Linked List)가 존재합니다.배열은 순차적인 데이터가 들어가기 때문에 메모리 영역을 연속적으로 사용합니다. 반면, 연결 리스트는 메모.. 2025. 5. 30. 함수형 프로그래밍 함수형 프로그래밍(Functional Programming) 은 객체지향 패러다임과 마찬가지로 하나의 프로그래밍 패러다임입니다. 객체지향 프로그래밍은 움직이는 부분을 캡슐화하여 코드의 이해를 도우며, 함수형 프로그래밍은 움직이는 부분을 최소화하여 코드 이해를 돕습니다. 이 둘은 상충하는 개념이 아니며, 함께 조화되어 사용될 수 있습니다. 함수를 합성하여 복잡한 프로그램을 쉽게 만들고, 부수 효과를 공통적인 방법으로 추상화하는 것이 함수형 프로그래밍의 핵심 개념입니다.부수 효과(Side Effect) 는 값을 반환하는 것 이외에 부수적으로 발생하는 일들을 의미해요. 변수를 수정하거나, I/O 작업 등이 해당됩니다. 사람이 한 번에 인지할 수 있는 작업은 한정되어 있습니다. 부수 효과가 많은 코드는 이해하고.. 2025. 5. 29. 이전 1 2 3 4 5 6 ··· 49 다음 728x90 반응형