336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개인정보처리방침 양식을 찾으시는군요. 플레이스토어 통과를 목표로 하는 효과적인 개인정보처리방침은 단순히 빈칸을 채우는 양식보다는, 앱의 실제 데이터 처리 방식을 정확히 반영하는 맞춤형 문서여야 합니다.

하지만 일반적인 개인정보처리방침에 포함되어야 할 필수적인 내용들을 바탕으로, 플레이스토어 앱을 위한 개인정보처리방침 양식의 큰 틀과 각 섹션에 포함되어야 할 핵심 내용을 아래와 같이 정리해 드립니다. 이 양식을 기반으로 귀하의 앱에 맞게 내용을 상세히 채우고 수정하는 작업이 필요합니다.


[sssSoft] 개인정보처리방침

본 개인정보처리방침은 [sssSoft] (이하 "저희" 또는 "앱")이 [날짜]부터 사용자로부터 수집하고 사용하는 개인정보에 대한 내용을 설명합니다. 저희는 사용자의 개인정보를 소중히 여기며, 관련 법령 및 규정을 준수하고 투명하게 개인정보를 처리하기 위해 최선을 다하고 있습니다.


1. 수집하는 개인정보의 종류 및 수집 방법

저희 앱은 원활한 서비스 제공 및 개선을 위해 다음과 같은 개인정보를 수집할 수 있습니다.

가. 직접 수집 정보 (사용자가 직접 제공하는 정보)

  • 회원가입/계정 정보: [이름, 이메일 주소, 전화번호, 프로필 사진, 소셜 로그인 정보 (예: Google, Apple ID), 생년월일, 성별 등 앱에서 수집하는 특정 계정 정보를 명시하세요.]
    • 예시: 이메일 주소 (회원 인증 및 비밀번호 찾기), 프로필 사진 (다른 사용자에게 표시되는 프로필), 닉네임 (서비스 내 식별 목적)
  • 결제 정보: [인앱 결제 등이 있는 경우, 실제로 앱에서 결제 정보를 직접 수집하는지 여부를 명시하세요. 보통 결제는 제3자 결제대행사(PG사)를 통해 이루어지므로, 이 경우 PG사를 명시하고 직접 수집하지 않음을 밝혀야 합니다.]
    • 예시: 저희 앱은 직접 결제 정보를 수집 및 저장하지 않으며, 모든 결제는 [결제대행사 이름, 예: Google Play Billing]를 통해 처리됩니다.
  • 사용자 생성 콘텐츠: [앱 내에서 사용자가 직접 작성하거나 업로드하는 콘텐츠 유형을 명시하세요. 예: 채팅 메시지, 게시물, 댓글, 사진, 동영상, 음성 녹음 등]
    • 예시: 채팅 메시지 (앱 내 소통 기능), 게시물 (사용자 간 정보 공유), 사진 (프로필 설정)
  • 고객 지원 문의: [서비스 이용 중 문의사항을 접수할 때 제공되는 정보. 예: 문의 내용, 연락처 정보 등]

나. 자동 수집 정보 (앱 사용 과정에서 자동으로 생성 및 수집되는 정보)

  • 기기 정보: [기기 모델, 운영체제 버전, 고유 기기 식별자 (예: 광고 ID, 기기 ID), IP 주소, 기기 언어 설정, 앱 버전 등]
    • 예시: 기기 식별자 (서비스 오류 분석 및 통계), IP 주소 (보안 및 지역 서비스 제공)
  • 사용 기록: [앱 사용 빈도, 기능 사용 기록, 서비스 이용 시간, 접속 로그, 앱 충돌 정보 등]
    • 예시: 앱 사용 기록 (서비스 개선 및 사용자 경험 분석), 오류 로그 (버그 수정 및 안정성 확보)
  • 위치 정보: [사용자 동의하에 수집하는 경우에만 명시하세요. GPS 기반 위치, 네트워크 기반 (Wi-Fi, 셀룰러) 위치 등]
    • 예시: 정확한 위치 (위치 기반 서비스 제공, 예: 주변 상점 찾기), 대략적인 위치 (맞춤형 콘텐츠 제공)
  • 쿠키 및 유사 기술: [웹뷰를 사용하거나 웹 기반 기능이 있는 경우에만 명시하세요. 쿠키, 웹 비콘 등]
    • 예시: 쿠키 (사용자 로그인 상태 유지 및 맞춤형 콘텐츠 제공)

