본문 바로가기

분류 전체보기45

웹서버와 서블릿 통신 실습 환경: GCP Debian-10-buster 아파치 설치 sudo apt update && sudo apt -y install apache2 아파치를 설치하면 확인방법은 http://{IP주소}:80 으로 들어가면 아파치 기본 페이지가 뜬다. 아파치와 내장 톰캣 연동 아파치와 내장 톰캣을 연동하기 위해서는 mod_jk, mod_proxy 방식이 있는데 일단 mod_jk방식부터 설명하겠다. mod_jk 설치 mod_jk는 아파치와 톰캣을 연동하기 위한 모듈로 AJP 통신을 가능하게 해준다. 또한 Load Balancing과 Fail Over을 통해서 안정적인 운영을 할 수 있도록 해준다. 위 환경에서 설치 방법은 아래의 커맨드를 통해 할 수 있다. #mod_jk 설치 sudo apt-get install .. 2021. 3. 10.
웹서버와 서블릿 컨테이너의 통신 (AJP) 우리가 잘 아는 웹서버는 아파치, Nginx 등이 있다. 또한 서블릿 컨테이너(WAS)에는 톰캣, Jetty, WebLogic, Jeus 등이 있다. 보통 웹서버는 정적 리소스를 처리할 때 사용한다고 알려져 있고, 서블릿 컨테이너는 동적 리소스를 처리한다고 알려져 있다. 웹서버는 또한 로드밸런싱을 통해 WAS인스턴스 여러 대에 분산 처리가 가능하다. 그렇다면 WebServer와 WAS는 어떻게 통신하는 걸까? 방법은 AJP 프로토콜과 reverse proxy를 사용할 수 있다. AJP 프로토콜은 아파치 재단에서 만든 프로토콜로, 아파치 웹서버와 JAVA EE 서버간의 연결을 위한 프로토콜이다. Reverse Proxy는 아파치와 자바에 국한되지 않고 모든 서버에서 사용가능하다. 오늘은 AJP 프로토콜로 .. 2021. 3. 8.
IntelliJ에서 SpringBoot와 jsp 연결시 발생 에러 SpringBoot가 JSP대신 Thymeleaf를 지원하기 때문에 거의 사용하진 않겠지만 간혹 JSP를 사용하는 경우도 있다. 이때 IntelliJ에서 바로 실행했을 때 JSP파일을 찾지 못해서 문제가 발생하는 경우가 있다. 일단, SpringBoot에서 JSP를 사용하는 법을 먼저 알아보면, maven 기준으로 pom.xml에 아래 두개의 dependency를 넣어준다. javax.servlet jstl org.apache.tomcat.embed tomcat-embed-jasper provided 또한 jar패키징을 사용하면 안되고, war로 패키징을 해야한다. 그리고 src/java/main 밑에 webapp이라는 디렉토리를를 추가해주고 그 밑에 WEB-INF라는 디렉토리도 넣어줘야 한다. 이제 a.. 2021. 1. 12.
Servlet과 Spring MVC Servlet과 Spring MVC 서블릿(Servlet) 자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. 서블릿을 사용하는 방법은 서블릿 애플리케이션을 만든 다음 web.xml에 servlet을 등록해주고 servlet을 원하는 url과 매핑해준다. public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { System.out.println("Do Get"); resp.getWriter().p.. 2021. 1. 7.
멀티 쓰레드 환경과 스프링 빈 멀티 쓰레드 환경과 스프링 빈 스프링 빈은 대부분 Singleton 패턴으로 생성되어 Application Context에 의해서 관리된다. 즉, 모든 Controller, Service, Repository는 하나의 인스턴스만 갖고 있는 것이다. 그런데 스프링 환경자체는 멀티 쓰레드인데 어떻게 Thread-Safe를 유지할 수 있을까 궁금해졌다. 정답부터 말하면 Thread-Safe하지 않다. 단지, Thread-Safe하도록 코드를 짤 뿐이다. 일단 구조를 Spring에서 요청이 들어오면 그 요청은 각각 하나의 쓰레드가 맡게 된다. 즉 모든 쓰레드는 스프링 빈을 공유하고 내부의 멤버변수도 공유하게 되는 것이다. 하나의 예를 보자 @RestController public class UserControl.. 2021. 1. 6.
JPA (Java Persistence API) JPA JPA (Java Persistence API)란 현재 자바의 ORM 표준 인터페이스를 말한다. JPA는 인터페이스라 기술 스펙일뿐 실제로 구현을 해야한다. 그리고 JPA를 구현한 기술이 hibernate이다. Hibernate이외에도 DataNucleus, EclipseLink같은 다른 구현체들이 존재한다. 그렇다면 JPA에서 가장 핵심인 영속성 컨텍스트(Persistence Context)에 대해서 알아보자 영속성 컨텍스트(Persistence Context) 영속성 컨텐스트란 엔티티를 영구 저장하는 환경이라는 뜻이다. 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 .. 2021. 1. 5.