Programming 117

스프링부트) Spring Boot 시작하기.

프로그래머스를 통해 Naver Webtoon 코딩테스트에 참가를 해 보았습니다. 아직 1차 테스트를 합격 한 건 아니지만, 2차 과제 테스트 기술인 Spring Boot를 한번도 해본 적이 없어서 이번에 한번 시도해보려고 합니다. Spring Boot는 Spring framework를 좀 더 쉽고 간단하게 사용하게 해주는 툴 이라고 이해하면 될 듯 합니다. 위의 소개를 요약하자면, Spring boot는 spring 기반의 stand alone 어플리케이션을 '바로 실행' 할 수 있는 상태로 쉽게 만들어 준다고 합니다. war 파일을 deploy 할 필요도 없이, Tomcat 등이 내포 되어 있다고 하구요. xml 설정을 할 필요도 없다고 하네요. Spring.io에 있는 Spring Initializr..

Programming/JPA ⁄Spring 2021.07.05 (3)

Javascript) 웹사이트 혹은 웹 어플리케이션에 단축키 추가하기

Javascript) 웹사이트 혹은 웹 어플리케이션에 단축키 추가하기 최종프로젝트를 진행하며, 막바지에 추가했던 '단축키' 기능입니다. 생각보다 어렵지는 않은데 발표할때 반응은 꽤나 좋았던 걸로 기억합니다. 실제로 싱글페이지로 웹 어플리케이션을 설계 하면서, 그 난이도 상승에 비해 얻은 설계상 이점이 크지 않다고 느꼈지만 반대로 싱글페이지가 아니었으면 추가하지 못했을 기능 중 하나 입니다. ( 뭐 억지로 할라면 했겠지만 싱글페이지가 아니라면 그 의미가 떨어지는 기능입니다) 1. 아이디어와 디자인 단축키 아이디어는 Google Docs와 Figma 에서 얻었습니다. 요즘 왠만한 어플리케이션들은 정말 전부 웹에서 자유자재로 실행할 수 있게끔 세상이 흘러가고 있다고 생각되는데요, 우연히 단축키 기능을 찾게 되..

Programming/Javascr¡pt 2021.07.04 (1)

자바스크립트) 한글 마지막 글자에 따라 로/으로, 을/를 어울리게 출력해주기

자바스크립트) 한글 마지막 글자에 따라 로/으로, 을/를 어울리게 출력해주기 저는 한국어가 참 어려운 언어라고 생각합니다. 특히나 우리는 자연스럽게 을/를 , 로/으로 등을 붙여서 사용하지만, 컴퓨터는 그렇지 못합니다. 외국인들도 참 어렵게 느끼는 부분입니다. 위에서 보이는 것 처럼 을/를 로/으로 를 구분하지 못해서 참 어색하게 출력되는 부분이 있습니다. 이 부분을 해결 해 보려고 합니다. 일단 받침이 있는 단어인지 아닌지를 먼저 체크해주는 함수를 만듭니다. // 받침이 있는 문자인지 테스트 해주는 함수 입니다. const isSingleCharacter = function(text) { var strGa = 44032; // 가 var strHih = 55203; // 힣 var lastStrCode..

btoa 혹은 atob 사용해 BASE64 <-> UTF-8 인코딩 할때 한글 깨짐 해결

btoa 혹은 atob 사용해 BASE64 UTF-8 인코딩 할때 한글 깨짐 해결 Github에서 저장소의 readme 파일을 불러와 화면에 렌더링 해 주는 기능을 구현 하고 있는 중, 한글이 깨져버리는 현상이 발생했습니다. 위에서 보이듯, github 에서는 readme 파일을 base64 로 인코딩 해서 보내주는데요, let decoded = atob(res.content); 이렇게 해서 출력 했더니 한글이 깨지는 현상이 발생 했습니다. https://github.com/dankogai/js-base64 dankogai/js-base64 Base64 implementation for JavaScript. Contribute to dankogai/js-base64 development by creati..

