'My Life/2021년'에 해당되는 글 101건
- 2021.04.20 임플란트중.. 또..ㅠㅠ
- 2021.04.15 혼자.. 소심.. 적막.. 은둔.. 침묵..
- 2021.04.15 [Spring(egovframework)]에서 *.do와 RESTFul API 동시 사용 설정 방법
- 2021.04.08 아침은 먹고 다니니?
- 2021.03.19 멧돼지 잡으러 가는 꿈
- 2021.03.18 OpenSSL 인증서 생성
- 2021.03.09 습관의 중요성
- 2021.03.07 그러기엔 늦었죠..
- 2021.03.01 층간소음 고통 답례중..
- 2021.02.27 자동차 밧데리 자가교체
- 2021.02.19 나 이따 로또 살끼다~
- 2021.02.17 오늘부터 다시 또..^^
- 2021.02.15 장교의 책무 3
- 2021.02.06 레이저 커팅 무료교육 수강
- 2021.02.03 김치찌개볶음 강아지 밥
나이 오십을 넘어가며 생각해보니..
감춰살았던 내 천성의 성격으로..
내 삶의 모습이 수렴해 가는듯하다..
혼자.. 소심.. 적막.. 은둔.. 침묵..
Zzzz...
그래..
맞아..
난 원래부터 내성적이고
차분하고 조용한 성격이었었어.
그런데..
여러 사람들과 같이 지내다보니,
어쩔 수 없이..
사람들과 같이..
공부하고 놀고 일하고 밥먹고 술을 마시다보니,
내 원래의 본성을 무의식적으로 감추고 살아던 것 같아.
지금부터라도
내 본성이 이끄는대로 그렇게 살거다.
남과 같이 잘 어울리려고 애쓰며 사는건
내 모습이 아니라고..
난 항상 혼자 있고 싶었다고..
앞으로는 좀 더 열심히..
혼자.. 소심.. 적막.. 은둔.. 침묵..
그것이 내 속의 내 무의식이 원하는 나의 참 인생인것 같다.
egovframework(Spring Framework)에서 *.do와 RESTFul API 동시 사용 설정 방법입니다.
인터넷에 찾아보면, web.xml 설정하는 방법만 나와있어서...
전자정부 프레임워크(3.8)에서 테스트하였습니다.
(1) 수정 대상 파일
package egovframework.com.cmm.config;
/**
* EgovWebApplicationInitializer 클래스
*/
public class EgovWebApplicationInitializer implements WebApplicationInitializer {
private static final Logger LOGGER = LoggerFactory.getLogger(EgovWebApplicationInitializer.class);
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
LOGGER.debug("EgovWebApplicationInitializer START-============================================");
.....
FilterRegistration.Dynamic characterEncoding = servletContext.addFilter("encodingFilter", new org.springframework.web.filter.CharacterEncodingFilter());
characterEncoding.setInitParameter("encoding", "UTF-8");
characterEncoding.setInitParameter("forceEncoding", "true");
characterEncoding.addMappingForUrlPatterns(null, false, "*.do");
//characterEncoding.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "*.do");
//-------------------------------------------------------------
// RESTFul API 사용을 위해서 UrlPatterns 추가 (2021.04.15. 황상규)
//-------------------------------------------------------------
characterEncoding.addMappingForUrlPatterns(null, false, "/*");
....
}
(3) RESTFul API URL Controller (샘플)
package egovframework.smms.statistics.report;
import java.util.Enumeration;
import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import egovframework.ecs.common.util.JsonUtil;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import egovframework.smms.management.resource.ResourceService;
import net.minidev.json.JSONObject;
/**
* RESTFul API 샘플
* @author Hwang Sanggyu
* @since 2021.04.21
* @version 1.0
* @see
*/
@RestController
public class RestFulController {
//@Autowired
//private ResourceService defaultService;
//*********************************************************************************************************
@RequestMapping(value="/cards/{cardNo}/approval-overseas", method=RequestMethod.GET)
public ModelAndView cards(@PathVariable("cardNo") String cardNo, HttpServletRequest request) throws Exception {
Enumeration<String> eHeader = request.getHeaderNames();
HashMap<String, Object> headerMap = new HashMap<String, Object>();
while(eHeader.hasMoreElements()) {
String headerName = eHeader.nextElement();
headerMap.put(headerName, request.getHeader(headerName));
}
HashMap<String, Object> tempMap = new HashMap<String, Object>();
if("application/json".equals(headerMap.get("content-type"))){
//JSONObject jsonObject = JsonUtil.getStringToJsonObecjt(request);
}
StringBuffer requestURL = request.getRequestURL();
String servletPath = request.getServletPath();
ModelAndView mav = new ModelAndView("jsonView");
EgovMap resultMap = new EgovMap();
try {
// 목록 조회
//mav.addObject("dataList" , defaultService.select(tempMap)); // DB SQL 실행 테스트
resultMap.put("result" , "SUCCESS");
resultMap.put("message" , "정상적으로 조회되었습니다.");
} catch(Exception ex) {
resultMap.put("result" , "ERROR");
resultMap.put("message" , "조회중 오류가 발생하였습니다");
ex.printStackTrace();
} finally {
mav.addObject("result" , resultMap);
}
return mav;
}
}
오늘 새벽,
멧돼지 잡으러 가는 꿈을 꾸었다..
멧돼지 추적 드론을 띄워서,
사냥개 로봇 두마리를 풀고,
레이저광선 총을 "들어총"하고
길 아닌 산길을 뛰어 다니는 꿈..
지금 생각해도...
참 어이가 없고 말고 안돼네...^^;;
내 몸무게 100킬로라서,
평지를 걷는것도 힘든데..
산길을 뛰어다니다니..ㅋㅋ..
역시 꿈은.. 꿈일뿐이로구나..^^
"헛된 것을 좇지 말라"
-네이버 해몽님-
헛된 꿈은 쫒아 버리고,
높은 꿈은 좇으라.
- 황님 -
오늘 하루라도
푸른 꿈 이루는 멋진 하루되소서~
1.1 OpenSSL
(1) 개요 (출처 : wiki)
OpenSSL은 네트워크를 통한 데이터 통신에 쓰이는 프로토콜인 TLS와 SSL의 오픈 소스 구현판이다. C 언어로 작성되어 있는 중심 라이브러리 안에는, 기본적인 암호화 기능 및 여러 유틸리티 함수들이 구현되어 있다.
거의 모든 버전의 유닉스 계열 운영 체제(솔라리스, 맥 OS X, 리눅스, BSD 포함) 및 OpenVMS, 윈도우에서 OpenSSL을 이용할 수 있다.
(2) 알고리즘 (출처 : wiki)
OpenSSL은 각기 다른 다양한 암호화 알고리즘을 지원한다:
구분 |
내용 |
암호문(cipher) |
AES, 블로피시, Camellia, CAST-128, DES, IDEA, RC2, RC4, RC5, 트리플 DES, GOST 28147-89 |
암호학의 해시 함수 |
MD5, MD2, SHA-1, SHA-2, MDC-2 |
공개 키 암호 방식 |
RSA, DSA, 디피-헬만 키 교환, 타원 암호, GOST R 34.10-2001 |
(3) 다운로드
https://sourceforge.net/projects/openssl/
1.2 SSL 인증서 생성
(1) openssl.exe 실행(관리자 권한으로 실행)
(2) openssl.exe 실행(관리자 권한으로 실행)
(3) 개인키(private) 발급
절차 |
내용 |
1 |
OpenSSL\bin 폴더에 인증서를 생성할 폴더를 미리 만든다. 예) ssl |
2 |
genrsa -aes3 -out [./경로/]파일명 bit수 - 경로는 상대경로 또는 절대경로 입력 - bit수를 2048은 SHA-1이고, 4096을 입력해야 SHA-2로 생성함 |
genrsa -aes256 -out ./ssl/private.pem 4096 |
(3) 비밀번호 입력
절차 |
내용 |
3 |
비밀번호를 입력한다. 비밀번호는 두번 입력하게 된다. |
Password01* |
(4) “private.pem” 파일 생성 확인
절차 |
내용 |
4 |
opensssl/bin/ssl 폴더에 “private.pem” 생성되어 있는지 확인 |
|
(5) 패스워드가 없는 key 파일을 생성
절차 |
내용 |
5 |
genrsa –aes256 -out [./경로/]파일명 bit수 - 경로는 상대경로 또는 절대경로 입력 - bit수를 2048은 SHA-1이고, 4096을 입력해야 SHA-2로 생성함 |
genrsa -aes256 -out ./ssl/private.key 4096 |
(6) “private.key” 파일 생성 확인
절차 |
내용 |
6 |
opensssl/bin/ssl 폴더에 “private.key” 생성되어 있는지 확인 |
|
(7) 공개키(public) 발급
절차 |
내용 |
7 |
개인키를 이용하여 공개키 생성(비밀번호 없는 공개키 생성) rsa -in [./경로/]개인키 -pubot -out [./경로/]키이름 |
rsa -in ./ssl/private.key -pubout -out ./ssl/public.key |
(8) CSR 생성
절차 |
내용 |
||
8 |
req -new -key [./경로/]Key이름 –config [./경로/]파일명.cnf -out [./경로/]파일명.csr |
||
req -new -key ./ssl/private.key -config ./openssl.cnf -out ./ssl/private.csr |
|||
9 |
Country Name |
KR |
ex) KR |
State or Province Name |
BUSAN |
아무거나상관없음 |
|
Locality Name |
BUSAN |
아무거나상관없음 |
|
Organization Name |
HWANGSANGGYU |
아무거나상관없음 |
|
Organization Unit Name |
HWANGSANGGYU |
아무거나상관없음 |
|
Common Name |
www.hwangsanggyu.co.kr |
ip는 안됨. 도메인 입력후 PC의 hosts 파일에서 추가하여 사용가능 ex) hosts 파일에 아래 내용(샘플) 추가 123.233.212.11 www.hwangsanggyu.co.kr |
|
Email Address |
sghwang@hwangsanggyu.co.kr |
아무거나상관없음 |
|
A challenge password |
|
입력하지 않음 |
|
An optional company name |
|
입력하지 않음 |
(9) “private.csr” 파일 생성 확인
절차 |
내용 |
9 |
opensssl/bin/ssl 폴더에 “private.csr” 생성되어 있는지 확인 |
|
(10) CRT 생성
절차 |
내용 |
|
10 |
명령어 : genrsa 암호화 알고리즘 -out [./경로/]파일이름 비트수 - private를 이용하여 만들 CRT 파일에 대한 보증을 해줄 최상위의 CRT 파일 |
|
genrsa -aes256 -out ./ssl/rootCA.key 4096 |
||
Enter pass phrase for ./ssl/rootCA.key |
Password01* |
(11) 최상위 CA키를 이용하여 CSR을 생성
절차 |
내용 |
|
11 |
req -x509 -new -nodes -key [./경로/]key이름 -days 유효기간 -config [./경로/]cnf파일명 -out [./경로/]pem파일명 |
|
req -x509 -new -nodes -key ./ssl/rootCA.key -days 3650 -config ./openssl.cnf -out ./ssl/rootCA.pem |
||
12 |
Enter pass phrase for ./ssl/rootCA.key |
ex)Password01* |
Country Name |
ex) KR |
|
State or Province Name |
ex) BUSAN |
|
Locality Name |
ex) ex) BUSAN |
|
Organization Name |
ex) HWANGSANGGYU |
|
Organization Unit Name |
ex) HWANGSANGGYU |
|
Common Name |
ex) www.hwangsanggyu.co.kr |
|
Email Address |
ex) sghwang@hwangsanggyu.co.kr |
(12) 최상위 CA키를 이용하여 CRT 파일
절차 |
내용 |
|
13 |
x509 -req -in [./경로/]csr파일명 -CA [./경로/]pem파일명 -CAkey [./경로/]CAKey명칭 -CAcreateserial -out [./경로/]crt 파일명 -days 유효기간 |
|
x509 -req -in ./ssl/private.csr -CA ./ssl/rootCA.pem -CAkey ./ssl/rootCA.key -CAcreateserial -out ./ssl/private.crt -days 3650 |
||
14 |
Enter pass phrase for ./ssl/rootCA.key |
ex) Password01* |
(13) 인증서(private.crt) 생성 확인
절차 |
내용 |
|
15 |
opensssl/bin/ssl 폴더에 “private.crt” 생성되어 있는지 확인 |
|
Enter pass phrase for ./ssl/rootCA.key |
ex) Password01* |
(14) TOMCAT에 적용하기 위해 private.crt를 pkcs12라는 형식으로 변경
절차 |
내용 |
|
16 |
Tomcat에 적용할 keystore 파일 생성 |
|
pkcs12 -export -in ./ssl/private.crt -inkey ./ssl/private.key -out ./ssl/keystore -name tomcat |
||
17 |
Enter Export Password |
ex) Password01* |
(15) keystore 파일 생성 확인
절차 |
내용 |
16 |
Tomcat에 적용할 keystore 파일 생성 |
|
(16) keystore 파일 을 Tomcat 서버에 복사
절차 |
내용 |
17 |
Tomcat에 적용할 keystore 복사 |
D:\BIZ\apache-tomcat-8.5.37/ssl/keystore |
(17) Tomcat conf 파일(server.xml) 수정
절차 |
내용 |
18 |
Tomcat server.xml 수정 |
<Connector port="8080" |
We make first our habits
and then our habits make us.
우리가 먼저 우리의 습관을 만들면
우리의 습관이 우리를 만든다.
해야할것도 많고
하고싶은 것도 많았고 청춘의 젊었던 시절에
몸과 마음을 편히 하고 싶었던 마음과
돈과 여자에만 환장하던 습관이
오늘의 나를 만들었구나..
쫒는다고 얻어지는게 아니었거늘..
어쩌면 수십년쯤 남은 인생은
좋은 습관 만들며 살자~
어릴적엔..
007 제임스 본드처럼 되고싶기도 했었고,
맥가이버의 화학지식을 꿈꾸기도 했었지.
성룡의 취권은 악에 맞서고 싶었던 소년의 희망사항이었었지.
그러다 어느새 오십이 넘었네..
TV에서 007 시리즈중 기억에 없는 영화가 나오길래
사진 한장 남기려고 찍었더니,
때마침 나온 대사 한마디가 슬프구나...
"그러기엔 늦었죠"...
남은 인생 맛난거 많이 먹고
이불속에 똥칠말고
하기싫은 일 억지로 하지말고
건강하게 살았으면 좋겠구먼...
13년만에 담배를 샀다.
윗층에 층간소음이,
낮이나 밤이나,
평일이나 주말이나
끊임없이 쿵쾅거려서
올라가서 너무 쿵쾅거린다고 말하고 왔는데...
현관문도 안열어보고
알았다고 대답만하고는
여전히 쿵쾅거린다..
그래서..
화장실 환풍기로
담배연기 피우기 시전 들어간다!!!
친구들에과의 카톡에다가
내 고충을 올렸더니
화장실에서 음악틀어놓으라고 추천해주더라.
황병기 "미궁"..
계속들으면 귀신소리가 환청으로 들린다나 모라나..
https://youtu.be/a_HrXfWsThU
살다가 살다가 이렇게 층간 소음으로 고통받아보기는 처음이네..
나이들어가니 예민해지고 있는건가..ㅠㅠ
자동차 밧데리 자가교체를 했다.
시동이 한번에 딱 걸리지 않는 경우가 자주 있고
노란색 엔진경고등도 항시 들어와 있기에
밧데리 문제일거라 판단했다.
결론은...ㅠㅠ..
다음주에는 정비소에 가봐야겠다.
밧데리를 교체했지만
여전히 엔진경고등은 들어와있고
시동도 한번에 딱 걸리지 않는다.ㅠㅠ..
어쨋든 밧데리 교체를 스스로 했다.
온라인 쇼핑몰에서 구입하면
정비소에서의 비용이 없고
정비소에서보다 밧데리 물건 비용도 저렴하다.
밧데리 윗쪽 가운데쪽에 손톱만한 크기의
"밧데리 인디케이터"라는 부분에 녹색이면 사용할만한 상태라고 한다.
자동차에 장착되어있는 밧데리 제품 모델명을 확인한다.
내 차는 올뉴마티즈..
ATLAS 브랜이고, 모델명은 BX40L..
택배는 튼튼하게 배송되었다.
작은 스패너 한개면 충분히 교체할 수 있고
같이 배송되었다.
폐밧데리 반납시 스패너도 반납해야한다.
밧데리를 뜯어낸면 이런 상태다.
아랫쪽 밧데리가 새 것
한가운데 녹색이 선명한것이 정상상태라는 것.
밧데리 교체 방법 설명서.
돈이 머니
도대체 머니
나한텐 Money가 왜 이리 머니
선생님 부모님은 말씀하셨지
착하게 살면 행복할 수 있다고
하지만 나는 이제 알지
세상의 진리
변하지 않는 진리
그것은 Money
행복은 돈 많은 순이지
돈이 법이고 정의고 진리지
돈 없음 서럽고 슬프고 괴로워
마누라 애인 여사친 돈먹는 하마
돈 없으면 다음 생도 만날 수 없지
그래서 나는 로또를 사지
1등해서 집도 차도 옷도 살거지
쇼미더머니
나 오늘 로또 1등 하러간다~
나 로또 1등되면,
하이드 머니.
집사고 차사고 옷사고
아무도 못알아 볼테지.
그렇게 흥청망청 할거지.
그러다 다시 거지되는 거지.ㅠㅠ..
오늘부터...
금주 1일..
다이어트 1일..
매일 1,000걸음이상 걷기 1일
인생 사랑 정치 종교적 의견 함구 1일..
화장터 불구덩이 속으로 들어갈때까지
인생은 알 수 없다네..
오늘부터 다시 힘차게!!
아장아장 황이팅!!
장교는 군대의 기간(基幹)이다.
그러므로 장교는 그 책임의 중대함을 자각하여
직무수행에 필요한 전문지식과 기술을 습득하고,
건전한 인격 도야와 심신 수련에 힘쓸 것이며
처사를 공명정대히하고 법규를 준수하며 솔선수범 함으로써
부하로부터 존경과 신뢰를 받아
역경에 처하여서도 올바른 판단과 조치를 할 수 있는
통찰력과 권위를 갖추어야 한다.
------------------------------------------------
25년전 외쳤던 이 짧은 구호 몇 마디가
내 인생을 살아옴에 있어서
어느 정도 영향을 주었다는걸 부정할 수가 없다.
특히, 이 부분..
"... 전문지식과 기술을 습득하고..
... 솔선수범함으로써..."
김해시 창업카페(ghstartupcafe.kr)에서
2시간짜리 무료 교육를 들었다.
(1) 2D 디자인 툴
RDWork
(2) 2D 무료 디지인 샘플 다운로드
https://www.festi.info/boxes.py
(3) 무료디자인 소스를 편집 툴
QCad
원래 오늘 저녁식사 목표 메뉴는..
"김치볶음밥"이었어.
만들다보니...
"김치찌개"가 만들어지더라구..
그래도 어쨋든 목표는
"김치볶음밥"이었길래..
밥을 넣고 더 볶다보니..
말아지는듯 비벼지는듯 하더라구..
그러더니..
"김치찌개볶음 강아지 밥"이 되었어.
보기엔 시골집 마당을 지키는 누렁이의 "저녁밥"처럼 생겼지만..
맛은 있더라.^^
먹고 싶으면,
한술 뜨러 우리 집에 놀러와~