본문 바로가기

분류 전체보기115

[서블릿] - ServletRequest의 Character Encoding을 utf-8로 설정해야 하는 이유 1. 서블릿 Request 인코딩 문제 @WebFilter(urlPatterns = { "/*" }) public class UTF8Filter extends HttpFilter { @Override protected void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException { req.setCharacterEncoding("UTF-8"); chain.doFilter(req, res); } } POST 메소드로 들어오는 서블릿 리퀘스트에서 데이터를 뽑아내면 한글의 경우 깨지는 문제가 발생한다. 그래서 위와 같이 필터(Fitler)를 사용해 POST re.. 2024. 1. 5.
[HTTP] - Connectionless와 지속 연결 및 stateless와의 차이 1. TCP 프로토콜의 연결 작업의 오버헤드 HTTP 프로토콜은 네트워크 5계층에서 가장 최상단인 애플리케이션 레이어(Application Layer)에 속하는 프로토콜로서, 웹(World Wide Web)이라 불리는 인터넷 정보 공유 시스템의 기반이 되는 프로토콜이다. 전송 레이어와 네트워크 레이어로는 각각 TCP와 IP 프로토콜 위에서 동작한다. 특히 TCP는 연결에 있어서 안전성이 UDP 프로토콜보다 좋기 때문에 TCP는 UDP에 비해 성능 저하를 감수하는 대신 제대로 된 연결(Connection)을 보장해준다. TCP의 연결 과정에서 three way handshake 라고 불리는 방식은 알고 보면 어떻게든 해서라도 서로 연결이 되었는지 확인하겠다는 의도에서 구현된 기술이다. 딱 그만큼 연결을 보.. 2024. 1. 5.
논리 주소, 물리 주소 차이와 하드웨어적 메모리 보호 기법 1. 컴파일 단계에서부터 결정되어야 한다 논리 주소(가상 주소라고보 부른다)를 활용하기 위해서는 컴파일러가 미리 소스코드를 "실행 시간 바인딩(run time binding)"이 가능한 코드로 컴파일해야 한다. 궁극적으로 모든 프로그램은 메모리에 적재되어 CPU에 의해 실행되어야 한다. 따라서 어떻게 CPU가 프로그램의 메모리 상의 주소를 참조해 데이터를 긁어올 수 있는지 표준을 정해야 할 것이다. 컴파일러는 메모리 참조 방식(주소 바인딩, address binding)을 근거로 소스코드를 컴파일해야 한다. 다음은 그 종류다. 1-1. 컴파일 타임 바인딩 컴파일 단계에서 구체적인 물리 주소를 결정하는 식이다. 따라서 기계어 명령어에 이미 구체적인 참조 물리 주소가 적히는 식이다. 따라서 프로그램이 적재될.. 2024. 1. 3.
[톰캣] - 프로젝트 배포 시 라이브러리 위치 1. 톰캣 자체 내장 라이브러리 자바 웹 백엔드 프로젝트는 여러 라이브러리에 의존한다. 따라서 실제 배포를 할 때는 내가 사용하고 있는 라이브러리를 잘 분류하고 관리할 수 있어야 한다. 예를 들어, 롬복(lombok)처럼 소스코드를 수정만 할 뿐, 일단 컴파일하고 나면 더 이상 사용하지 않는 라이브러리는 배포할 때는 필요 없을 것이다. JUnit과 같은 테스트 프로그램도 마찬가지다. 배포 시에는 JUnit 라이브러리는 필요 없다. 이때 필수적인 의존성 라이브러리 중 일부는 너무나 중요한 기술이기 때문에 이미 톰캣 프로그램 자체에서 라이브러리가 내장된 경우가 있다. 예를 들어, Serlvet이 그러한 기술이다. 톰캣이 서블릿 객체를 관리하고 실행하는 서블릿 컨테이너이기 때문에 서블릿 코드를 이미 확보하고 .. 2024. 1. 3.