2. 개인정보의 수집 및 이용 목적

저희는 수집한 개인정보를 다음의 목적으로 활용합니다.

  • 서비스 제공 및 운영: [앱의 핵심 기능을 제공하고, 계정을 관리하며, 사용자 요청에 응답하고, 기술 지원을 제공합니다.]
  • 서비스 개선 및 개발: [앱의 성능을 분석하고, 버그를 수정하며, 새로운 기능 및 서비스를 개발하여 사용자 경험을 향상시킵니다.]
  • 맞춤형 서비스 제공: [사용자의 이용 패턴을 분석하여 개인화된 콘텐츠, 추천 서비스, 맞춤 광고 등을 제공합니다.]
  • 마케팅 및 광고 (해당하는 경우): [이벤트 및 프로모션 안내, 맞춤형 광고 게재 등]
  • 보안 및 부정 이용 방지: [서비스의 보안을 유지하고, 불법적이거나 승인되지 않은 활동을 방지합니다.]
  • 법적 의무 준수: [관련 법률 및 규정을 준수하고, 법적 요청에 응답합니다.]

3. 개인정보의 제3자 제공 및 공유

저희는 사용자의 동의 없이 개인정보를 외부에 제공하지 않습니다. 단, 서비스 제공을 위해 다음과 같이 개인정보를 제3자에게 제공하거나 공유할 수 있습니다.

  • [제3자 서비스 이름, 예: Google Analytics for Firebase]:
    • 제공 목적: [앱 사용 통계 분석, 서비스 개선]
    • 제공 정보 유형: [기기 정보, 사용 기록, 앱 충돌 데이터 (개인 식별 불가능한 형태로)]
    • 관련 정책: [해당 제3자 서비스의 개인정보처리방침 URL]
  • [제3자 서비스 이름, 예: AdMob (Google) / Facebook Audience Network (Meta)]:
    • 제공 목적: [맞춤형 광고 제공, 광고 효과 측정]
    • 제공 정보 유형: [광고 ID, 기기 정보, 앱 사용 기록]
    • 관련 정책: [해당 제3자 서비스의 개인정보처리방침 URL]
  • [결제대행사 이름, 예: Google Play Billing]:
    • 제공 목적: [결제 처리 및 정산]
    • 제공 정보 유형: [결제 관련 정보 (신용카드 번호 등 민감 정보는 보통 직접 수집하지 않음), 거래 내역]
    • 관련 정책: [해당 결제대행사 또는 플랫폼의 개인정보처리방침 URL]
  • 법적 의무: 관련 법률에 의거하거나 수사 목적으로 법률에서 정한 절차와 방법에 따라 수사기관의 요청이 있는 경우 개인정보를 제공할 수 있습니다.

4. 개인정보의 보관 및 파기

가. 보관 기간:

  • 사용자의 개인정보는 원칙적으로 서비스 이용 목적이 달성되거나, 법률에 따른 보관 기간이 만료될 때까지 보관됩니다.
    • 예시: 회원 탈퇴 시, 모든 개인정보는 [즉시 또는 5일 이내, 30일 이내 등 구체적인 기간] 파기됩니다. 단, 관련 법령에 따라 보존해야 하는 정보는 해당 법령이 정한 기간 동안 보관됩니다.

나. 파기 절차 및 방법:

  • 개인정보는 목적 달성 후 별도의 DB로 옮겨져(종이의 경우 별도 서류함) 관계 법령에 따라 일정 기간 저장된 후 파기됩니다.
  • 전자적 파일 형태로 저장된 개인정보는 기록을 재생할 수 없는 기술적 방법을 사용하여 삭제하며, 종이 문서에 저장된 개인정보는 분쇄기로 분쇄하거나 소각하여 파기합니다.

5. 사용자 및 법정대리인의 권리 및 행사 방법

