스프링MVC와 멀티쓰레드
https://jeong-pro.tistory.com/204
https://doflamingo.tistory.com/44
위 두개의 글을 읽고 어제공부했던 스프링의 멀티쓰레드 구현방식에 대해 생각해보면서 동시요청에 대해 싱글톤으로 등록되는 객체 빈들이 어떻게 동작하는지 조금 더 이해하게 되었다.
지금까지 이해한 바는 다음과 같다.
- 컨트롤러 객체는 싱글톤 빈으로써 스프링컨테이너에 단 하나의 인스턴스로 존재한다.
- 클라이언트의 요청이 있을 때마다 스프링부트에 내장된 톰캣서버가 쓰레드를 제공하고 이 쓰레드를 통해 로직을 실행한다.
- 로직이 실행되는 공간은 JVM의 Method Area이다.
- 자바의 Execution Engine 에 의해 Method Area의 바이트 코드를 한줄 씩 수행시키는데 이 영역은 쓰레드들에게 공유되는 영역이다.
- 때문에 변할 수 있는 상태(멤버변수 수정)를 가져서는 안된다.(쓰레드 세이프 하지않다.)
다음에 자바 JVM의 메모리 영영을 더 공부해보면서 좀더 자세히 알아봐야겠다.. 작년에 정리해놓은 글을 다시봤더니 너무 낯설었다ㅠ
프로그래머스 코딩테스트 연습문제 - 나누어 떨어지는 숫자 배열
https://programmers.co.kr/learn/courses/30/lessons/12910
코테 문제를 풀면서 스트림을 쓰거나 쓰지않는 기준을 점점 잡아가는 것 같다. 그냥 문제 딱 보자마자 어떻게 써야할지 머리속에 팍!!!! 떠오르는 놈들은 쓰고 조금이라도 아리송하면 그냥 외부반복자를 써서 문제를푸는 것이다.(성능이 중요한 문제가 아니라면)
최근에 스트림을 쓰면서 몇번 삽질하고 나니 '아 이문제는 스트림쓰면 빠르게 풀 수 있겠다' 라는 문제들이 조금씩 보이나 보다. 처음으로 검색안 해보고 깔끔하게 스트림으로 문제를 푼 것 같아서 오랜만에 문제풀이를 업로드 한다!!
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr, int divisor) {
int[] answer = Arrays.stream(arr)
.filter((n) -> n % divisor == 0)
.sorted().toArray();
return answer.length != 0 ? answer : new int[]{-1};
}
}
기타
어제 클라이언트 사이드 렌더링이 뭔지 공부하면서 헷갈렸던 부분에 대해서 이해가 됐다. 다시 생각해보니 당연한 것인데 CSR 은 서버로부터 받은 javascript 파일을 클라이언트의 브라우저를 통해 직접!! 실행시킨다.
그러다 보니 순서가
서버요청 -> 자바스크립트 파일 받음 -> 자바스크립트코드를 실행시켜 HTML 렌더링 -> 필요한 데이터 서버에 요청-> 데이터 받음
이런식으로 왔다갔다를 하게되는 것이었다. 자바스크립트를 클라이언트가 실행시킨다는 너무 간단하고 당연한 사실을 안떠올려보고 지금까지 개발한 내가 정말 신기하고 바보같았다,, 그래도 지금이라도 깨달아서 다행이다!!
'TIL' 카테고리의 다른 글
[2022-1-20]HttpServletResponse 과 HTTP공부 (0) | 2022.01.20 |
---|---|
[2022-1-19] Sevlet, HttpServletRequest 공부 (0) | 2022.01.20 |
[2022-1-17] 네트워크, 스프링 MVC 공부 (0) | 2022.01.18 |
[2022-1-16] 스프링 공부 스프링 핵심 원리 - 기본편 완강!! (0) | 2022.01.17 |
[2015-1-15] 스프링 공부와 프로젝트 준비 고민,,, (0) | 2022.01.16 |