전체 글

80세까지 코딩하는 것이 목표인 개발자의 골방
· 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:..
· Spring
스프링에는 4가지 정도의 의존관계 주입 방법이 있다. 생성자 주입 수정자 주입 필드 주입 일반 메서드 주입 일반 메서드 주입은 잘 사용하지 않기 때문에 위 세가지만 다뤄보자. 생성자 주입 대다수 개발자가 가장 선호하는 의존관계 주입 방법일 것이다. 객체 의존관계의 불변성을 보장받을 수 있고 테스트 코드를 작성할 때 객체 의존관계를 설정하기 편리하다. 또한 필드에 final 키워드를 추가하면, 생성자 주입을 이용할 때 필요한 의존 객체를 전달받지 못했을 경우 컴파일 에러가 발생하게끔 유도할 수 있다. 롬복에서는 @RequiredArgsConstructor 어노테이션을 사용하면 final 필드를 이용한 생성자를 생성해준다. @RequiredArgsConstructor 또는 @AllArgsConstructor..
코딩테스트 합격 😗 기대도 안하지만 기분은 좋다 알고리즘 더 열심히 ...
특정 정점을 제거했을 때 트리의 수가 증가한다면, 해당 정점을 단절점이라고 표현한다. 단절점을 구하기 전에 먼저 해야 할 일이 있다. 위와 같은 트리가 주어졌다고 했을 때 우리는 DFS를 수행하면서 방문 순서를 기록해야 한다. 방문 순서를 확인하면 단절점의 특징을 찾을 수 있다. 1번 노드는 루트 노드이고 자식 노드가 두 개 이상이다. 또한 1번 노드는 단절점이다. 2번 노드의 자식 노드들(3, 4)은 2번 노드를 거치지 않고 1번 노드로 갈 수 없다. 또한 2번 노드는 단절점이다. 5번 노드의 자식 노드들(6, 7)은 5번 노드를 거치지 않고 1번 노드로 갈 수 없다. 또한 5번 노드는 단절점이다. 정리해보면 루트 노드는 자식 노드가 둘 이상이면 무조건 단절점이다. 특정 노드의 자식 노드들이 해당 노드..
· Spring
스프링의 빈을 등록하려면 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열해야 한다. 그런데 만약 빈의 개수가 많아지면 일일이 하기 귀찮아진다. 그래서 스프링은 설정 정보가 없어도 빈을 등록할 수 있는 컴포넌트 스캔이라는 기능을 제공한다. 말 그대로 전체 파일을 스캔해서 빈을 등록하는 것으로, 스캔 범위를 제한하거나 스캔에서 제외하고 싶은 대상을 특정할 수도 있다. 이전의 AppConfig가 아닌 컴포넌트 스캔을 이용한 AutoAppConfig 클래스를 작성해보자. @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.cl..
· Spring
싱글톤을 이용하면 시스템 내에서 객체 인스턴스의 유일함을 보장할 수 있고 객체 생성 비용이 절약되며, 자원을 공유하기 좋다. 이러한 장점 때문에 싱글톤은 자주 언급되고 유명한 디자인 패턴이기도 하다. 하지만 싱글톤 패턴도 단점이 있다. 다음과 같이 싱글톤을 구현했다고 가정해보자. public class SingletonService { private static final SingletonService instance = new SingletonService(); private SingletonService() {} public static SingletonService getInstance() { return instance; } } 이런 싱글톤 패턴은 생각보다 많은 단점이 있는데 싱글톤 패턴을 구현하..
개 킹 받는 매개변수 탐색 문제 풀이를 자세하게 작성해보았다. 문제 도현이의 집 N개가 수직선 위에 있다. 각각의 집의 좌표는 x1, ..., xN이고, 집 여러 개가 같은 좌표를 가지는 일은 없다. 도현이는 언제 어디서나 와이파이를 즐기기 위해서 집에 공유기 C개를 설치하려고 한다. 최대한 많은 곳에서 와이파이를 사용하려고 하기 때문에, 한 집에는 공유기를 하나만 설치할 수 있고, 가장 인접한 두 공유기 사이의 거리를 가능한 크게 하여 설치하려고 한다. C개의 공유기를 N개의 집에 적당히 설치해서, 가장 인접한 두 공유기 사이의 거리를 최대로 하는 프로그램을 작성하시오. 입력 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈칸을 사이에 ..
@xftg77g
뇌장하드