Knowledge
-
스프링에서 로그를 남겨보자! SLF4J와 LogbackKnowledge/Spring 2019. 9. 18. 07:04
- 로그 라이브러리 기록을 남기는 로깅은 여러모로 필수다. 그러나 자바를 배울 때부터 사용해 익숙할 System.out.println() 을 사용해 로깅을 하게 되면 웹의 속도가 상당히 느려진다. 이 때문에 다양한 로그 라이브러리들이 존재한다. 스프링에서 사용할 수 있는 로그 라이브러리의 종류는 아래와 같다. java.util.logging JDK 1.4부터 포함된 표준 로깅 API 별도 라이브러리 추가 불필요 기능이 많이 부족해 다른 로그 라이브러리를 더 많이 사용 Apache Commons logging 아파치 재단에 Commons 라이브러리 중에 로그 출력을 제공하는 라이브러리 Log4j 아파치 제단에서 제공하며 가장 많이 사용되는 로깅 라이브러리 Logback Log4j를 개발한 Ceki Gulc..
-
javascript this와 bindKnowledge/javascript 2019. 9. 15. 13:46
생성자 패턴을 활용하다 보면 javascript의 this가 내 맘 같지 않은 상황을 자주 마주 한다. 예를 들자면 이런 것이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 function promotionObj(id) { this.registerEvents(id); } promotionObj.prototype = { // 등록 이벤트 registerEvents : function(id){ // 뒤로 가기 버튼 var backBtn = document.querySelector(".btn_back"); backBtn.addEventListener("click",function(){ this.ba..
-
javascript 객체 리터럴 패턴과 생성자 패턴, prototypeKnowledge/javascript 2019. 9. 9. 23:10
객체 리터럴 패턴을 활용하면 javscript 코드를 비슷한 기능끼리 묶을 수 있습니다. 예를 들어 promotion과 관련된 기능만을 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var promotionObj = { // 프로모션 템플릿 붙일 타겟 imageTarget : document.querySelector(".visual_img"), // 프로모션 이미지 템플릿 imageTemplate : document.querySelector("#imageTemplate").innerText, // 이미지 세팅 setImage : function(productDetail){ var imageBindTemplate = Handlebars.compile(this.imageTemplate..
-
다이나믹 프로그래밍 ( 동적 계획법 )Knowledge/Algorithm 2019. 9. 6. 16:38
- 다이나믹 프로그래밍이란 다이나믹 프로그래밍은 큰 문제를 작은 문제로 나눠서 푸는 알고리즘이다. 당연히 큰 문제를 작은 문제를 나누는 것과 다이나믹은 아무런 관련이 없다 이 용어를 처음 사용한 Richard Bellman은 그냥 '다이나믹'이 멋있어 보여서 사용했다고..ㅋ 다이나믹 프로그래밍으로 풀 수 있는 문제는 두가지 속성을 만족해야 한다. 1. Overlapping Subproblem ( 겹치는 부분 문제 ) : 큰 문제를 여러개의 부분 문제로 나누어서 풀 때 부분 문제간의 중복이 발생 가능해야 한다. 2. Optimal Substructure ( 최적 부분 구조 ) : 문제의 정답을 작은 문제의 정답을 통해 구할 수 있어야 한다. 예를 들어 대전에서 부산을 갈 때 최적의 루트가 대구를 거치는 거..
-
팩토리얼Knowledge/Math 2019. 9. 6. 14:40
팩토리얼은 1부터 그 수보다 작거나 같은 수를 모두 곱한 값이다 예를 들어 5의 팩토리얼은 5! 라 표시하고 1 * 2 * 3* 4* 5 해서 120이 된다. 즉 팩토리얼은 매우 큰 값이 나오게 되어 있어서 팩토리얼 자체를 구하는 문제보단 팩토리얼 값에 있는 0의 갯수를 정하는 식의 문제가 나온다. 근데 물론 팩토리얼 값을 구하고 거기서 0의 갯수를 새는 건 의미가 없으니 다음과 같은 방법을 사용할 수 있다 팩토리얼 값을 소인수 분해해봤을 때 0이 나오는 건 10 그러니까 2와 5를 곱했을 경우에만 가능하기 때문에 소인수 분해했을 때 나오는 5의 갯수가 곧 팩토리얼 값의 0의 갯수와 같다. 이걸 구현할 때는 물론 팩토리얼 값을 구해서 소인수분해를 직접해보는 건 이렇게 값을 우회해서 구하는 의미가 없는 일..
-
소수Knowledge/Math 2019. 9. 6. 13:23
소수란? 소수란 약수가 1과 자기 자신 밖에 없는 수다 소수와 관련된 알고리즘은 두가지가 있다 1. 어떤 수 N이 소수인지 아닌지 판별하는 방법 2. N 이하의 모든 자연수 중에서 소수를 찾아내는 방법 나누어서 알아보자 1. 어떤 수 N이 소수인지 아닌지 판별하는 방법 소수란 약수가 1과 자기 자신 밖에 없는 수니 2 이상이고 자기 자신보다 작은 수로 나누어 떨어지면 안된다. 이런 특성을 코드로 표현하면 아래와 같다 1 2 3 4 5 6 7 8 9 10 11 12 bool prime(int n) { if (n
-
나머지 연산Knowledge/Math 2019. 9. 5. 20:54
알고리즘 문제를 풀다보면 정수형으로 표현하기엔 너무 큰 값이 나올 때가 있다. 이럴 경우엔 크기를 줄이기 위해 특정 숫자로 나눈 나머지를 출력하라는 식으로 답을 요구하곤 한다. 이럴 때는 답을 다 구하고 나머지 연산을 수행하는 게 아니고 정답을 갱신할 때 마다 나머지 연산을 수행해 줘야 한다. ( A + B ) % M 은 ( ( A % M ) + ( B % M ) ) % M 과 같기 때문 이는 곱셈에서도 ( A X B ) % M 은 ( ( A % M ) X ( B % M ) ) % M 이와 같이 성립한다. 다만 나누기의 경우엔 성립하지 않고 뺄셈의 경우엔 주의해야 하는 부분이 있다. 예를 들어 (6 - 5) % 3 은 1. 즉, 1 % 3은 1이 나오지만 (6%3 - 5%3) % 3 은 (0-2) % 3..