부스트코스
-
유저가 업로드 한 이미지 파일 로컬에서 가져와 사용하는 방법!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..
-
스프링에서 로그를 남겨보자! 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..
-
Java에서 날짜를 편하게 쓰자! LocalDateKnowledge/Java 2019. 9. 4. 11:58
포스팅에 앞서 미리 알리자면 이 포스팅에선 내가 실제 작업하면서 구현한 메소드만 설명할 예정이다. LocalDate에 대해 워낙 잘 정리해놓은 포스팅이 이미 존재하긴 때문 JAVA에서 날짜,시간 제대로 사용하는 LocalDate, LocalTime, LocalDateTime (NTP 시간 서버에서 정확한 시간 받아오기, json object 받기, JPA 테스트 with LocalDateTime) 아직도 Calendar, Date 사용하니? 자바에서 아직도 Calendar.getInstance해서 시간/날짜를 표현하는 프로그래머가 있을까? 처음 공부할 때나 단순하게 표현해야할 때는 사용할 수 있지만 단점이 극명한 클래스라.. jeong-pro.tistory.com 바로 이거다. 완전 갓갓 포스팅.. 여러..
-
로그인 기능은 어떻게 구현할까? 세션에 대해 알아보자Knowledge/Spring 2019. 9. 4. 11:44
클라이언트 별로 다른 정보를 제공하는 기능은 중요하다. 그러나 중요도에 비해(?) 구현은 굉장히 쉽다 일단 Session에 대해 알아보자 - Session 클라이언트 별로 서버에 저장되는 정보를 말한다. - 사용법 (Spring 4.3.5 버전 기준으로 설명함) 일단 HttpSession을 생성해야 한다. 원래는 HttpRequest의 getSessiono()을 받아와서 세션에 저장하는 방식을 따라야 하는데 ( ex. HttpSession session = request.getSession(); ) 4.3.5 버전에서는 (아마 4이상이지 않을까 싶은데) 아래와같이 1 2 3 4 5 6 7 8 @Controller public class ReservationController { public String ..