Spring(89)
-
[Spring] Servlet에 대한 나름의 이해
서블릿은 WAS가 HTTP 프로토콜 하는 과정을 도와준다. Request 요청 파싱과 Response 응답 메시지를 만드는 과정을 도와준다. 개발자는 핵심 로직을 개발하는데 집중할 수 있도록 한다. 서블릿 객체는 싱글톤으로 구현된다. request, response는 아니다. 모든 클라이언트는 동일한 서블릿 객체를 사용한다. 때문에 공유 변수에 주의한다. 값이 바뀌는 필드가 있어서는 안된다. 지역 변수를 활용한다. 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리한다. 강력한 기능 중 하나는 동시 요청을 위한 멀티쓰레드 처리를 지원한다. 따라서 개발자는 이를 신경쓰지 않아도 된다. Reference https://www.inflearn.com/course/lecture?co..
2023.11.10 -
[Spring] 웹서버, 웹애플리케이션 서버에 대한 나름의 이해
웹서버는 정적인 리소스를 제공하는 서버를 의미한다. 웹애플리케이션 서버(WAS)는 핵심 비즈니스 로직을 처리하는 서버를 의미한다. 정적인 리소스도 제공할 수는 있다. 하지만 웹서버와 웹애플리케이션 서버를 분리해서 사용한다. 웹 애플리케이션 서버는 에러가 많이 난다. 하지만 웹서버는 그럴일이 거의 없다. 따라서 오류 화면을 보여주도록 할 수도 있다. 웹 애플리케이션 서버가 모든 걸 하면 서버 과부하가 생길 수 있다. 나누면 효율적인 서버 관리가 된다. 정적 리소스가 많이 사용되면 웹서버를 증설하고 애플리케이션 리소스가 많이 사용되면 WAS를 증설하면 된다. Reference https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A..
2023.11.10 -
[Spring] request scope bean과 proxy의 관계에 대한 나름의 이해
provider를 활용하지 않고 proxy를 활용해서 request scope bean을 사용하는 controller가 생성자 주입할때 발생하는 문제를 해결할 수 있다. proxy는 가짜를 만든다. 다음의 annotation을 붙여준다. @Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS) 그러면 가짜가 생성자 주입 때 주입이 된다. 이후 request 요청이 오고 빈이 만들어지면 대체한다. 장점은 코드가 간결해진다. request scope bean의 주의점은 무분별하게 사용하면 유지보수가 어려워진다. 왜냐하면 싱글톤 같이 작동하는 것처럼 보이기 때문이다. Provider를 사용하든 프록시를 사용하든 핵심 아이디어는 진짜 객체 조회가 ..
2023.11.02 -
[Spring] request scope bean과 provider에 대한 나름의 이해
request scope bean은 request가 들어와서 나갈때까지 유지된다. 이를 UUID를 통해서 확인해 볼 수 있다. UUID는 세계에서 딱 하나 존재하는 유니크한 ID이다. UUID는 이 빈을 통해 출력된 곳에서 모두 동일했다. 그런데 controller에서 빈을 생성자 주입을 통해 받을 때 이 빈은 없다. 왜냐하면 controller 생성 시점에는 요청이 들어오지 않았기 때문이다. 따라서 오류가 난다. 이를 해결하기 위해서 Provier나 ObjectProvider를 이용한다. 주입을 받는 것은 request scope bean이 아니라 이 빈을 룩업하는 provider이다. 그리고 요청이 들어오는 로직에서 빈을 조회하면 객체가 생성된다. 이때는 요청이 들어왔기 때문에 오류가 발생하지 않는다..
2023.11.02 -
[Spring] Web Scope에 대한 나름의 이해
Web Scope는 웹과 관련된 스코프를 의미한다. 다음의 것들이 있다. request scope: 요청의 시작과 종료까지 유지된다. session: 세션의 시작과 종료까지 유지된다. application: 서블릿 컨텍스트와 동일한 생명주기를 갖는다. websocket: 웹소켓과 동일한 생명주기를 갖는다. request를 예로 들어보자. 요청이 들어오면 빈을 만든다. 그리고 요청이 끝나면 빈을 삭제한다. Referencehttps://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8&unitId=55391학습 페..
2023.11.02 -
[Spring] 싱글톤 빈과 프로토타입 빈을 함께 사용할 때 생기는 문제점에 대한 해결책에 대한 나름의 이해
크게 두 가지 방법이 있다. 하나는 Spring에서 제공하는 ObjectProvider를 이용하는 것이다. 다른 하나는 JSR-330에서 제공하는 Provider를 이용하는 것이다. 각각 다음과 같이 사용한다. ObjectProvider@Autowired private ObjectProvider prototypeBeanProvider; public int logic() { PrototypeBean prototypeBean = prototypeBeanProvider.getObject(); prototypeBean.addCount(); int count = prototypeBean.getCount(); return count; }Provider@Autowired private Provider prototyp..
2023.11.02