자바 java string 한글 UTF-8 EUC-KR encoding test

Posted by HULIA(휴리아)
2019. 12. 20. 15:33 백엔드개발/자바스프링

정리하자면
getBytes는 인코딩 변환
new String의 파라미터는 바이트배열의 인코딩이 들어가야 정상적으로 한글이 표시된다

참고적으로 euc-kr로 된 문자열를 utf-8로 byte 변환하면 byte수는 똑같지만 utf-8로 된 문자열를 euc-kr로 byte 변환하면 byte수는 한글글자수만큼 증가됩니다

자바 문자를 숫자로 바꿀때 0을 제거 할때

Posted by HULIA(휴리아)
2019. 12. 16. 10:55 백엔드개발/자바스프링

해당문자를 str로 생각한다면

 

자릿수가 작다면(숫자로 변환했을때 9자리숫자까지는 가능)
Integer.parseInt(str)

자릿수가 크다면(숫자로 변환했을때 9자리 숫자이상은 무조건 이걸 써야합니다)
new DecimalFormat("0").format(new BigDecimal(str))

JDK 다운 Oracle을 떠나서 AdoptOpenJDK Zulu Java Community 에서 받으세요

Posted by HULIA(휴리아)
2019. 10. 21. 22:41 백엔드개발/자바스프링

윈도우에 JDK를 설치하러 Oracle 사이트에 갔는데 다운 받을려면 회원가입을 하라고 하는것도 싫어져서

드뎌 Oracle JDK에서 벗어날때가 된 것 같네요

 

이참에 다른 JDK로 갈아 탈려고 조사를 해보았습니다

 

서버 구동을 위한 리눅스에서도 openJDK를 쓰고 있기도 하여서 몇가지 JDK가 있을 것 같네요~

 

조사해보니 Oracle JDK를 대체할 수 있는 대안이 몇가지가 있는 것으로 확인 되었습니다

 

OpenJDK

 

https://openjdk.java.net

JDK 오픈화 기구 입니다~

이를 기반으로 만든 JDK는 다음과 같습니다

 

OpenJDK 비교표입니다

https://kr.azul.com/products/zulu-enterprise/jdk-comparison-matrix/#

 

Zulu Comparison Matrix - Azul Systems Inc.

Zulu Comparison Matrix Enterprise FAQ Java SE OpenJDK Support bug fixes security updates JVM Azul Systems Amazon Corretto AdoptOpenJDK Red Hat

www.azul.com

Azul이라는 곳에서 발표해서 편향적인것은 어쩔 수 없지만 그래도 표로 정리해두어서 이용하는 입장에서는 굉장히 편한 부분도 있습니다^^

 

1)AdoptOpenJDK 
AdoptOpenJDK는 2017년부터 출범하였고 AWS, AZUL, GoDaddy, IBM, Microsoft Azure, ocado, packet, pivotal, RedHat, DigitalOcean, CloudFlare, Github 등 스폰서를 가지고 있는 OpenJDK 커뮤니티입니다.

LTS버젼을 제공합니다~

다운로드는 다음의 링크를 이용하세요~
https://adoptopenjdk.net/

 

AdoptOpenJDK

AdoptOpenJDK provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure. Supported platforms include Linux, macOS, Windows, ARM, Solaris, and AIX.

adoptopenjdk.net

 

 

2)Azul Systems Zulu / Zulu Enterprise
Zulu는 Azul Systems가 제공하는 OpenJDK 빌드입니다. Windows, MacOS, Linux에서 사용 가능한 OpenJDK 기반 Zulu을 무료로 배포하고 있습니다.

LTS버젼을 제공합니다~

 

community 버젼이 무료버젼입니다~

https://www.azul.com/downloads/zulu-community

 

Download OpenJDK Java Linux Windows macOS Alpine Java 11 Java 8

Download Java 11 Zulu OpenJDK Linux Windows macOS Solaris Update Java Alpine Java SE free download Java 8 Java 7 Java 6 JDK

www.azul.com

 

저는 위의 2개 JDK중에 한곳을 쓸 것 같습니다^^

다운 받았을때의 용량 입니다

참고로 둘다 1.8버젼입니다~ㅎ

스프링 템플릿 엔진 종류 및 성능 및 비교

Posted by HULIA(휴리아)
2019. 8. 4. 18:47 백엔드개발/자바스프링

