본문 바로가기
728x90
반응형

전체 글596

[Spring] 동시요청 - 멀티 쓰레드 WAS가 요청을 받았을 때, 커넥션이 연결되고, 서블릿을 호출하는 역할을 하는 것이 있다. 서블릿 객체를 누가 호출하는가? 바로 쓰레드이다. 쓰레드는 애플리케이션 코드를 하나하나 순차적으로 실행하는 역할을 한다. 자바의 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행된다. 쓰레드가 없다면 자바 애플리케이션 실행이 불가능하다. 쓰레드는 한번에 하나의 코드 라인만 수행한다. 동시 처리가 필요하면 쓰레드를 추가로 생성할 수 있다. 단일 요청이 들어오고 하나의 쓰레드만 사용할 때, 여러 개의 요청이 들어오고 하나의 쓰레드만 사용할 때, 요청마다 쓰레드를 생성하면, 요청마다 쓰레드를 생성할 때, 장점으로는 동시 요청을 처리할 수 있고, 리소스(CPU, 메모리)가 허용할 때까지 처리가 가능하다 하나.. 2023. 5. 15.
[Spring] 서블릿(Servlet) 개념 우리는 데이터를 웹 브라우저에서 전송할 때 Form을 사용한다. Form에 데이터를 입력하여 서버로 전송한다. 서버에서 요청받은 데이터를 처리해야할 때, 비즈니스 로직을 실행하여야 한다. 데이터를 처리하여 데이터베이스에 저장 요청해야한다. 서블릿을 지원하는 WAS를 사용하여 데이터 저장 비즈니스 로직을 실행한 후, 응답 메시지를 생성한다. 서블릿의 특징으로는 @WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response.. 2023. 5. 15.
[Spring] 웹 서버, 웹 애플리케이션 서버 웹 서버와 웹 애플리케이션 서버에 대한 비교 웹 서버(Web Server)는 HTTP 기반으로 동작한다. 정적인 리소스를 제공하고, 기타 부가기능을 제공한다. 정적(파일) HTML, CSS, JS, 이미지, 영상 등을 제공한다. 웹 서버 종류로는 예) NGINX, APACHE 웹 애플리케이션 서버(WAS - Web Application Server) HTTP 기반으로 동작한다. 웹 서버의 기능을 포함한다. (정적인 리소스 제공 가능) 프로그램 코드를 실행해서 애플리케이션 로직을 수행한다. → 동적 HTML, HTTP API(JSON) → 서블릿, JSP, 스프링 MVC 등 웹 애플리케이션 서버 종류로는 예) 톰캣(Tomcat), Jetty, Underrow 웹 서버, 웹 애플리케이션 서버(WAS) 차이 .. 2023. 5. 15.
[JPA/Java] JPQL 벌크 연산 재고가 10개 미만인 모든 상품의 가격을 10% 올리려면 어떻게 해야할까? JPA 변경 감지 기능으로 실행하려면 너무 많은 SQL이 실행되어야 한다. (1) 재고가 10개 미만인 상품을 리스트로 조회한다. (2) 상품 엔티티의 가격을 10% 증가한다 (3) 트랜잭션 커밋 시점에 변경감지가 동작한다. 변경된 데이터가 100건이라면 100번의 UPDATE SQL이 실행될 것이다. 벌크 연산은 쿼리 한 번으로 여러 테이블 로우를 변경한다(엔티티) executeUpdate()의 결과는 영향받은 엔티티의 수를 반환하는데, UPDATE, DELETE 쿼리를 지원한다 INSERT(insert into .. select, 하이버네이트 지원) String qlString = "update Product p " + "se.. 2023. 5. 11.
[JPA/Java] JPQL Named 쿼리 - 어노테이션, XML Named 쿼리는 정적 쿼리이다. 미리 정의해서 이름을 부여해두고 사용하는 JPQL이다. 주로 어노테이션이나 XML에 정의해두고 애플리케이션 로딩 시점에 초기화 후 재사용한다. 애플리케이션 로딩 시점에 쿼리를 검증한다. (1) 어노테이션에서 사용하는 방법 Member.java package jpql; import javax.persistence.*; @Entity @NamedQuery( name = "Member.findByUsername", query = "select m from Member m where m.username = :username" ) public class Member { @Id @GeneratedValue private Long id; public MemberType getType.. 2023. 5. 11.
[JPA/Java] JPQL 엔티티 직접 사용 JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용한다. [JPQL] jpql = "SELECT count(m.id) FROM Member m"; // 엔티티의 아이디를 사용 jpql = "SELECT count(m) FROM Member m"; // 엔티티를 직접 사용 [SQL] (위의 JPQL 둘다 같은 SQL을 실행) SELECT count(m.id) as cnt FROM Member m 엔티티를 파라미터로 전달 시 String jpql = "select m from Member m where m = :member"; List resultList = em.createQuery(jpql) .setParameter("member", member) .getResultList(.. 2023. 5. 11.
728x90
반응형