hotchpotch/wikipedia-multilingual-ir-pairs huggingface dataset:
슈바르츠실트 좌표 계량 가설 풀이
자기중력 텐서는 항등적으로 사라지며, 지형중력 텐서는 ( 가 비회전이라는 사실을 사용하여) 공간 초단면의 3차원 리만 텐서를 결정할 수 있는데, 이는 다음과 같다.
이것은 모든 로렌츠 다양체에 대해 유효하지만, 일반 상대성이론에서 전자기중력 텐서는 우리 프레임에 해당하는 관찰자들이 측정한 작은 물체에 대한 조석 응력을 제어하고, 자기중력 텐서는 우리 프레임에 해당하는 관찰자들이 측정한 회전하는 물체에 대한 스핀-스핀 힘을 제어한다.
우리 코프레임 필드의 쌍대 프레임 필드는 다음과 같다.
여기서  인수가 세 개의 정규 직교 공간꼴 벡터 필드 중 첫 번째에만 곱해진다는 사실은 슈바르츠실트 도표가 공간적으로 등방성이지 않다는 것을 의미한다 (국소적으로 평탄한 시공간의 자명한 경우는 제외). 오히려, 빛 원뿔은 (반경 방향으로 납작해지거나) (반경 방향으로 길어진) 형태로 나타난다. 이것은 물론 슈바르츠실트 도표가 각 내포된 둥근 구 내의 거리를 올바르게 나타내지만, 반경 좌표는 반경 고유 거리를 충실하게 나타내지 않는다는 것을 말하는 또 다른 방법이다.
슈바르츠실트 좌표 슈바르츠실트 도표를 허용하는 몇 가지 정확한 해
이러한 방식으로 얻을 수 있는 정확한 해의 몇 가지 예는 다음과 같다.
슈바르츠실트 좌표 일반화
비정적이지만 구형 대칭인 시공간을 고려하는 것은 자연스러운 일이며, 시공간 계량이 다음 형태를 취하는 일반화된 슈바르츠실트 도표를 사용한다.
다른 방향으로 일반화하여, 둥근 2-구에 다른 좌표계를 사용하여 예를 들어 때때로 유용한 스테레오그래픽 슈바르츠실트 도표를 얻을 수 있다.
자료형 추론
자료형 추론(資料型推論, Type inference) 또는 자료형 재구성(type reconstruction)(pp. 320)은 형식 언어에서 식의 자료형을 자동으로 감지하는 것을 의미한다. 여기에는 프로그래밍 언어와 수학적 자료형 체계뿐만 아니라 컴퓨터 과학 및 언어학의 일부 분야에서 자연어도 포함된다.
자료형 가능성(Typeability)은 때때로 자료형 추론과 거의 동의어로 사용되지만, 일부 저자는 예/아니오 답변을 가지는 결정 문제로서의 자료형 가능성과 항에 대한 실제 자료형을 계산하는 자료형 추론을 구별한다.
자료형 추론 비기술적 설명
유형화된 언어에서 용어의 자료형은 해당 언어에서 용어가 사용될 수 있는 방식과 사용될 수 없는 방식을 결정한다. 예를 들어, 영어와 "노래하다 _"라는 구문에서 빈칸을 채울 수 있는 용어를 생각해 보자. "노래"라는 용어는 노래할 수 있는 자료형이므로 빈칸에 넣어 의미 있는 구문인 "노래를 부르다"를 형성할 수 있다. 반면에 "친구"라는 용어는 노래할 수 있는 자료형이 아니므로 "친구를 노래하다"는 무의미하다. 기껏해야 은유일 수 있으며, 자료형 규칙을 구부리는 것은 시적 언어의 특징이다.
용어의 자료형은 해당 용어가 포함된 연산의 해석에도 영향을 미칠 수 있다. 예를 들어, "노래"는 구성 가능한 자료형이므로 "노래를 쓰다"라는 구문에서 생성되는 것으로 해석한다. 반면에 "친구"는 수령자 자료형이므로 "친구에게 쓰다"라는 구문에서 받는 사람으로 해석한다. 일반적인 언어에서 "노래를 쓰다"가 노래에 편지를 보내는 것을 의미하거나 "친구에게 쓰다"가 종이에 친구를 스케치하는 것을 의미한다면 우리는 놀랄 것이다.
자료형 추론 비기술적 설명
서로 다른 자료형을 가진 용어라도 실질적으로 동일한 것을 지칭할 수 있다. 예를 들어, "빨랫줄을 걸다"는 그것을 사용하는 것으로 해석하지만, "목줄을 걸다"는 그것을 치우는 것으로 해석할 수 있다. 비록 문맥상 "빨랫줄"과 "목줄"이 다른 시점에 같은 밧줄을 지칭할 수 있더라도 말이다.
자료형은 종종 개체가 너무 일반적으로 고려되는 것을 방지하기 위해 사용된다. 예를 들어, 자료형 시스템이 모든 숫자를 동일하게 취급한다면, 프로그래머가 실수로 `4`가 "4초"를 의미해야 하지만 "4미터"로 해석되는 코드를 작성하면 런타임에 문제가 발생할 때까지 실수에 대한 경고를 받지 못할 것이다. 측정 단위를 자료형 시스템에 통합함으로써 이러한 실수를 훨씬 일찍 감지할 수 있다. 다른 예로, 러셀의 역설은 모든 것이 집합의 원소가 될 수 있고 모든 술어가 집합을 정의할 수 있을 때 발생하지만, 더 신중한 자료형 지정은 역설을 해결하는 여러 가지 방법을 제공한다. 사실 러셀의 역설은 자료형 이론의 초기 버전을 촉발시켰다.
용어가 자료형을 얻는 몇 가지 방법이 있다:
자료형 추론 비기술적 설명
자료형은 명시적으로 선언될 수 있다. 예를 들어, 프로그래머는 코드에 `delay: seconds := 4`와 같은 문을 작성할 수 있다. 여기서 콜론은 용어에 자료형을 표시하는 관습적인 수학적 기호이다. 즉, 이 문은 `delay`를 값 `4`로 설정할 뿐만 아니라, `delay: seconds` 부분은 `delay`의 자료형이 초 단위의 시간량임을 나타낸다.
자료형은 문맥에서 추론될 수 있다. 예를 들어, "I bought it for a song"이라는 구문에서 "a song"이라는 용어에 "노래할 수 있는" 및 "구성 가능한"과 같은 자료형을 부여하려고 하면 무의미해지는 반면, "통화량"이라는 자료형은 작동한다는 것을 알 수 있다. 따라서 우리는 굳이 들을 필요 없이 여기에서 "song"이 영어 관용구인 "for a song"에서처럼 "거의 아무것도 아님"을 의미하며, "가사가 있는 음악 작품"을 의미하지 않는다고 결론 내린다.
특히 프로그래밍 언어에서는 컴퓨터에 사용할 수 있는 공유된 배경 지식이 많지 않을 수 있다. 명시적으로 자료형이 지정된 언어에서는 대부분의 자료형을 명시적으로 선언해야 한다는 것을 의미한다. 자료형 추론은 이러한 부담을 덜어주어, 컴퓨터가 문맥에서 추론할 수 있어야 하는 자료형을 저자가 선언하지 않아도 되게 한다.
자료형 추론 자료형 검사 대 자료형 추론
자료형 지정에서 표현식 E는 자료형 T와 대립되며, 형식적으로 E : T로 작성된다. 일반적으로 자료형 지정은 어떤 맥락 내에서만 의미가 있으며, 여기서는 생략한다.
이러한 설정에서 다음 질문들이 특히 중요하다:
단순형 람다 대수의 경우, 세 가지 질문 모두 결정가능하다. 그러나 더 표현력이 뛰어난 자료형이 허용될 때는 상황이 그리 편안하지 않다.
자료형 추론 프로그래밍 언어의 자료형
자료형은 일부 강력한 정적 자료형 지정 언어에 존재하는 기능이다. 일반적으로 함수형 프로그래밍 언어의 특징인 경우가 많다. 자료형 추론을 포함하는 언어로는 C (C23부터), C++ (C++11부터), C# (버전 3.0부터), 채플, 클린, 크리스탈, D, 다트, F#, 프리베이직, Go, 하스켈, 자바 (버전 10부터), 줄리아, 코틀린, ML, 님, OCaml, 오파, Q#, RPython, 러스트, 스칼라, 스위프트, 타입스크립트, 발라, Zig, 그리고 비주얼 베이직 (버전 9.0부터) 등이 있다.
대부분의 언어는 단순한 형태의 자료형 추론을 사용한다. 힌들리-밀너 자료형 체계는 더 완전한 자료형 추론을 제공할 수 있다. 자료형을 자동으로 추론하는 기능은 많은 프로그래밍 작업을 더 쉽게 만들며, 프로그래머가 자료형 주석을 생략하면서도 자료형 검사를 허용한다.
자료형 추론 프로그래밍 언어의 자료형
일부 프로그래밍 언어에서는 모든 값이 컴파일 타임에 명시적으로 선언된 자료형을 가지며, 특정 표현식이 런타임에 취할 수 있는 값을 제한한다. 점점 더 JIT 컴파일은 런타임과 컴파일 타임의 구분을 모호하게 만든다. 그러나 역사적으로 값의 자료형이 런타임에만 알려져 있다면 이러한 언어는 동적 자료형이다. 다른 언어에서는 표현식의 자료형이 컴파일 타임에만 알려져 있다. 이러한 언어는 정적 자료형이다. 대부분의 정적 자료형 언어에서는 함수의 입력 및 출력 자료형과 지역 변수의 자료형을 일반적으로 자료형 주석으로 명시적으로 제공해야 한다. 예를 들어, ANSI C에서는 다음과 같다:
이 함수 정의의 시그니처인 `int add_one(int x)`는 `add_one`이 하나의 인수인 정수형을 취하고 정수를 반환하는 함수임을 선언한다. `int result;`는 지역 변수 `result`가 정수임을 선언한다. 자료형 추론을 지원하는 가상의 언어에서는 코드가 대신 다음과 같이 작성될 수 있다:
자료형 추론 프로그래밍 언어의 자료형
이것은 언어 다트에서 코드가 작성되는 방식과 동일하지만, 아래에 설명된 몇 가지 추가 제약이 적용된다. 컴파일 타임에 모든 변수의 자료형을 추론하는 것이 가능하다. 위 예제에서 컴파일러는 상수 `1`이 정수 자료형이므로 `result`와 `x`가 정수 자료형임을 추론할 것이며, 따라서 `add_one`은 `int -> int` 함수가 된다. 변수 `result2`는 유효한 방식으로 사용되지 않으므로 자료형이 없을 것이다.
마지막 예제가 작성된 가상의 언어에서 컴파일러는 반대되는 정보가 없는 한 `+`가 두 개의 정수를 받아 하나의 정수를 반환한다고 가정할 것이다. (이것은 예를 들어 OCaml에서 작동하는 방식이다.) 여기에서 자료형 추론기는 `x + 1`의 자료형이 정수임을 추론할 수 있으며, 이는 `result`가 정수이고 따라서 `add_one`의 반환 값이 정수임을 의미한다. 마찬가지로 `+`는 두 인수가 동일한 자료형이어야 하므로 `x`는 정수여야 하며, 따라서 `add_one`은 하나의 정수를 인수로 받는다.
자료형 추론 프로그래밍 언어의 자료형
그러나 다음 줄에서 result2는 십진수 `1.0`을 부동소수점 연산으로 더하여 계산되는데, 이는 정수 및 부동소수점 표현식 모두에 `x`를 사용하는 데 충돌을 일으킨다. 이러한 상황에 대한 올바른 자료형 추론 알고리즘은 1958년부터 알려져 있었고, 1982년부터 정확하다는 것이 알려져 있었다. 이 알고리즘은 이전 추론을 재검토하고 처음부터 가장 일반적인 자료형을 사용한다. 이 경우 부동소수점 자료형이다. 그러나 이는 처음부터 부동소수점을 사용하면 정수 자료형에서는 존재하지 않았을 정밀도 문제를 야기할 수 있다는 등 해로운 영향을 미칠 수 있다.
그러나 종종 이러한 상황에서 역추적할 수 없고 대신 오류 메시지를 생성하는 퇴행적 자료형 추론 알고리즘이 사용된다. 자료형 추론이 항상 알고리즘적으로 중립적이지 않을 수 있기 때문에 이 동작이 더 바람직할 수 있다. 이는 이전의 부동소수점 정밀도 문제에서 알 수 있다.
자료형 추론 프로그래밍 언어의 자료형
중간 정도의 일반성을 가진 알고리즘은 result2를 부동소수점 변수로 암시적으로 선언하고, 덧셈은 `x`를 부동소수점으로 암시적으로 변환한다. 이는 호출 컨텍스트에서 부동소수점 인수를 제공하지 않는 경우 올바를 수 있다. 이러한 상황은 형 변환을 포함하지 않는 자료형 추론과, 종종 제한 없이 데이터를 다른 자료형으로 강제 변환하는 암시적 형 변환 간의 차이를 보여준다.
마지막으로, 복잡한 자료형 추론 알고리즘의 중요한 단점은 결과적인 자료형 추론 해결책이 사람에게 명확하지 않을 수 있다는 점이다(특히 역추적 때문에). 이는 코드가 주로 사람이 이해할 수 있도록 의도되었기 때문에 해로울 수 있다.
최근 JIT 컴파일의 등장으로 다양한 호출 컨텍스트에서 제공되는 인수의 자료형이 컴파일 타임에 알려져 동일한 함수의 많은 컴파일된 버전을 생성할 수 있는 하이브리드 접근 방식이 가능해졌다. 각 컴파일된 버전은 서로 다른 자료형 세트에 최적화될 수 있다. 예를 들어, JIT 컴파일은 add_one의 컴파일된 버전을 최소 두 개 이상 가질 수 있도록 한다:
자료형 추론 기술적 설명
자료형 추론은 컴파일 시점에 표현식의 자료형을 부분적으로 또는 완전히 자동으로 추론하는 기능이다. 컴파일러는 명시적인 자료형 주석이 주어지지 않아도 변수의 자료형이나 함수의 자료형 시그니처를 종종 추론할 수 있다. 자료형 추론 시스템이 충분히 강력하거나 프로그램이나 언어가 충분히 단순하다면 많은 경우 프로그램에서 자료형 주석을 완전히 생략하는 것이 가능하다.
표현식의 자료형을 추론하는 데 필요한 정보를 얻기 위해 컴파일러는 하위 표현식에 주어진 자료형 주석을 집계하고 후속적으로 축소하거나, 다양한 원자 값의 자료형(예: true : Bool; 42 : Integer; 3.14159 : Real; 등)을 암시적으로 이해함으로써 이 정보를 수집한다. 컴파일러는 표현식이 암시적으로 자료형이 지정된 원자 값으로 최종적으로 축소되는 것을 인식함으로써 자료형 추론 언어용 컴파일러가 자료형 주석 없이 프로그램을 완전히 컴파일할 수 있다.
자료형 추론 기술적 설명
고차 프로그래밍 및 다형성의 복잡한 형태에서는 컴파일러가 그만큼 많이 추론하는 것이 항상 가능하지 않으며, 모호성을 해소하기 위해 때때로 자료형 주석이 필요하다. 예를 들어, 다형적 재귀를 사용한 자료형 추론은 결정 불가능한 것으로 알려져 있다. 또한 명시적인 자료형 주석은 컴파일러가 추론했던 것보다 더 구체적인(더 빠르거나 더 작은) 자료형을 사용하도록 강제함으로써 코드를 최적화하는 데 사용될 수 있다.
일부 자료형 추론 방법은 제약 충족 또는 이론 모듈로 만족 가능성을 기반으로 한다.
자료형 추론 고수준 예제
예를 들어, 하스켈 함수 map은 리스트의 각 요소에 함수를 적용하며 다음과 같이 정의될 수 있다.
(하스켈에서 :는 Cons를 나타내며, 머리 요소와 리스트 꼬리를 더 큰 리스트로 구조화하거나 비어있지 않은 리스트를 머리 요소와 꼬리로 분해한다. 이는 수학이나 이 문서의 다른 곳에서처럼 "자료형이 ~이다"를 의미하지 않는다. 하스켈에서는 "자료형이 ~이다" 연산자를 대신 ::로 작성한다.)
map 함수에 대한 자료형 추론은 다음과 같이 진행된다. map은 두 개의 인수를 받는 함수이므로 자료형은 a -> b -> c 형태여야 한다. 하스켈에서 []와 (first:rest) 패턴은 항상 리스트와 일치하므로 두 번째 인수는 리스트 자료형이어야 한다: 일부 자료형 d에 대해 b = [d]. 첫 번째 인수 f는 first 인수에 적용되며, 이 인수는 리스트 인수의 자료형에 해당하는 자료형 d를 가져야 하므로 일부 자료형 e에 대해 f :: d -> e (::는 "자료형이 ~이다"를 의미한다). 마지막으로 map f의 반환 값은 f가 생성하는 것의 리스트이므로 [e]이다.
자료형 추론 고수준 예제
이러한 부분을 조합하면 map :: (d -> e) -> [d] -> [e]가 된다. 자료형 변수에 특별한 것은 없으므로 다음과 같이 재지정할 수 있다.
추가 제약이 적용되지 않으므로 이것이 가장 일반적인 자료형임이 밝혀졌다. map의 추론된 자료형은 매개변수적으로 다형성이므로, f의 인수 및 결과의 자료형은 추론되지 않고 자료형 변수로 남는다. 따라서 map은 호출할 때마다 실제 자료형이 일치하는 한 다양한 자료형의 함수와 리스트에 적용될 수 있다.
자료형 추론 상세 예제
컴파일러와 같은 프로그램이 사용하는 알고리즘은 위에 비공식적으로 구조화된 추론과 동등하지만, 약간 더 장황하고 체계적이다. 정확한 세부 사항은 선택된 추론 알고리즘에 따라 다르지만(가장 잘 알려진 알고리즘은 다음 섹션 참조), 아래 예제는 일반적인 아이디어를 제공한다. 다시 map의 정의로 시작한다.
(다시 말하지만, 여기서 :는 하스켈 리스트 생성자이며, 하스켈에서 ::로 표기되는 "자료형이 ~이다" 연산자가 아님을 기억하라.)
먼저, 각 개별 항에 대해 새로운 자료형 변수를 만든다:
그런 다음 이러한 항으로 구성된 하위 표현식에 대해 새로운 자료형 변수를 만들고, 호출되는 함수의 자료형을 그에 따라 제한한다:
또한 각 방정식의 왼쪽과 오른쪽이 서로 통합되도록 제한한다: `κ ~ [δ]` 및 `μ ~ ο`. 통합 시스템을 모두 풀면 다음과 같다:
그런 다음 더 이상 변수를 제거할 수 없을 때까지 대입한다. 정확한 순서는 중요하지 않다. 코드가 자료형 검사를 통과하면 어떤 순서든 동일한 최종 형식으로 이어진다. `ο`를 `μ`로, `[δ]`를 `κ`로 대입하는 것부터 시작해 보자:
자료형 추론 상세 예제
`ζ`를 `η`로, `[ζ]`를 `θ`와 `λ`로, `ι`를 `ν`로, `[ι]`를 `ξ`와 `ο`로 대입한다. · -> ·와 같은 자료형 생성자는 인수에 대해 역변환 가능하므로 이 모든 대입이 가능하다:
`ε`에 `ζ -> ι`를, `α`에 `β -> [γ] -> [δ]`를 대입하고, 마지막에 `α`를 복구할 수 있도록 두 번째 제약을 유지한다.
그리고 마침내 [·]와 같은 자료형 생성자는 역변환 가능하므로 `β`에 `(ζ -> ι)`를, `γ`에 `ζ`를, `δ`에 `ι`를 대입하면 두 번째 제약에 특정한 모든 변수가 제거된다.
더 이상 대입할 수 없으며, 자료형을 재지정하면 map :: (a -> b) -> [a] -> [b]가 된다. 이는 이 세부 사항에 들어가지 않고 찾았던 것과 동일하다.
자료형 추론 힌들리-밀너 자료형 추론 알고리즘
자료형 추론을 수행하는 데 처음 사용된 알고리즘은 현재 비공식적으로 힌들리-밀너 알고리즘이라고 불리지만, 이 알고리즘은 다마스와 밀너에게 제대로 귀속되어야 한다.
또한 전통적으로 자료형 재구성이라고도 불린다.(pp. 320) 항이 힌들리-밀너 자료형 지정 규칙에 따라 올바르게 자료형이 지정되면 규칙은 해당 항에 대한 주된 자료형 지정을 생성한다. 이 주된 자료형 지정을 찾는 과정이 "재구성" 과정이다.
이 알고리즘의 기원은 1958년 해스켈 커리와 로버트 페이스가 고안한 단순형 람다 대수의 자료형 추론 알고리즘이다.
1969년 J. 로저 힌들리는 이 작업을 확장하여 그들의 알고리즘이 항상 가장 일반적인 자료형을 추론한다는 것을 증명했다.
1978년 로빈 밀너는 힌들리의 작업과는 독립적으로 동등한 알고리즘인 알고리즘 W를 제공했다.
1982년 루이스 다마스는 마침내 밀너의 알고리즘이 완전함을 증명하고 다형 참조를 지원하는 시스템으로 확장했다.
자료형 추론 가장 일반적인 자료형 사용의 부작용
설계상 자료형 추론은 적절한 가장 일반적인 자료형을 추론한다. 그러나 많은 언어, 특히 오래된 프로그래밍 언어는 약간 불완전한 자료형 시스템을 가지고 있어 더 일반적인 자료형을 사용하는 것이 항상 알고리즘적으로 중립적이지 않을 수 있다. 일반적인 사례는 다음과 같다:
자료형 추론 자연어 자료형 추론
자료형 추론 알고리즘은 프로그래밍 언어뿐만 아니라 자연어를 분석하는 데에도 사용되었다. 자료형 추론 알고리즘은 일부 문법 귀납 및 자연어용 제약 기반 문법 시스템에도 사용된다.
RAII
자원 획득은 초기화(Resource acquisition is initialization, RAII)는 특정 언어 동작을 설명하기 위해 여러 객체 지향, 정적 자료형 프로그래밍 언어에서 사용되는 프로그래밍 관용구이다. RAII에서 자원을 보유하는 것은 클래스 불변성이며, 객체 수명에 연결된다. 자원 할당 (또는 획득)은 생성자에 의해 객체 생성 (특히 초기화) 중에 이루어지며, 자원 할당 해제 (반환)는 소멸자에 의해 객체 파괴 (특히 마무리) 중에 이루어진다. 다시 말해, 초기화가 성공하려면 자원 획득이 성공해야 한다. 따라서 자원은 초기화가 완료되고 마무리 시작 사이 (자원을 보유하는 것이 클래스 불변성)에 보유되며, 객체가 살아있는 동안에만 보유된다는 것이 보장된다. 그러므로 객체 누수가 없으면 자원 누수도 없다.
RAII는 기원인 C++와 가장 밀접하게 연관되어 있지만, 에이다, 발라, 러스트와도 관련이 있다. 이 기법은 1984년에서 1989년 사이에 주로 비야네 스트롭스트룹과 앤드루 쾨닉에 의해 C++에서 예외 안전 자원 관리를 위해 개발되었으며, 이 용어 자체는 스트롭스트룹이 만들었다.
RAII
이 관용구의 다른 이름으로는 생성자 획득, 소멸자 해제(Constructor Acquires, Destructor Releases, CADRe)가 있으며, 특정 사용 방식은 스코프 기반 자원 관리(Scope-based Resource Management, SBRM)라고 불린다. 이 후자의 용어는 자동 변수의 특수한 경우를 지칭한다. RAII는 자원을 객체 수명에 연결하는데, 이는 스코프 진입 및 종료와 일치하지 않을 수 있다. (특히 자유 저장소에 할당된 변수는 특정 스코프와 무관한 수명을 갖는다.) 그러나 자동 변수에 RAII(SBRM)를 사용하는 것이 가장 일반적인 사용 사례이다.
RAII C++ 예시
다음 C++23 예시는 파일 접근과 뮤텍스 잠금에 대한 RAII 사용법을 보여준다.
이 코드는 예외 안전이다. C++는 자동 저장 기간(지역 변수)을 가진 모든 객체가 해당 스코프를 벗어날 때 생성의 역순으로 소멸됨을 보장하기 때문이다.
따라서 lock과 file 객체의 소멸자는 예외가 발생했는지 여부와 관계없이 함수에서 반환될 때 호출되는 것이 보장된다.
지역 변수는 단일 함수 내에서 여러 자원을 쉽게 관리할 수 있게 한다. 이들은 생성의 역순으로 소멸되며, 객체는 완전히 생성된 경우에만 소멸된다. 즉, 생성자에서 예외가 전파되지 않은 경우에만 소멸된다.
RAII를 사용하면 자원 관리가 크게 단순화되고, 전체 코드 크기가 줄어들며, 프로그램의 정확성을 보장하는 데 도움이 된다. 따라서 RAII는 업계 표준 가이드라인에서 권장하며,
대부분의 C++ 표준 라이브러리는 이 관용구를 따른다.
RAII 장점
RAII가 자원 관리 기법으로서 갖는 장점은 캡슐화, 예외 안전(스택 자원의 경우), 그리고 지역성(획득 및 해제 로직을 서로 가까이 작성할 수 있게 함)을 제공한다는 것이다.
캡슐화는 자원 관리 로직이 각 호출 사이트가 아닌 클래스에서 한 번 정의되기 때문에 제공된다. 예외 안전은 스택 자원(획득된 스코프와 동일한 스코프에서 해제되는 자원)에 대해 자원을 스택 변수(주어진 스코프에 선언된 지역 변수)의 수명에 연결함으로써 제공된다. 예외가 발생하고 적절한 예외 처리가 되어 있는 경우, 현재 스코프를 벗어날 때 실행되는 유일한 코드는 해당 스코프에 선언된 객체의 소멸자이다. 마지막으로, 정의의 지역성은 클래스 정의에서 생성자와 소멸자 정의를 서로 가까이 작성함으로써 제공된다.
따라서 자동 할당 및 회수를 얻기 위해서는 자원 관리가 적절한 객체의 수명에 연결되어야 한다. 자원은 초기화 중에 획득되며, 이 때는 사용 가능하기 전에 사용될 가능성이 없으며, 동일한 객체의 파괴와 함께 해제된다. 이는 오류 발생 시에도 보장된다.
RAII 장점
RAII를 자바에서 사용되는 finally 구문과 비교하면서 스트롭스트룹은 "실제 시스템에서는 자원 종류보다 자원 획득이 훨씬 많기 때문에 '자원 획득은 초기화' 기법이 'finally' 구문 사용보다 적은 코드를 유도한다"고 썼다.
클래스 불변성으로서 RAII는 자원을 획득했다고 가정되는 객체 인스턴스가 실제로 그렇게 했음을 보장한다. 이는 새로 생성된 객체를 사용할 수 있는 상태로 만들기 위한 추가 "설정" 메서드의 필요성(모든 이러한 작업은 생성자에서 수행됨; 마찬가지로, 자원을 해제하기 위한 "종료" 작업은 객체의 소멸자에서 발생함)과 매번 사용하기 전에 인스턴스를 테스트하여 제대로 설정되었는지 확인할 필요성을 제거한다.
RAII 일반적인 용도
RAII 디자인은 다중 스레드 애플리케이션에서 뮤텍스 잠금을 제어하는 데 자주 사용된다. 이 경우 객체는 파괴될 때 잠금을 해제한다. 이 시나리오에서 RAII가 없으면 교착 상태 발생 가능성이 높아지고, 뮤텍스를 잠그는 로직이 잠금을 해제하는 로직과 멀리 떨어져 있게 된다. RAII를 사용하면 뮤텍스를 잠그는 코드는 RAII 객체의 스코프를 벗어날 때 잠금이 해제될 것이라는 로직을 본질적으로 포함한다.
또 다른 일반적인 예는 파일과의 상호 작용이다. 쓰기를 위해 열려 있는 파일을 나타내는 객체를 가질 수 있으며, 이 객체는 생성자에서 파일이 열리고 객체의 스코프를 벗어날 때 닫힌다. 두 경우 모두 RAII는 해당 자원이 적절하게 해제되도록 보장할 뿐이다. 예외 안전을 유지하기 위해서는 여전히 주의를 기울여야 한다. 데이터 구조나 파일을 수정하는 코드가 예외 안전하지 않으면, 데이터 구조나 파일이 손상된 채로 뮤텍스가 잠금 해제되거나 파일이 닫힐 수 있다.
RAII 일반적인 용도
동적으로 할당된 객체(C++에서 new로 할당된 메모리)의 소유권도 RAII로 제어할 수 있으며, 이 경우 RAII(스택 기반) 객체가 파괴될 때 객체가 해제된다. 이를 위해 C++11 표준 라이브러리는 단일 소유 객체를 위한 스마트 포인터 클래스 std::unique_ptr와 공유 소유 객체를 위한 std::shared_ptr를 정의한다. 비슷한 클래스는 C++98의 std::auto_ptr와 Boost 라이브러리의 boost::shared_ptr를 통해서도 사용할 수 있다.
또한 RAII를 사용하여 네트워크 자원에 메시지를 보낼 수 있다. 이 경우 RAII 객체는 초기화가 완료되는 생성자 끝에서 소켓으로 메시지를 보낸다. 또한 객체가 파괴되기 시작하는 소멸자 시작 부분에서도 메시지를 보낸다. 이러한 구조는 클라이언트 객체에서 다른 프로세스에서 실행 중인 서버와 연결을 설정하는 데 사용될 수 있다.
RAII 컴파일러 "정리" 확장 기능
클랭과 GNU 컴파일러 모음은 모두 RAII를 지원하기 위해 C 언어에 대한 비표준 확장 기능인 "cleanup" 변수 속성을 구현한다. 다음은 변수가 스코프를 벗어날 때 호출할 특정 소멸자 함수로 변수를 주석 처리한다.
이 예시에서 컴파일러는 `example_usage` 함수가 반환되기 전에 `logfile`에 대해 `fclosep` 함수가 호출되도록 준비한다.
RAII 제한 사항
RAII는 스택 할당 객체에 의해 (직접 또는 간접적으로) 획득되고 해제되는 자원에만 작동하며,
여기에는 잘 정의된 정적 객체 수명이 존재한다.
힙에 할당된 객체가 그 자체로 자원을 획득하고 해제하는 것은 C++를 포함한 많은 언어에서 흔하다. RAII는 힙 기반 객체가 가능한 모든 실행 경로를 따라 암시적으로 또는 명시적으로 삭제되어 자원 해제 소멸자(또는 동등한 것)를 트리거하도록 의존한다.:8:27 이는 모든 힙 객체를 관리하기 위해 스마트 포인터를 사용하고, 순환 참조 객체에 대해서는 약한 포인터를 사용하여 달성할 수 있다.
C++에서는 예외가 어딘가에서 잡힐 때만 스택 언와인딩이 발생한다고 보장된다. 이는 "프로그램에서 일치하는 핸들러를 찾을 수 없는 경우, terminate() 함수가 호출된다. terminate() 호출 전에 스택이 언와인딩되는지 여부는 구현 정의이다(15.5.1)." (C++03 표준, §15.3/9)이기 때문이다. 이러한 동작은 일반적으로 허용된다. 운영 체제가 프로그램 종료 시 메모리, 파일, 소켓 등과 같은 나머지 자원을 해제하기 때문이다.
RAII 제한 사항
2018년 게임랩 컨퍼런스에서 조너선 블로는 RAII 사용이 메모리 단편화를 일으킬 수 있으며, 이는 차례로 캐시 미스와 성능에 100배 또는 그 이상의 타격을 줄 수 있다고 주장했다.
RAII 참조 횟수 계산 방식
펄, 파이썬 ((C파이썬 구현에서)), 그리고 PHP는 참조 횟수 계산을 통해 객체 수명을 관리하며, 이는 RAII를 사용할 수 있게 한다. 더 이상 참조되지 않는 객체는 즉시 파괴되거나 최종화되어 해제되므로, 소멸자 또는 파이널라이저는 해당 시점에 자원을 해제할 수 있다. 그러나 이러한 언어에서 항상 관용적인 것은 아니며, 파이썬에서는 특히 권장되지 않는다(대신 컨텍스트 관리자와 weakref 패키지의 파이널라이저가 선호됨).
RAII 참조 횟수 계산 방식
하지만 객체의 수명은 반드시 어떤 스코프에 묶여 있는 것은 아니며, 객체는 비결정적으로 파괴되거나 전혀 파괴되지 않을 수도 있다. 이로 인해 어떤 스코프의 끝에서 해제되어야 할 자원이 실수로 누출될 수 있다. 정적 변수(특히 전역 변수)에 저장된 객체는 프로그램이 종료될 때 최종화되지 않을 수 있으므로 해당 자원이 해제되지 않는다. 예를 들어 C파이썬은 이러한 객체의 최종화를 보장하지 않는다. 또한 순환 참조가 있는 객체는 단순한 참조 카운터에 의해 수집되지 않으며, 무기한으로 살아남게 된다. (더 정교한 쓰레기 수집기에 의해 수집된다고 해도) 파괴 시간과 파괴 순서는 비결정적이다. C파이썬에는 순환을 감지하고 해당 순환 내의 객체를 최종화하는 순환 감지기가 있지만, C파이썬 3.4 이전에는 순환 내의 어떤 객체라도 파이널라이저를 가지고 있다면 순환이 수집되지 않는다.
르메트르 좌표
르메트르 좌표(영어: Lemaître coordinates)는 1932년 조르주 르메트르가 도입한 진공 상태에서 아인슈타인 방정식의 구형 대칭 해인 슈바르츠실트 계량을 위한 특정 좌표계이다. 슈바르츠실트 좌표에서 르메트르 좌표로 변경하면 슈바르츠실트 반지름의 좌표 특이점이 제거된다.
르메트르 좌표 계량
자연단위계(c = G = 1)에서 슈바르츠실트 계량의 원래 슈바르츠실트 좌표 표현은 다음과 같다.
여기서
는 불변 간격이며;
는 슈바르츠실트 반지름이며;
은 중심 물체의 질량이며;
는 슈바르츠실트 좌표이며(점근적으로 평평한 구면좌표계로 바뀐다);
는 빛의 속력이며;
그리고 는 중력 상수이다.
이 계량은 슈바르츠실트 반지름 에서 좌표 특이점을 갖는다.
조르주 르메트르는 이것이 실제 물리적 특이점이 아니라 슈바르츠실트 반지름 내에서 정적인 슈바르츠실트 좌표가 물질적 몸체로 구현될 수 없다는 사실의 단순한 발현임을 처음으로 보여주었다. 실제로 슈바르츠실트 반지름 내부에서는 모든 것이 중심으로 떨어지며 물리적 몸체가 일정한 반지름을 유지하는 것은 불가능하다.
슈바르츠실트 좌표계에서 에서 새로운 좌표 로의 변환은 다음과 같다:
(분자와 분모는 제곱근 안에서 바뀌었다) 이는 계량의 르메트르 좌표 표현으로 이어진다.
여기서
르메트르 좌표의 계량은 슈바르츠실트 반지름 에서 특이점이 없다. 이는  지점에 해당한다. 인 중심에는 실제 중력 특이점이 남아있으며, 이는 좌표 변경으로 제거될 수 없다.
르메트르 좌표 계량
르메트르 좌표에서 사용된 시간 좌표는 굴스트란드-팡르베 좌표에서 사용된 "빗방울" 시간 좌표와 동일하다. 다른 세 개의 좌표: 굴스트란드-팡르베 좌표의 방사형 및 각도 좌표 는 슈바르츠실트 차트의 좌표와 동일하다. 즉, 굴스트란드-팡르베는 슈바르츠실트 시간 에서 빗방울 좌표 로 이동하기 위해 하나의 좌표 변환을 적용한다. 그런 다음 르메트르는 방사형 구성 요소에 두 번째 좌표 변환을 적용하여 굴스트란드-팡르베 차트의 대각선 외 항목을 제거한다.
이 문서에서 시간 좌표로 사용된  표기는 고유 시간과 혼동해서는 안 된다. 가 방사형으로 낙하하는 관찰자에게 고유 시간을 제공하는 것은 사실이지만, 다른 측지선을 따라 이동하는 관찰자에게는 고유 시간을 제공하지 않는다.
르메트르 좌표 측지선
가 일정한 궤적은 를 이들 측지선을 따른 고유 시간으로 하는 시간꼴 측지선이다. 이들은 무한대에서 초기 속도가 0인 자유 낙하하는 입자의 운동을 나타낸다. 어떤 지점에서도 그들의 속도는 그 지점에서의 탈출 속도와 같다.
르메트르 좌표계는 동시 좌표계이다. 즉, 계량의 전역 시간 좌표는 함께 움직이는 관찰자의 고유 시간을 정의한다. 방사형으로 낙하하는 물체는 유한한 고유 시간 내에 슈바르츠실트 반지름과 중심에 도달한다.
방사형 영 측지선은 에 해당하며, 해는 이다. 여기서 는 다음의 약칭이다.
두 부호는 각각 바깥쪽으로 움직이는 빛과 안쪽으로 움직이는 빛에 해당한다. 이를 좌표 로 다시 표현하면 다음과 같다.
일 때 임을 주목하라. 이는 슈바르츠실트 반지름 내부에서 어떤 신호도 탈출할 수 없으며, 방사형으로 안팎으로 방출된 빛이 고유 시간 가 증가함에 따라 모두 원점에 도달한다는 것을 의미한다.
르메트르 좌표 측지선
르메트르 좌표 차트는 측지적으로 완전하지 않다. 이는 바깥쪽으로 움직이는 방사형 영 측지선을 시간 거꾸로 추적함으로써 알 수 있다. 바깥쪽으로 움직이는 측지선은 위에서 플러스 부호에 해당한다. 에서 시작점 를 선택하면 위 방정식은 일 때 로 적분된다. 고유 시간을 거꾸로 가면 일 때 가 된다. 에서 시작하여 앞으로 적분하면 유한한 고유 시간 내에 에 도달한다. 거꾸로 가면 일 때 다시 가 된다. 따라서 계량은 에서 특이점이 없지만, 모든 바깥쪽으로 이동하는 측지선은 일 때 까지 확장된다는 결론을 내릴 수 있다.
공지전투
공지전투(AirLand Battle)는 미국 육군의 유럽 전쟁 교리의 기반을 형성했던 전반적인 개념적 틀로, 1982년부터 1990년대 후반까지 사용되었다. 공지전투는 적극적으로 기동전을 펼치는 지상군과 전방 적군에 보급하는 후방 부대를 공격하는 공군 간의 긴밀한 조정을 강조했다. 공지전투는 1976년의 "능동 방어" 군사 교리를 대체했으며, 2001년에는 "전영역 작전"으로 대체되었다.
공지전투 배경
전격전과 유사한 교리의 기본 개념은 공격자가 제한된 전선에 병력을 비밀리에 집중시켜 방어자보다 국지적 우위를 확보하고, 최소한 전술적 기습을 통한 돌파로 이어지는 공격을 감행한 후 이를 신속하게 활용하여 후방 지역을 위협하고 전체 방어 진지를 불안정하게 만드는 것이었다.
베트남 전쟁이 끝나갈 무렵, 미 육군은 조직과 구조를 연구하기 시작하여 실제 세계의 분쟁에 더 잘 맞추는 방법을 찾았다. 윌리엄 E. 디퓨 장군의 지휘 아래 미 육군 훈련교리사령부(TRADOC)는 이러한 문제들을 연구하고 육군 병력에 대한 최신 교리를 생산하기 위해 1973년에 창설되었다.
TRADOC는 미래의 분쟁 가능성이 두 가지 주요 가능성으로 나뉜다고 결론지었다: 유럽에서의 대규모 기갑 분쟁 또는 전 세계 다른 지역에서의 주로 보병 전투. 후자의 가능성은 신속 전개 합동 기동 부대로 이어졌고, 결국 미국 중부사령부의 창설로 이어졌다. 전자는 바르샤바 조약 기구의 압도적인 수적 우위, 특히 징병제의 종료를 고려할 때 더 문제가 많았다.
공지전투 배경
1973년 욤키푸르 전쟁이 발발했을 때, 이 전쟁은 재래식 무기, 특히 대전차 미사일 (ATGM)의 새로운 치명적인 위력을 입증했다. 전차의 새로운 취약성과 보병의 향상된 방어력은 미 육군 내에서 유럽에서의 전쟁은 재래식 무기로 승리할 수 있다는 사상 혁명으로 이어졌다. 새로운 무기에 깊은 인상을 받은 디퓨는 사격 능력을 극적으로 향상시킬 무기로 중형 사단을 재무장하는 과정을 시작했다.
디퓨의 관점에서는 화력이 너무 많이 증가하여 전쟁이 거의 즉시, 처음 몇 번의 대규모 전투에서 승패가 결정될 것이라고 보았다. 야전 교범 100-5에 언급된 대로, "미 육군은 무엇보다도 다음 전쟁의 첫 전투에서 승리할 준비를 해야 한다."
공지전투 배경
후방의 병력은 예상되는 거대한 전투에 참여할 만큼 충분히 빠르게 전진할 수 없었으므로, 모든 병력을 가능한 한 전선에 가깝게 배치해야 했다. 그 결과 미국과 동맹군의 대부분을 동독과 서독 국경에 훨씬 더 가깝게 이동시키는 새로운 전장 조직이 생겨났는데, 이를 "전방 방어"라고 부르게 되었다. 미국으로부터의 증원군이 미미한 역할밖에 할 수 없었기 때문에, 전쟁은 "있는 그대로 참여하는" 싸움이었다. 공군력은 핵심이었다. 전투의 속도가 빨라지고 소련군이 방어선을 돌파하려 시도할 때, 자연스럽게 공군이 공격할 수 있는 통로가 형성될 것이었다.
1975년의 한 연구는 다음을 보여주었다.
1976년 버전의 야전 교범 100-5가 도입된 직후 발견된 한 가지 문제점은 적의 후방 예비군 병력을 어떻게 처리해야 하는가였다. 미국이 첫 전투에서 승리하더라도 얼마 지나지 않아 피해를 입지 않은 두 번째 예비군 병력과 마주칠 가능성이 있었다. 이 문제에 대한 해결책은 즉시 나오지 않았다.
능동 방어 교리를 전쟁 게임으로 시뮬레이션한 결과, 이 교리를 사용하면 "매번 패배할 것"이라는 결론이 나왔다.
공지전투 배경
군사 역사가 그윈 다이어는 또한 이 방어 전략을 군사적으로 무의미하다고 비판했다. 그는 효과적인 종심방어 교리가 서독에게 정치적으로 용납될 수 없었기 때문에 사용되었다고 주장했다. 그 이유는 종심 방어는 바르샤바 조약 기구군이 침공했을 때 서독의 상당 부분이 저지되기 전에 점령될 것을 의미했기 때문이다. 이러한 정치적 타협의 결과, 바르샤바 조약 기구의 집중적인 침공은 수적으로 우세한 재래식 병력으로 얇은 방어선을 쉽게 돌파할 수 있었을 것이며, 이는 결국 NATO가 전술 핵무기에 의존하여 대응할 수밖에 없게 만들었을 것이고, 이는 전면적인 세계적 핵전쟁으로 확대될 가능성이 높았다. 더욱이 이 교리는 바르샤바 조약 기구에게는 위협적인 정책으로 간주되었는데, 그들은 이것이 소련의 침공을 막기 위해 필요한 소련 영토에 방어 완충 지대를 만들기 위한 선제적 조치로 NATO가 공격적인 방식으로 심층 방어를 역전시킬 수 있음을 의미할 것이라고 우려했다. 이는 바르샤바 조약 기구군이 그 공격을 포기하기 위해 먼저 공격적인 움직임을 취하기로 결정할 가능성을 높여 전쟁의 위험을 증가시켰다.
공지전투 배경
공지전투의 진화에 가장 큰 원동력이 된 인물은 돈 A. 스타리 장군이었다. 그는 1977년 디퓨로부터 TRADOC를 인계받았으며 능동 방어의 실행에 주도적인 역할을 했다. 도입 이후 스타리는 적의 예비군 문제에 대한 해결책을 찾으려 노력해왔으며, "확장된 전장" 개념을 개발해왔다. 이는 훨씬 더 공격적인 전략이었으며, 육군이 A-10 및 AH-64 아파치와 같은 자체 근접항공지원 공격기를 운용하고 미 공군 역량을 더 잘 통합하도록 요구했다. 이는 또한 고기동 다연장 로켓 시스템, 브래들리 보병전투차, M109 자주포, 패트리어트 미사일, M1 에이브럼스 및 록히드 F-117 나이트호크의 탄생으로 이어졌다. 지미 카터 대통령은 이 새로운 무기 프로그램을 승인했다.
공지전투 배경
확장된 전장은 지리적 측면에서 서로 다른 지휘관들이 전장에 대해 다른 시각을 가지고 있음을 지적했다. 여단 지휘관은 즉각적인 전선 너머, 포병이 작전하는 적의 후방 15km까지의 행동을 고려해야 했다. 사단 지휘관은 전장을 70km까지 확장하여 보았고, 군단 지휘관은 150km까지의 시야를 가졌다. 스타리는 전장 조직에 지리적 차원뿐만 아니라 시간적 차원도 있다는 아이디어를 도입했다. 여단은 아마도 12시간 안에 행동에 대응해야 했고, 사단은 24시간, 군단은 72시간을 가졌다. 이 공간과 시간 모두에서의 조정이 확장된 전장을 정의했다.
시간 차원이 중요했던 이유는 1979년 12월 오클라호마주 포트 실에서 핵무기 사용에 대한 연구 결과 때문이었다. 이 연구들은 적의 후방에서 차단이 후방 부대의 이동을 심각하게 지연시킬 수 있으며, 미군이 전술적 우위를 가질 수 있는 "시간 창"을 만들 수 있음을 입증했다. 지휘 구조가 전장의 시간 차원을 인지하고 있도록 함으로써, 이러한 시간 창이 발생했을 때 이를 활용할 준비가 더 잘 될 수 있었다.
1976년 능동 방어가 도입되었을 때, 육군 내부와 외부의 매우 영향력 있는 민간 고문들로부터 비판의 물결에 직면했다. 이를 직접 목격한 스타리는 이러한 일이 두 번 다시 발생하지 않도록 조치를 취했다. 이러한 노력의 최우선 과제는 1981년 포트 리븐워스에서 새로운 야전 교범 100–5 초안을 브리핑과 광범위한 배포를 통해 개념을 조기에 전파하는 것이었다. 이는 특히 새롭게 공격적인 방향으로 전환된 점 때문에 좋은 반응을 얻었으며, 다음 문장으로 깔끔하게 요약되었다.
... 정치 당국이 정치적 목적을 달성하기 위해 군사력을 투입하면, 군사력은 반드시 무언가를 얻어내야 한다. 그렇지 않으면 정치 당국이 정치적으로 승리하기 위해 협상할 근거가 없어지기 때문이다. 그러므로 군사 작전의 목적은 단순히 패배를 피하는 것이 아니라 승리하는 것이어야 한다.
공지전투는 1982년 미군의 주요 전술 계획이 되었고, 베르나르 W. 로저스 장군이 이끄는 SACEUR의 도움으로 1984년 NATO군의 전술 계획이 되었다. 그 도입은 군의 모든 부대의 C3I 장비 업그레이드와 새로운 C3I 자산이 생성할 방대한 양의 정보를 활용하기 위한 유사한 지휘 통제 구조의 변경을 필요로 했다.
공지전투 공지전투
1970년대 이전에는 공군이 주로 전략 폭격, 전술 핵무기 전달, 또는 적 공군에 대한 공격을 위한 것으로 여겨졌다. FM 100-5에 해당하는 공군의 임무는 8가지에 불과했으며, 그 중 지상군과의 직접적인 상호작용을 요구하는 임무는 단 하나뿐이었다.
베트남 전쟁 동안 미 공군력의 대부분은 보급품 축적 및 이동 지점, 즉 도로, 교량, 보급 기지 등에 집중되었다. 재래식 무기로 이러한 목표물을 공격하는 것은 "명중"을 보장하기 위해 상당한 양의 탄약을 소모해야 하는 값비싼 과정이었다. 1960년대 후반과 1970년대 초반에 스마트 무기가 도입되면서 재래식 병력은 교량 및 도로와 같은 점 목표물을 직접 공격할 수 있게 되었고, 적을 저지하는 능력을 극적으로 향상시켰으며 동시에 항공기가 더 안전하고 높은 고도에서 작전할 수 있게 했다. 이들은 베트남 전쟁 당시에는 여전히 매우 새로운 기술이었기 때문에 실제적인 영향은 미미했지만, 그 잠재력은 분명했다.
공지전투 공지전투
1970년대 초부터 공군은 유럽에서의 재래식 전쟁을 고려하는 첫 단계를 밟았다. 1975년 말, 랜드 연구소는 NATO의 공대지 능력을 향상시키기 위한 추가 유인 항공기, 원격 조종 차량, 스탠드오프 탄약의 장점을 조사한 연구를 완료했다. 랜드 연구소에서 이어진 이틀간의 워크숍에서는 바르샤바 조약 기구가 NATO 공군력에 대해 가질 수 있는 취약점을 연구했으며, 이어서 그들의 지속적인 보급품 이동에 대한 의존도를 명확히 보여주는 일련의 추가 연구가 진행되었다. 항공 계획자들은 스타리가 확장된 전장 개념을 연구하는 동시에 이러한 신무기를 가장 잘 활용할 방법을 찾기 시작했다. 동시에 연구개발 담당 국방차관 빌 페리는 "스텔스, 정밀성, 속도"에 관심을 가졌고, 그들의 개발 중 하나는 소련에 의한 탐지를 회피하고 전차, 대공 레이더 시스템 및 미사일 단지와 같은 지상 목표물을 타격하도록 설계된 항공기인 록히드 F-117 나이트호크였다.
공지전투 공지전투
스타리는 육군과 공군 간의 긴밀한 조정을 강조하여 통합된 공격 계획을 수립했다. 이 계획은 지상군을 사용하여 반격 전격전을 수행하는 동시에 공군력, 대포 및 특수부대가 전선으로 향하는 예비군 병력의 이동을 저지하는 것이었다. 이를 달성하기 위해 육군과 공군 모두 장비 현대화 프로그램에 착수했다. 육군의 노력은 총칭하여 "빅 파이브"라고 불렸는데, 이는 M1 에이브럼스, 브래들리 보병/기병 전투차, AH-64 아파치, UH-60 블랙호크, 그리고 MIM-104 패트리어트 미사일 시스템이었다. 앞서 언급된 F-117 외에도 적 후방 부대에 대한 공중 차단을 위한 공군의 요구사항은 심층 타격을 위한 LANTIRN이 장착된 강화 전술 전투기 (또는 F-15E로 이어질 이중 역할 전투기) 및 이러한 타격을 가능하게 하는 제공권 확보를 위한 F-22로 이어질 선진 전술 전투기와 같은 시스템의 개발로 이어졌다. 그 결과는 바르샤바 조약 기구의 진격을 시간적으로 늘려, 더 작은 NATO 병력이 증원군이 조각조각 도착하는 동안 전장 전체에서 적을 지속적으로 소모시킬 수 있게 했다. 그 결과는 단일한 공지전투였다.
공지전투 공지전투
공지전투는 재래식 전쟁에 초점을 맞추었지만, 핵 또는 화학전의 위협을 무시하지 않았다. 전투 시작부터 핵 공격 또는 화학무기 사용을 계획하고, 적에게 병력을 분산시키거나 집중 시 핵 공격 위험을 감수하게 하는 위협으로 처음부터 사용하는 것을 제안했다. 그러나 계획은 먼저 같은 방식으로 공격을 받았을 경우에만 사용해야 한다고 제안했다.
1981년 공지전투 개념이 전달하는 전체 메시지는 육군이 전통적인 "주요 전투 지역"에서만 승리한다는 제한적인 개념을 버려야 한다는 것이었다. 공지전투는 1982년 FM 100-5 버전에서 처음으로 공표되었고, 1986년 FM 100-5 버전에서 개정되었으며, 이는 후속 부대 공격 개념을 추가했다.
이 교리는 당시에는 알려지지 않았지만 바르샤바 조약 기구에게 심리적으로 성공적인 것으로 판명되었다. 1992년 소련이 붕괴된 후, 옛 적대국 장군들의 친근한 만찬에서 한 동독 장군은 미국 외교관에게 철의 장막을 넘어 이 교리가 이해된 후 "우리에게는 더 이상 선택의 여지가 없었다"고 말했다. 고르코프 원수는 소련이 곤경에 처했음을 알고 있었다.
DTRA 국장 짐 테그넬리아는 공지전투가 "정책 문제, 좋은 전략, 기술의 결합"의 산물이라고 주장한다. 이들이 조화롭게 결합될 때 군사 작전에 관하여 매우 시너지 효과를 내고 혁명적인 영향을 미 미칠 수 있다.
1993년부터 펜타곤은 디지털 혁명에 의해 가능해진 새로운 교리인 네트워크 중심전을 채택했다.
공지전투 대중문화
"에어랜드 배틀"은 워게임: 유러피언 에스컬레이션의 속편인 워게임: 에어랜드 배틀의 제목 일부이다. 이 게임은 공지전투가 NATO의 주요 전략이었던 냉전 시대를 배경으로 하며, 플레이어가 NATO 지휘관 또는 바르샤바 조약 기구 장군이 되어 다른 동맹에 맞서 군사 교전을 지휘한다. 이 속편은 이전에는 지상군과 헬리콥터로 제한되었던 게임에 고정익기 유닛을 도입한다.
지오블로킹
지오블로킹(geo-blocking) 또는 지오록킹(geolocking)은 사용자의 지리적 위치에 따라 인터넷 콘텐츠에 대한 접근을 제한하는 기술이다. 지오블로킹 방식에서 사용자의 위치는 인터넷 지리적 위치 확인 기술을 사용하여 결정되는데, 예를 들어 사용자의 IP 주소를 블랙리스트 또는 화이트리스트와 대조하거나, 모바일 기기의 경우 GPS 쿼리를 사용하고, 계정을 확인하며, 네트워크 연결의 종단간 지연을 측정하여 사용자의 물리적 위치를 추정한다. 이 확인 결과는 시스템이 웹사이트 또는 특정 콘텐츠에 대한 접근을 승인할지 거부할지를 결정하는 데 사용된다. 지리적 위치는 제공되는 콘텐츠를 수정하는 데 사용될 수도 있다. 예를 들어, 상품이 인용되는 통화, 가격 또는 사용 가능한 상품의 범위 등이 달라질 수 있다.
지오블로킹
이 용어는 주로 영화 및 TV 프로그램과 같은 프리미엄 멀티미디어 콘텐츠에 대한 인터넷 접근을 제한하는 데 사용되며, 주로 저작권 및 라이선싱상의 이유로 사용된다. 지오블로킹은 악성 트래픽을 차단하거나 가격 차별, 위치 기반 인증, 사기 방지, 온라인 도박 (도박 관련 법규가 지역마다 다른 경우)을 시행하는 등 다른 용도로도 사용된다. 웹사이트는 또한 제재 규정 및 규칙을 준수하기 위해 지오블로킹을 사용한다.
지오블로킹 정당성
시청각 작품에 대한 배타적 지역 권한 소유권은 지역마다 다를 수 있으며, 이로 인해 콘텐츠 제공업체는 지정된 지역 외부의 사용자에 대한 접근을 허용하지 않아야 한다. 예를 들어, 온라인 서비스인 HBO 나우는 미국 거주자에게만 제공되며, 다른 국가에서는 제공될 수 없다. 그 이유는 모회사인 HBO가 이미 다른 방송사(예: 캐나다의 벨 미디어에 HBO가 자체 백 카탈로그를 라이선스한 경우)에 자사 프로그램에 대한 배타적 권한을 라이선스했기 때문이며, 이들은 자체 지역 및 비즈니스 모델에 맞는 유사한 서비스(예: 크레이브 (스트리밍 서비스))를 제공할 수 있다. 비슷한 이유로, 넷플릭스와 같은 구독형 주문형 비디오 서비스에서 제공되는 콘텐츠 라이브러리는 지역마다 다를 수 있으며, 심지어 해당 서비스가 사용자의 국가에서 전혀 제공되지 않을 수도 있다.
지오블로킹 정당성
지오블로킹은 다른 목적으로도 사용될 수 있다. 온라인 상점의 가격 차별은 지오블로킹을 통해 시행될 수 있으며, 사용자가 해외 웹사이트에서 상품을 구매하도록 강제하여 자국 버전보다 불필요하게 높은 가격으로 구매해야 할 수도 있다 (그러나 그 반대의 경우도 종종 발생한다). "오스트레일리아 세금"은 이러한 현상의 예로 언급되었으며, 이는 해당 국가에서 지오블로킹이 이러한 방식으로 사용되는 것을 제한하기 위한 정부의 압력으로 이어졌다.
다른 주목할 만한 사용 사례로는 특정 웹사이트와 관련 없는 국가(특히 해당 국가에서 오는 트래픽의 대부분이 악성인 경우)에서의 접근 차단, 그리고 현지 법률에 따라 불법인 콘텐츠나 서비스에 대한 자발적인 접근 차단 등이 있다. 여기에는 온라인 도박이 포함될 수 있으며, 일반 데이터 보호 규칙 (GDPR)에 따른 책임 문제로 인해 유럽 경제 지역 내 사용자에게 대한 접근을 차단하는 다양한 국제 웹사이트도 포함된다.
지오블로킹 우회
지오블로킹은 우회될 수 있다. IP 주소 기반 지오블로킹이 사용될 경우, 가상사설망 (VPN) 및 익명 프록시 서비스를 사용하여 지오블록을 피할 수 있다. 예를 들어, 사용자는 미국 IP 주소를 사용하여 해당 국가 외부에서는 사용할 수 없는 콘텐츠나 서비스에 접근할 수 있다. 훌루, 넷플릭스, 아마존 (기업) 및 BBC iPlayer는 외국 사용자들이 이러한 수단을 통해 널리 사용하는 외국 비디오 서비스 중 하나이다. VPN 사용자들 사이에서의 인기로 인해 넷플릭스는 2014년에 공식적으로 호주 버전의 서비스를 출시했다. NBC의 국내 보도 품질에 대한 불만과 함께 온라인 콘텐츠에 접근하려면 시청자가 참여 유료 TV 제공업체의 가입자여야 한다는 요구 사항에 대응하여, 많은 미국 시청자들이 VPN 서비스를 사용하여 영국 및 캐나다 방송사의 2012년 하계 올림픽 및 2014년 동계 올림픽 해외 온라인 보도를 스트리밍했다. NBC의 보도와 달리, 이 해외 보도는 지오블록만 사용하고 TV 구독을 요구하지 않았다.