스프링에서 사용가능한 템플릿 엔진 종류들

https://www.baeldung.com/spring-template-engines

 

Template Engines for Spring | Baeldung

Discover Spring-compatible template engines and see simple examples.

www.baeldung.com

 

위의 스프링에서 사용가능한 템플릿 엔진 성능순위(비교)

https://github.com/jreijn/spring-comparing-template-engines

 

jreijn/spring-comparing-template-engines

Demo project to show different Java templating engines in combination with Spring MVC - jreijn/spring-comparing-template-engines

github.com

 

결과는 다음과 같습니다~ㅎ

 

Freemarker나 Mustache 나 Thymeleaf 쓰는 것이 좋아보이네요~ㅎ

REST API 란

Posted by HULIA(휴리아)
2019. 8. 4. 17:24 백엔드개발/자바스프링

스프링 부트로 배우는 자바 웹 개발 책과 처음 배우는 스프링 부트2 책에서 참고

 

REST는

-Representational State Transfer의 약자

-분산 네트워크 프로그래밍의 아키텍쳐 스타일

-웹과 같은 분산 하이퍼미디어 시스템에서 사용하는 통신 네트워크 아키텍처로, 네트워크 아키텍처의 원리 모음입니다

웹은 전송 방식으로 HTTP를, 식별방법으로 URI를 사용합니다

HTTP는 웹에서 GET, POST, PUT, DELETE 등의 메서드를 사용하여 정보를 주고받는 프로토톨입니다

REST는 HTTP와 URI의 단순하고 간결한 장점을 계승한 네트워크 아키텍처입니다

따라서 다양한 요구사항에 대응하여 때로는 단순하게, 때로는 서버와 클라이언트가 서로 통신하는 리소스에 대해 복잡한 방식으로 상호작용할 수 있습니다

 

REST의 목적

1. 구성요소 상호작용의 규모 확장성

2. 인터페이스의 범용성

3. 구성요소의 독립적인 배포

4. 중간적 구성요소를 이용한 응답 지연 감소, 보안 강화, 레거시 시스템 인캠슐레이션

 

RESTful의 제약 조건

REST의 구현 원칙을 제대로 지키면서 REST 아키텍처를 만드는 것을 RESTful이라고 함

 

1. 클라이언트/서버

: 클라이언트와 서버가 서로 독립적으로 구분되어야 하고 서버 또는 클라이언트 증설 시에 서로간의 의존성 때문에 확장에 문제가 되는 일이 없어야 한다

2. 상태 없음

:클라이언트와 서버 간의 통신시에 상태가 없어야 한다. 단순히 들어오는 요청만 처리하여 구현을 더 단순화한다. 단 클라이언트의 모든 요청은 서버가 알아듣는 데 필요한 모든 정보를 담고 있어야 한다.

3. 레이어드 아키텍쳐(Layered Architecture)

:서버와 클라이언트 사이에 중개서버(게이트웨이, 방화벽, 프록시)나 로드밸런싱, 공유캐시가 있는 것처럼 다계층 형태로 레이어를 추가하거나 수정하거나 제거할 수 있고 확장성이 있어야 한다

4. 캐시가능(cacheable)

:서버의 응답들은 캐시를 가지고 있거나 없거나 둘 중의 하나인데, 캐시를 가지고 있을 경우에는 클라이언트가 캐시를 통해서 응답을 재사용할 수 있고 이를 통해서 서버의 부하를 낮추어서 서버의 성능이 향상될 수 있다. HTTP장점을 그대로 계승한 아키텍쳐가 REST라서 HTTP의 캐시 기능을 적용할 수도 있습니다

5. 코드 온 디멘드(Code On Demand)

:요청이 오면 코드를 준다는 의미로 특정 시점에 서버가 특정 기능을 수행하는 스크립트 또는 플러그인을 클라이언트에 전달해서 해당 기능을 동작하도록 하는 것이다. 코드 온 디멘드의 예로는 애플릿, 자바스크립트, 플래시가 있다. 이 제약조건은 선택가능합니다.

6. 통합 인터페이스

서버와 클라이언트 간의 상호 작용은 일관된 인터페이스들 위에서 이뤄져야 한다

 

통합 인터페이스 규칙

1. 리소스 식별

:웹 안에서 서로 구분할 수 있는 개념으로 URI와 같은 고유 식별자를 통해 표현할 수 있다

2. 표현을 통한 리소스 처리