MyBatis ) VO(Value Object)객체 만들지 않고 map 으로 쿼리 결과 받아오기

MyBatis ) VO(Value Object)객체 만들지 않고 map 으로 쿼리 결과 받아오기 VO 객체를 만들어 두고 MyBatis 에서 맵핑을 해서 쓴다면 정말 간편하고 쉬운데요, property 가 적고, 자주 사용하지 않는 객체들도 모두 VO 로 등록하기엔 비 효율적입니다. 마침 팀원분 한 분이 Map 에 맵핑 하는걸 궁금해 하시기도 해서 이번 기회에 Map으로 한번 코드를 작성 해 보았습니다. package best.gaia.project.dao; import java.util.List; import java.util.Map; import org.springframework.stereotype.Repository; @Repository public interface RepositoryDao {..

스프링 websocket 사용시 java.io.IOException: Broken pipe 해결하기.

스프링 websocket 사용시 java.io.IOException: Broken pipe 해결하기. java.io.IOException: Broken pipe at sun.nio.ch.FileDispatcherImpl.write0(Native Method) at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) at sun.nio.ch.IOUtil.write(IOUtil.java:65) at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:469) at org.apache.tomcat.u..

MAXIMUM SESSIONS OF 1 FOR THIS PRINCIPAL EXCEEDED 해결하기

MAXIMUM SESSIONS OF 1 FOR THIS PRINCIPAL EXCEEDED 해결하기 Spring Security를 사용해 로그인 인증 처리를 하고 있습니다. 정상적으로 로그인, 로그아웃이 이루어지고 있는데 특정 시점마다 자꾸 로그인이 제대로 되지 않는 문제가 있었습니다. Session의 에러 메시지를 확인 하니 MAXIMUM SESSIONS OF 1 FOR THIS PRINCIPAL EXCEEDED 문제 였고, 해결을 위해 선생님을 찾아 갔습니다. spring security 를 관리하는 xml 파일입니다. 아래의 max-sessions = 1 부분에서 최대 세션을 1개로 제한하고 있는데, 세션을 추가로 생성하려고 했기 때문에 생겼던 문제 입니다. 서버에서는 해당 회원은 이미 로그인이 되어..

Programming/JPA ⁄Spring 2021.06.10 (2)

Eclipse에서 Tomcat 프로젝트 Context Path 변경하기.

ContextPath가 https://localhost/gaia 로 잡혀 있습니다. 나중에 배포를 하더라도 gaia.co.kr 이런식으로 되어야지 gaia.co.kr/gaia 로 도메인 하위 contextPath를 잡는 사람은 아무도 없겠죠? 저희팀에서 만들고 있는 프로젝트는 URL을 네비게이션 처럼 사용 할 수 있게 하고 pathVariable을 적극적으로 사용하고 있는데요, kkobuk 이란 아이디가 생성한 testproject 에서 issue 들을 열람 하면 아래와 같이 kkobuk/testproject/issue의 URL 주소를 갖습니다. Restful API 까지 활용하며, 하위로 /1 까지 하면 1번 이슈를 조회 하게끔 했습니다. 확대해서 보면 주소가 아래와 같습니다. ContextPath를 ..

자바 static import 사용해서 static method (정적메소드)를 클래스 메소드 처럼 사용하기

getProjNoFromSession 이라는 static method가 있습니다. 이 메서드를 다른 클래스에서 사용 하려면, 해당 클래스 명을 다 써줘야 하는 불편함이 있습니다. 하지만 import static 을 사용하여 해당 메서드를 import 시켜둔다면, 해당 클래스에서는 언제든 이미 가지고 있는 메서드 처럼 사용 할 수 있습니다. 코드의 ReadAbility 에도 좋고 Code Assist 도 되니 알아둔다면 유용하게 사용할 수 있습니다! import static best.gaia.utils.SessionUtil.*; 위와 같이 import 해둔다면 해당 클래스의 모든 메서드를 import 합니다 !

