HTTP/2.0 HTTP/2.0은 서버와 클라이언트 사이의 TCP 커넥션 위에서 동작한다. 이때 TCP 커넥션을 초기화하는 것은 클라이언트이다. HTTP/2.0 요청과 응답은 길이가 정의된(최대 16383바이트) 한 개 이상의 프레임에 담긴다. 프레임들에 담긴 요청과 응답은 스트림을 통해 보내지는데, 한 개의 스트림이 한 쌍의 요청과 응답을 처리한다. 하나의 커넥션 위에 여러개의 스트림이 동시에 만들어질 수 있으므로 여러 개의 요청과 응답을 동시에 처리하는 것이 가능하다. 또한 스트림에 대한 흐름 제어와 우선순위 부여 기능도 제공한다. 서버는 클라이언트에게 필요하다고 생각하는 리소스라면 그에 대한 요청을 명시적으로 받지 않더라도 능동적으로 클라이언트에게 보내줄 수 있다. 스트림 스트림은 HTTP/2.0 ..
캐시란? 웹 캐시는 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치이다. 웹 요청이 캐시에 도착했을때 캐시된 로컬 사본이 존재한다면, 그 문서는 윈 서버가 아니라 그 캐시로부터 제공된다. 캐시의 이점 1) 불필요한 데이터 전송을 줄여서, 네트워크 요금으로 인한 비용을 줄여준다. 2) 네트워크 병목을 줄여준다. 대역폭을 늘리지 않고도 페이지를 빨리 불러올 수 있게한다. 3) 캐시는 윈 서버에 대한 요청을 줄여준다. 서버는 부하를 줄일 수 있고 더 빨리 응답할 수 있다. 4) 페이지를 먼 곳에서 불러올수록 시간이 많이 걸리는데, 캐시는 거리로 인한 지연을 줄여준다. 여러개의 클라이언트가 서버에 같은 문서를 요청할때, 서버는 클라이언트들에게 각각 한번씩 전송하게된다. 똑같은 바이트들이 네트워크를 통..
TCP Connection 모든 HTTP 통신은 TCP/IP를 통해 이루어진다. TCP/IP 통신은 패킷 교환 네트워크 프로토콜들의 계층화된 집합이다. 클라이언트 애플리케이션은 서버 애플리케이션으로 어디서든 TCP/IP 커넥션을 맺을 수 있다. 커넥션이 맺어지면 클라이언트와 서버 컴퓨터 간에 주고받은 메시지들은 어떠한 정보도 바뀌지 않고 안전하게 전달된다. URL을 입력하는 브라우저는 어떤 단계를 수행할까? (1) 브라우저가 www.test.com 이라는 호스트명을 추출한다. (2) 브라우저가 이 호스트 명에 대한 IP 주소를 찾는다. (ex) 202.42.71.8) (3) 브라우저가 포트번호 80을 얻는다. (4) 브라우저가 202.42.71.8의 80 포트로 TCP 커넥션을 생성한다. (5) 브라우저..
네트워크 간의 연결구조 서로 다른 네트워크에 있는 목적지로 데이터를 전송하기 위해 필요하다. 데이터 링크 계층에서는 이더넷 규칙을 기반으로 데이터의 전송을 담당하는데, 이 규칙에 따라 같은 네트워크에 있는 컴퓨터로는 데이터를 전송할 수 있다. 하지만, 인터넷이나 다른 네트워크로는 데이터를 전송할 수 없다. 그래서, 네트워크 간의 통신을 가능하게 하는 것이 네트워크 계층의 역할이다. 이 계층을 통해 다른 네트워크로 데이터를 전송하려면 라우터라는 네트워크 장비가 필요하다. 라우터 라우터는 데이터의 목적지가 정해지면 해당 목적지까지 어떤 경로로 가는 거시 좋은지를 알려주는 기능을 한다. IP 주소 : 그리고 라우터가 목적지까지의 경로를 알려주기 위해서는 데이터를 보내려는 상대가 어디에 있는지 알아야하는데, 이..
HTTP (Hypertext Transfer Protocol) 웹 어플리케이션, 웹 브라우저, 서버는 모두 HTTP를 통해 서로 대화한다. HTTP는 전 세계의 웹 서버로부터 이 대량의 정보를 빠르고, 간편하고, 정확하게 사람들의 PC에 설치된 웹 브라우저로 옮겨준다. HTTP는 신뢰성 있는 데이터 전송 프로토콜을 사용하기 때문에, 데이터가 지구 반대편에서 오더라도 전송 중 손상되거나 꼬이지 않음을 보장한다. 웹 서버와 클라이언트 웹 콘텐츠는 웹 서버에 존재한다. 웹 서버는 HTTP 프로토콜로 의사소통하기 때문에 보통 HTTP 서버라고 불린다. 이들 웹 서버는 인터넷의 데이터를 저장하고, HTTP 클라이언트가 요청한 데이터를 제공한다. 클라이언트는 서버에게 HTTP 요청을 보내고 서버는 요청된 데이터를 ..
메시지란? HTTP 메시지는 HTTP 애플리케이션 간에 주고받은 데이터의 블록이다. HTTP는 원서버 방향을 인바운드로 하여 송신된다. 인바운드 : 메시지가 원 서버로 향하는 것 아웃바운드 : 모든 처리가 끝난 후, 메시지가 사용자에게 돌아오는 것 결과적으로 클라이언트->서버가 인바운드이고, 서버에서 처리 후 클라이언트로 다시 돌아갈때의 서버->클라이언트가 아웃바운드이다. HTTP 메시지는 단순한 데이터 구조화된 블록이며 각 메시지는 클라이언트로부터의 요청이나 서버로부터의 응답 중 하나를 포함한다. 메시지의 구조는 시작줄, 헤더블록, 본문 이다. 시작줄 : 이것이 어떤 메시지인가? 헤더블록 : 속성 본문 : 데이터 또는 빈값 시작줄과 헤더는 줄 단위로 분리된 아스키 문자열이다. 본문은 단순히 선택적인 데..
URL (Iniform Resource Locator) URL은 인터넷의 리소스(웹에서 사용되는 식별할 수 있는 모든 자원)를 가리키는 표준 이름이다. URL은 전자 정보 일부를 가리키고 그것이 어디에있고 어떻게 접근할 수 있는지 알려준다. 브라우저가 정보를 찾는데 필요한 리소스의 위치를 기리킨다. URL을 통해 사람이 HTTP 및 다른 프로토콜을 통해 접근할 수 있다. 사용자는 브라우저에 URL을 입력하고 브라우저는 화면 뒤에서 사용자가 원하는 리소스를 얻기 위해서 적절한 프로토콜을 사용하여 메시지를 전송한다. URL 구조 http://www.test.com/index.html 1) http : 웹 클라이언트가 리소스에 어떻게 접근하는지 알려주는 URL의 스킴이다. HTTP 프로토콜을 사용한다. 2) ..
도입부 많은 사람들이 웹을 통해 개인적인 업무를 보거나 개인적인 데이터에 접근한다. 웹은 이런 편리함을 제공해주지만, 모든 정보나 업무가 공용은 아니기 때문에, 허가된 사람만이 데이터에 접근하고 업무를 처리할 수 있어야한다. 웹 사이트에 있는 개인의 프로필이나 개인이 작성한 문서는 해당 소유자의 동의 없이는 권한 없는 사용자가 볼 수 없어야한다. 그러기 위해서는 서버가 사용자가 누구인지 식별할 수 있어야한다. 서버가 사용자가 누군지 알면, 그 사용자가 어떤 작업이나 리소스에 접근할 수 있는지 결정할 수 있다. 인증이란, 당신이 누구인지 증명하는 것이다. 보통 사용자 이름과 비밀번호를 입력해서 인증한다. HTTP는 자체적인 인증 관련 기능을 제공한다. HTTP의 인증요구/응답 프레임워크 HTTP는 사용자 ..
웹 서버란? 웹 서버는 HTTP 요청(request)을 처리하고 응답(response)을 제공한다. 웹 서버라는 용어는 웹 서버 소프트웨어와 웹페이지 제공에 특화된 장비 모두를 가리킨다. 모든 웹 서버는 리소스에 대한 HTTP 요청을 받아서 콘텐츠를 클라이언트에게 돌려준다. 1) 웹 서버는 HTTP 및 그와 관련된 TCP 처리를 구현한 것이다. 2) 웹 서버는 자신이 제공하는 리소스를 관리하고 웹 서버를 설정, 통제, 확장하기 위한 관리 기능을 제공한다. 3) 웹 서버는 HTTP 프로토콜을 구현하고, 웹 리소스를 관리하고, 웹 서버 관리기능을 제공한다. 4) 웹 서버는 TCP 커넥션 관리에 대한 책임을 운영체제와 나눠갖는다. 5) 다목적 소프트웨어 웹서버 : 네트워크에 연결된 표준 컴퓨터 시스템에서 작동..
에러발견 스프링부트 환경설정을 진행하다가 공통 에러처리를 하는데 발견한 에러였다. 404 eroor가 발생하면 내가 생성한 공통 에러처리 부분을 타야하는데 계속해서 스프링부트에서 제공하는 404 에러페이지가 나왔다. 해결방안 **.yml 파일 안에 아래 코드를 넣어주자. spring: # error 404 mvc: throw-exception-if-no-handler-found: true dispatch-options-request: false
@Override 어노테이션의 사용 자바 코드에서 메소드에만 선언할 수 있는 @Override 어노테이션이 있다. @Override public boolean equals(Object b) { return b.test == test } 위 예제코드로 @Override 어노테이션의 의미를 설명해보자. 상위 타입의 메서드를 재정의했다는 의미인데, 위 예제의 클래스가 Object 클래스(상위 타입)의 equals 메서드를 재정의한 것이다. 기존의 Object 클래스의 equals 메서드가 아닌 해당 메서드를 재선언하여 새로 선언한 로직을 실행하겠다는 의미이다. @Override 어노테이션을 일관되게 사용하면 여러 버그들을 예방할 수 있다. @Override 메서드의 잘못된 사용 예제 main 메서드를 보면 똑..
스프링 DI (Dependency Injection)란? 자바에서 객체를 생성하기 위해서는 Test test = new Test(); 을 사용한다. new 연산자를 사용하여 인스턴스를 생성하는 행위이다. 이와 다르게, DI는 위 코드처럼 객체를 생성시키는게 아닌, 외부에서 객체를 생성해서 주입시켜주는 방식이다. DI는 필요한 객체를 해당 .java 파일 안에서 new 연산자를 통해 생성하는 것이 아닌, 외부에서 생성된 객체 중 필요한 객체를 연결하는 것이다. 필드 주입 결론적으로, 필드 주입을 사용하는 것은 추천하지 않는다. @Autowired private Mapper mapper; 위 코드를 IntelliJ IDE에서 사용하면 @Autowired 에 경고가 뜨게된다. Field injection is..
Map null값 체크 //collections4 compile "org.apache.commons:commons-collections4:4.0" MapUtils를 사용하여 map 객체의 null 체크가 가능하다. Map map = new HashMap; MapUtils.isEmpty(map); MapUtils.isEmpty() /** * Null-safe check if the specified map is empty. * * Null returns true. * * @param map the map to check, may be null * @return true if empty or null * @since 3.2 */ public static boolean isEmpty (final Map map..
src/resources 폴더 안의 파일 읽기 package io.security.basicsecurity.controller; import java.io .*; public class GetFile { public static void main(String[] args) { FileInputStream file = null; BufferedReader br = null; ClassLoader loader = GetFile.class.getClassLoader(); try { file = new FileInputStream(loader.getResource("F1014/file.txt").getFile()); br = new BufferedReader(new InputStreamReader(file, "..
24시간(하루) 이내에 업로드된 데이터 찾기 SELECT COUNT(*) FROM test WHERE created_date > DATE_ADD(now(), INTERVAL -1 DAY); 작성날짜 컬럼 created_date 일때, DATE_ADD(now(), INTERVAL -1 DAY)를 사용하면된다.
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.