분류 전체보기

· Spring
스프링은 다음과 같이 다양한 스코프를 지원한다. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. (생성 ~ 초기화까지만 관여) 웹 관련 스코프 Request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프이다. Session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프이다. Application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프이다. 스프링 빈은 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때 까지 유지되므로 싱글톤 스코프이다. 스프링을 사용하면 대부분 싱글톤 스코프만..
이 문제를 풀면서 어려웠던 건.. 이 문제가 DP가 맞는가? 였다. 요즘 (DP, 그리디, 브루트포스) 종류의 문제를 만나면 갈피를 잡지 못하는 것이 가장 힘들다. 배낭 문제라는 사실을 알았을 땐, 아.. 그치 배낭 문제지..라고 금방 이해되지만 혼자서 그 생각을 해내는 게 가장 어려운 것 같다. 이 문제는 최근에 만난 DP 문제들처럼 약간의 응용이 필요하다. 문제의 목표는 M이상의 메모리를 확보하면서 가장 적은 Cost를 사용하는 것이 목표이다. 그렇다면 DP 관계(?)를 설정할 때 다음과 생각해 볼 수 있다. DP 배열은 2차원 배열로 구성하고 배낭 문제 처럼 접근한다고 하자. 그렇다면 1, 2 선택지 중에 어떤 것을 골라야할까? DP[앱의 index][앱의 memory] 로 구성 DP[앱의 inde..
펜윅 트리는 값이 변경되어도 구간의 합을 빠르게 구할 수 있는 자료구조이다. 기존의 구간 합을 구하는 방법은 값의 변경이 있을 때 매번 O(n)의 시간이 걸리지만 펜윅 트리는 O(logn)의 시간이 걸린다. 어떻게 가능한 걸까? 우선 펜윅 트리의 구조를 먼저 그려보고 살펴보자. 펜윅 트리의 특징은 다음과 같다. 펜윅 트리는 화살표가 가리키는 곳에 각 구간의 합이 저장된다. 조금 헷갈릴 수 있는 부분이 BIT 배열의 인덱스는 0이 아닌 1부터 시작한다. 즉 BIT[1] 에는 원래 배열 arr[0]이 저장된다. BIT[4] 에는 원래 배열 arr[0]~arr[3]의 구간 합이 저장된다. BIT 자료구조를 사용하는 가장 큰 이유는 값의 업데이트와 구간 합을 구하기 위함일 것이다. 값을 어떻게 업데이트하고 합을..
· Spring
편리한 자동 기능을 기본으로 사용하자 스프링이 나오고 시간이 갈수록 점점 자동을 선호하는 추세라고 한다. 스프링 부트는 컴포넌트 스캔을 기본으로 사용하고, 스프링 부트의 다양한 스프링 빈들도 조건이 맞으면 자동으로 등록하도록 설계했다고 한다. 자동 빈 등록이 간편하기도 하지만 결정적으로 OCP, DIP를 지킬 수도 있어서 자동 기능을 사용하지 않을 이유가 없다. 그럼 수동 기능은 언제 사용하면 좋을까 애플리케이션은 크게 업무 로직과 기술 지원 로직으로 나뉜다고 한다. 업무 로직 빈 : 웹을 지원하는 컨트롤러, 핵심 비즈니스 로직이 있는 서비스, 데이터 계층의 로직을 처리하는 리포지토리 등이 모두 업무 로직이다. 기술 지원 빈 : 기술적인 문제나 공통 관심사(AOP)를 처리할 때 주로 사용된다. 데이터베이..
· Spring
이전 포스팅까지는 클래스 타입으로 빈을 조회해서 자동으로 의존관계 주입하는 방식을 사용했다. 그런데 만약 의존관계 자동 주입 시 같은 클래스 빈이 두 개 이상이라면 스프링에서는 NoUniqueBeanDefinitionException 오류가 발생한다. 이렇게 빈이 여러 개일 때에는 어떻게 해야 할까? 해결하는 방법은 여러 가지가 있다. @Autowired 필드명 매칭 @Qualifier 사용 @Primary 사용 하나씩 알아보자 @Autowired 필드명 매칭 먼저 타입 매칭을 시도한 후에 빈이 여러 개라면 추가로 동작하는 기능이다. 필드명을 특정 구현 클래스 이름으로 설정해두면 해당 클래스 빈으로 매칭을 시도한다. 예를 들어 다음과 같은 필드를 선언한다면 DiscountPolicy가 여러 개일 때 ra..
· Spring
이 글에서 설명하는 것 이 글에서는 CORS가 발생했던 이유와 원인을 다룬다. 또한 스프링 CORS 설정, Nginx 리버스 프록시 설정을 통해서 이를 해결하고 curl을 이용해서 CORS 문제가 해결되었는지 확인하는 과정 또한 살펴본다. 참고로 이 글에서 다루는 스프링 CORS 설정은 스프링 시큐리티와 연관되어 있다. + CORS란? https://developer.mozilla.org/ko/docs/Web/HTTP/CORS 문제의 발생 React 개발자가 로컬에서 개발 서버로 요청을 보냈는데 CORS 에러가 발생했다고 한다. 그래서 간단하게 Access-Control-Allow-Origin 헤더를 "*" 로 설정하여 전체 오리진 요청을 허용하려고 했지만 그로 인해 또다시 문제가 발생했다. https:..
@xftg77g
'분류 전체보기' 카테고리의 글 목록 (11 Page)