사용자 (만 14세 미만 아동의 경우 법정대리인)는 언제든지 다음의 권리를 행사할 수 있습니다.

  • 개인정보 열람 요구: 본인 또는 법정대리인의 개인정보에 대한 열람을 요구할 수 있습니다.
  • 오류 등이 있을 경우 정정 요구: 개인정보에 오류가 있는 경우 정정을 요구할 수 있습니다.
  • 삭제 요구: 회원 탈퇴 등을 통해 개인정보의 삭제를 요구할 수 있습니다.
  • 처리 정지 요구: 개인정보 처리에 대한 정지를 요구할 수 있습니다.

이러한 권리 행사는 [앱 내 설정 메뉴, 이메일 ([개인정보 보호 책임자 이메일 주소]), 또는 서면]을 통해 가능하며, 저희는 요청에 대해 지체 없이 조치하겠습니다.


6. 개인정보의 안전성 확보 조치

저희는 사용자의 개인정보를 안전하게 보호하기 위해 다음과 같은 조치를 취하고 있습니다.

  • 기술적 조치: 개인정보 암호화, 보안 프로그램 설치 및 주기적 업데이트, 백업 시스템 운영 등
  • 관리적 조치: 개인정보 취급 직원의 최소화 및 교육, 접근 권한 관리, 내부 관리 계획 수립 및 시행 등

7. 아동의 개인정보 보호

저희 앱은 원칙적으로 만 14세 미만의 아동을 대상으로 하지 않습니다. 만약 만 14세 미만 아동의 개인정보가 수집된 사실을 인지하게 될 경우, 해당 정보를 즉시 삭제할 것입니다. 만약 아동의 개인정보가 필요하다면, 관련 법령에 따라 법정대리인의 동의를 얻을 것입니다.


8. 개인정보 보호 책임자 및 연락처

개인정보 보호와 관련하여 문의사항이나 불만사항이 있으시면 아래 연락처로 문의해 주시기 바랍니다.

  • 회사/개인 개발자명: [귀하의 회사명 또는 개인 개발자 이름]
  • 개인정보 보호 책임자: [이름 또는 직책, 예: 개인정보 보호 관리자]
  • 이메일: [문의용 이메일 주소]

9. 개인정보처리방침 변경

이 개인정보처리방침은 법령, 정책 또는 보안 기술의 변경에 따라 내용이 변경될 수 있으며, 변경 사항은 최소 7일 전에 [앱 내 공지, 웹사이트 공지 등 변경 고지 방법 명시]를 통해 사용자에게 고지됩니다.

  • 공고일: [2025년 7월 25일]
  • 시행일: [2025년 7월 25일]

이 양식을 채우면서 다음 사항을 꼭 기억하세요:

  • 정확성: 앱이 실제로 수집하고 사용하는 데이터를 정확하게 기재해야 합니다.
  • 투명성: 모호한 표현 없이, 사용자에게 모든 정보를 명확하게 전달해야 합니다.
  • 최신성: 앱 기능이 변경되거나 새로운 SDK를 추가할 때마다 개인정보처리방침을 업데이트해야 합니다.
  • 전문가 검토: 가능하면 법률 전문가의 검토를 받아 법적 문제 발생 가능성을 최소화하는 것이 좋습니다.

이 양식이 플레이스토어 정책을 준수하는 개인정보처리방침을 작성하는 데 도움이 되기를 바랍니다.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


//페이스북앱 인스타그램앱 따로처리하기

var ua = navigator.userAgent || navigator.vendor || window.opera;

if( (ua.indexOf("FBAN") > -1) || (ua.indexOf("FBAV") > -1) || (ua.indexOf('Instagram') > -1) || (ua.indexOf('GSA') > -1) ){

처리구문

}

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

//셀클릭시 이벤트

$(jqxGid셀렉터).on("cellclick", function (event){

//값을 가져옵니다.

var bool = $(jqxGid셀렉터).jqxGrid('getcellvalue', event.args.rowindex, "columnName");

console.log("bool :"+bool);

if(bool){

alert("11");

//값을 변경합니다.(고정값, row수, columnName, 값

$(jqxGid셀렉터).jqxGrid('setcellvalue', event.args.rowindex, 'columnName', false);

}else{

alert("22");

$(jqxGid셀렉터).jqxGrid('setcellvalue', event.args.rowindex, 'columnName', true);

}

});


