반응형

WGS84GEO 좌표를 Google polyline format으로 encoding 하고 decoding 해야 할 일이 생겼다.

 

https://developers.google.com/maps/documentation/utilities/polylinealgorithm

 

Encoded Polyline Algorithm Format  |  Google Maps Platform  |  Google Developers

Points: (38.5, -120.2), (40.7, -120.95), (43.252, -126.453) 38.5 -120.2 3850000 -12020000 +3850000 -12020000 _p~iF ~ps|U _p~iF~ps|U 40.7 -120.95 4070000 -12095000 +220000 -75000 _ulL nnqC _ulLnnqC 43.252 -126.453 4325200 -12645300 +255200 -550300 _mqN vxq`

developers.google.com

위의 url을 통해 들어가 보면 google polyline format을 인코딩하고 디코딩하는 방법에 대한 설명이 나와있다.

직접 소스를 작성해서 2진수를 변환하고 여러가지 과정을 통해서 변환이 가능하다.

 

하지만 Maven 이나 Gradle 을 사용중이라면 간단한 방법이 있다.

 

Maven 을 사용중이라면 pom.xml 에 아래와 같이 넣어주면된다.

(글 작성 당시 버전은 1.0.1이 최신이었음)

<dependency>
    <groupId>com.google.maps</groupId>
    <artifactId>google-maps-services</artifactId>
    <version>1.0.1</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.5</version>
</dependency>

Java 소스 예제로는 아래와 같이 간단하게 사용이 가능하다.

package com.polyline.controller;

import java.util.ArrayList;
import java.util.List;

import com.google.maps.internal.PolylineEncoding;
import com.google.maps.model.LatLng;

public class PolylineTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		List<LatLng> coordList = new ArrayList<>();
		coordList.add(new LatLng(37.5655932,126.9884135));
		coordList.add(new LatLng(37.56530712,126.9884219));
		String encodeTxt =  PolylineEncoding.encode(coordList);
		
		System.out.println(encodeTxt);
	}

}

List에 좌표를 담아서 PolylineEncoding.encode 함수를 통해 google polyline format으로 변환된 것이 확인가능하다.

 

반대로 decode를 실행하고 싶은경우 PolylineEncoding.decode 함수를 사용하면된다.

decode 함수를 사용하면 encode 할 때 사용했던 List 형태로 반환이 된다. 

여기에서 decode 예제는 생략한다.

반응형
반응형
간단하게 스프링에서 파일을 업로드 하는 방법입니다. 

1. pom.xml 추가
첫번째로 pom.xml 에 아래와 같이 depency를 추가한다. 
(따로 최신 버전을 찾지 않아도 상관없을듯 합니다.)

 


2. servlet-context.xml 추가
두번째로 servlet-context.xml 에 아래와 같이 baen을 추가합니다.
( 아래의 'beans:bean' 이런식으로 있는 부분은 자신의 파일에 맞게 수정하시면됩니다. )



3. jsp 파일 폼 추가

아래와 같이 간단한 jsp 파일을 작성합니다.


스프링 폼 태그를 사용 했으며, 폼태그에 enctype="multipart/form-data" 을 꼭 넣어야 파일 전송이 가능합니다.




4. Controller 파일 업로드

마지막으로 jsp에서 전송된 파일을 받아 controller에서 파일 업로드를 합니다. 

소스상으로 간단하며, @RequestParam("uploadFile") MultipartFile file 이부분이 jsp에서 받은 파일을 담는 변수입니다.

file.getOriginalFilename()으로 해당 파일의 이름으로 지정된 경로로 파일을 업로드 합니다. 

(실제 파일을 저장할때는 원본 파일명과 다른 유니크한 이름으로 변경하여 파일을 저장한다.)




해당 예제에서는 단순하게 파일을 업로드 하기만 하지만, 파일 업로드시 파일에 정보를 DB에 넣기도 해야하니 FileVO를 하나 생성하고(Map사용 무관),

Controller에서 파일 명을 받아온 방식으로 file.get** 으로 필요한 정보로 가공하여 저장하면됩니다. 

(여기서는 DB에 넣는 Service, dao.. 부분은 생략합니다.)


반응형
반응형

스프링 mvc 구조에서 Ajax 통신으로 json을 return 하는 방법입니다. 

스프링에서 json으로 return 받는 방식은 여러가지 방법이 있으며,

이글에서는 jackson 을 사용하고, @ResponseBody 어노테이션을 사용하는 방식입니다.


첫번째 메이븐을 통해 jackson 을 다운 받습니다. 

pom.xml에 아래와 같이 추가합니다.



(글을 쓰는 당시 위의 버전이 최신이었음.)


두번째로 Ajax 통신을 위한 Controller를 작성합니다. 

아래의 예제는 '/admin/push/version' 의 url에 'pushTarget' 값을 전송하여 'VersionVO' 라는 vo 리스트를 담아 전송하는 소스입니다.

간단하게 설명하면, 원하는 결과를 조회하여 json으로 return 하는 부분입니다.

다음에 나오는 Ajax 부분을 보면 좀더 이해하기 쉬을 것 입니다. 



여기서 중요한 것은 반환형의 앞에 @ResponseBody 라는 어노테이션을 사용한 것입니다.

@ResponseBody을 사용하여 return 결과를 json으로 만드는 것.


마지막으로 Ajax 통신을 하는 자바스크립트 부분입니다.

위에서 작성한 url 경로를 통해 ajax 통신을 하고 json으로 return을 받은 후 결과를 가지고 처리 합니다. 



위의 자바스크립트 부분만을 설명하자면 pushTarget을 선택하는 선택한 값을 전송해 

결과 값을 받아 pushVersion이라는 selector의 option 값을 바꿔주는 소스이다.



소스의 일부분만 가져온 것이므로, 

json으로 return 받기위한 방법만을 참조하면된다.

반응형
반응형

스프링 환경에서 jsp form 을 전송하는 경우 한글이 깨지는 경우가 발생한다. 


이러한 경우 web.xml 에 아래와 같이 추가해주면, form을 전송시 한글이 정상적으로 전송되는 것을 알 수 있다.



반응형
반응형

스프링 servlet-context.xml 파일에 interceptor를 설정하는 도중 다음과 같은 에러가 발생. 


The prefix "mvc" for element "mvc:interceptors" is not bound.


다른 원인이 있을수도 있으나, 상단 beans 설정에 아래의 소스가 업어도 발생, 아래의 소스 추가 후 정상 작동


xmlns:mvc="http://www.springframework.org/schema/mvc"

반응형
반응형

스프링 시큐리티를 사용하여 비밀번호를 암호화 하는 방법을 알아보겠습니다. 


스프링 시큐리티를 찾아본 결과 설정하는 방법도 여러가지 있습니다.


여기서는 단순하게 bcrypt 방식으로 비밀번호만을 암호화 하는 방법입니다. 


전체적인 설정을 하시려면 다른 글을 참조하시는게 좋습니다.


1. 메이븐 pom.xml 에 스프링 시큐리티를 아래와 같이 추가합니다.

스프링 버전은 4.3.0.RELEASE 를 사용해주며, 스프링과 같은 스프링시큐리티 4.x 버전을 선택했습니다.

(스프링과 버전이 다르면 에러가 난다고 알고있습니다.)




2. spring-security.xml 파일을 생성합니다.

경로는 WEB-INF/spring/spring-security.xml 이며, 아래와 같은 소스로 작성을합니다.

여기서는 단순히 비밀번호만을 암호화 하기 때문에 아래와 같이 간단합니다. 




3. web.xml 에 spring-security.xml 을 추가합니다.

root-context.xml 아래에 추가했습니다. 



4.1 스프링 시큐리티 암호화 

암호화를 하려는 controller 혹은 service에서 


소스에 아래와같은 @Autowired를 추가하고, 



아래와 같은 방식으로 비밀번호를 암호화 하여, DB에 저장하면 됩니다.

여러번 실행해보면 알겠지만, 실행할때마다 암호화된 값이 다르게 나옵니다. 




4.2 스프링 시큐리티 암호화 비교

위에서 비밀번호를 암호화해서 DB에 저장을 했다면, 로그인을 할때 비교를 해야한다.

새로 암호화를 해서 DB에 저장된 값과 비교를 하면 동일한 비밀번호를 입력했지만, 암호화된 값이 다르기 때문에 비교가 불가하다.

그렇기 때문에 matches라는 메서드를 사용하여, 입력된 비밀번호와 DB에 저장된 값을 비교 할 수있다.



여기서는 암호화된 비밀번호를 DB에 저장하고, 불러오는 부분은 생략했습니다. 

일반적으로 select문을 통해 id와 pw가 일치하는 계정의 정보를 받아오는 방식하고는 다르지만,

간단하게 spring security를 사용하기 위한 방법이었습니다.



반응형
반응형

자바에서 자바스크립트 alert을 실행하는 방법


아래와 같은 스프링 예제 소스가 있습니다.


예제는 id와 pw를 받아서 해당 계정이 존재하는지 확인하는 소스이며, 

계정정보가 존재하지 않는경우 자바스크립트를 통해 alert을 보여주며, 뒤로가리를 실행합니다.



위의 소스중에서 아래의 부분이 자바에서 자바스크립트 alert을 실행하는 부분입니다. 


반응형
반응형

3. controller / service / dao / mapper 생성


이제 마지막으로 실제 자바 소스 코드를 작성하는 부분입니다.


1. controller 파일 생성.

기본적으로 스프링 프로젝트를 생성하면 자신이 생성한 패키지명 아래에(ex com.spring.test) controller라는 폴더가 존재합니다.

또한 기본적으로 HomeController.java 파일이 존재합니다. 실행을 해보면, home.jsp파일을 화면에 띄우는 것을 확인할수있습니다.

(HomeController.java에 대한 설명 생략)

(was(톰캣...) 연동하는 부분 생략)


mybatis를 통해 쿼리문을 실행하는 것이 목표이므로, controller패키지 안에 MemberController.java파일을 생성하도록 합니다. 

MemberController.java


위와 같은 소스의 controller 파일을 만들었습니다. 

간단히 설명을 하면, 

/test/usercheck 로 호출이 가능하며, 

memberservice.userIdCheck("admin"); 를 통해 admin이란 아이디가 존재하는지 쿼리를 실행합니다.

main폴더 아래 index.jsp 파일을 호출하는 소스입니다.(jsp 호출에 관련돼서는 뒤에 설명)


2. service / serviceimpl 파일 생성

우선 기본 패키지 아래에 service라는 패키지를 생성합니다.(controller의 하위가 아닌 같은 위치)

그리고 service / serviceimpl 파일을 생성합니다.

여기서는 MemberService.java 파일과 MemberServiceImpl.java 파일을 생성합니다.

(serviceimpl파일 같은 경우 service 패키지 아래에 serviceImpl이라는 패키지를 생성하여 위치하는 경우가 많다.

어디까지나 파일의 위치가 다를뿐 만드는 사람의 자유가 아닌가 싶다.)


MemberService.java


MemberServiceImpl.java


MemberService는 인터페이스이며, 

MemberServiceImpl에서 상속받고있습니다.

MemberServiceImpl 파일에서  dao파일을 호출하고 있습니다.

(자세한 내용을 설명하려면 너무 길어지기에 간단히 설명하겠습니다.)


3.dao / daoimpl 파일 생성

위에서 service패키지를 생성하는 것과 같이 dao 패키지를 생성하고, dao / daoimpl 파일을 생성합니다.

여기서는 MemberDao.java / MemberDaoImpl.java 파일을 생성합니다.


MemberDao.java


MemberDaoImpl.java


MemberDao는 인터페이스이며, MemberDaoImpl에서 상속받고 있습니다.

MemberDaoImpl 파일에서 mapper파일(xml파일)을 호출하고 있습니다.

(dao 패키지에서는 인터페이스는 만들지 않는 경우가 더 많은 것 같습니다.

여기서는 인터페이스를 만들어서 사용하지만, 복잡하다고 생각되면, 생략하는 것이 좋을듯합니다.)


4.mapper 파일 생성

이제 실제 mybatis를 사용하여 DB에 쿼리문을 작성하여 실행하는 부분 입니다.

resources 폴더 아래에 mapper라는 폴더를 생성하고 그안에 mapper파일을 생성합니다.

여기서는 memberMapper.xml 파일을 생성합니다.


memberMapper.xml


(admin이란 테이블의 admin_id 컬럼의 값을 카운팅하는 예제로 테이블에 대한 설명은 생략합니다.)

namespace와 쿼리문의 id의 조합으로 호출이 되며, 쿼리문을 실행하고 결과를 반환합니다.

이전 글의 root-context.xml 파일에서 sqlSession의 mapperLocations의 경로를 지정했기때문에 호출이 가능합니다.

위의 MemberDaoImpl.javad에서 mapper파일의 쿼리를 'mappers.memberMapper.usercheck' 로 호출하는 것을 확인 할 수 있습니다.



결론적으로 Controller -> Service -> Dao -> Mapper 의 순서로 진행되며, 

Controller에서 받은 결과를 jsp 로 전달하는 구조입니다.

순서대로 가장 기본적인 프로젝트 셋팅이었으습니다. 

dao에서 쿼리문의 목적에 따라 selectOne이 아닌 selectList등.. 사용가능하며,

mapper파일에서 결과 또는 입력을 하기 위해 VO(domain)를 사용 하는 등 다양한 방법으로 사용가능합니다.

(사실 vo는 필수적이며, 추후 내용을 추가 하도록 하겠습니다.)


(*controller파일에서 return 값을 통해 해당 jsp를 찾는 것은 src/main/wepapp/WEB-INF/spring/appServlet/servlet-context.xml 파일에서 설정을 해줬기때문입니다.

아래 소스 부분의 수정을 통해 다른 경로를 기본 위치로 변경 할 수 있습니다.)



( https://github.com/nahosung/spring_setting )

반응형
반응형

2. Mybatis + Mysql 설정 

프로젝트 안에 pom.xml 을 열어서 수정을 합니다. 


pom.xml 안에 dependencies 안에 아래와 같이 추가를 합니다. 

각각 mybatis , mysql , DB 에 관련이 있습니다. 


(사용되는 버전을 똑같이 할 필요 없으며,

https://mvnrepository.com/

위의 사이트에서 검색하여, 최신 혹은 많이 사용하는 버전을 사용하셔도됩니다.)



(mssql이나 oracle도 크게 다르지 않으며 검색을 통하여 위와같은 방식으로 넣어주면됩니다. 

oracle은 한가지더 추가해야하는데, 필요하신분은 검색하시면 바로 찾으실수 있습니다.)


메이븐 빌드가 완료되면 jar 파일이 설치가 완료 된 것입니다.

자동으로 메이븐 빌드가 되지 않는경우엔 프로젝트 선택 후 마우스 오른쪽 버튼 클릭 - maven - update project... 클릭

(가끔 메이븐 빌드시에 제대로 설치가 안되서 오류가 나는 경우가 있는데, 

이때는 pom.xml 에서 지웠다가 다시 설치하는 방식이 아닌, 메이븐 설치 경로에서 파일을 지워주고 

pom.xml에 다시 적어서 설치를 해야합니다.)



다음으로 root-context.xml 파일에 Mybaits에 관련된 설정을 해주도록 합니다.

(root-context.xml 파일은 src/main/wepapp/WEB-INF/spring/root-context.xml )



dataSource 는 접속하는 데이터베이스에 대한 정보 입니다. 

( mysql이라 3306포트이며 각자 자신의 환경(id,pw 포함 등..)에 맞는 설정으로 변경 )


sqlSessionFactory는 Mybatis에 대한 설정입니다.

(property name이 configLocation은 환경설정에 대한 xml 파일의 위치이며,   xml 파일은 직접 만들어야 합니다.

 property name이 mapperLocations은 실제 쿼리를 작성하는 mapper xml 파일의 위치이며, 폴더와 xml파일은 직접 만들어야 합니다.)

( sqlSessionFactory 의  configLocation 위치에 mapper 설정을 하는 경우도 있으며, 위치는 상관 없다.)


마지막으로 sqlSession 을 보면 위에서 작성한 sqlSessionFactory를, sqlSessionFactory에 dataSource를 가리키는(?) 방식이다.

(정확히 어떠한 방식으로 연결을 하고 있는지 까지는 이해를 하지 못하고 있으므로, 설정하는 방식만을 알고 넘어가겠습니다.)


이제 위에서 경로를 지정한 파일을 실제로 만들도록 합니다.

src/main/resource 경로의 아래에 mapper 라는 폴더를 생성합니다.(실제 mybatis 적용한 쿼리 xml은 나중에 생성)

그리고 위와 같은 src/main/resource 경로에 mybatis-config.xml 을 생성합니다. (파일명이나 위치는 위에서 지정한 대로 생성)



mybatis-config.xml은 위와같은 내용으로 만들며, mapper 의 위치를 이곳에 작성해도 무방하며,

mybatis에 관련 설정을 할때 xml 파일에 작성을 하면 된다.


다음은 이제 실제 스프링 소스를 작성하는 controller, service, dao, mapper 를 작성하도록 하겠습니다.


https://github.com/nahosung/spring_setting )


반응형
반응형

이클립스 spring 프로젝트를 생성하고 mybatis 와 mysql 연결 설정하는 방법 입니다.


스프링 프로젝트를 생성하고 mybatis와 DB를 설정하는 부분은 너무 많은 글이 올라와 있지만, 


글마다 설정하는 부분의 차이도 있고 해서, 직접 해본것을 정리하여 올리는 글 입니다. 


맥북을 사용하여 설정하였으며, 이클립스 mars를 사용하고 있습니다.

( 톰캣 설치 빼고는 윈도우와 다른점은 거의 없었던걸로 기억하며, 

오히려 윈도우가 더 편한걸로 기억되니 윈도우환경도 보시는데 상관없을것 같습니다. )


1.  스프링 프로젝트를 생성 

우선 이클립스에 STS 를 설치합니다

STS 를 설치하는 방법은 상단 메뉴 - Help - Eclipse MarketPlace - sts 를 검색 - Spring Tool Suite (STS) for Eclipse ..을 다운 받습니다. 

( 버전은 달라져 있을수 있으며, 제가 받을때는 3.8.2라고 써있네요. )




설치를 완료 했으면 프로젝트를 생성 합니다 . 

상단 메뉴 - File - new - Project... 을 클릭하고, 스프링 폴더 안에 Spring Legacy Project를 클릭하고 다음 

(윈도우에서는 spring project 로 기억하고있음.)



중앙에서 Spring MVC Project 를 클릭하고 프로젝트 이름을 지정하고 다음, 패키지 명을 지정하고 프로젝트 생성.


메이븐 빌드가 완료된후 

Package Explorer에 프로젝트가 생성된것을 확인 할 수 있습니다.

톰캣으로 실행 후 웹 화면을 띄어보면 첫화면이 나오는 것을 볼 수 있습니다. 

첫번째 스프링 프로젝트 생성을 완료 했습니다.


(여기서는 메이븐 과 톰캣을 사용하고 있습니다. 

추후에 추가 예정이나 메이븐과 톰캣에 대한 설정은 따로 설명하지 않았습니다.

참고 : 맥북에서 톰캣 설치 )


다음은 이제 maven 에 mybatis와 mysql 을 추가하고, mybatis와 mysql 설정을 하도록 하겠습니다.


( https://github.com/nahosung/spring_setting )

반응형

+ Recent posts