Programming/Java 2021.06.06 (1)

MyBatis update 조건에 따른 동적 쿼리 작성하기 , Unable to convert type java.lang.Integer of 12 to type of java.lang.CharSequence 해결 방법

MyBatis update 조건에 따른 동적 쿼리 작성하기 및 Unable to convert type java.lang.Integer of 12 to type of java.lang.CharSequence 오류 해결 방법 UPDATE KANBAN_CARD UPDATE KANBAN_CARD SET KB_CARD_PRIV_NO = #{kb_card_priv_no,jdbcType=NUMERIC} ,MEM_NO = #{mem_no,jdbcType=NUMERIC} ,KB_COL_NO = #{kb_col_no,jdbcType=NUMERIC} ,ISSUE_SID = #{issue_sid,jdbcType=NUMERIC} ,KB_CARD_CONT = #{kb_card_cont,jdbcType=VARCHAR} ,KB_C..

jQuery contextMenu를 활용해 우클릭 메뉴 만들기

위에 보이는 css 와 js 들이 필요합니다. 우클릭 할 영역을 만들어 줍니다. right click me 영역에 초기 설정 코드를 넣어줍니다. $(function(){ $.contextMenu({ selector: '.context-menu-one', items: { // name: { name: "Text", type: 'text', value: "Hello World", events: { keyup: function(e) { // add some fancy key handling here? window.console && console.log('key: '+ e.keyCode); } } }, sep1: "---------", // yesno: { name: "Boolean", type: 'check..

서블릿에서 한글 쿠키 사용하기. An invalid character [32] was present in the Cookie value 해결하기.

Cookie에 간단하게 String 데이터를 넣는데 에러가 발생했습니다. SEVERE: Servlet.service() for servlet [springDispatcherServlet] in context with path [/gaia] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value] with root cause java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie v..

Programming/JPA ⁄Spring 2021.06.04 (1)

이제 alert 대신 toastr 사용하자 ! Toastr 사용 하기

https://github.com/CodeSeven/toastr CodeSeven/toastr Simple javascript toast notifications. Contribute to CodeSeven/toastr development by creating an account on GitHub. github.com 더보기 toastr is a Javascript library for non-blocking notifications. jQuery is required. The goal is to create a simple core library that can be customized and extended. toastr 이란 ? toastr 은 non-blocking 알람을 띄우는 Javasrip..

Programming/Javascr¡pt 2021.06.04 (3)

org.apache.ibatis.reflection.ReflectionException:There is no getter for property named 해결하기

org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ' kb_card_priv_no' in 'class best.gaia.vo.KanbanCardVO' at org.apache.ibatis.reflection.Reflector.getGetInvoker(Reflector.java:374) at org.apache.ibatis.reflection.MetaClass.getGetInvoker(MetaClass.java:164) at org.apache.ibatis.reflection.wrapper.BeanWrapper.getBeanProperty(BeanWrapper.java:162) at org.apach..

특정 문자 변경하는 Filter 만들기

제가 지금 준비중인 Project에서는 Markdown 문법을 지원하고 있습니다. 그런데 xss 방어용으로 등록한 lucy-xss-servlet-filter가 > 를 일괄적으로 > 로 변경해버리는 바람에 markdown 에서 많이 쓰는 문자중 하나인 '>'를 사용하지 못하는 상황이 되어 버렸습니다. lucy-xss-servlet-filter 에서 특정 문자를 제외하는 방법을 엄청 찾아봤는데 그건 없어서.. Custom Filter를 하나 더 추가 해서 Lucy 필터 다음에 위치하도록 하고, >를 모두 >로 변경하도록 해 보았습니다. CustomWrapper를 먼저 만듭니다. package best.gaia.utils.filter; import javax.servlet.http.HttpServletRequ..