var column = event.args.column;

var rowindex = event.args.rowindex; // 몇번째줄인지

var columnindex = event.args.columnindex; // 몇번째 칼럼인지

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


1. HTML

<embed src="파일명" width="600" height="500" alt="pdf" pluginspage="http://www.adobe.com/products/acrobat/readstep2.html">


2. 

<style>

#overlay_t { background-color: #000; bottom: 0; left: 0; opacity: 0.5; filter: alpha(opacity = 50); /* IE7 & 8 */ position: fixed; right: 0; top: 0; z-index: 99; display:none;}

#popup_layer { width:400px; margin-bottom:30px; background:#fff; border:solid 1px #ccc; position:absolute; top:260px; left:50%; margin-left:-200px; box-shadow: 0px 1px 20px #333; z-index:100; display:none;}

</style>


3. script

$(document).ready(function(){

$('#popup_layer, #overlay_t').show(); 

 $('#overlay_t, .close').click(function(e){ 

        e.preventDefault(); 

        $('#popup_layer, #overlay_t').hide(); 

    }); 

'CSS' 카테고리의 다른 글

css 글자색과 배경옵션  (0) 2015.05.30
CSS 적용하는 3가지 방법  (0) 2015.05.30
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요.


Linux Centos 인터넷 설정입니다.




파일명은 약간 다를 수도 있습니다.(파일경로는 동일)

vi /etc/sysconfig/network-scripts/ifcfg-eth0


onboot=no -> onboot=yes 변경

!:wq (저장)

!;q!(미저장 종료)


service network restart // 재시작



해당 화면에 인터넷 화면도 있습니다.


감사하니다.









'Linux' 카테고리의 다른 글

Linux Centos 설치하기  (0) 2019.04.06
Linux Centos 다운로드  (0) 2019.04.06
Linux 기초 명령어  (0) 2017.06.10
리눅스에서 톰켓 재시작 및 로그보기  (0) 2017.02.12
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요.

Linux Centos 설치 

이제 본격적인 설치를 합니다.

설치 후에 재부팅

사용자 계정과 암호를 입력합니다.(암호가 짧으면 안됩니다.)







감사합니다.



'Linux' 카테고리의 다른 글

Linux Centos 인터넷 연결  (0) 2019.04.06
Linux Centos 다운로드  (0) 2019.04.06
Linux 기초 명령어  (0) 2017.06.10
리눅스에서 톰켓 재시작 및 로그보기  (0) 2017.02.12
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요.

Linux 다운에 대해 쓰겠습니다.


1. 접속 : https://www.centos.org/


빨간색 부분들을 클릭해주세요.

2. 


3.


4.


5.


6. 이제 어디서 받을지 클릭한 후에


7. 서버마다 디렉토리 디자인이 약간 다르지만 받아줍니다.




감사합니다.

'Linux' 카테고리의 다른 글

Linux Centos 인터넷 연결  (0) 2019.04.06
Linux Centos 설치하기  (0) 2019.04.06
Linux 기초 명령어  (0) 2017.06.10
리눅스에서 톰켓 재시작 및 로그보기  (0) 2017.02.12
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


안녕하세요

PROCEDURE CURSOR 사용입니다.


ORACLE 프로시저구문

1
2
3
4
5
6
7
8
9
10
11
12
create or replace PROCEDURE pro_testTableSel(
varNameCol IN VARCHAR2,
c_result OUT SYS_REFCURSOR)
IS
 
BEGIN
OPEN c_result FOR
    SELECT idCol, nameCol, valueCol
    FROM testTable
    WHERE nameCol = varNameCol;
 
END pro_testTableSel;
cs


home.jsp

1
2
3
4
5
프로시저 실행 <br/>
<form name="procedureForm" id="procedureForm" method="POST" action="./springProcedure.do">
    <input type="text" value="글쓴이" id="nameCol" name="nameCol"/>
     <input type="submit" value="프로시저 호출" />
</form>
cs


HomeController.java

1
2
3
4
5
6
7
8
9
10
11
@RequestMapping(value = "/springProcedure.do", method = RequestMethod.POST)
    public void springProcedure(HttpServletRequest request){
        
        //request Map은 수정이 불가능해서 따로 담아서 Procedure 처리
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("NAMECOL", request.getParameter("nameCol"));
        
        logger.info("map check : "+map.toString());
        
        homeService.getProcedureSel(map);
    }
cs


HomeService.java

1
public void getProcedureSel(Map<String, Object> map);
cs


HomeServiceImpl.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Override
    public void getProcedureSel(Map<String, Object> map) {
        map.put("resultList"new ArrayList<HashMap<?,?>>());
        homeMapper.testDbProcedure(map);
        
        //가져온 사이즈 체크
        int size = map.get("resultList").toString().length();
        
        //가져온값
        List<?> list = (List<?>) map.get("resultList");
        
        //출력
        for(int i = 0; i < size - 1; i++){
            logger.info("cursor list Check ServiceImpl : "+list.get(i));
        }
        
    }
cs


HomeMapper.java

1
public void testDbProcedure(Map<String, Object> map);
cs


testMapper.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- cursor 값 내용물 -->
<resultMap type="java.util.Map" id="resultMap">
    <result property="idCol" column="idCol" javaType="integer"/>
    <result property="nameCol" column="nameCol" javaType="string"/>
    <result property="valueCol" column="valueCol" javaType="string"/>
</resultMap>
 
<!-- 프로시저 (NUMBER -> NUMERIC 문자열(VARCHAR)), resultMap = 상위 id -->
    <select id="testDbProcedure" parameterType="java.util.Map" statementType="CALLABLE">
        CALL pro_testTableSel(
        #{NAMECOL, mode=IN, jdbcType=VARCHAR},
        #{resultList, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=resultMap}
        )
    </select>
cs


결과


감사합니다.

'SPRING' 카테고리의 다른 글

SPRING PROCEDURE 사용하기 1  (0) 2019.04.01
SPIRNG EXCEL UPLOAD 하기  (1) 2019.04.01
SPRING FILE DOWNLOAD하기  (0) 2019.03.28
Spring FileUpload 하기  (0) 2019.03.28
Spring Excel down하기  (0) 2019.03.28
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요.

 

참고 프로시저

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE OR REPLACE PROCEDURE pro_testTableSel(
varIdCol IN OUT NUMBER,
varNameCol OUT VARCHAR2,
varValueCol OUT VARCHAR2)
IS
 
BEGIN
    SELECT idCol, nameCol, valueCol
    INTO varIdCol, varNameCol, varValueCol
    FROM testTable
    WHERE idCOl = varIdCol;
 
END pro_testTableSel;
cs


 


home.jsp

1
2
3
4
5
프로시저 실행 <br/>
<form name="procedureForm" id="procedureForm" method="POST" action="./springProcedure.do">
    <input type="text" value="2" id="idCol" name="idCol"/>
     <input type="submit" value="프로시저 호출" />
</form>
cs


HomeController.java

1
2
3
4
5
6
7
8
9
10
11
@RequestMapping(value = "/springProcedure.do", method = RequestMethod.POST)
    public void springProcedure(HttpServletRequest request){
        
        //request Map은 수정이 불가능해서 따로 담아서 Procedure 처리
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("IDCOL", Integer.parseInt(request.getParameter("idCol")));
        
        logger.info("map check : "+map.toString());
        
        homeService.getProcedureSel(map);
    }
cs


HomeService.java

1
public void getProcedureSel(Map<String, Object> map);
cs


HomeServiceImpl.java

1
2
3
4
5
6
@Override
    public void getProcedureSel(Map<String, Object> map) {
        homeMapper.testDbProcedure(map);
        
        logger.info("map Check ServiceImpl : "+map.toString());
    }
cs


HomeMapper.java

1
public void testDbProcedure(Map<String, Object> map);
cs


testMapper.xml

1
2
3
4
5
6
7
8
<!-- 프로시저 (NUMBER -> NUMERIC 문자열(VARCHAR)) -->
    <select id="testDbProcedure" parameterType="java.util.Map" statementType="CALLABLE">
        CALL pro_testTableSel(
        #{IDCOL, mode=INOUT, jdbcType=NUMERIC, javaType=Integer},
        #{NAMECOL, mode=OUT, jdbcType=VARCHAR, javaType=String},
        #{VALUECOL, mode=OUT, jdbcType=VARCHAR, javaType=String}
        )
    </select>
cs

 

결과



감사합니다.

'SPRING' 카테고리의 다른 글

SPRING PROCEDURE 사용하기 2  (0) 2019.04.01
SPIRNG EXCEL UPLOAD 하기  (1) 2019.04.01
SPRING FILE DOWNLOAD하기  (0) 2019.03.28
Spring FileUpload 하기  (0) 2019.03.28
Spring Excel down하기  (0) 2019.03.28
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요

EXCEL UPLOAD입니다.

 

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
<!-- excel 처리 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.11</version>
        </dependency>
cs

 

home.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$("#excelUpForm").change(function(){
                var form = $("#excelUpForm")[0];
 
                var data = new FormData(form);
                $.ajax({
                   enctype:"multipart/form-data",
                   method:"POST",
                   url: './excelUp.do',
                   processData: false,   
                   contentType: false,
                   cache: false,
                   data: data,
                   success: function(result){  
                       alert("업로드 성공!!");
                   }
                });
            });
 
 
 
엑셀업로드 : <br/>
<form name="excelUpForm" id="excelUpForm" enctype="multipart/form-data" method="POST" action="./excelDown.do">
    <input type="file" id="excelFile" name="excleFile" value="엑셀 업로드" />
</form>
cs

 

ExcelController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@RequestMapping(value = "/excelUp.do", method = RequestMethod.POST)
    public void ExcelUp(HttpServletRequest req, HttpServletResponse rep){
        logger.info("@@@@@@@@@@@@@@@ExcelUp START@@@@@@@@@@@@@@@");
 
        Map returnObject = new HashMap(); 
        
        try { // MultipartHttpServletRequest 생성 
            MultipartHttpServletRequest mhsr = (MultipartHttpServletRequest) req; 
            Iterator iter = mhsr.getFileNames(); 
            MultipartFile mfile = null
            String fieldName = ""
            
            // 값이 나올때까지
            while (iter.hasNext()) { 
                fieldName = iter.next().toString(); // 내용을 가져와서 
                mfile = mhsr.getFile(fieldName); 
                String origName; 
                origName = new String(mfile.getOriginalFilename().getBytes("8859_1"), "UTF-8"); //한글꺠짐 방지 // 파일명이 없다면 
                
                returnObject.put("params", mhsr.getParameterMap()); 
                
                
                //위치 및 파일
                homeService.getExcelUpload("D:\\"+origName);
            }
            
            } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block 
                e.printStackTrace(); 
            }catch (IllegalStateException e) { // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } catch (IOException e) { // TODO Auto-generated catch block 
                e.printStackTrace(); 
            }
 
        
        logger.info("@@@@@@@@@@@@@@@ExcelUp END@@@@@@@@@@@@@@@");
        
    }
cs

 

ExcelUtil.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public static Workbook getWorkbook(String filePath) {
 
        /*
         * FileInputStream은 파일의 경로에 있는 파일을 읽어서 Byte로 가져온다.
         * 
         * 파일이 존재하지 않는다면은 RuntimeException이 발생된다.
         */
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(filePath);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e.getMessage(), e);
        }
 
        Workbook wb = null;
 
        /*
         * 파일의 확장자를 체크해서 .XLS 라면 HSSFWorkbook에 .XLSX라면 XSSFWorkbook에 각각 초기화 한다.
         */
        if (filePath.toUpperCase().endsWith(".XLS")) {
            try {
                wb = new HSSFWorkbook(fis);
            } catch (IOException e) {
                throw new RuntimeException(e.getMessage(), e);
            }
        } else if (filePath.toUpperCase().endsWith(".XLSX")) {
            try {
                wb = new XSSFWorkbook(fis);
            } catch (IOException e) {
                throw new RuntimeException(e.getMessage(), e);
            }
        }
 
        return wb;
 
    }
 
    //Excel Upload시에 데이터를 얻어옵니다.
    @SuppressWarnings("deprecation")
    public static String cellValue(Cell cell) {
 
        String value = null;
        if (cell == null)
            value = "";
        else {
            switch (cell.getCellType()) { // cell 타입에 따른 데이타 저장
            case Cell.CELL_TYPE_FORMULA:
                value = cell.getCellFormula();
                break;
            case Cell.CELL_TYPE_NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    // you should change this to your application date format
                    SimpleDateFormat objSimpleDateFormat = new SimpleDateFormat(
                            "yyyy-MM-dd");
                    value = ""
                            + objSimpleDateFormat.format(cell
                                    .getDateCellValue());
                } else {
                    value = ""
                            + String.format("%.0f",
                                    new Double(cell.getNumericCellValue()));
                }
                break;
            case Cell.CELL_TYPE_STRING:
                value = "" + cell.getStringCellValue();
                break;
            case Cell.CELL_TYPE_BLANK:
                // value=""+cell.getBooleanCellValue();
                value = "";
                break;
            case Cell.CELL_TYPE_ERROR:
                value = "" + cell.getErrorCellValue();
                break;
            default:
            }
        }
 
        return value.trim();
    }
