목록백엔드/스프링 (7)
윤개발

1. 스프링의 싱글톤 스프링은 기본적으로 Bean으로 등록된 객체를 싱글턴 방식을 사용하여 관리합니다. 예를 들어 @Bean, @Controller, @Component 등의 어노테이션이 붙은 Bean들은 스프링 컨테이너가 실행 시점에 등록된 Bean, 컴포넌트 스캔을 하여 딱 1번만 생성됩니다. 이후에는 요청이 들어와도 새로 객체를 생성하지 않고 공유해서 쓰게 됩니다. 왜 싱글톤일까요? 이는 객체를 매번 새로 생성하면 메모리 낭비가 심하고 요청이 완료되면 객체의 참조가 끊어지며 더 빈번하게 Gabage Collecting이 일어나기 때문입니다. 예를 들어 서버로 10000명의 사용자가 요청을 보낼 시 싱글톤이 아니라면 10000개의 객체를 생성해야 하니 낭비가 심하겠죠? 당연히 싱글톤을 이용하면서의 주..
실무에서 @Bean어노테이션을 붙여 등록하는 과정을 반복하다 보면 빈을 등록하는 과정을 누락할수도 있다. 따라서 컴포넌트 스캔을 이용하여 빈을 등록하고 등록된 빈을 자동주입한다. @ComponentScan 기존과 다르게 클래스 내부에 @Bean으로 등록한 클래스가 없고 @Component 애노테이션이 붙은 클래스를 스캔한다. 또한 Component내의 의존관계 주입은 @Autowired를 사용하여 타입에 맞는 의존관계를 자동으로 주입해준다. 탐색 위치와 기본 스캔 대상 basePackages로 탐색할 패키지를 지정하여 스캔할 수 있으며 설정하지 않으면 라이브러리등 모든 자바 소스를 다 스캔하기 떄문에 시간이 오래걸린다. default는 ComponentScan이 붙은 설정정보 클래스의 패키지가 시작 위치..
웹어플리케이션은 고객이 요청을 할때마다 새로운 Controller 객체를 만들고 요청을 처리하고 반환할까? 만약 그렇게된다면 JVM에 계속해서 객체를 생성하고 반환한다. 다수의 요청이오면 엄청난 메모리 점유율과 함께 OOM이 발생할 수도 있다. 그래서 스프링 어플리케이션은 해당 객체가 1개만 생성되고 공유하도록 싱글톤 방식을 사용한다. 먼저 싱글톤 패턴에 대해 알아보자. 싱글턴 패턴 싱글턴 패턴이란 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 아래 코드를 보면 final을 선언하여 애플리케이션 실행 시점에 객체를 할당하고 getInstance를 통해 객체를 얻는 것을 볼 수 있다. private static final SingletonService instance = new S..

정상처리 및 오류처리에 대한 API 서버 공통 응답 포맷을 개발해보도록 하겠습니다. 공통 포맷을 개발하면 아래와 같은 장점이 있습니다. Api 서버는 정상, 에러에 대한 응답의 포맷이 동일하며 어떠한 응답도 공통포맷 형태로 반환하면 됩니다. Api를 사용하는 클라이언트는 공통 포맷을 보고 정상응답, 에러를 구분할 수 있습니다. 1. 응답 포맷 요구사항 공통 응답에 대한 요구사항은 다음과 같습니다. 정상, 오류처리 모두 success 필드를 포함합니다. 정상처리라면 true, 오류처리라면 false 값을 출력합니다. 정상처리는 response 필드를 포함하고 error 필드는 null 입니다. 응답 데이터는 객체로 표현됩니다. 오류처리는 error 필드를 포함하고 response 필드는 null 입니다. ..

스프링 시큐리티에 대해 제대로 알고 쓰기위해 공식문서를 쭉 읽어보았고 개발시에 알아야될 부분을 정리해보았습니다. docs.spring.io/spring-security/site/docs/5.4.6/reference/html5/#servlet-architecture Spring Security Reference In Spring Security 3.0, the codebase was sub-divided into separate jars which more clearly separate different functionality areas and third-party dependencies. If you use Maven to build your project, these are the modules yo..

용어 설명 Authentication(인증) : 사용자가 본인인지 맞는지 확인 Authorization(권한) : 인증된 사용자가 요청에 접근 가능한지 확인 기본 원리 Client의 요청은 Filter Chain을 거쳐 처리된다. 여러 필터를 지나며 인증이 완료되면 해당요청은 인증된 요청이 된다. 모든 필터를 지나며 인증되지 않았다면 인증되지 않은 요청(403)이 된다. 처리 방식 요청이 오면 인증을 담당하는 AuthenticationFilter에서 처리한다. UsernamePasswordAuthenticationToken을 만들어 AuthenticationManager(인터페이스)에게 위임한다. AuthenticationManager를 구현한 ProviderManager는 AuthenricationPr..