5월, 2017의 게시물 표시

[CoffeeScript] 오브젝트 프로퍼티를 기준으로 루프 돌리는 방법

  for x in _array 는 array의 요소를 차례차례 돌며 처리하는 데 사용되죠. 그렇다면, 오브젝트 프로퍼티를 기준으로 돌고자 하면?   in 을 of 로 바꾸면 됩니다.   for k of _object   만약 _object[k]로 value를 가져오는 게 귀찮다면, 아래와 같이 해 주세요.   for k, v of _object   위와 같이 하면 k엔 오브젝트의 프로퍼티명이, v엔 해당 프로퍼티의 값이 들어가게 됩니다.

[IntelliJ] Spring 재시작 없이 리로드(Hot-swap)하기!

스프링 핫스왑   IntelliJ를 사용하면서 불편한 점이 하나 있었습니다. 방금 전까지요. 바로 js, css, html, jsp 등등 정적 리소스는 수정하고 On Frame Deactivation 이벤트에 지정한 대로 자동으로 리로드가 되는데, Controller, Service, Repository, Mapper 등등은 알아서 리로드가 되지 않는 것이었죠.   근데, 제가 회사에서 일 할 때의 기억으론 이클립스 사용시 컨트롤러 역시 핫스왑이 되었던 것 같은데, 왜 IntelliJ에선 안 되지? 하고 생각하게 되었습니다. 얼마 지나지 않아, 안 되는 게 아니라 못 찾은 것 뿐일 거라는 생각이 들어 찾아봤습니다.   역시 답은 금방 나오더군요. 컨트롤러, 리포지토리, 서비스 모두 핫스왑!   방법은 Maven과 Gradle이 다릅니다. 따지고 들어가 보면 같은 원리긴 하지만... 아무튼 설명 들어갑니다.   메이븐 사용시: <plugin> <groupId> org.springframework.boot </groupId> <artifactId> spring-boot-maven-plugin </artifactId> <dependencies> <dependency> <groupId> org.springframework </groupId> <artifactId> springloaded </artifactId> <version> 1.2.6.RELEASE </version> </dependency> </dependencies> </plugin>   그래들 사용시: buildscript { repositorie

[MyBatis/MySQL] 하나의 Mapper Method에서 여러개의 Statement를 쿼리하는 방법

마이바티스 MySQL에서 한 번에 여러개의 구문 실행하기?   제목에도 쓰여있듯, MySQL 사용자를 위한 방법입니다. 일반적으로 아래와 같이 Mapper XML에 작성하고 돌리면 구문 에러가 날 겁니다. UPDATE md SET call_count = NULL #{callCount} WHERE biz_id = ( SELECT id FROM business WHERE cat3 = #{id} ); UPDATE category_3rd SET call_count = NULL #{callCount} WHERE id = #{id};   웃기는 건, 워크벤치나 IDE 자체 내장 SQL 툴로 돌리면 된다 라는 겁니다. 하지만 그건 해당 툴들이 Multiple Queries를 지원하기 때문 이죠.   감이 잡히셨죠? Multiple Queries를 지원 가능하게 하면 됩니다. 한 번에 여러 구문 실행 가능하게 하는 방법   다시 말씀드리지만, MySQL  전용입니다. 다른 DB들은 각각 따로 방법이 있는 듯 했습니다. Oracle의 경우엔 BEGIN .. END를 썼던가 하고, MSSQL의 경우엔 GO를 중간에 집어넣었던 것 같고... 암튼 그것들은 그냥 흘려봤기 때문에 직접 검색하시고, 여기선 MySQL 기준으로 알려드리겠습니다.   DB Connection URL 에 allowMultiQueries=true 를 추가해주세요. 전 현재 스프링 프레임워크를 사용중이므로 Bean Configuration을 예시로 들겠습니다. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="url" value=

[SQL] WHERE절에 다른 테이블의 컬럼을 연동시키기

SQL WHERE절에 다른 테이블의 컬럼을 연동?   제목만 봐서는 감이 잘 안 잡히실겁니다. 제가 봐도 이 제목은 똥이지만, 밤을 새서 작업하는 중이라 어쩔 수가 없네요... 이해를 돕기 위해 제가 처한 상황을 예시로 들어보겠습니다.   현재 저는 세 개의 테이블이 있습니다. `md` : `business` 테이블의 id 를 biz_id  외래 키로 갖는 테이블 `business` : `category` 테이블의 id 를 cat 외래 키로 갖는 테이블 `category` : 카테고리 테이블   실제론 더 다양한 컬럼들이 있지만, 필요한 건 위의 정보가 다 입니다. 제가 하려는건, `md`  테이블의 call_count 를 바꿔야 한다. 조건 컬럼은 `md` . biz_id 이다. biz_id 를 id 로 갖는  `business`  테이블의  cat 이 특정 값과 일치해야 한다.   과연 어떻게 해야 저걸 정상적으로 실행시킬 수 있을지 찾아보다가 비교적 쉽게 답을 얻었습니다. 아래와 같이 하시면 됩니다. UPDATE md SET call_count = #{callCount} WHERE biz_id = (SELECT id AS biz_id FROM business WHERE cat = #{cat}   해석하자면, `business` . cat 이 #{cat}에 해당하는 레코드의  `business` . id 를 biz_id 로 명명해 가져온 뒤, `md` . biz_id 를 가져온 id 와 비교해 일치하는 레코드의 `md` . call_count 를 #{callCount}로 변경하라는 의미입니다.   참 쉽죠? 제가 지금 글을 개떡같이 써서 알아보기 힘드실지도 모르지만, 한 번 직접 실행하며 곱씹어보시면 이해가 금방 되실겁니다.   참고:  http://stackoverflow.com/questions/14389891/select-a-value-from-specific-table-with-where-clause-

IntelliJ 사용중 소실된 DB 스키마, 테이블 복구하는 방법

이미지
  안녕하세요? 혼살입니다. 이번엔 IntelliJ를 사용하고 있을 경우, 포맷 또는 예기치 못한 사고로 인해 날아가버린 데이터베이스 스키마, 테이블 구조를 복구하는 방법 을 알려드리죠.   중요한 점 하나! 복구하는 건 Schema 뿐입니다. 안에 있는 레코드는 복구되지 않습니다!  그래도 이정도면 감지덕지죠. 조건   어떠한 이유로 DB가 날라가버리기 전에, IntelliJ의 Database Tool을 사용해 해당 DB에 접속한 상태여야 합니다. IntelliJ의 Database Tool   IntelliJ에서 Ctrl + Shift + A -> Database 입력 , 혹은 View - Tool Windows - Database 를 클릭하시면 아래와 같은 Database 툴이 뜹니다.   해당 툴은 MySQL Workbench 등 DB 관리 GUI가 없어도 IntelliJ 내부에서 DB를 눈으로 보고 관리할 수 있게 도와주는 툴입니다. 중요한 점은, 이 툴을 사용해 스키마를 열었던 적이 있다면, 해당 스키마의 정보가 프로젝트 폴더에 저장 됩니다. 이 스키마 정보를 통해 DB를 복구하도록 하겠습니다. DDL을 카피해 DB 스키마 복구하기   글만 보면 어려울 것 같죠? 전혀! 실상은 매우 간단합니다. 위 이미지에서 superad라는 스키마는 소실된 스키마 입니다. 포맷으로 완전히 날라가버린 DB죠. 해당 DB가 존재했던 Data 폴더는 포맷과 함께 완전히 날아갔고, 복구할 수 없습니다. 하지만 해당 DB의 정보는 이렇게 IntelliJ 프로젝트 폴더에 남아 Database 툴에서 보여지고 있습니다.   그럼 우리가 해야할 것은? 해당 스키마 오른쪽 클릭, Generate and Copy DDL( Ctrl + Shift + C) .   그럼 해당 테이블의 CREATE STATEMENT가 클립보드에 복사됩니다. 메모장 등을 켜서 확인해보세요. 코멘트까지 완벽히 복사된 모습! FK

[HTML/CSS] CSS만 사용해서 텍스트 드래그 방지하는 방법

드래그 방지의 필요성?   많은 분께서 드래그 방지 하면 불펌방지 를 떠올리실 거라 생각합니다. 하지만, 사실상 불펌방지는 드래그 방지만으로 막을 수 있는 것이 아닐 뿐더러, 애초에 불펌방지라는 말 자체가 이상하기도 합니다. 누구나 볼 수 있으며 정보 공유를 목적으로 하는 블로그에서 불펌방지라니...   아무튼, 제가 이 글을 쓰는 목적은 쓸데없는 드래그로 의도한 디자인이 망쳐지는 경우 를 방지하기 위함입니다. 예를 들어, 사이드메뉴를 예쁘게 만들어 색상 조합도 완벽하게 디자인해놨는데 메뉴를 클릭하다 실수로 드래그라도 하면 영 보기 좋지 않은 색상으로 드래그된 채 색상 조합이 다 망쳐지게 되죠. 바로 이럴 때 드래그 방지를 하면 됩니다. 드래그 방지 방법. CSS만으로!   매-우 간단합니다. user-select 혹은 touch-callout 프로퍼티를 none으로 설정하면 됩니다.  -webkit-touch-callout: none; user-select: none; -moz-user-select: none; -ms-user-select: none; -webkit-user-select: none;   해당 CSS가 적용된 엘리먼트는 이제 드래그를 할 수 없게 됩니다. 참 쉽죠?

[Spring MVC RESTful] RESTful URL패턴 사용하며 css, js, img 등 리소스는 default 서블릿에 할당하는 방법

  Spring RESTful을 사용하기 위해 을 / 로 지정하고 다 잘 돌아가는 듯 싶었으나 /css, /js, /img 디렉터리에서 로딩을 하지 못 한다면? 하나하나  @RequestMapping 으로 지정하는 것도 방법이 될 수 있겠으나, 더 간단하게 web.xml에서 해결하는 방법이 있었다. <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/spring/context-*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> <url-pattern>*.js</