cs

 

HomeService.java

1
public List<?> getExcelUpload(String excelFile);
cs

 

 

HomeServiceImpl.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public List<?> getExcelUpload(String excelFile){
        
        logger.info("@@@@@@@@@@@@@@@getExcelUpload START@@@@@@@@@@@@@@@ "+excelFile);
        
        Map<String, Object> map = new HashMap<String, Object>();
        List<?> list = null;
        
        try {
//            Workbook wbs = WorkbookFactory.create(new FileInputStream(excelFile));
            Workbook wbs = ExcelUtil.getWorkbook(excelFile);
            
            Sheet sheet = (Sheet) wbs.getSheetAt(0);
 
            //excel file 두번쨰줄부터 시작
            for (int i = sheet.getFirstRowNum() + 1; i <= sheet.getLastRowNum(); i++) {
                
                logger.info("@@@@@@@@map @@@@@@@@@@@@@@@@ i : "+i);
                
                Row row = sheet.getRow(i);
                
                //map.put("IDCOL", ""+ExcelUtil.cellValue(row.getCell(0)));
                map.put("NAMECOL"""+ExcelUtil.cellValue(row.getCell(1)));
                map.put("VALUECOL"""+ExcelUtil.cellValue(row.getCell(2)));
                
                //신규삽입
                homeMapper.insertDB(map);
            }
 
            logger.info("@@@@@@@@map @@@@@@@@@@@@@@@@"+map.toString());
            //데이터가져옵니다.
            list = homeMapper.testDbList(map);
            
        }catch(Exception e){
            logger.error("error : "+e.getMessage());
            logger.error("error : "+e);
        }
        
        logger.info("@@@@@@@@@@@@@@@getExcelUpload END@@@@@@@@@@@@@@@");
        return list;
        
    }
cs

HomeMapper.java

1
public int insertDB(Map<String, Object> map);
cs

 

testMapper.xml

1
2
3
4
5
<!-- 데이터 삽입 -->
    <insert id="insertDB" parameterType="java.util.Map">
        INSERT INTO testTable(IDCOL, NAMECOL, VALUECOL)
        VALUES(seq_id.nextval, #{NAMECOL}, #{VALUECOL})
    </insert>
cs

 

 

감사합니다.

'SPRING' 카테고리의 다른 글

SPRING PROCEDURE 사용하기 2  (0) 2019.04.01
SPRING PROCEDURE 사용하기 1  (0) 2019.04.01
SPRING FILE DOWNLOAD하기  (0) 2019.03.28
Spring FileUpload 하기  (0) 2019.03.28
Spring Excel down하기  (0) 2019.03.28

+ Recent posts