백트래킹(Back Tracking) 백트래킹이란 해를 찾는 도중에 올바른 해가 아니면 전 상태로 되돌아가서 다시 해를 찾아가는 기법이다. 즉, DFS 와 같이 모든 경우의 수를 탐색하지만 중간에 올바르지 않은 해가 나올 경우 해당 가지를 가지치기해 하위 트리는 더 이상 확인하지 않는 것을 말한다. 이러한 가지치기는 불필요한 부분을 쳐내고 경우의 수를 최대한 줄여 최적화하가 가능합니다. 그렇기 때문에 가지치기를 얼마나 잘하느냐에 따라서 효율성이 결정된다. 즉, 시간이 단축된다는 말이다. 언제 사용하면 좋을까? 백트래킹은 결국 모든 상황을 확인하는 전수 검사를 기반으로 하고 있기 때문에, 모든 상황에 대해서 직접 Brute Force 해야하는 경우 고려해볼 수 있다. 특히, 시간제한이 있거나 N이 작아 직접..
Java 에서 외부 프로세스를 실행하는 기능은 주의해서 다루지 않으면 애플리케이션을 불안정하게 만든다. 해커가 해당 애플리케이션을 공격할 때 RCE가 발생할 포인트가 될 수 있기 때문이다. Java.lang.Process 클래스 외부 프로세스와의 접점인 Process 객체는 java.lang.Runtime 클래스와 java.lang.ProcessBuilder 클래스를 통해서 얻어낼 수 있다. 그에 대한 코드는 다음과 같다. public class ProcessTest { public static void main(String[] args) { String[] command = new String[] {"echo", "ch4njun"}; ProcessTest.byRuntime(command); Proces..
보호되어 있는 글입니다.
www.youtube.com/watch?v=RP_f5dMoHFc&t=1004s 본 내용은 위 유튜브 영상을 참고해 제작되었음을 알립니다. REST 란? REpresentational State Transfer 의 약자이다. 이렇게 보면 무슨 의미인지 정확히 모르기 때문에 한 가지 내용을 살펴보자. Roy T. Fielding이 HTTP를 정립하고 명세에 기능을 더하고 기존의 기능을 고쳐야하는 상황에 놓였는데, 이렇게 고치게되면 기존에 구축되어있는 웹 서버와의 호환성에 영향을 미칠 수밖에 없다. 그래서 "어떻게하면 기존 웹을 망가뜨리지 않고 진보할 수 있을까?" 라는 질문에 나온 답이 HTTP Object Model 이고, 1998년에 REST로 최초로 공개가 된다. 기존에 나온 SOAP를 기반으로 나온 ..
이번에는 기본적이지만 조금 큰 사이즈의 인프라를 구축해보려 한다. 기본적인 흐름은 다음과 같다. 사용자는 Route 53에 등록된 Domain을 통해 접근한다. Route 53은 매칭되는 Alias를 통해 CloudFront에 접근한다. CloudFront는 동적인 Path라면 IGW(Internet Gateway)를 통해 ALB의 Origin으로, 정적인 Path라면 S3의 Origin으로 Forward한다. ALB에 의해서 Auto Scaling되는 EC2들에 로드밸런싱을 하고, 이 Auto Scaling Group(이하 ASG)는 동일한 EBS를 공유한다. RDS는 Master/Standby로 서로 다른 리전에 구성해 가용성을 높인다. 관리자는 키페어를 사용한 SSH를 통해 Public Subnet..
시나리오 1) 사용자는 CloudFront에서 제공하는 Domain Name을 통해 Request를 보낸다. 예를 들면, http://cloudfront.example.com/test.mp4와 같은 Request! 2) CloudFront는 Behavior 목록에서 /test.mp4에 일치하는 Path Pattern을 찾는다. 3) 찾은 항목의 Origin에 설정된 Origin Domain Name & Path 로 전달한다. 사용자는 S3 Bucket에 직접 접근할 수 없고, CloudFront를 통해서만 접근할 수 있다. 이때 CloudFront에 보호 계층을 추가해 전체적인 인프라 구성에 보안성을 향상시킬 수 있다. 자세한 내용은 CloudFront 포스팅을 참고하자. ch4njun.tistory.c..