얼마전에 다음과 같은 이슈가 들어왔다. 톰캣과 JEUS(상용 WAS서버의 하나)의 Location Header가 다르다. 톰캣은 Location 헤더에 상대경로를 사용하고 있고, JEUS는 절대경로를 사용하고 있다. 이로 인해 톰캣 기반으로 만든 솔루션이 오작동 하고 있다. 톰캣의 http 헤더 참고로 제우스는 location header 를 보낼 때 절대경로로 보낸다(주소가 들어가 있어 사진은 생략). 아마 솔루션 개발자 측에서는 당연히 상대경로로 올것이라고 예상하고, 절대경로로 변환하는 로직을 넣었을 것이라고 추정해볼 수 있다. 여기서 우리가 살펴봐야 할 것은 두 가지이다. Location 헤더가 뭐지? 왜 톰캣과 제우스가 동작이 다를까? 이에 대해서는 HTTP/1.1 스펙과 서블릿 스펙, 톰캣의 b..
자바의 InputStream과 OutputStream은 외부와의 I/O를 위한 인터페이스를 제공한다.이번에 다룰 주제인 InputStream은 I/O 중 I에 대한 부분을 다룬다. 대표적인 3가지 사용처는 콘솔과의 표준 입출력, 파일 입출력, 소켓과의 입출력이다. 오늘 다룰 내용은 자바 ee 어플리케이션에서의 inputstream이다. 자바 ee 서버에서는 HttpServletRequest가 존재하고,이 클래스를 통해 inputstream을 가져올 수 있게 되어 있다. 그렇기 때문에, request.getInputStream(); 과 같은 형태로 서블릿 내에서 inputstream을 받아와 사용할 수 있는 것이다.톰캣에서는 CoyoteInputStream이란 이름으로 단일한 형태의 inputstream을..
지난 번에 이슈를 처리하고 나서, 새롭게 잘못된 부분이 나왔다.이에 따라 새롭게 공부하면서 누락된 부분이 있어 내용을 추가한다. ajp 헤더는 아파치에서 java ee 서버로 메시지를 보내는 것으로 시작한다.지난번 포스팅에서 말했듯이 첫 메시지는 http 메시지를 담고 있다. 이는 다르게 말하면 두번째 메시지부터 http 바디를 보낸다는 뜻이다.그런데 여기에서 버그를 유발하는 부분이 있었다. 스펙에 따르면 http content-length를 고려하도록 되어 있다.먼저, content-length가 있는 경우와 없는 경우로 동작이 갈린다. content-length가 있는 경우에는, 0보다 큰 경우에는 바로 body를 1개 보낸다.content-length가 없거나 0인 경우엔 자바 어플리케이션 쪽에서 ..
이슈 처리하다가 AJP 프로토콜에 대해 공부해야할 일이 생겼다.이슈 내용은 AJP 요청 header의 payload length가 0일 때 요청을 제대로 처리 못한다는 것이었다.문제는 요즘 아파치나 IIS에서는 payload length에 0을 넣어서 보내지 않는다는 것이었다.그래서 테스트를 위해 AJP 구조에 대해 공부를 해야 했다. 참고로 이 포스팅에 있는 모든 내용은https://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html에 있습니다. AJP 프로토콜에서는 아파치가 클라이언트, J2EE 서버가 서버 역할이다.아파치가 앞단에서 브라우저로부터의 요청을 받고, 그것을 파싱해 서버에게 넘긴다.그림으로 표현하면 아래와 같다. 브라우저는 아파치로 HTTP 요청을 보..
보통 톰캣 서버나 JAVA EE 서버를 사용할 때에는 load balancing을 위해 nginx나 apache 등 웹 서버를 배치한다.이중 아파치와 톰캣을 연결하기 위해 크게 AJP 프로토콜과 reverse proxy를 사용한다.reverse proxy는 자바 서버나 아파치에 국한되지 않고, 모든 종류의 서버에 사용할 수 있다는 장점이 있지만, 설정이 좀 더 복잡하다.AJP 프로토콜은 아파치 재단에서 만든 프로토콜인데, 아파치 웹 서버와 JAVA EE 서버 간의 연결을 위한 프로토콜이다. 지난 포스팅에서는 apache를 빌드했었다. 저 빌드로는 아파치에서 기본적인 html 페이지밖에 띄워주진 못하지만, 목적이 실제 운영이 아닌 AJP 프로토콜을 이용한 통신에서 테스트하는 것에 있으므로 php 등이 작동..
AJP 프로토콜 관련 테스트를 할 필요가 있어 아파치를 설치하게 되었다.사용하는 OS는 ubuntu 16.04 이다. 사실 아파치는 좋은 명령어가 있다. sudo apt-get install apache2 근데 이렇게 하면 테스트 설정하고 전혀 안맞아서 쓸 수가 없었다.그래서 직접 다운로드 받아서 빌드를 해야했다.고통의 연속이다. ./configure --prefix=PREFIXmakemake install 기본적으로 이 명령어가 시용된다.정말로 많은 것이 생략되어 있다. 하나씩 알아봐야겠다. 먼저 저 3개의 명령어는 전부다 닉값을 한다.configure는 makefile이라는 설정파일을 만들어준다. configure에 들어가는 옵션들이 반영된다.make는 makefile에 정해진 규칙에 따라 컴파일을 ..
- Total
- Today
- Yesterday
- JPA
- 한국교통안전공단
- 이륜차
- tomcat
- 알리익스프레스
- 전세사기
- springboot
- Java17
- ouath2
- k베뉴
- n+1
- Request
- 광군제
- 탈세
- 부가가치세
- 공익제보단
- Azure
- 홈택스
- Thymeleaf
- 티스토리챌린지
- 안전신문고
- java
- 현금영수증
- 토스페이
- ORM
- 알리
- springboot3
- 포상금
- 오블완
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |