본문 바로가기

전체 글

(278)
http 란 무엇일까 1. HTTP란? HTTP란 Hyper Text Transfer Protocol 의 약자이다. 즉 HTTP는 프로토콜의 일종이다. 인터넷에서 우리는 웹 페이지(HTML), text, 이미지, 음성등의 데이터를 주고 받는다. 이때 데이터를 주고 받을 수 있게 해주는 프로토콜이 HTTP이다. 2. HTTP 의 동작 클라이언트와 서버는 request(요청) 와 response(응답) 를 한다. 요청과 응답시에는 각각 자신의 정보를 담은 메세지를 상대에게 보내는데, 이 메세지를 HTTP 메세지라 한다. HTTP 메세지는 start line / header / body 로 구성이된다. start line 은 요청시에는 메소드 버전, 요청이 전송되는 주소(request target), http 버전의 의 정보를 가..
blocking 과 non blocking 비동기 이벤트 기반 방식을 다루기 전에 그 이외의 방식을 다뤄보자 1. blocking vs non blocking blocking 과 no blocking은 호출되는 함수가 바로 리턴이되는가의 여부가 관심사이다. blocking의 경우 바로 리턴되지 않으며, non blocking의 경우에는 바로 리턴이 된다. 2. sync vs async 이 두가지는 상호 비교 대상이 되기 어려운데 바라보는 관점이 다르기 때문이다. sync/ async 는 호출되는 함수의 작업 완료 여부를 누가 신경쓰냐가 관심사이다. sync (동기 기반) : 호출되는 함수의 작업 완료 여부를 신경쓰는 것은 호출하는 함수이다. 즉 작업을 요청한 측에서 작업의 완료여부를 체크한다. async (비동기 기반) : 호출되는 함수의 작업 ..
웹서버 nginx 1. nginx 란 무엇일까 오픈소스에 유료지원도 있는 웹 서버이다. 가볍고 높은 성능을 목표로 하고 있으며 웹서버, 리버스 프록시, 메일프록시 와 같은 기능도 수행할 수 있다. 거의 모든 unix 계열 OS에서 지원되며, windows 에서는 부분적으로 지원이된다. niginx를 설명하는 키워드들은 event driven 아키텍쳐 / 적은 메모리 사용 / C10K problem의 해결 등으로 말 할 수 있을것 같다. 2. nginx 의 대략적인 특징 async event-driven 방식을 사용하는 이벤트 지향 아키텍쳐이다. 메모리 생성 속도가 빠르다. 더 적은 쓰레드로 많은 클라이언트 처리가 가능하다. 환경설정을 바꾼 후 서버 데몬을 재시작할 필요 없이 reload 신호만 보내면 된다. 즉, 프로세스..
포워드 프록시 와 리버스 프록시 한번쯤 들어본 톰캣과 같은 was나 아파치 웹 서버는 한번쯤 들어봤을 것이다. 아파치 웹서버에는 mod_proxy 라는 모듈에서 forward proxy 와 reverse proxy 이 두가지 기능을 제공한다. 반면 nignx는 reverse proxy 만 제공한다고 한다. 그럼 proxy와 reverse proxy, forward proxy란 무엇일까 1.proxy 서버 프록시 서버는 컴퓨터 시스템이나 프로그램이다. 클라이언트가 자신을 통해 네트워크 서비스에 간접적으로 접속을 할 수 있게 하는 역할이다. 즉, 서버와 클라이언트 사이에 있는 녀석이다. 프록시를 둠으로서 서버로 요청된 내용을 임시저장해 놓고 (캐싱) 그럼 왜 쓸까? -- 동일한 요청에 대해 응답을 바로 주는 등의 장점때문에 사용한다. 즉,..
... -여러개의 파라미터를 받고 싶을 때 public class Test{ public static void main(String[] args) { Test t= new Test (); t.test("test1","test2","test3"); } } class TestClass{ //String... 은 여러개의 파라미터를 받는다는 소리 public void test(String... strs) { System.out.println(strs[0]);// test1 System.out.println(strs[1]); // test2 } } 참고 https://haneulnoon.tistory.com/168
escape() , unescape() 1. escape() escape() 는 알파벳과 숫자, 특수문자를 제외한 문자를 모두 16진수 문자로 바꾸어 준다. 더 정확히는 아스키문자에 해당하지 않는 문자들을 모두 유니코드 형식으로 변환해준다. 그리고 그 형식이 16진수이다. 이 함수는ㄴ 쉼표와 세미콜론과 같은 문자가 쿠키문자열과 충돌되지 않기 위해 사용한다. - 예시 document.write(escape("인코딩, escape")); [escape 인코딩한 결과] %uC778%uCF54%uB529%2C%20escape 2.unescape escape 를 한 결과를 원상태로 돌리고 싶을 때 사용한다. document.write(unescape(escape("인코딩, escape"))); [escape 인코딩한 결과] %uC778%uCF54%uB..
Serializable (직렬화) 란? //transient 는 직렬화의 예외 class TransientTest implements Serializable{ int a = 1; String b = "2"; private transient String tt ="이건 제외가 된다."; } 1. serialize 란? 직렬화는 기술이다. 이 기술은 데이터를 변환하는 기술이다. JVM의 시스템 내부에서 사용되는 Object 혹은 Data는 자바 외에서는 쓸 수 없다. 이 때 자바 외부에서 이러한 데이터를 사용할 수 있게끔 byte 형태로 데이터를 변환하는 기술이 직렬화(serialize) 이다. 즉, jvm 메모리에 있는 개게 데이터를 byte 형태로 변환하는 기술이다. 2. Deserialize 역직렬화이다. Object to Byte 인 기술이..
숫자 천단위에 ,(콤마) 찍기 1. StringBuilder 와 insert를 이용하여 public class main { public static String addComma(String number){ StringBuilder sb = new StringBuilder(number); int numberLength = number.length(); int commaCount = ( numberLength -1 ) /3; for(int i = 0, k=1; i