시작 이전 글에서는 TCP 연결 이후 TLS를 통해 브라우저와 서버가 안전하게 통신할 수 있는 환경을 만드는 과정까지 살펴봤다 지금까지의 흐름을 정리하면 다음과 같다 URL 입력 ↓ URL 해석 ↓ DNS 조회 ↓ IP 주소 획득 ↓ TCP 연결 ↓ TLS Handshake ↓ 안전한 통신 환경 구성 이제 브라우저와 서버는 데이터를 안전하게 주고받을 준비를 마쳤다 그렇다면 실제로 어떤 데이터를 주고받는 걸까? 브라우저와 서버에 웹 페이지를 요청한다는 것은 단순히 주소를 전달하는 것만을 의미하지 않는다 어떤 리소스를 원하는지 어떤 현태의 데이터를 받을 수 있는지 요청에 추가적인 정보가 필요한지 등을 함께 전달할 수 있다 서버 역시 요청에 대한 결과뿐만 아니라 요청이 성공했는지 어떤 종류의 데이터를 반환하는지 등의 정보를 함께 전달한다 이러한 요청과 응답의 형식을 정의하는 것이 HTTP다 이번 글에서는 브라우저가 서버에 보내는 HTTP Request와 서버가 반환하는 HTTP Response가 어떤 구조로 이루어져 있는지 살펴보려고 한다 HTTP란 무엇일까? HTTP는 HyperText Transfer Protocol의 약자로 클라이언트와 서버가 데이터를 주고받기 위한 애플리케이션 계층 프로토콜이다 HTTP는 기본적으로 요청과 응답을 중심으로 동작한다 Client | | HTTP Request |--------------> | | HTTP Response |<-------------- | Server 클라이언트가 서버에 요청을 보내면 서버는 요청을 처리한 뒹 그 결과를 응답으로 반환한다 이때 HTTP는 단순히 데이터를 주고받는다는 사실만 정의하는 것이 아니라 요청에 어떤 정보가 포함되어야 하는지도 정의한다 예를 들어 클라이언트는 다음과 같은 정보를 전달할 수 있다 어떤 작업을 요청하는가 어떤 리소스를 요청하는가 어떤 종류의 응답을 받을 수 있는가 요청과 함께 전달할 데이터가 있는가 서버 역시 다음과 같은 정보를 반환할 수 있다 요청이 성공했는가 어떤 종류의 데이터를 반환하는가 응답을 캐싱해도 되는가 실제 응답 데이터는 무엇인가 그렇다면 실제 HTTP 메시지는 어떤 모습일까? HTTP Request는 어떻게 구성되어 있을까? 브라우저가 다음 주소에 접속한다고 생각해보자 https://example.com/posts/1 DNS와 연결 과정을 거쳐 서버와 통신할 준비를 마쳐다면 브라우저는 해당 리소스를 요청한다 HTTP/1.1 형식으로 표현하면 다음과 같다 GET /posts/1 HTTP/1.1 Host: example.com Accept: text/html 이 요청을 크게 나누면 다음과 같은 구조다 Request Line ↓ Request Headers ↓ 빈 줄 ↓ Request Body (선택) 각 부분이 어떤 역할을 하는지 살펴보자 여기서 사용하는 예시는 HTTP 메시지의 구조를 이해하기 위한 HTTP/1.1 형식이며 HTTP/2와 HTTP/3에서는 실제 전송 형식이 달라진다 Request Line HTTP/1.1 요청의 첫 번째 줄을 Request Line이라고 한다 GET /posts/1 HTTP/1.1 이를 나누면 다음과 같다 GET -> Method /posts/1 -> Request Target HTTP/1.1 -> HTTP Version 각각의 의미를 하나씩 살펴보자 Method Method는 클라이언트가 서버에 어떤 작업을 요청하는지 나타낸다 대표적인 HTTP Method는 다음과 같다 GET -> 리소스 조회 POST -> 데이터를 제출하거나 처리를 요청 PUT -> 리소스를 생성하거나 전체 교체 PATCH -> 리소스의 일부 벼경 DELETE -> 리소스 삭제 요청 예를 들어 게시글을 조회하려는 경우에는 GET을 사용할 수 있다 반대로 새로운 게시글을 생성하려는 경우에는 POST를 사용할 수 있다 여기서 중요한 것은 Method 자체가 실제 서버의 동작을 수행하는 것은 아니라는 점이다 Method는 요청의 의미를 나타내며 서버는 이를 바탕으로 어떤 작업을 수행하지 결정한다 또한 PUT과 PATCH의 의미는 구분되지만 실제 리소스 변경 방식은 서버의 API 설계에 따라 달라질 수 있다 Request Target 다음은 요청 대상이다 GET /posts/1 HTTP/1.1 여기서 /posts/1 은 클라이언트가 요청하려는 리소스를 가리킨다 이전 글에서 살펴봤던 URL과 연결해보면 다음과 같다 https://example.com/posts/1 ↓ /posts/1 앞서 URL을 해석하면서 서버의 위치를 찾았다면 이제는 해당 서버에 어떤 리소스를 원하는지 전달하는 것이다 Query String이 포함된 경우에는 다음과 같이 전달할 수 있다 https://example.com/posts?sort=latest GET /posts?sort=latest HTTP/1.1 반면 URL Fragment는 HTTP 요청 대상에 포함되지 않는다 https://example.com/posts/1#comment 이 경우 일반적인 HTTP 요청에는 다음과 같이 전달된다 GET /posts/1 HTTP/1.1 #comment 는 브라우저가 문서 내부의 특정 위치 등을 처리하기 위한 정보이기 때문에 서버에 전달하는 요청 대상에서는 제외된다 Request Headers Request Line 다음에는 요청에 대한 추가 정보를 전달하는 Header가 존재한다 예를 들어 다음과 같은 요청이 있다고 해보자 GET /posts/1 HTTP/1.1 Host: example.com Accept: text/html Accept-Language: ko 각 Header는 이름과 값으로 구성된다 Header Name: Header Value Host Host: example.com Host는 클라이언트가 어떤 호스트를 대상으로 요청하는지 나타낸다 앞서 DNS를 통해 IP 주소를 알아냈는데 왜 다시 도메인 정보를 전달할까? 하나의 IP 주소에서 여러 웹 사이트를 제공할 수도 있기 때문이다 example.com ──┐ ├── 동일한 IP 주소 other.com ────┘ 서버는 Host 정보를 이용해 어떤 호스트를 대상으로 요청하는지 구분할 수 있다 즉 IP 주소가 네트워크에서 목적지를 찾아가는 데 사용된다면 Host는 HTTP 수준에서 요청 대상을 식별하는 데 사용된다 Accept Accept: text/html Accept는 클라이언트가 어떤 종류의 응답 데이터를 받아들일 수 있는지 나타낸다 예를 들어 HTML 문서를 원하는 경우 text/html 을 전달할 수 있닫 JSON 응답을 받을 수 있다는 의미로 다음과 같이 전달할 수도 있다 Accept: application/json 다만 Accept에서 특정 형식을 지정했다고 해서 반드시 서버가 그 형식으로 응답해야 하는 것은 아니다 서버가 지원하는 응답 형식과 요청에 따라 실제 결과가 결정된다 Cookie 브라우저가 서버에 쿠키를 전달해야 하는 상황이라면 다음과 같은 Header가 포함될 수 있다 Cookie: session=abc123 쿠키는 서버와 클라이언트 사이에서 상태를 유지하는 데 활용될 수 있다 예를 들어 로그인 이후 발급된 세션 식별자를 쿠키에 저장했다면 이후 요청에서 해당 값을 서버에 전달할 수 있다 Browser ↓ Cookie: session=abc123 ↓ Server ↓ 세션 정보 확인 모든 요청에 Cookie가 포함되는 것은 아니며 브라우저는 쿠키의 도메인, 경로, 보안 속성 등에 따라 전송 여부를 결정한다 Request Body HTTP 요청에는 Header 외에도 Body가 포함될 수 있다 Body는 서버에 전달하려는 실제 데이터를 담는 영역이다 예를 들어 게시글을 생성하는 요청을 생각해보자 POST /posts HTTP/1.1 Host: example.com Content-Type: application/json { "title": "HTTP", "content": "HTTP Request" } 이 요청에서 Body에 해당하는 부분은 다음과 같다 { "title": "HTTP", "content": "HTTP Request" } 여기서 Content-Type 은 Body에 포함된 데이터의 형식을 나타낸다 Content-Type: application/json 즉 서버는 해당 Body가 JSON 형식이라는 사실을 알 수 있다 HTML Form 데이터를 전송하거나 파일을 업로드하는 경우에는 다른 형식이 사용될 수도 있다 여기서 Request Header, Request Body의 역할을 구분할 수 있다 Request Header → 요청에 대한 부가 정보 Request Body → 실제로 전달하려는 데이터 참고로 모든 HTTP 요청에 Body가 필요한 것은 아니다 앞서 살펴본 GET 요청은 일반적으로 Body 없이 요청 대상을 지정하는 방식으로 사용된다 서버는 HTTP Request를 받으면 무엇을 할까? 지금까지 클라이언트가 어떤 형태로 요청을 보내는지 살펴봤다 그렇다면 요청이 서버에 도착하면 어떻게 될까? 아주 단순하게 표현하면 다음과 같다 HTTP Request 수신 ↓ Method 확인 ↓ 요청 대상 확인 ↓ Header 및 필요한 Body 확인 ↓ 요청 처리 ↓ HTTP Response 생성 예를 들어 서버가 다음 요청을 받았다고 해보자 GET /posts/1 HTTP/1.1 Host: example.com 서버는 해당 요청을 해석한 뒤 필요한 작업을 수행한다 게시글을 조회하는 요청이라면 저장된 데이터를 조회할 수도 있고 미리 준비된 문서를 반환할 수도 있다 이처럼 실제 요청을 처리하는 과정은 서버의 구현에 따라 달라진다 하지만 요청 처리 이후 결과를 HTTP Response도 반환한다는 기본 구조는 동일하다 HTTP Response는 어떻게 구성되어 있을까? 서버가 요청을 처리한 뒤 반환하는 HTTP Response도 일정한 구조를 가진다 예를 들어 HTML 문서를 요청한 경우 다음과 같은 응답이 반환될 수 있다 HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 <!DOCTYPE html> <html lang="ko"> <head> <title>Example</title> </head> <body> <h1>Hello</h1> </body> </html> 응답 역시 크게 세 부분으로 나눌 수 있다 Status Line ↓ Response Headers ↓ 빈 줄 ↓ Response Body (선택) 요청과 구조가 비슷하지만 각각의 역할은 다르다 Status Line HTTP/1.1 응답의 첫 번째 줄을 Status Line이라고 한다 HTTP/1.1 200 OK 이를 나누면 다음과 같다 HTTP/1.1 -> HTTP Version 200 -> Status Code OK -> Reason Phrase 여기서 중요한 것은 Status Code다 Status Code는 서버가 요청을 어떻게 처리했는지 나타내는 숫자 코드다 대표적인 상태 코드의 범위는 다음과 같다 1xx -> 정보성 응답 2xx -> 성공 3xx -> 리다이렉션 관련 응답 4xx -> 클라이언트 오류 5xx -> 서버 오류 각 범위 안에도 여러 상태 코드가 존재한다 예를 들어 다음과 같다 200 OK → 요청 성공 201 Created → 리소스 생성 성공 301 Moved Permanently → 리소스가 영구적으로 이동 304 Not Modified → 조건부 요청에 대해 리소스가 변경되지 않음 400 Bad Request → 잘못된 요청 401 Unauthorized → 유효한 인증 정보가 필요함 403 Forbidden → 요청한 작업이 허용되지 않음 404 Not Found → 요청한 리소스를 찾을 수 없음 500 Internal Server Error → 서버 내부 오류 브라우저는 이러한 상태 코드를 통해 요청 결과를 판단할 수 있다 예를 들어 리다이렉션 응답을 받으면 응답에 포함된 위치 정보를 바탕으로 다른 주소에 다시 요청할 수 있다 다만 모든 3xx 응답이 동일한 방식으로 동작하는 것은 아니며 304처럼 기존에 저장된 응답을 재사용하기 위한 상태 코드도 존재한다 Response Headers 서버는 Status Line 다음에 응답에 대한 추가 정보를 Header에 담아 전달한다 HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Cache-Control: max-age=3600 여기에서 몇 가지 Header를 살펴보자 Content-Type Content-Type: text/html; charse=utf-8 Content-Type 은 응답 Body의 데이터 형식을 나타낸다 브라우저는 이를 통해 응답으로 전달받은 데이터가 어떤 종류인지 판단할 수 있다 예를 들어 HTML 문서라면 다음과 같다 Content-Type: text/html JSON 데이터라면 다음과 같다 Content-Type: application/json 이미지나 CSS, 자바스크립트 등의 리소스 역시 각각의 데이터 형식을 가진다 따라서 브라우저는 모든 응답을 동일한 방식으로 처리하지 않는다 응답의 종류와 사용 목적에 따라 이후 과정이 달라진다 Cache-Control Cache-Control: max-age=3600 Cache-Control 은 캐시가 응답을 어떻게 저장하고 재사용할 수 있는지에 대한 지시를 전달한다 예를 들어 max-age=3600 은 응답을 저장한 캐시가 정해진 조건 아래에서 최대 3600초 동안 해당 응답을 최신 상태로 간주할 수 있다는 의미다 이전 글에서 DNS 캐시를 살펴봤다면 이번에는 HTTP 응답에서 캐시 정책이 존재한다는 점을 확인할 수 있다 HTTP Request ↓ Cache 확인 ↓ 사용 가능한 응답이 있음 ↓ 저장된 응답 재사용 캐시 정책에 따라 브라우저가 서버에 다시 요청하지 않고 저장된 응답을 사용할 수도 있다 반대로 저장된 응답을 재검증하기 위해 서버에서 조건부 요청을 보낼 수도 있다 즉 HTTP Header는 단순히 데이터의 형식을 설명하는 것뿐만 아니라 이후 네트워크 통신 방식에도 영향을 줄 수 있다 Set-Cookie Set-Cookie: session=abc123; Path=/; Secure; HttpOnly 서버는 Set-Cookie Header를 통해 브라우저에 쿠키를 저장하도록 요청할 수 있다 이후 브라우저는 쿠키의 속성과 요청 조건에 따라 저장된 값을 다시 서버에 전달할 수 있다 Server ↓ Set-Cookie ↓ Browser ↓ Cookie 저장 ↓ 다음 요청에서 조건에 맞으면 Cookie 전달 ↓ Server 여기서 Request의 Cookie와 Response의 Set-Cookie 는 서로 다른 역할이다 Cookie → 클라이언트가 서버에 쿠키 전달 Set-Cookie → 서버가 클라이언트에 쿠키 설정 요청 Response Body Response Body에는 서버가 실제로 반환하려는 데이터가 들어간다 앞서 HTML 문서를 요청했다면 다음과 같은 응답을 받을 수 있다 HTTP/1.1 200 OK Content-Type: text/html <!DOCTYPE html> <html> <body> <h1>Hello</h1> </body> </html> 여기서 HTML 문서가 Response Body에 해당한다 반면 JSON 데이터를 요청했다면 다음과 같은 응답을 받을 수도 있다 HTTP/1.1 200 OK Content-Type: application/json { "id": 1, "title": "HTTP" } HTTP Request의 Body에는 HTML 뿐만 아니라 JSON, 이미지, CSS, 자바스크립트 등 다양한 데이터가 들어갈 수 있다 또한 모든 응답에 Body가 포함되는 것은 아니다 예를 들어 204 No Content 나 304 Not Modified 와 같은 응답에는 메시지 Body가 포함되지 않는다 HTML 응답을 받으면 바로 화면이 만들어질까? 이제 HTTP 요청과 응답을 하나의 흐름으로 연결해보자 브라우저가 다음 URL에 접속했다고 해보자 https://example.com HTTP 요청이 서버에 전달된다 GET / HTTP/1.1 Host: example.com Accept: text/html 서버는 요청을 처리한 뒤 HTML 문서를 응답으로 반환한다 HTTP/1.1 200 OK Content-Type: text/html <!DOCTYPE html> <html> <body> <h1>Hello</h1> </body> </html> 그러면 브라우저가 응답을 받게 된다 Browser ↓ HTTP Request ↓ Server ↓ HTTP Response ↓ Browser 하지만 HTML 데이터를 받았다는 사실만으로 화면이 완성되는 것은 아니다 브라우저는 응답으로 전달받은 HTML을 해석하고 문서 구조를 만들어야 한다 또한 HTML을 해석하는 과정에서 CSS나 자바스크립트, 이미지 같은 다른 리소스를 발견하면 추가적인 HTTP 요청이 발생할 수 있다 HTML 응답 수신 ↓ HTML 해석 ↓ CSS / JavaScript / Image 발견 ↓ 추가 HTTP Request ↓ 추가 HTTP Response ↓ 브라우저에서 리소스 처리 따라서 하나의 웹 페이지를 화면에 표시하기 위해 여러 번의 HTTP 요청과 응답이 발생할 수 있다 물론 이때마다 DNS 조회나 TCP 연결, TLS Handshake를 처음부터 반복해야 하는 것은 아니다 기존 연결을 재사용할 수 있다면 여러 HTTP 요청을 같은 연결을 통해 처리할 수도 있다 HTTP/2와 HTTP/3에서도 같은 구조일까? 지금까지 살펴본 HTTP 메시지는 HTTP/1.1의 형식을 기준으로 설명했다 하지만 이전 글에서 살펴봤던 것처럼 HTTP에는 여러 버전이 존재한다 HTTP/1.1 ↓ TCP HTTP/2 ↓ TCP HTTP/3 ↓ QUIC ↓ UDP HTTP/2와 HTTP/3에서는 메시지를 실제 네트워크에 전달하는 방식이 HTTP/1.1과 다르다 예를 들어 HTTP/2와 HTTP/3는 메시지를 바이너리 프레임 등의 형태로 전송하며 HTTP/1.1처럼 요청 첫 줄을 텍스트로 그대로 전달하지 않는다 하지만 HTTP Method, Header, Status Code와 같은 핵심적인 의미는 유지된다 즉 HTTP 버전이 바뀌더라도 클라이언트가 요청을 보내고 서버가 응답을 반환한다는 기본 구조는 동일하다 이번 글에서는 HTTP 메시지가 어떤 정보를 주고받는지 이해하는것이 목적이므로 각 버전의 세부 전송 방식은 별도로 다루지 않으려고 한다 이번 글에서 살펴본 흐름 이번 글에서는 브라우저와 서버가 주고받는 HTTP Request와 HTTP Response의 구조를 살펴봤다 HTTP Request에는 다음과 같은 정보가 포함될 수 있다 HTTP Request │ ├─ Method │ → 어떤 작업을 요청하는가 │ ├─ Request Target │ → 어떤 리소스를 요청하는가 │ ├─ Headers │ → 요청에 대한 추가 정보 │ └─ Body → 서버에 전달할 데이터 서버는 요청을 처리한 뒤 HTTP Response를 반환한다 HTTP Response │ ├─ Status Code │ → 요청을 어떻게 처리했는가 │ ├─ Headers │ → 응답에 대한 추가 정보 │ └─ Body → 실제로 반환하는 데이터 지금까지의 전체 흐름도 다음 단계까지 도달했다 URL 입력 ↓ DNS 조회 ↓ IP 주소 획득 ↓ TCP 연결 ↓ TLS Handshake ↓ HTTP Request ↓ Server ↓ HTTP Response ↓ Browser 이제 브라우저가 어떤 요청을 보내고 서버가 어떤 형태로 응답하는지 알게 되었다 하지만 아직 요청과 응답 데이터가 실제 네트워크를 통해 어떻게 이동하는지는 자세히 살펴보지 않았다 다음 글에서는 HTTP 메시지가 네트워크를 통해 이동하는 과정에서 등장하는 패킷과 IP, 라우터 등의 역할을 살펴보려고 한다 HTTP 메시지 ↓ 네트워크를 통한 데이터 전송 ↓ 서버
기본 1. String ↔ char[] String s = "abc"; char[] arr = s.toCharArray(); String t = new String(arr); 2. 문자열 찾기 String s = "abcabcdef"; s.contains("abc"); // true s.startsWith("ab"); // true s.endsWith("yz"); // false int idx = s.indexOf("abc"); // 0 int last = s.lastIndexOf("abc"); // 3 만약 못 찾으면? -1 3. StringBuilder 문자열을 반복해서 조작한다면 그냥 이거 쓰자. 그냥 String 은 불변이라 매번 새 객체를 만들 가능성이 커서 비효율적이다. StringBuilder sb = new StringBuilder(); sb.append("abc"); sb.append(123); sb.append('x'); String res = sb.toString(); // abc123x 삭제, 삽입 sb.deleteCharAt(i); sb.delete(l, r); sb.insert(i, "abc"); 뒤집기, 특정 문자 sb.reverse(); sb.charAt(i); sb.setCharAt(i, 'x'); 불변인 문자열은 수정이 안되는데 StringBuilder 는 setCharAt() 으로 가능하다. 4. 문자열 자르기 String s = "a,b,c"; String[] parts = s.split(","); 단, 정규식이기 때문에 . | + * ? ( ) [ ] { } ^ $ 는 예상과 다른 결과가 나올 수 있음에 유의 그럴 때는 아래처럼 escape 처리해준다. String s = "a.b.c"; String[] parts = s.split("\\."); 5. 숫자 ↔ 문자열 int x = Integer.parseInt("123"); String s1 = String.valueOf(123); 활용 1. 회문 검사 boolean palindrome = true; for (int l=0, r=s.length()-1; l<r; l++, r--) { if (s.charAt(l) != s.charAt(r)) { palindrome = false; break; } } StringBuilder.reverse() 써도 된다. 2. 애너그램 판별 char[] a1 = a.toCharArray(); char[] a2 = b.toCharArray(); Arrays.sort(a1); Arrays.sort(a2); boolean same = Arrays.equals(a1, a2);
◀인디언게임 ◀인디이 이름들이 함께 적혀 있다는 것만으로 실제로 총판 모집이나 총판 권한이 가능하다고 단정할 수는 없습니다. 총판 가능 여부는 해당 운영 주체가 실제로 총판 계약이나 모집을 제공하는지, 그리고 공식적인 조건과 권한이 무엇인지 확인해야 합니다.고게임 ◀블루게임 ◀바이브게임 ◀AK게임 ◀랩터게임 ◀총판 ◀매장
안녕하세요, 홍석이에요 3일만에 돌아왔어요 지옥에서 누가 돌아왔~게 근 며칠동안 과제만 하다가 적을게 부족해서 모아왔어요 그리고 오늘은 매니저님 인스타 아이디도 땄음ᄃᄃ 매니저님 너무 해맑게 우리가 괴롭혀도 웃어주심 이렇게 교육 들으니 시간도 잘가고 재밌긴 하네용ᄏ 암튼 배운거 들어갑니데이 260930(수) 딕셔너리 정렬(오름차순 내림차순) 리스트 정렬은 ‘리스트명.sort()’로 하면 되지만, 딕셔너리는 특정 key값에 대해 정렬해야해서 lambda를 사용해야함,, 딕셔너리명.sort(key = lambda x:x[“key 명”], reverse = True or False) ※True = 내림차순, False = 오름차순 딕셔너리 정렬에 대해 공부했어요,,, 과제하다가 어떻게 해야할지 감도 안와서 열심히 구글링 했답니다 ᄏ 261001(목) 라이브섹션 enumerate() : (index, value) 튜플 구조로 만들어줌 map() : 원소별로 함수를 모두 적용함 filter(함수, 데이터) : 함수에 따라 데이터를 검사해서 걸러줌 def 함수(매개변수1 = n) → 함수에 매개변수를 따로 넣어주지 않을 경우 n을 넣어서 실행함 zip을 통해 리스트 항목을 가져올 수 있음 in 함수 : 특정 문자열이 포함되어 있는지 참 거짓으로 확인 가능 .find(sub) : sub 문자열이 시작되는 인덱스를 반환 없으면 -1 반환 .index(sub) : sub 문자열이 시작되는 인덱스를 반환 없으면 에러 발생 .rfind(), .rindex() : 오른쪽(뒤)부터 검색 이번엔 튜터님 강의덕에 함수들 이빠이 찾았어요 in을 몰라서 과제할때 똥꼬빠짐;; 필요할때 찾아봐야징 261002(금) Pandas 대표 오브젝트 : 시리즈(Series, 1차원), 데이터프레임(DataFrame, 2차원)으로 구성된 데이터 DataFrame 형성 df = pd.DataFrame({ ‘A’ : [1, 2, 3] ‘B’ : [‘a’, ‘b’, ‘c’] }, index=[‘idx1’, ‘idx2’, ‘idx3’]) df ``` 드디어 DataFrame 제대로 이해할 수 있습니다,, 여태까지 뭔지도 모르고 만든 사람이었음ᄏᄏᄏ 이래저래 컬럼 수정도 가능한데 그건 나중에 저 혼자 워드로 볼거임ᄒ 말고는 numpy 라이브러리랑 함수 배웠어요 리스트인데 리스트가 아닌 그렇지만 리스트인 그런 느낌 이걸로 오늘 로또 번호 골랐어요 제발 파이썬님 부탁드려요 아무튼 오늘의 배움은 여기까지. 결론 이제는 진짜 과제하면서 모르는 것만 찾아서 배우다 보니 지식이 압축식으로 늘고 있습니다 과제하면서 어떻게 만들지 고민하고, 뭐가 필요한지 찾고 알아보는게 재밌긴 하달까 어쩌면 나도 여기가 재능..?ᄏᄏ (절대 아니야) 암튼 지금부터 배우는게 나중에 정말 도움이 될거란 믿음과 함께 매일매일 재밌게 공부하고 있습니다 앞으로도 화이또
Dubai's golden desert offers a completely different experience from the city's famous skyscrapers, shopping centers, and modern attractions. A desert safari gives visitors the chance to leave the busy city behind and explore the Arabian Desert through adventure, traditional activities, beautiful landscapes, and relaxing camp experiences. For travelers searching for the Best Dubai Desert Safari Tour , choosing the right experience is important. Star Desert Adventure provides a range of safari options designed around different schedules, activities, and travel preferences. Desert Safari Experiences at a Glance A Dubai desert safari can be simple or activity-packed depending on the package. Visitors can select an experience based on the time of day, preferred activities, privacy, and length of the trip. | Safari Experience | Main Features | Suitable For | | Morning Safari | Desert adventure and outdoor activities | Early travelers | | Evening Safari | Sunset, camp and evening activities | Couples, families and tourists | | Private Safari | Personalized desert experience | Families, couples and groups | | Premium Safari | Enhanced comfort and camp experience | Travelers seeking extra comfort | | Overnight Safari | Desert camping and night experience | Long desert adventures | | Buggy / Quad Bike | Off-road desert activities | Adventure lovers | The Desert Adventure Experience A desert safari usually begins with transportation from the selected pickup location before heading toward the desert. Once outside the city, the scenery changes from buildings and roads to wide open dunes. This transition is part of the experience and gives visitors an opportunity to see a different side of Dubai. Depending on the package, the adventure can include 4x4 dune bashing, camel riding, sandboarding, photography, dune buggy rides, quad biking, and a visit to a desert camp. Dune Bashing: The Thrill of the Dunes Dune bashing is one of the most recognizable activities associated with a Dubai desert safari. A professional driver operates a suitable 4x4 vehicle across the dunes, creating an exciting off-road experience. The route and activity conditions can vary depending on the selected package and desert conditions. Travelers should follow all safety instructions provided before participating. Camel Ride: A Traditional Desert Experience Camel riding adds a traditional element to the safari. Camels have historically been important to desert communities, and riding one gives visitors an opportunity to experience the dunes at a slower pace. The activity is also popular for taking photographs against the desert landscape. Sandboarding Across the Golden Dunes Sandboarding provides an active way to enjoy the desert. Visitors can use a board to slide down suitable dunes and experience the sandy landscape from a different perspective. It can be particularly enjoyable for travelers who want to add another outdoor activity to their safari. Dune Buggy and Quad Bike Adventures Travelers looking for additional off-road activities can explore dune buggy and quad bike experiences. These activities may be available with selected packages. Age limits, safety requirements, operating areas, and availability can differ, so check the package information before booking. Sunset, Camp and Arabian Atmosphere An evening safari adds another dimension to the desert experience. As the sun moves toward the horizon, the dunes take on changing shades of gold and orange. Visitors can capture photographs before continuing to a desert camp included in selected packages. At the camp, guests may enjoy refreshments, dinner, traditional activities, entertainment, and comfortable seating areas depending on the package. Morning Safari for a Fresh Start A Morning Desert Safari Dubai is suitable for travelers who prefer an early adventure. The morning schedule can leave the rest of the day available for city sightseeing, shopping, business meetings, or other activities. Depending on the package, visitors can enjoy dune bashing, camel riding, sandboarding, photography, and other desert experiences. Evening Safari for Sunset Lovers An Evening Desert Safari Dubai is designed around the later part of the day. The experience can combine dune activities with sunset views and time at a traditional-style desert camp. Selected packages may also include dinner, refreshments, entertainment, and cultural activities. Private Safari for Personalized Travel A Private Desert Safari Dubai can be suitable for couples, families, and groups who want a more personalized experience. Private arrangements can provide greater privacy and flexibility depending on the selected package. Travelers should check transportation, activities, meals, and other inclusions before booking. Premium Safari for Additional Comfort A Premium Desert Safari Dubai can be selected by travelers looking for an enhanced desert experience. Depending on the package, premium arrangements may include upgraded camp facilities, seating areas, dining options, or additional services. The exact inclusions should be confirmed before booking. Overnight Safari for a Longer Desert Stay An Overnight Desert Safari Dubai allows guests to continue their experience after the evening activities. Instead of returning to the city, visitors can stay at a desert camp and experience the desert at night. Depending on the package, dinner, camping facilities, breakfast, and morning activities may be included. Choosing the Right Experience Instead of choosing a safari only by its name, consider what you want to experience. For an early schedule: Choose a morning safari. For sunset and camp activities: Consider an evening safari. For privacy: Explore private safari options. For enhanced comfort: Review premium safari packages. For a longer adventure: Consider an overnight safari. For off-road activities: Look for packages offering dune buggy or quad biking. Desert Safari Preparation Checklist Before leaving for your safari, prepare a few basic items: Sunglasses Sunscreen Comfortable clothing Suitable footwear Hat or cap Camera or smartphone Light jacket for cooler evenings It is also useful to review the selected package for transportation, meal arrangements, activity inclusions, and timing. Desert Safari for Families, Couples and Groups Families Families can choose a package based on the ages of travelers and the activities they want to enjoy. Parents should check the requirements for individual adventure activities before booking. Couples Couples can consider evening, private, premium, or overnight safari options depending on their preferred experience. Friends and Groups Groups can choose shared or private arrangements and select activities such as dune bashing, sandboarding, dune buggy, and quad biking according to the package. First-Time Visitors First-time Dubai visitors may prefer a package that combines several experiences, such as dune activities, camel riding, sunset views, and a desert camp. Star Desert Adventure Safari Services Star Desert Adventure* offers a range of desert safari and UAE tour services for visitors with different travel plans. The services include: Dubai Desert Safari Morning Desert Safari Dubai Evening Desert Safari Dubai Overnight Desert Safari Dubai Private Desert Safari Dubai Premium Desert Safari Dubai VIP Private Camp Desert Safari Dune Buggy Dubai Quad Bike Dubai Dune Bashing Camel Ride Dubai Sandboarding Dubai City Tour Abu Dhabi City Tour Quick Answers for Dubai Desert Safari Travelers What is the Best Dubai Desert Safari Tour? The suitable safari depends on your schedule, preferred activities, group size, and desired experience. Star Desert Adventure offers different safari formats for travelers with different requirements. Which safari is suitable for sunset views? An evening desert safari is designed around the later part of the day and can include sunset views, desert activities, and camp experiences. Is a morning desert safari available? Yes. Morning desert safari experiences are available for visitors who prefer an early start. Can families book a desert safari? Yes. Families can select a suitable package after reviewing the activities and participation requirements. Can couples choose a private safari? Yes. Private desert safari options can be suitable for couples who want a more personalized experience. Is camel riding included? Camel riding is available with selected packages. Check the specific package before booking. Is sandboarding available? Sandboarding is available with selected safari experiences. Can visitors stay overnight? Yes. Overnight desert safari packages allow guests to remain at the desert camp after the evening activities. Plan Your Arabian Desert Adventure A Dubai desert safari combines natural scenery, adventure, traditional experiences, and Arabian camp culture in a single journey. The Best Dubai Desert Safari Tour for one traveler may be different from another. Some visitors may want an early adventure, while others may prefer sunset, dinner, private arrangements, or an overnight stay. With Star Desert Adventure , travelers can explore different safari options and choose an experience that fits their Dubai itinerary. Visit Star Desert Adventure to explore Dubai desert safari experiences and plan your desert adventure.
오늘은 영상정보처리기기들에 대해 총체적으로 정리해보려고 한다. 영상정보처리기기는 CCTV, IP카메라, DVR, NVR, 영상회의 시스템 등으로 구분할 수 있다. 또한 기기에 따라 네트워크 설치, IP 주소 할당, ACL/VPN, LAN 설계, 장비 선정, VLAN 및 라우팅 등의 내용이 함께 고려되어야 한다. CCTV·IP Camera·영상정보처리 시스템 이론과 실무 정리 현장 영상 ↓ [렌즈 / 이미지센서] ↓ [ADC / ISP] ↓ [영상 압축 H.264 / H.265] ↓ [Ethernet / PoE / IP Network] ↓ [NVR / VMS / Storage] ↓ [모니터링 / 분석 / 영상인식] CCTV는 단순히 카메라의 종류를 암기하는 문제가 아니다. 최근에는 CCTV가 IP 네트워크에 연결되면서 다음 기술들이 하나의 시스템으로 결합된다. IP Camera Ethernet PoE Switch TCP/IP 영상 압축 NVR 영상인식 네트워크 보안 따라서 CCTV를 공부할 때도 개별 용어보다는 전체 시스템의 데이터 흐름을 이해하는 것이 중요하다. 1. CCTV란? CCTV는 Closed Circuit Television 의 약자로, 특정한 목적과 제한된 사용자 에게 영상을 전달하는 폐쇄형 영상 시스템이다. 일반적인 CCTV 시스템은 크게 다음과 같이 구성된다. 카메라 → 전송망 → 저장장치 → 모니터링 장치 IP CCTV에서는 이를 조금 더 구체적으로 표현할 수 있다. IP Camera → PoE Switch → Ethernet/IP Network → NVR 또는 VMS → Monitoring PC 2. CCTV 시스템의 기본 구성 2.1 카메라 현장의 빛을 전기적 또는 디지털 영상 신호로 변환한다. 주요 구성요소는 다음과 같다. 구성 역할 Lens 빛을 이미지 센서에 집광 CMOS/CCD 광 신호를 전기 신호로 변환 ISP 노출, 색상, 노이즈 등을 영상 처리 Encoder H.264/H.265 등으로 영상 압축 CPU/Memory 카메라의 제어 및 영상 처리 Network Interface Ethernet을 통한 영상 전송 아날로그 CCTV와 IP Camera 아날로그 CCTV 카메라에서 발생한 영상 신호를 동축케이블 등을 이용해 DVR로 전달하는 방식이다. Camera │ Coaxial Cable ▼ DVR │ ▼ Monitor IP Camera 카메라 자체가 영상을 디지털화하고 압축하여 Ethernet/IP 네트워크로 전달한다. IP Camera │ Ethernet / PoE │ ▼ PoE Switch │ ├── NVR ├── VMS └── Monitoring PC 구분 아날로그 CCTV IP Camera 전송 영상 전용 신호 Ethernet/IP 케이블 동축 중심 UTP/Fiber 저장 DVR NVR/VMS 확장성 상대적으로 낮음 높음 원격접속 별도 장비 필요 네트워크 기반 전원 별도 전원 사용 가능 PoE 사용 가능 3. PoE와 IP Camera PoE(Power over Ethernet)는 Ethernet 케이블을 이용하여 데이터와 전원을 동시에 공급하는 기술이다. Data + Power PoE Switch ─────────────── IP Camera UTP Cable IP Camera 설치에서는 다음 3개를 동시에 확인해야 한다. PoE 규격 포트별 공급 가능 전력 스위치 전체 PoE Budget 카메라 1대 소비전력 = 12 W 카메라 수 = 8대 필요 전력 = 12 × 8 = 96 W 스위치가 8포트라고 해서 반드시 8대의 카메라에 충분한 전원을 공급할 수 있는 것은 아니다. 예를 들어 전체 PoE Budget이 65 W이면 필요 전력 96 W > 공급 가능 전력 65 W 이므로 정상 운용이 어렵다. PoE 공급 가능 전력이 CCTV의 소비전력보다 부족하거나, 스위치의 대역폭 부족 및 트래픽 과부하가 발생하면 영상이 불안정해질 수 있다. 4. 영상 압축 Codec IP Camera가 촬영한 원본 영상은 데이터 크기가 매우 크다. 따라서 네트워크로 전송하거나 저장하기 전에 압축 과정이 필요하다. 대표적인 영상 코덱이 H.264와 H.265이다. H.264 / AVC Advanced Video Coding. 현재도 CCTV, 스트리밍, 영상회의 등에서 널리 사용되는 영상 압축 규격이다. H.265 / HEVC High Efficiency Video Coding. H.264보다 높은 압축효율을 목표로 설계된 규격이다. 일반적으로 동일한 화질 조건에서 H.264보다 필요한 비트레이트를 낮출 수 있다. Codec ├─ H.264 ├─ H.265 └─ AAC / G.711 Signaling ├─ SIP └─ H.323 Video Streaming / Control ├─ RTSP └─ ONVIF Web Real-time Communication └─ WebRTC H.264와 WebRTC는 같은 종류의 기술이 아니다. H.264는 영상 압축 코덱, WebRTC는 웹 브라우저 기반 실시간 통신 기술 체계로 구분하는 것이 실무적으로 정확하다. 기술 의미 실제 예 Motion Detection 움직임 검출 침입 감지 Object Detection 객체 검출 사람·차량 탐지 Face Recognition 얼굴 인식 출입통제 LPR / ANPR 차량번호 인식 주차관제 Behavior Analysis 행동 분석 쓰러짐·배회 감지 Pattern Recognition 패턴 인식 이상상황 분류