- Today
- Total
목록java (24)
개발하는 고라니
위와 같은 웹 페이지가 있을 때, 첨부 파일의 이름을 클릭하면 파일이 다운로드 되도록 하는 법을 알아본다. 우선 첨부파일의 정보를 출력하는 웹 페이지의 HTML일부를 보면 다음과 같다. [[${uploadDTO.fileName}]] "th:"와 같은 문자열이 있는데, 이는 thymeleaf라는 Template Engine을 사용하여 그렇다. 어쨋든 [[${uploadDTO.fileName}]] //------------------------------------------------------- 파일이름 '파일이름'을 클릭하면 '/download?fileName=파일이름'이라는 URL에 'GET'요청을 하게된다. 이 때 파일이 다운로드 되도록 하는 것이다. View 단은 이정도면 되었고, Back단을 살..
1. MultipartFile의 transferTo() 2. FileCopyUtils 이용 파일을 업로드하는 방법은 크게 2가지가 있다. 하나는 HTML의 form태그를 이용하는 것이고, 하나는 ajax를 이용하는 방법이 있다. 업로드한 파일을 로컬 저장소에 저장하는 방법을 알아보고자 한다. # 파일 업로드 Ajax를 이용해 Spring에서 지원하는 Multipart 타입으로 파일을 받는다. 1. C:\upload\temp : 파일 저장 경로 2. 저장될 파일 명 : UUID_filename.png (UUID는 파일의 고유 번호로, 파일명 중복 방지를 위해 적용한다.) # 1. Multipart의 transferTo(Path path) 이용하기 @PostMapping(value = "/upload") p..
크루스칼(Kruskal) 알고리즘 이 알고리즘은 가장 적은 비용으로 모든 노드를 연결하기 위해 사용하는 알고리즘이다. 사이클(Cycle)을 만들지 않는 범위에서 최소 비용 간선(Edge)을 하나씩 더해가며 최소 신장 트리(Minimum Spanning Tree, MST)를 만든다. 실제로 여러 도시가 있을 때 각 도시를 도로로 연결하는데 최소 비용을 들여 연결할 때 사용될 수 있는 알고리즘이다. n개의 정점으로 트리를 만드는데 n-1개의 간선이 필요하므로, 처음에 간선이 없는 상태에서 시작하여 n-1개의 간선을 더하는 것이다. 크루스칼 알고리즘은 프림 알고리즘 처럼 하나의 트리를 키워나가는 방식이 아니고, 임의의 시점에 최소 비용의 간선을 더하므로 여러 개의 트리가 산재하게 된다. 크루스칼은 시작점을 정..
람다식 Programming 언어에서 사용되는 개념으로 익명 함수를 지칭하는 용어이다. 실무적으로 코드의 간결함, 지연 연산을 통한 처리 능력 향상 그리고 기존 순환 관련 코드를 구현하는데 있어 불필요한 부분들을 제거할 수 있다는 점에서 중요하게 다루어진다. # 장점 코드의 간결성 효율적인 람다 함수의 사용을 통해 불필요한 루프의 삭제가 가능하고, 함수의 재활용 여지가 커진다. 필요한 정보만들 사용하는 방식을 통한 퍼포먼스 향상 - 지연 연산을 지원하는 방식을 통해 효율적 증대를 기대할 수 있다. # 단점 모든 원소를 전부 순회하는 경우 람다식이 좀 더 느리다. (어떤 방법으로 만들어도 최종 출력되는 byte code나 assembly code는 단순 반복문보다 몇 단계를 더 거치게 된다) 익명 함수의 ..
StringTokenizer 문자열을 특정 구분자(delim)로 나누어 주는 클래스이다. 메소드와 생성자 모두 몇 개 없어서 금방 익힐 수 있다. 스트림 API 처럼 한 번 사용되고 나면 재사용이 불가능 하다. * Constructor //str을 기본 구분자(\t, \r, \n, \f, " ")로 구분한다. public StringTokenizer(String str) //str을 특정 구분자(delim)으로 구분한다. public StringTokenizer(String str, String delim) //str을 특정 구분자(delim)으로 구분해주며, returnDelims가 //true일 시 구분자도 토큰에 포함하며 //false일 시 토큰에 포함하지 않는다. public StringToken..
1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net # 문제 RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자. 1번 집의 색은 2번 집의 색과 같지 않아야 한다. N번 집의 색은 N-1번 집의 색과 같지 않아야 한다. i(2 ≤ i ≤ N-1)번 집의..
학교 수업에서도 시간관계상 배우지 않고 건너뛴 스트림, 람다 등 내용을 공부해야지... 미루고 미루다 코드로 배우는 스프링 부트 웹 프로젝트 책으로 공부하는데 스트림을 모르면 쓸 수 없는 표현들이 나오길래 이제야 스트림에 대해 알아보는 시간을 갖는다. 자바 스트림은 기존 코드(for, foreach... 등)에 비해 간편하고 명료하며 직관적이지만, 스트림에 대해 알 때의 이야기이다. 또한 스트림은 불필요한 리소스를 줄여준다. # Stream * 파일에 쓰이는 InputStream, OutputStream 같은 I/O 스트림은 아니다 자바 8부터 추가된 자바 스트림은 - 추가된 컬렉션의 저장 요소를 하나씩 참조해 람다식으로 처리할 수 있도록 해주는 반복자이다. - 자바 8 이전에 배열or컬렉션을 다루는 방..
* '코드로 배우는 스프링 웹 프로젝트' 교재를 1.5회(?) 완독 후, 스스로의 힘으로 게시판을 구현해보았다. 물론 미흡한 점이 심심찮게 발견되어 수정의 수정을 거듭했다. 그렇게 3~4주를 보내고 나니 다음엔 무엇을 만들어볼까 하던 차에, 문득 떠오른 것이 있다. '무수히 많은 치킨 가게가 있고, 그 많은 메뉴들을 한 곳에서 모아보면 어떨까?' 그래서 프로젝트라고 하기엔 뭣하지만 원하는 작업을 구현해보며 모르는 부분이 있으면 배워가고, 알던 내용이 있으면 다시 되새기는 목적을 가지고 시도해보려 한다. 먼저 '푸라닭' 사이트에서 메뉴 정보들을 크롤링해 뿌려주는 식으로 시작해보고 결과가 괜찮으면 다른 브랜드들도 시도해보는 식으로 점차 넓혀가겠다. * 저번 포스팅에서 푸라닭 사이트에서 제공하는 메뉴들의 이름..