Spring
스프링 빈의 쓰레드 안정성에 대하여
싱글톤 빈 스프링의 빈은 싱글톤 패턴으로 관리됩니다. 싱글톤이란 생성자가 여러 차례 호출 되더라도 실제로 생성되는 객체는 최초에 생성된 객체를 반환하게 됩니다. 이렇게 하는 이유는 메모리 절약을 위해서 입니다. 보통 싱글톤 패턴이 적용되는 객체가 필요한 경우는 해당 객체가 리소스를 많이 차지하는 역할을 하는 무거운 클래스일 때 적합합니다. 싱글톤 빈의 쓰레드 안전성 그렇다면 싱글톤 빈은 쓰레드에 있어서 안전할까요? 결론적으로 말하자면, 안전하지 않습니다. 만약 싱글톤 빈 내부적으로 값이 변할 수 있는 인스턴스 멤버 변수가 존재한다면, 모든 쓰레드가 하나의 공유되는 변수를 사용하기 때문입니다. 이를 방지하려면 싱글톤 객체로 하여금 상태(stateful)를 유지하게 설계하면 안됩니다. 스프링에서 쓰레드 안정..
스프링 시큐리티 아키텍처에 대하여
스프링 시큐리티란? Spring Security is a framework that provides authentication, authorization, and protection against common attacks. With first class support for securing both imperative and reactive applications, it is the de-facto standard for securing Spring-based applications. 출처 - https://docs.spring.io/spring-security/reference/index.html 스프링 시큐리티는 인증과 인가, 그리고 일반적인 공격에 대한 보호를 제공하는 프레임워크입니다. 명령형 및..
@Transaction에 대하여
스프링으로 프로젝트를 하면서 Service 관련 클래스를 작성할 때 빠짐없이 등장하는 어노테이션이 @Transaction입니다. 해당 어노테이션의 역할은 말 그대로 서비스 레이어에서 db에 접근할 때 트랙잭션 처리를 해주는 것입니다. 그렇다면 Transaction 어노테이션이 등장하게 된 배경과 어떠한 코드를 내부 로직으로 지니고 있을까요? Transaction Annotation 등장 배경 가장 흔하게 많이 사용하는 어플리케이션 구조는 다음과 같습니다. Controller (프레젠테이션 계층) - Service(서비스 계층) - Repository(데이터 접근 계층) - DB서버 위 계층 중에 가장 중요한 곳은 핵심 비즈니스 로직이 담겨있는 서비스 계층입니다. 시간이 지나면 컨트롤러와 관련된 UI 부분..
스프링 검증 BindingResult에 대하여
BindingResult 스프링 검증하면 뺴놓을 수 없는 것이 BindingResult입니다. BindingResult는 스프링이 제공하는 검증 오류를 보관하는 객체입니다. 또한 Erros 인터페이스를 상속합니다. BindingResult를 쓸 떄 주의점은 검증 대상인 @ModelAttribute 바로 뒤에 작성해야 하는 것입니다. @PostMapping("/add") public String addItemV6(@Validated @ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) { if (bindingResult.hasErrors()) { log.info("er..