:사람의 말에 강세가 있어서 같은 문장을 말하더라도 말한 사람의 강세나 어조에 따라 의도가 달라질 수 있듯이 같은 데이터에 대해서 표현할 때 JSON, XML, HTML 페이지와 같이 다양한 콘텐츠 유형으로 표현할 수 있다. 그렇지만 말의 강세나 어조가 바뀌어도 문장 자체는 그대로인 것처럼 데이터는 변경되지 않는다.

3. 자기 묘사 메시지

:일반적으로 네트워크 통신을 할 때는 헤더부분에 현재 보내고 있는 데이터 패킷에 대한 메타 정보를 담아서 본문을 읽을 때 해당 본문이 어떤 의도로 쓰여진 것인지 알 수 있다. 마찬가지로 HTTP 통신을 할때도 HTTP header에 메타 데이터 정보를 추가해서 실제 데이터와는 관련 없지만 데이터에 대한 설명을 나타내는 정보를 담을 수 있다

4. 애플리케이션의 상태에 대한 하이퍼미디어(HETEOAS, Hypermedia As The Engine Of Application State)

간단히 말해서 웹은 여러 페이지들과 그 페이지들을 이동할 수 있는 링크 정보들로 구성되어 있다. REST API를 개발할때도 단순히 데이터만 전달하지 않고 링크 정보까지 포함한다면 좀 더 웹에 친숙한 API가 될 것이다

 

 

적어놓고도 어려워서 다른 블로그 글을 아래에 첨부하였음

 

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

 

[Network] REST란? REST API란? RESTful이란? - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

https://meetup.toast.com/posts/92

앱)sqlSessionDao관련

Posted by HULIA(휴리아)
2018. 11. 14. 22:04 백엔드개발/자바스프링
case1)
@Repository
public class CustomDaoImpl extends SqlSessionDaoSupport implements CustomDao

@Autowired
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate){
super.setSqlSessionTemplate(sqlSessionTemplate);
}

getSqlSession().selectList..
getSqlSession().selectOne
(int)getSqlSession().selectOne



case2)
@Repository("name")
public class CustomDaoImpl implements CustomDao

@Autowired
private SqlSessionTemplate sqlSessionTemplate;

sqlSessionTemplate.update
sqlSessionTemplate.selectList
sqlSessionTemplate.selectOne

'백엔드개발 > 자바스프링' 카테고리의 다른 글

스프링 템플릿 엔진 종류 및 성능 및 비교  (0) 2019.08.04
REST API 란  (0) 2019.08.04
앱)paging 관련  (0) 2018.11.14
앱)jstl java jsp excel export  (0) 2018.11.14
앱)java spring에서 web page간의 연동처리  (0) 2018.11.14

앱)paging 관련

Posted by HULIA(휴리아)
2018. 11. 14. 21:55 백엔드개발/자바스프링
commonUtil.java
public static void setPagingParmas(ModelAndView view, int totalCount, int pageNo){
 if(totalCount != 0)
{
  int countPerPage = CommConfig.getCountPerPage();
int totalPageCount = totalCount / countPerPage;
if(totalCount%countPerPage != 0){
   totalPageCount ++;
}
int startPageNo = (pageNo / 10) *10 +1;
if(pageNo %10 ==0){
startPageNo = startPageNo - 10;
}

int endPageNo = startPageNo + 9;
if(endPageNo > totalPageCount){
 endPageNo = totalPageCount;
}

view.addObject("pageNo",String.ValueOf(pageNo));
view.addObject("totalCount",String.ValueOf(totalCount));
view.addObject("countPerPage",String.ValueOf(countPerPage));
view.addObject("totalPageCount",String.ValueOf(totalPageCount));
view.addObject("startPageNo",String.ValueOf(startPageNo));
view.addObject("endPageNo",String.ValueOf(endPageNo));

}else{
   view.addObject("totalCount",String.ValueOf(totalCount));
}

}



*Table.jsp
<@include file="/WEB-INF/jsp/common/paging.jsp" %>

