본문 바로가기
728x90

Web Development66

[Java] BufferedReader 다시 읽는 방법 (feat.mark, reset 사용법) 프로젝트 진행 중에 외부 API 데이터를 끌어와 json 형태로 보여주는 기능을 구현해야 했다. 기능 자체는 이미 API에서 제공하고 있기에 금방 구현했지만, 간헐적으로 에러가 콘솔창에 찍혔다. /** Java */ JSONObject jsonObject = new JSONObject(); ObjectMapper mapper = new ObjectMapper(); //BufferedReader 할당된 내용 생략 -> BufferedReader bufferedReader; jsonObject = mapper.readValue(bufferedReader, JSONObject.class); unexpected character (' 2022. 3. 18.
[PostgreSQL / Java] PostGIS Geometry타입의 Point(점) 좌표 SELECT, UPDATE 쿼리(feat. Geometry의 VO타입 설정) 프로젝트에서 위도, 경도 좌표를 사용하는 기능을 개발하게 되었다. 기존에는 MySQL에서 decimal과 같은 DataType을 이용하여 소수점으로 위도(latitude), 경도(longitude)를 따로 저장하여 처리하는 방식으로 기능을 구현했다. 그러나, PostgreSQL은 PostGIS라는 유용한 Extension(확장프로그램)을 통해 Geometry 타입으로 좌표를 처리한다. 특히, PostGIS를 설치하면 거리를 계산해주는 등의 함수를 제공하기 때문에 GPS, 좌표 등의 기능 구현 시에는 필수적으로 사용되는 것 같다. 그러나, 나는 Geometry 타입을 처음 접하게 되었고, 오래되거나 별로 없는 검색결과에 SELECT, UPDATE 쿼리 조차도 어떻게 처리해야할지, Java에서 VO로 타입을.. 2022. 3. 3.
[Java / Javascript] '(1)' 숫자 괄호, 소수점 등의 형태 찾기(패턴 검색)를 통한 정규식 정복하기(Java와 Javascript 차이) 프로젝트를 진행하다보면 검색, 예외처리 등 각종 기능을 구현할 때마다 정규식은 빠질래야 빠질 수 없는 존재인 것 같다. 하지만 의도한 정규식을 한 번에 바로 작성해내는 것은 정말 쉬운 일이 아닌 것 같다. 그래서 오늘도 원했던 정규식을 구글링을 통해 해결했고, 해결해나가면서 알게되었던 내용을 정리 겸 공유하고자 한다. 정규식이 어떤 것인지는 이미 곳곳에 많은 설명이 있기에 각설하고, 바로 실무적인 내용만 다루겠다. [ 참고 이미지 ] - 정규식 참고 주소 : https://hamait.tistory.com/342 정규식 코드를 작성하는데 가장 큰 도움이 되었던 내용이다. 정규식을 구성하는 각 부분에 대한 설명이 나와있기에, 하나씩 참고하여 정규식을 작성해보면서 이해를 넓힐 수 있었다. 특히 정규식에서 ^.. 2022. 3. 3.
[Javascript / API] 카카오맵 API 연동으로 로드뷰 및 로드뷰 마커 표시하기('panoId 값이 없습니다' 에러 포함) 기본 맵으로 처리하는 것도 좋지만, 로드 뷰를 통해서 기본 맵의 부족한 점을 보완할 수 있다면 더 좋을 것이다. 그래서 기존 프로젝트에 로드뷰를 추가해보기로 했고, 카카오맵API 문서에서 제공하는 방식과는 조금 다르게 적용해야 했기에 해당 부분을 정리할 겸 작성해보려고 한다. ▼▼▼ 기본 맵 출력은 아래 글에서 확인할 수 있다. [Javascript / HTML5] 카카오맵 API 연동으로 좌표 및 마커 표시하기 A to Z (에러 포함) 프로젝트에서 지도를 클릭해 위/경도(위도, 경도) 좌표를 처리해야하는 기능 구현이 필요하게 되었다. 구글링을 통해서, 네이버맵보다 카카오맵이 개발이 용이하고 로딩이 빠르다고 하여 카카 devlifetestcase.tistory.com [ 구현 방법 ] ◆ 로드뷰, 로드.. 2022. 2. 24.
[Javascript / API] 입력한 좌표값(Input)으로 카카오맵 API 마커 위치 변경/이동하기(좌표 정규식 포함) 프로젝트를 진행하면서 카카오맵 API를 통해서 좌표값으로 맵과 마커를 출력하는 기능을 구현해야했다. ▼▼▼ 아래 글과 같이 출력 자체는 어려운 부분이 없었다. [Javascript / HTML5] 카카오맵 API 연동으로 좌표 및 마커 표시하기 A to Z (에러 포함) 프로젝트에서 지도를 클릭해 위/경도(위도, 경도) 좌표를 처리해야하는 기능 구현이 필요하게 되었다. 구글링을 통해서, 네이버맵보다 카카오맵이 개발이 용이하고 로딩이 빠르다고 하여 카카 devlifetestcase.tistory.com 하지만, 언제나 프로젝트 기능 구현은 API 문서에 나와있는 그대로 이루어질 수가 없다... 단순한 클릭이벤트와는 별개로 Input 값을 직접 입력했을 때, 마커의 위치를 이동시키는 기능이 필요했다. 그렇게.. 2022. 2. 24.
[Javascript / API] 카카오맵 API 연동으로 좌표 및 마커 표시하기 A to Z (에러 포함) 프로젝트에서 지도를 클릭해 위/경도(위도, 경도) 좌표를 처리해야하는 기능 구현이 필요하게 되었다. 구글링을 통해서, 네이버맵보다 카카오맵이 개발이 용이하고 로딩이 빠르다고 하여 카카오맵으로 진행하였다. (카카오맵 vs 네이버맵) 기본적으로 카카오에서 케이스별로 API 문서와 샘플을 잘 만들어두었지만, 상황별로 분류되어있어, API KEY를 받는 것부터 맵에 마커를 표시(출력)하는 것까지는 이렇게 따로 묶어서 정리해두려고 한다. [ API KEY 발급 방법 ] API KEY는 개인이 외부의 API를 사용할 때 접근할 수 있도록 주어지는 키이다. 그렇기 때문에, 카카오맵 API를 사용하기 위해서는 API KEY를 발급 받아야하는데 발급 방법은 매우 간단하다. ⓞ 아래의 카카오 개발자사이트에서 개발자 등록을.. 2022. 2. 23.
[Javascript] 현재날짜 yyyy-MM-dd 형태로 0채워서 출력하기(feat. padStart) 프로젝트를 진행하다보면 현재 날짜(오늘 날짜)를 yyyy-MM-dd 형태로 표현하는 것이 종종 요구되곤 한다. DB에서 날짜를 받아오는 것도 Date 타입 timestamp 타입 등의 사용으로 간혹 문제가 생기곤 하는데, 자바스크립트에서도 날짜를 따로 처리해야할 때가 있다보니 그냥 쉽게 정리해두려고 한다. - 요구 사항 - 1. 자릿수 형태를 맞출 것 2. 요일을 표시해줄 것 기존에는 따로 코드를 더 작성해서 0을 처리하곤 했었는데, 이번에는 Javascript에서 제공하는 padStart 를 이용해보기로 했다. padStart는 고정 자릿수와 채울 문자열을 파라미터로 받는 아주 간편한 내장함수다. 이를 이용해서 우선 코드를 작성해보겠다. initDate(); const initDate = () => {.. 2022. 2. 16.
[Spring / Legacy] AbstractView를 활용해 파일 다운로드 기능 구현해보기 웹 프로젝트를 진행하다보면 업로드와 다운로드 기능을 거의 필수적으로 개발하게 된다. 오늘은 그 중에서 다운로드 기능에 대해서 정리해보려고 한다. File Upload 로직이 서버단에서 이루어지는 것에 비해 File Download는 뷰단에서 이루어진다. 하지만, 진짜 View인 jsp 파일을 return 하는 것은 아니다. 대신 AbstractView라는 해석 그대로 추상View 라는 클래스를 이용하여 처리한다. 우리가 AbstractView 클래스를 상속받는 클래스를 만들고 리턴하기만 하면 해당 클래스는 뷰로 취급되어 다운로드 기능이 구현되는 것이다. 바로 알아보도록 하자. [ 구현 과정 ] 우선 위와 같은 방식으로 servlet-context.xml에 ViewResolver와 DownloadView를.. 2022. 1. 21.
[SPARQL / RDF] 속성 중 하나만 가지고 있어도 조회하기(feat. 외부조인 outer join) 이전 글에서 여러 개의 속성을 동시에 가지고 있으면서, 한 URI에 대한 여러 개의 결과를 하나의 행으로 출력하는 방법을 살펴보았다. ▼▼▼ 이전 글 보기 [SPARQL / RDF] 동일한 URI의 여러 행 데이터를 한 행으로 조회(feat. 카티션 프로덕트/Cartesian Product) SPARQL 쿼리를 조회하다보면, 쿼리가 길어지기 마련이다. 하나의 속성에 대해서만 조회하면 문제가 없겠지만 실무에서는 여러 개의 속성을 가지고 있는 데이터를 조회하게 된다. 예를 들어, 제목 devlifetestcase.tistory.com 그러면 SQL의 OUTER JOIN처럼 Null 값이어도, 또는 속성 중 하나만 가지고 있더라도 결과로 조회하는 방법은 없을까? SPARQL / SPARQL 예제에 대해서 실무.. 2022. 1. 18.
[SPARQL / RDF] 동일한 URI의 여러 행 데이터를 한 행으로 조회(feat. 카티션 프로덕트/Cartesian Product) SPARQL 쿼리를 조회하다보면, 쿼리가 길어지기 마련이다. 하나의 속성에 대해서만 조회하면 문제가 없겠지만 실무에서는 여러 개의 속성을 가지고 있는 데이터를 조회하게 된다. 예를 들어, 제목과 설명을 모두 갖고 있는 데이터를 조회하는 경우를 말하는 것이다. 이 경우에, RDB에서 두 개의 테이블을 조인해서 조회할 때 발생하는 카티션 프로덕트가 SPARQL에서도 발생한다. RDB에서는 조인 조건을 추가해줌으로써 카티션 프로덕트가 해소되지만, SPARQL에서는 그런 방법이 없어보였다. (만약에 있다면, 알려주시면 정말 감사하겠습니다) 그렇기에 이 문제를 해결해야했는데, 해결하기 전에 어떤 문제인지 간략히 보도록 하겠다. HTML 삽입 미리보기할 수 없는 소스 SPARQL 예제인 사례를 설명하기 위해 DBP.. 2022. 1. 18.
[SPARQL / RDF] 검색 기능 구현 및 개선하기(like 검색 엔진) 이전 글에서 단어를 통해 결과를 조회할 수 있는 검색 쿼리를 작성해보았다. ▼▼▼ 검색 쿼리를 작성해놓은 이전 글 링크 [SPARQL / RDF] 검색어(단어)가 포함된 결과 조회하기 SPARQL로 프로젝트를 진행하다가 검색 기능을 구현하게 됐다. RDB였다면 %나 CONCAT을 이용하면 됐지만, SPARQL에서 해당 쿼리를 작성하려고 하니 쉬워보이지 않았다. 하지만, 역시 SPARQL도 쿼리의 일종 devlifetestcase.tistory.com 그러나 단순 쿼리만으로는 검색에 아쉬운 점이 있었다. 1. 띄어쓰기 ▶ 띄어쓰기 또한 문자로 인식하기 때문에 '가나'와 '가 나'를 검색했을 때 결과가 다르다 2. 순서 ▶ 검색결과는 가장 일치하는 문자부터 출력되어야 한다 3. 검색 성능 ▶ 글로벌 DBPe.. 2022. 1. 18.
[Spring Boot / JPA / Error] Connection leak detected: there are 1 unclosed connections upon shutting down pool JPA로 실습 프로젝트를 진행하는 도중 다음과 같은 오류가 발생했다. ERROR: Connection leak detected: there are 1 unclosed connections upon shutting down pool jdbc:h2:tcp://localhost/~/test '연결 누수가 감지되었다 : pool 종료 시에 닫히지 않은 1개의 연결이 있다' 는 뜻이라서, 'connection이 필요한 부분이 있나?' 라는 생각이 먼저 떠올랐다. 그렇기에 유일하게 connection이 필요한 db connection을 생각하게 되었다. 문제는 db는 H2로 먼저 띄워서 동작하는 것을 확인했다는 것이다. [해결 방법] 결국은 코드에서 db와 커넥션 하는 부분이 잘못되었다는 것을 알게 되어서, 처음에.. 2022. 1. 17.
[SPARQL / RDF] 검색어(단어)가 포함된 결과 조회하기 SPARQL / SPARQL 예제로 프로젝트를 진행하다가 검색 기능을 구현하게 됐다. RDB였다면 %나 CONCAT을 이용하면 됐지만, SPARQL에서 해당 쿼리를 작성하려고 하니 쉬워보이지 않았다. 하지만, 역시 SPARQL도 쿼리의 일종이기 때문에 관련 기능을 제공하고 있었다. 바로 FILTER를 이용한 방법이다. SPARQL의 FILTER는 SQL의 WHERE와 유사한 기능을 한다. 이 FILTER를 이용해서 조회할 결과의 조건을 설정할 수 있다. FILTER는 또한, 다양한 함수와 기능을 제공하는데 아래 w3c의 공식 링크에서 자세한 내용을 찾아볼 수 있다. SPARQL Query Language for RDF www.w3.org [검색 기능 구현] 그 중에서 검색을 위해 사용할 수 있는 기능은 .. 2022. 1. 17.
[SPARQL / RDF] SPARQL 트리플 패턴을 간단하게 이해해보기 ▼▼▼ SPARQL에 대해서 아직 이해가 덜 되었다면 하단의 이전 시리즈 글을 참고 [SPARQL / RDF] LOD 데이터와 SPARQL을 RDB 개념으로 간단하게 이해해보기 ◆ LD : Linked Data ◆ OD : Open Data ◆ LD + OD = LOD(Linked Open Data) 위에서 알 수 있듯이 LOD는 Linked Data와 Open Data의 합성어이다. 웹에 발행된 데이터들을 개별 URI를 통해 구별 및 연결하는 Linke.. devlifetestcase.tistory.com SPARQL 쿼리는 SQL 쿼리와 다르게 트리플 패턴으로 이루어져 있다. 트리플 패턴이 주는 느낌은 마치, 영어의 3형식 문장과 같다. - 영어 3형식 문장 : 주어(S) + 동사(V) + 목적어(O.. 2022. 1. 17.
[SPARQL / RDF] LOD 데이터와 SPARQL을 RDB 개념으로 간단하게 이해해보기 ◆ LD : Linked Data ◆ OD : Open Data ◆ LD + OD = LOD(Linked Open Data) 위에서 알 수 있듯이 LOD는 Linked Data와 Open Data의 합성어이다. 웹에 발행된 데이터들을 개별 URI를 통해 구별 및 연결하는 Linked Data 그리고 누구나 자유롭게 사용, 배포할 수 있는 Open Data 의 특징이 결합된 Data라는 뜻이다. RDB(관계형 데이터베이스)에 익숙해있던 내가 처음 LOD라는 개념을 접하였을 때, 바로 이해하는 것은 결코 쉽지 않았다. 그러나 곧, 쉽게 이해하는 법을 터득했다. 그 방법이라는 것은, LOD라는 개념을 RDB에 맞춰서 생각해보는 것이었다. LOD는 개별 URI에 링크 정보를 부여하여 웹을 상호 연결한다. 이를 .. 2022. 1. 14.
[Javascript / JSP] 원 버튼 다중 파일 다운로드(Multiple File all-download) 기능 구현(feat. iframe) 프로젝트를 진행하다가 '전체 파일 다운로드' 버튼을 클릭해 여러 개의 파일을 한 번에 다운로드해야하는 경우가 발생했다. 단순하게 개별 파일 다운로드를 반복문으로 처리하면 될 것 같다는 생각이 들었지만, 아래 에러 코드가 콘솔에 찍히며 난관에 부딪혔다. Error : java.io.ioexception 현재 연결은 사용자의 호스트 시스템의 소프트웨어의 의해 중단되었습니다 에러가 발생하고, 난관에 부딪힌 이유는 곧 밝혀졌다. HTTP가 한 번에 한 개의 파일만 전송 가능하기 때문이었다. ( 개별 파일 다운로드를 구현할 때, 서버에서 ModelAndView에 객체를 담아 다운로드를 구현하였는데 하나의 request에 다중으로 View를 구현할 수 없다 ) 그렇기에 처음으로 해당 기능을 구현하였을 때, 반복문의.. 2022. 1. 12.
[Spring / Legacy / Error] Mybatis 사용 시 java.lang.NumberFormatException: For input string 에러 Spring Mybatis 프로젝트를 진행하는 도중 다음과 같은 메세지가 콘솔에 찍혔다. ### Error querying database. Cause: java.lang.NumberFormatException: For input string: "N" ### Cause: java.lang.NumberFormatException: For input string: "N" NumberFormatException 이었기 때문에 숫자로 사용되는 위치에 'N'이라는 문자열이 입력되어 발생했다는 것을 알 수 있었다. 문제는 해당 위치가 String 으로 처리되는 부분이라는 것이다. @Getter @Setter private int testId; private String testCd; SELECT * FROM TES.. 2022. 1. 12.
[JSTL / JSP] jstl/functions 의 split(fn:split) 공백 처리 주의점 [ fn:split 에 대한 간략한 설명 ] JSP에서 EL태그로 컨트롤러에서 넘어온 값을 처리하다보면, jstl functions를 이용해야 되는 경우가 있다. 주로 위와 같이 prefix로 fn을 설정하고 쓰게 되는데, 흔하게 쓰는 fn:length나 fn:split 등 편리한 기능을 제공한다. 그 중에서 이번엔 fn:split에 대한 내용을 공유하고자 한다. fn:split은 Java나 Javascript의 split과 유사한 기능을 제공한다. split은 문자열을 구분자(Delimiter)를 기준으로 나누어진 배열을 반환한다. 아래는 예제와 예제 코드이다. - 문자열 : "피자,햄버거,치킨,콜라" - 구분자 : "," - 반환되는 배열 : ["피자","햄버거","치킨","콜라"] String fo.. 2022. 1. 11.
반응형