분류 전체보기
-
유저가 업로드 한 이미지 파일 로컬에서 가져와 사용하는 방법!Knowledge/Spring 2019. 9. 20. 09:33
보통 혼자 개발할 때나 공부할 때 이미지는 이렇게 사용할 것이다. 이렇게 소스 안에 img 폴더를 세팅해놓고 이미지들이 저장되어 있는 위치를 설정 파일에 명시해 준 다음 img 태그의 src 속성에 파일 이름을 적어주는 식으로! 그러나 실무에선 이렇게 사용하지 않는다고 한다. 보안 문제도 있고, 프로젝트 볼륨이 커지기 때문 ( 예를 들어 업로드가 많이 되는 사이트인데 파일을 전부 이렇게 프로젝트 내 폴더에 저장하게 세팅하면 용량이 상상을 초월할 것이다 ) 그럼 어떤 방법을 사용할까? 사실 가장 쉬운 선택지는 설정 파일에서 img 폴더 경로를 파일 저장 폴더로 잡아주는 것이다. 그러나 이 방법 역시 보안 이슈가 있어서 지양하고 실무에선 이 문제를 해결하기 위해 컨트롤러를 활용한다고 한다. 이를 이해하기 위..
-
스프링에서 파일다운로드 구현하는 방법Knowledge/Spring 2019. 9. 20. 08:13
일단 서버에 파일은 있고 데이터베이스에 파일 정보는 저장되어 있다고 가정한다 ( 참고 : 스프링에서 컨트롤러로 넘어온 파일 저장하는 방법 - https://takeknowledge.tistory.com/61 ) 사실 업로드를 잘 알고 있다면 다운로드도 쉽게 이해할 수 있다. outputStream과 inputStream의 역할만 바뀔 뿐 업로드와 크게 다르지 않기 때문이다. 넘어온 파일을 찾을 수 있는 파라미터로 파일 정보 찾고, 헤더에 정보 세팅하고, inputStream에서 outputStream으로 파일 정보 옮겨주면 끝! 바로 코드로 보자! 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 3..
-
스프링에서 컨트롤러로 넘어온 파일 저장하는 방법Knowledge/Spring 2019. 9. 18. 21:59
프론트 단에서 ajax로 파일을 서버로 넘기는 건 ( https://takeknowledge.tistory.com/60 ) 참고 파일이 컨트롤러 단으로 넘어오면 파일을 저장하고 나중에 사용할 수 있도록 파일 정보를 데이터베이스에 저장해야 한다. 이걸 하는 방법은 - 설정 먼저 파일 처리에 필요한 라이브러리를 메이븐에 등록해줘야 한다. 파일은 Multipart ( HTTP프로토콜의 바디 부분에 데이터를 여러 부분으로 나눠서 보낸 것 ) 로 넘어오는데 HttpServletRequest는 웹 클라이언트가 전달하는 Multipart데이터를 쉽게 처리하는 메소드를 제공하지 않기 때문이다. 대표적인 파일 처리 라이브러리는 아파치 재단의 commons-fileupload 가 있다. 추가를 위해선 1 2 3 4 5 6..
-
자바스크립트에서 이미지 파일( form data ) 을 ajax로 넘기는 방법!Knowledge/javascript 2019. 9. 18. 19:41
단순히 text value만 넘긴다고 하면 form data를 굳이 ajax로 넘겨야 할 필요는 없다. 그러나 파일을 ajax로 넘겨야할 때는 form data 전체를 넘기는 것 외엔 다른 방법이 없다. 이 때는 formData 객체를 활용하면 된다. 방법은 쉽다. 함정이 좀 있지만.. ㅋ 일단 코드를 보자! 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 Document 전송 var fileInput = document.querySelector("#fileInput"); var sendButton = document.querySelector("#sendButton"); sendButton.addEventListe..
-
스프링에서 로그를 남겨보자! 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 ( 최적 부분 구조 ) : 문제의 정답을 작은 문제의 정답을 통해 구할 수 있어야 한다. 예를 들어 대전에서 부산을 갈 때 최적의 루트가 대구를 거치는 거..