<script type="text/javascript">
$(document).ready(function(){
$('#totalCount').text('${totalCount'}');
}
</script>



paging.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import=util.CommConfig" %>

<script type="text/javascript">
function movePage(type, pageNo){
var moveType=parseInt(type);
var totalPageCount = parseInt("${totalPageCount}");
var intPageNo = parseInt(pageNo);
var nextPageNo = 0;

switch(moveType){
case 0://10페이지 전으로
if(intPageNo < 12){
      nextPageNo = 1;
    } else{
     nextPageNo = intPageNo - 10;
   }
break;

case 1://1페이지 저으로
        if(intPageNo == 1){
         nextPageNo = 1;
       } else{
           nextPageNo = intPageNo - 1;
       }
    break;
case 2:
nextPageNo = intPageNo;
break;
case 3://한페이지 다음으로
if(intPageNo == totalPageCount){
      nextPageNo = intPageNo;
      }else {
         nextPageNo = intPageNo +1;
      }
    break;
case 4://10페이지 다음으로
if(intPageNo == totalPageCount){
 nextPageNo = intPageNo;
} else if ((${pageNo} + 10) > totalPageCount){
       nextPageNo = totalPageCount;
    }else{
        nextPageNo = intPageNo + 10;
     }
break;

}
goPage(nextPageNo);

}
</script>


<c:if test="${totalCount != '0'}">
<p class="paging">
  <a class="next" href="#" onclick="movePage('0', '${pageNo}');">이전</a>
  <a class="next" href="#" onclick="movePage('1', '${pageNo}');">이전</a>

<c:forEach var="page" begin="${startPageNo}" end="${endPageNo}">
<c:choose>
 <c:when test="${pageNo == page}">
 <strong>${page}</strong>
 </c:when>
<c:otherwise>
<a href="#" onclick="movePage('2','${page}');">${page}</a>
</c:otherwise>
</c:choose>
</c:forEach>

  <a class="next" href="#" onclick="movePage('3', '${pageNo}');">다음</a>
  <a class="next" href="#" onclick="movePage('4', '${pageNo}');">다음</a>
</c:if>

앱)jstl java jsp excel export

Posted by HULIA(휴리아)
2018. 11. 14. 21:24 백엔드개발/자바스프링
exportexcel.jsp
<% page language="java" contentType="application/vnd.ms-excel; charset=utf-8" pageEncoding="utf-8"%>
<% taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<% taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%
response.setHeader("Content-Type". "application/vnd.ms-xls");
response.setHeader("Content-Disposition", "inline; filename=xxxx.xls");
%>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
<style>td{mso-number-format:\@; } </style>
<body>
<table>
<thead>
<tr>
 <th scope="col"><span></span></th>
 <th scope="col"><span></span></th>
 <th scope="col"><span></span></th>
 <th scope="col"><span></span></th>
 <th scope="col"><span></span></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</body>
</html>



function exportExcel(){
    $("#searchForm").attr("action", "<c:url value='/xx.do' />").submit();
}

앱)java spring에서 web page간의 연동처리

Posted by HULIA(휴리아)
2018. 11. 14. 20:13 백엔드개발/자바스프링
웹페이지 -> java spring
@RequestMapping(value="/example/request", method=RequestMethod.POST)
파라미터기본(HttpServletRequest 와 HttpServletResponse)

특별파라미터추가
form의 name으로 구성된 VO를 만들면 편하게 진행가능하다
@ModelAttribute 이용해서 해당VO를 파라미터에 추가하면 해당 객체에 값이 자동으로 들어가게 된다
 



java spring -> 웹페이지
1)값만 넘길때
리턴값설정 @ResponseBody String
원하는 결과값을 String객체에 담아서 리턴하면 됨

2)페이지 이동을 할때
리턴값설정 ModelAndView
ModelAndView 객체생성하여서
setViewName("example/intro");

3)페이지 이동을 하면서 여러가지 값을 같이 넘길때
리턴값설정 ModelAndView
ModelAndView 객체생성하여서
setViewName("example/intro");
addObject("넘길값의key",넘길값);
addObject("넘길값의key",넘길값);
addObject("넘길값의key",넘길값);
addObject("넘길값의key",넘길값);
addObject("넘길값의key",넘길값);

앱)java spring application config properties 방식

Posted by HULIA(휴리아)
2018. 11. 14. 19:47 백엔드개발/자바스프링
*.java
@Value("#{api['server.brCode']}")
private String api


*.properties
server.brCode=KKKK


applicationContext.xml
xmlns:utill="http:www.springframework.org/schema/util"
http:www.springframework.org/schema/util/spring-util.xsd"


<util:properites id="api" location="file:${home.dir}/api${server.type}.properties />