본문 바로가기

TIL

[2022-01-18] 스프링MVC 멀티쓰레드개념, 프로그래머스 TIL

스프링MVC와 멀티쓰레드

https://jeong-pro.tistory.com/204

 

Controller 1개가 어떻게 수 많은 Request를 처리하는가? (spring mvc, tomcat thread, singleton bean)

Controller 1개가 어떻게 수 많은 Request를 처리하는가 배경 의식의 흐름 Controller는 한 개인가? 지금와서 생각하면 조금 바보같았지만, 저런 질문이 떠오른 이유는 아래와 같습니다. 스프링에서 웹

jeong-pro.tistory.com

https://doflamingo.tistory.com/44

 

멀티 쓰레드 환경과 스프링 빈

멀티 쓰레드 환경과 스프링 빈 스프링 빈은 대부분 Singleton 패턴으로 생성되어 Application Context에 의해서 관리된다. 즉, 모든 Controller, Service, Repository는 하나의 인스턴스만 갖고 있는 것이다. 그런.

doflamingo.tistory.com

 

위 두개의 글을 읽고 어제공부했던 스프링의 멀티쓰레드 구현방식에 대해 생각해보면서 동시요청에 대해 싱글톤으로 등록되는 객체 빈들이 어떻게 동작하는지 조금 더 이해하게 되었다.

 

지금까지 이해한 바는 다음과 같다.

 

  1. 컨트롤러 객체는 싱글톤 빈으로써 스프링컨테이너에 단 하나의 인스턴스로 존재한다.
  2. 클라이언트의 요청이 있을 때마다 스프링부트에 내장된 톰캣서버가 쓰레드를 제공하고 이 쓰레드를 통해 로직을 실행한다.
  3. 로직이 실행되는 공간은 JVM의 Method Area이다.
  4. 자바의 Execution Engine 에 의해 Method Area의 바이트 코드를 한줄 씩 수행시키는데 이 영역은 쓰레드들에게 공유되는 영역이다.
  5. 때문에 변할 수 있는 상태(멤버변수 수정)를 가져서는 안된다.(쓰레드 세이프 하지않다.)

다음에 자바 JVM의 메모리 영영을 더 공부해보면서 좀더 자세히 알아봐야겠다.. 작년에 정리해놓은 글을 다시봤더니 너무 낯설었다ㅠ

 

프로그래머스 코딩테스트 연습문제 - 나누어 떨어지는 숫자 배열

https://programmers.co.kr/learn/courses/30/lessons/12910

 

코딩테스트 연습 - 나누어 떨어지는 숫자 배열

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하

programmers.co.kr

코테 문제를 풀면서 스트림을 쓰거나 쓰지않는 기준을 점점 잡아가는 것 같다. 그냥 문제 딱 보자마자 어떻게 써야할지 머리속에 팍!!!! 떠오르는 놈들은 쓰고 조금이라도 아리송하면 그냥 외부반복자를 써서 문제를푸는 것이다.(성능이 중요한 문제가 아니라면)

최근에 스트림을 쓰면서 몇번 삽질하고 나니 '아 이문제는 스트림쓰면 빠르게 풀 수 있겠다' 라는 문제들이 조금씩 보이나 보다. 처음으로 검색안 해보고 깔끔하게 스트림으로 문제를 푼 것 같아서 오랜만에 문제풀이를 업로드 한다!!

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 렌더링 -> 필요한 데이터 서버에 요청-> 데이터 받음

이런식으로 왔다갔다를 하게되는 것이었다.  자바스크립트를 클라이언트가 실행시킨다는 너무 간단하고 당연한 사실을 안떠올려보고 지금까지 개발한 내가 정말 신기하고 바보같았다,, 그래도 지금이라도 깨달아서 다행이다!!