본문 바로가기
  • 실행력이 모든걸 결정한다
반응형

전체 글580

[Spring] DelegatingDataSource 1. DelegatingDataSource란? - DataSource와 DataSource 타입의 프로퍼티를 갖는 bean 사이에서 부가기능을 제공해주는 bean을 만들 때 쓰이는 기반 클래스다. - targetDataSource 프로퍼티에 실제 DataSource bean을 넣어 위임만 해준다. 그리고 자신은 DataSource인 것처럼 위장해서 트랜잭션 매니저나 DAO에 DI될 수 있다. - DelegatingDataSource 기반의 클래스로는 대표적으로 LazyConnectionDataSourceProxy와 AbstractRoutingDataSource가 있다. 2. LazyConnectionDataSourceProxy - DB 커넥션(자원)을 최대한 늦게 생성해주는 프록시 패턴이다. 트랜잭션이 .. 2022. 10. 23.
[완전탐색] 양궁대회 - 2022 KAKAO BLIND RECRUITMENT 해결 방법 화살을 쏴서 얻을 수 있는 점수로는 총 11가지(0점부터 10점) 경우가 있기 때문에, n개의 화살이 11가지 경우에 분배되는 모든 경우를 따지면 된다. 과녁에 있는 하나의 원에 여러 화살이 꽂힐 수도 있으므로 중복 조합(H)을 구하면 된다. 예를 들어, 입출력 예 #1 에서는 11H5=3003 가지 경우를 따지면 된다. 중복 조합을 구하는 소스 코드는 https://hydroponicglass.tistory.com/20를 참고했다. 중복 조합으로 계산한 모든 경우에 대해 어피치와의 점수 차이를 구하고 문제에 안내된 대로 동일 점수에 대한 처리도 진행해주면 된다. 소스 코드 #include #include #include using namespace std; vector perm; // 중복 .. 2022. 10. 18.
[Spring] 테스트 컨텍스트 프레임워크 1. 테스트 컨텍스트 프레임워크의 개념 - 컨텍스트 테스트는 Spring이 지원하는 통합 테스트 방식이다. - 테스트 컨텍스트 프레임워크는 테스트에 사용되는 애플리케이션 컨텍스트를 생성하고 관리해주는 테스트 프레임워크로, 서버에서와 거의 동일한 구성으로 동작하는 통합 테스트를 쉽게 만들 수 있도록 한다. - Spring은 JUnit, TestNG 등 여러 테스트 프레임워크를 지원하는데, Spring의 컨텍스트 테스트 엔진은 테스트 프레임워크의 종류에 독립적으로 작성되었다. - Spring은 테스트에서 사용되는 컨텍스트를 캐싱해서 여러 테스트(메소드, 클래스)에서 해당 컨텍스트를 공유할 수 있도록 해준다. 테스트 메소드의 개수만큼 테스트 클래스의 오브젝트는 반복적으로 만들어지지만 컨텍스트는 반복적으로 만들.. 2022. 10. 17.
[Spring] Spring의 로드타임 위버 복습해보자면, 로드타임 위버는 클래스 로딩 시점에 바이트코드의 조작이 가능하도록하여 일반 클래스에도 AOP 처리가 가능하도록 해준다. 1. Spring이 제공하는 로드타임 위버의 특징 - JPA에서 필요로 하는 로드타임 위버로도 사용된다. JVM의 자바에이전트 옵션은 한 번에 한 가지만 적용할 수 있는 문제가 해결된다. - JVM 레벨의 자바에이전트를 대체할 수 있는 적합한 로드타임 위버를 등록해준다. 클래스 로더 레벨에 로드타임 위빙 기능을 적용함으로써, JVM을 통해 로딩되는 모든 클래스를 조사해야 하는 문제가 해결된다. - 바이트코드 조작이 필요한 새로운 기술이 추가되더라도 일관된 방식으로 로드타임 위버를 적용할 수 있다. 2. Spring이 적용해주는 로드타임 위버의 구현 방식 xml 설정 파일에.. 2022. 10. 17.
[DFS] 양과 늑대 - 2022 KAKAO BLIND RECRUITMENT 해결 방법 사실상 모든 경로를 다 따져봐야 하는 문제다. 물론, 양과 늑대의 수가 같아지는 시점부터는 해당 경로에 대한 dfs는 중단해야 한다. 필자는 현재까지의 방문 노드들을 하나의 통합 노드로 두고, 통합 노드의 인접 노드들을 하나씩 방문해나가는 방법으로 해결했다. 시작 정점에서 정점을 추가해가며 단계적으로 트리를 확장한다는 접근법만 놓고 보면 프림 알고리즘과 비슷한 느낌이 들지 않는가? 물론 간선의 비용도 없고 dfs이기 때문에 방문을 취소해야 할 때가 있다는 차이점이 있기는 하다. 인접노드를 방문했을 때 양과 늑대의 수가 같아지거나 더 이상 방문할 노드가 없다면 해당 경로에 대한 dfs를 중단하면서 방문도 취소해주면 된다. 소스 코드 #include using namespace std; vecto.. 2022. 10. 14.
[Spring] AspectJ로 bean이 아닌 오브젝트에 DI 적용하기 도메인 오브젝트에 비즈니스 로직을 대부분 적용하는 DDD(Domain Driven Design, 도메인 주도 설계) 방식을 사용한다면 도메인 오브젝트에도 DI가 필요할 것이다. 그렇다고 도메인 오브젝트를 프로토타입 스코프 bean으로 등록하면 iBatis, JPA 등의 프레임워크에서는 이런 방식의 적용이 불가능하다. 이럴 때는 어떡해야 할까? 1. DependencyInjectionAspect - @Configurable이 붙은 도메인 오브젝트가 생성될 때마다 이 어드바이스가 적용되어 자동으로 DI를 수행해주는 애스펙트다. 정확히 말하자면, 수정자 메소드의 이름을 이용해 필요한 bean을 주입해주는 어드바이스를 갖고 있고, @Configurable이 붙은 클래스의 생성자가 호출돼서 오브젝트가 만들어질 때.. 2022. 10. 13.
[Spring] AOP 포인트컷 표현식 1. 지시자의 종류 - 메소드가 아닌 오브젝트를 선정하는 경우에는 해당 오브젝트 안에 있는 메소드들이 AOP 적용 대상이 된다. 1) execution() - 표현식 언어를 사용해서 포인트컷을 작성하는 방법이다. - 메소드의 모든 특징을 문자열로 나타내어 비교하는 방식이다. - AspectJExpressionPointcut 클래스를 이용하여 클래스와 메소드 이름의 패턴을 한 번에 지정할 수 있다. ※ AspectJ AOP를 사용하면 스프링 bean이 아닌 일반 오브젝트에도 aop 기능을 적용할 수 있다. - OR(|) 조건에 대해서도 지정할 수 있다. execution([접근제한자] 리턴타입 [클래스타입.]메소드명(파라미터타입 | "..", ...) [throws 예외클래스] ※ 접근제한자 : 생략하면 .. 2022. 10. 12.
[구간합] 광고 삽입 - 2021 KAKAO BLIND RECRUITMENT 해결 방법 필자는 초 단위로 누적 재생시간에 대한 구간합을 구해서 해결했다. 최대 재생 시간은 359999초이기 때문에 O(N)의 시간복잡도 정도는 부담스럽지 않다. 이렇게 구간합을 구해두면 [0, adv_time) 구간부터 [play_time - adv_time, play_time)에 대한 모든 구간합을 구하는데 O(N)의 시간복잡도로 해결할 수 있다. 그리고 "hh:mm:ss" 문자열 형식으로 표현된 시간을 초 단위의 정수로 변환하는 함수와 초 단위의 정수를 "hh:mm:ss" 문자열 형식으로 변환하는 함수를 추가해서 손 쉽게 시간을 계산할 수 있도록 했다. 소스 코드 #include #include using namespace std; #define MAX 360000 int dup[MAX]; //.. 2022. 10. 11.
[구현] 순위 검색 - 2021 KAKAO BLIND RECRUITMENT 해결 방법 정확성 테스트라면 어렵지 않게 통과할 수 있을 것이지만, info, query 벡터에 대해 그대로 2중 for문을 쓴다면 효율성에서 좋은 점수를 받지 못할 것이다. 필자는 다음과 같이 4차원 벡터를 선언했다. vector iv[4][3][3][3]; 개발언어 항목, 지원 직군 항목, 경력구분 항목, 소울 푸드에 있는 각 정보를 차례대로 정수로 나타내어서 저장하기 위해 4차원 형태로 만들었다. cpp/java/python/- backend/frontend/- junior/senior/- chicken/pizza/- '-' 부분에는 나머지 조건에 해당 하는 모든 경우를 넣어주면 된다. 조건이 4개이기 때문에 하나의 조건이라도 반영하지 않는 경우의 수는 15(4C1+4C2+4C3+4C4=15)가 될.. 2022. 10. 7.