목록Study/Spring (8)
DevGang
nGrinder으로 저희 스프링 부트 프로젝트에서 부하 테스트를 진행했습니다. 가상 사용자 9000명으로 테스트 결과 오류가 많이 발생해서 프로젝트를 개선하고 기록하기 위해 포스팅합니다. 아래는 부하 테스트 결과와 프로젝트 깃허브 주소입니다. 프로젝트 부하 테스트 결과 프로젝트 Github 테스트 환경 AWS Elastic Beanstalk - t2.micro AWS RDS (MySQL) - db.t2.micro Spring Boot 2.5.7 nGrinder EC2 - t2.large 1. AWS EB의 인스턴스 증가 기존의 AWS EB에서 Auto Scaling으로 인스턴스를 늘려주면 부하가 분산되어 오류가 줄어들지 않을까?라는 생각으로 인스턴스를 2대로 늘려보았습니다. 하지만 단순히 인스턴스를 늘려..
처음으로 서버 사이드 랜더링이 아닌 클라이언트 사이드 랜더링 즉 프런트와 백엔드를 분리하여 룰루랄라 프로젝트를 진행하던 중 야생의 오류가 나타났다..! 바로 CORS와 Preflight⭐⭐⭐ 클라이언트 측에서 보안상의 이유로 다른 출처, 즉 URL이 다른 리소스를 참고하는 것을 기본적으로 막고 있다. 따라서 클라이언트(http://lcoalhost:63342)에서 API 서버(http://localhost:8080)의 리소스를 참고하면 오류가 나온다. 해당 오류를 해결하려면 API 서버 측에서 해당 클라이언트의 URL에 대해 리소스 참고를 허용하도록 헤더(Access-Control-Allow-Origin)에 값을 넣어서 응답 요청을 보내주어야 한다. 스프링에서는 해당 기능을 아래와 같이 간단하게 지원하고..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/o7vu8/btq9yxWHqCu/eZK06qNbCkt1zUnkRfQEIK/img.png)
서블릿 서블릿은 웹 서버 내에서 실행되는 작은 Java 프로그램입니다. 서블릿은 일반적으로 HTTP(HyperText Transfer Protocol)를 통해 웹 클라이언트의 요청을 수신하고 응답합니다. 서블릿은 개발자들이 비즈니스 로직에 집중할 수 있도록 도와준다. 서블릿 특징 urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행(service 메서드) HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse 개발자는 HTTP 스펙을 매우 편리하게 사용 HTTP 요청 시 응답 과정 클라이언트의 HTTP 요청 발생(localhost:8080/hello) WAS 서버에서 HTTP ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b5QFwU/btq6qgJa9mQ/XivhVqyqDLKtzf3napo8A1/img.png)
DispatcherServlet 클라이언트의 모든 요청을 한 곳으로 받아서 처리 요청에 맞는 Handler로 요청을 전달 Handler의 실행 결과를 Http Response 형태로 만들어서 반환 모든 사용자의 Request가 DispatcherServlet에 전달 DispatcherServlet에서 Handler Mapping이나 Controller에 전달 처리된 결과는 SpringMVC에서는 ModelAndView 형태로 반환 사용자에게 보여주고자 하는 페이지 포맷에 따라 View Resolver가 View 생성 생성된 View에 Model을 포함시켜서 Response
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b95ocf/btq4HOJl8Px/EkkKiM1bumSTkSdWnh6q71/img.png)
AOP(Aspect-oriented programming) Spring의 핵심 개념 중 하나인 DI가 애플리케이션 모듈들 간의 결합도를 낮춰준다면, AOP는 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용하도록 지원하는 것입니다. AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하여 재사용하는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 예로 들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터..
JSP MVC model1 컨트롤러와 뷰가 물리적으로 분리되지 않은 방식 입니다. JSP MVC model2 컨트롤러와 뷰가 물리적으로 분리된 방식 // Controller.java @WebServlet("/mvcpage") public class Controller extends HttpServlet { @Override protected void doGet(HttpsServletRequest request, HttpServletResponse response) { int num = 0; String num_ = request.getParameter("n"); if (num_ != null && !num_.equals("")) num = Integer.parseInt(num_); String resul..
Application Application는 서블릿 Context로, 서블릿들 간의 문맥을 저장할 수 있는 곳이자, 자원을 공유할 수 있는 저장소이다. Application은 누구나 상태 값을 서버(웹 애플리케이션)에 Application객체를 저장하여 사용하도록 한다. 사용 범위 - 전역 범위에서 사용하는 저장 공간 생명 주기 - WAS가 시작해서 종료할 때까지 저장 위치 - WAS 서버의 메모리 Session Session은 웹 서버가 사용자(Session)를 구분하는 방식이라고 할 수 있다. WAS에서 누구나 저장해놓을 수 있는 공간이 application라면, 그중 개인별로 사물함을 제공한 것이 Session이라고 할 수 있다. 클라이언트가 사이트에 처음 방문했을 경우 그 사용자를 위한 세션은 존..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/sZSNA/btqXyNj1YrG/4fpTH6WGUihPsKWg1KAeL0/img.png)
- Spring Boot란? Spring Boot는 단순히 실행되며, 프로덕션 제품 수준의 스프링 기반 애플리케이션을 쉽게 만들 수 있다. Spring Boot 애플리케이션에는 Spring 구성이 거의 필요하지 않다. Spring Boot jav-jar로 실행하는 Java 애플리케이션을 만들 수 있다. - 주요 목표 Spring 개발에 대해 빠르고, 광범위하게 적용할 수 있는 환경 기본 설정이 있지만 설정을 바꿀 수 있다. 대규모 프로젝트에 공통적인 비 기능 제공 (보안, 모니터링 등) XML 구성 요구사항이 없음 - 정리 애플리케이션 개발에 필수 요소들만 모아두었다. 간단한 설정으로 개발 및 커스텀이 가능하다. 편리한 의존성 관리 & 자동 권장 버전 관리 내장 서버로 인한 간단하고, 빠르게 애플리케이션..