
이전 게시글(Thread Safety)과 연관된 글로 과부하 로직을 구현하며 고민했던 것에 대한 내용 정리이다. 현재 운영/개발 중인 서버에 보안 로직으로 과부하 제어 로직을 추가하게 됐다. 아래는 과부하 로직의 명세이다. WAS로 들어오는 모든 request를 카운팅한다. 카운팅한 횟수는 response로 빠져나갈 때 차감된다. request가 reponse로 빠져나가지 않으면 count는 계속 누적되고, 특정 임계치 이상이 넘어가면 서버의 과부하 상태를 response로 내보낸다. 위 로직을 구현하기 위해 Apache Tomcat의 멀티쓰레드 구조에 대한 대응으로 Atomic Integer 클래스를 이용해 동시성 이슈를 제어하도록 했다. 이번 글에서는 과부하 제어 로직이 위치할 부분에 대한 쓰려고 한..
서버에서 감당할 수 있는 양보다 많은 요청이 들어온다면, 어떻게 될까? 프론트엔드에서는 앞선 요청이 모두 처리될 때까지 무한 대기 상태에 있거나, 심한 경우 서버가 죽는 경우가 발생할 것이다. 정상적으로 처리되어 대기상태가 빠르게 해결되면 다행이지만, 프론트엔드 단에서 요청할때 걸려있는 시간 내에 응답이 나가지 않으면, time out으로 에러 처리를 해버릴 수도 있다. 그렇게 된다면 필요한 데이터가 소실 될 수도 있고, 서비스 로직 단에서 중단되버려 데이터가 꼬여 다음 요청을 정상적으로 처리하지 못할 수도 있다. 그렇다면 서버에서는 프론트엔드에 "지금 과도하게 요청이 몰려 있어"를 알려줄 필요가 있다. 빌드업이 길었는데, 요약하면 서버에서 과부하 제어를 하기 위해 요청이 과하게 몰렸을 때 응답코드를 내..

서버에 과부하 로직을 반영하고, 임의로 임계치를 올려놓고 테스트하는건 올바른 테스트라고 할 수 없다. 과부하 테스트를 하려면 서버에 요청을 빠르게 엄청나게 많은 양을 보내야 한다. 실제 요청을 만들어 보낼 수 없을 때, Apache Jmeter를 사용하면 된다. 1. Jmeter 란? 앞서 언급한 것 처럼 서버의 성능을 측정할 때 쓰는 툴이다. 대표적으로 스트레스 테스트라고 하는 테스트를 하는데 쓰이고, 서버가 짧은 시간에 얼마나 많은 요청을 처리할 수 있는지 테스트하고 결과를 모니터링 하는데 주로 쓰인다. 이외에도 다양한 기능이 있지만 그건 홈페이지로 가서 알아보도록 하자. 2. 설치 제목에서처럼 윈도우 10 환경에서 설치할 것이다. 홈페이지에서 Binaries 설치 Requries Java 8+라고 ..

Spring Boot가 보편화되면서 많은 부분들이 뒤로 숨겨지게 되었지만, 현재 담당하고 있는 서비스는 Spring MVC로 구현되어 있어 Spring MVC project에는 Spring Boot보다 많은 정보들을 xml파일로 확인할 수 있었다. 사실 Client 단부터 이야기를 시작해야 시작과 끝이 잘 맺어질 수 있을 것 같지만, 아직은 서버사이드에 치중해서 공부 중이니 DispatcherServlet을 기준으로 작성해보려고한다. 아직 공부하는 단계니 계속해서 내용은 보완해 나가야할 것 같다. DispatcherServlet이란? 갑자기 DispatcherServlet부터 이야기를 시작하겠다하면 의아할 수 있다. 구현부만 생각한다면 개발자는 스프링에서 제공하는 기능인 DispatcherServlet를..

서버사이드에서 개발하다보면, 객체 컨벤션이 중요하다고 느끼는 시점이 온다.(내가 그 시점인 것 같다..) 가장 먼저 눈에 띄는건 DAO, DTO, VO인데, 세 가지의 객체의 분류가 꽤나 애매하다. 따로 표준화 되어 있지도 않고 POJO라고 불리는 일반적인 자바 객체로 만들어지기 때문이다. 간단하게 내용을 한번 정리하고 가보려 한다. 1. DAO(Data Access Object) 사실 DAO의 역할은 명확하다. 이름부터가 Data Access Object인 것을 보면 알 수 있듯이, 실제로 DB에 접근하는 역할을 하는 객체 생성 디자인 패턴이다. 데이터베이스에 추출 및 저장하는 방법에 대한 세부 정보를 객체로 추상화하는데 사용되며 JDBC를 통해 구현할 경우 CRUD를 처리하는 매서드를 가지고 있는 경..

1. API 란? 웹 개발을 하다보면 가장 많이 듣는 용어 중 하나가 API일 것이다. 그래서 API가 뭐냐? 라고 물으면, 어디서부터 설명해야할까 고민에 쌓이게 된다. API(application programming interface 애플리케이션 프로그래밍 인터페이스, 응용 프로그램 프로그래밍 인터페이스)는 컴퓨터나 컴퓨터 프로그램 사이의 연결이다. 일종의 소프트웨어 인터페이스이며 다른 종류의 소프트웨어에 서비스를 제공한다. 출처 : 위키백과 위키 백과에서 가져온 글만 봐서는 무슨 말인지 와닿지 않는다. 그래서 내가 남들에게 설명할 때는 원하는 정보를 서버나 프로그램에 요청하기 위한 입력 정보 작성 규칙 이라고 한줄로 설명한다. 포괄적인 의미를 담고 있기 때문에 한줄 요약이 틀릴 수 있지만, 개인적으..

내부 프로젝트로 Testcase를 자동으로 정리해주는 프로젝트를 진행하게 됐다. 백엔드에서 서비스로직만 처리할 게 아니라, 화면을 추가로 그려야했기 때문에 자연스럽게 자바스크립트를 보게 됐고... 너무 많은 이슈들을 마주쳤다.(별로 언급하고 싶지 않은 이유로 발생한 것들이다...) 그 중 하나가 Object의 깊은 복사(Deep Copy) / 얕은 복사(Shallow Copy) 이슈였고, 이거 때문에 몇 시간을 끌었다. 어떤 문제 였나? 결론부터 이야기하자면, 나는 깊은 복사가 하고 싶었다. 그런데 배열 안의 오브젝트의 처리에 문제가 있었다. Java에서의 배열(Array) 모두 같은 자료형만을 취급한다. 하지만 Javascript의 Array는 제한 없이 사용할 수 있다. a = [ 'abc', { a..
- Total
- Today
- Yesterday
- java
- elasticsearch
- Elastic cloud
- lambda
- AWS
- springboot
- S3
- 람다
- 스프링부트
- Spring
- object
- 후쿠오카
- serverless
- AOP
- cache
- docker
- GIT
- 후기
- AWS EC2
- MySQL
- terraform
- 티스토리챌린지
- Log
- 오블완
- JWT
- EKS
- ChatGPT
- OpenAI
- CloudFront
- Kotlin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |