Saturday, April 30, 2016

[자바예제소스] 지메일 계정으로 메일/첨부파일 보내는법(Java 코드)

메일 보내는 자바 예제


작업을 하다가 자바나 혹은 웹에서
이메일을 보내는 예제가 필요해서
뭐 금방 찾겠지 하고 검색을 해봤습니다.
어? 그런데 생각처럼 간단하기만 한 건
아니었던 거 같습니다(물론 예제를 찾은
지금 기준으로는 간단한 예제이지만
어디까지나 알고 있는 지금 기준)
그냥 뭐 보내고 싶은 이메일 주소를
파라미터로 줘서 이메일 보내는 메서드
호출하면 되겠지 했는데 아니더라구요 ㅋ
일단 예제부터 공유하겠습니다




일단 위에 예제는 pdReport 카페에
올려 놓았으니 가셔서 다운 받으시면
됩니다. 그리고 먼저 말씀 드리는 건
위의 예제는 네이버에서 검색해서
찾은 예제입니다. 저는 그냥 갖다
사용만 한 겁니다. 거기에 추가적인
설명만 좀 더 할 뿐입니다.
출처를 찾아보려고 했는데 많은 분들이
위의 예제들을 사용하고 계셔서 어딘지를
알 수가 없습니다. 어쨌든 제가 직접 짠
코드는 아니고 인터넷에 막 돌아다니는
예제이고 그 중에 정상적으로 돌아가는
예제를 공유해 봅니다 ㅎㅎㅎ

다시 본론으로 돌아와서 위의 예제에
대해 간단하게 설명을 드리자면 지메일
계정을 사용해서 이메일을 보내는 예제인데
보내는 곳의 주소는 무조건 gmail이어야 되지만
받는 쪽의 이미엘은 지메일이 아니어도 됩니다.
저 같은 경우는 네이버 메일로 보냈습니다.

그러므로 위의 예제 중 본인의 지메일 계정과
패스워드를 입력해 주어야 됩니다.
제가 소스 상에 GMAIL_ID 라고 입력한 부분을
본인의 지메일 계정으로 바꿔 주셔야 되고,
소스의 제일 밑에 보시면 GMAIL_PASSWORD
​라는 부분이 있는데 그 부분에 해당 지메일 계정의
비밀번호를 입력해 주시면 됩니다.
아 그리고 받으시는 분의 이메일 주소도 입력해
주셔야 되는데 제가 공유한 소스 기준으로는
since201109@naver.com
​으로 받은 쪽의 이메일이 설정되어 있으니
이 것도 수정해 주셔야 됩니다.

p.put("mail.smtp.user", "GMAIL_ID@gmail.com");
Address fromAddr = new InternetAddress("GMAIL_ID@gmail.com");
Address toAddr = new InternetAddress("since201109@naver.com"); 
return PasswordAuthentication("GMAIL_ID@gmail.com", "GMAIL_PASSWORD");

위에 내용 수정해야 될 내용들입니다~
검색해서 찾으셔서 수정하세요ㅎㅎ

아 그리고 이 예제는 메일 보내는 것과 함께
첨부 파일도 함께 보내는 자바 예제입니다.
당연히 보내시려는 파일의 경로도 잡아
주셔야 겠지요. 아래 부분을 수정해
주시면 됩니다.

File file = new File("C:\aaa1.log");

저는 C 드라이브 밑에 있는 aaa1.log 라는
파일을 첨부해서 보냈습니다.
그리고 소스 상에서 메일의 제목과
메일의 내용도 설정이 가능합니다

메일 제목 설정
msg.setSubject("Gmail SMTP 서버를 이용한 JavaMail 테스트");

메일 내용  설정
messageBodyPart.setText("Java Mail API를 이용하여 첨부파일을 테스트합니다.");

메일은 받은 결과입니다~


권한설정


아... 근데 저도 이렇게 메일 보내는 자바 예제가
한 번에 바로 실행된 건 아닙니다.
분명 위에 제가 설명한 그대로 지메일 계정과
비밀번호까지 입력해주었는데도 메일이
전송이 되지 않았었습니다. 이클립스 콘솔에
찍힌 결과를 보니 권한이 어쩌고 저쩌고
하더라구요... 결론은 보안수준이 낮은 외부기기
(저의 이클립스 예제)에서 구글의 서비스를
사용하려고 하니 권한 문제가 발생한 거였습니다.

이 때 전 어떻게 해결을 했냐면 이클립스 콘솔에
나온 에러 메시지를 잘 찾아보시면
해결 방법이 나온 인터넷 주소가 하나 있습니다.
(캡처해놓은게 없어서 말로만 설명해요 ㅠㅠ)
구글에서 설명해주는 글인데 거기로 가시면
이클립스에서 메일 보내는 예제가 실행되도록
구굴의 특정 권한을 낮춰주는 방법에 대한
설명이 있습니다. 그 설정을 완료하면
아래와 같은 메일도 제 구글메일로 옵니다.


한 마디로 이제 제 구글 계정과
패스워드만 알면 제가 아닌 다른
사람이 제가 사용하지 않는 기기에서도
저처럼 제 메일의 계정으로 메일을
보낼 수가 있다는 겁니다.
즉 보안 수준이 낮아진 겁니다.
일단 저는 메일 보내는데 까지는
성공했으니 다시 위의 설정을
처음으로 되돌리려고 합니다.
애초에 이 예제를 찾은 이유가 있지만
보안 상 좋지 않아서 다른 방법을
찾아 보려고 합니다 ㅠㅠ

[도서관리 프로그램] C언어로 구현한 도서 검색 예제 소스(추가/수정/삭제/정렬 기능)

도서관리 프로그램


프로그램 예제 소스를 공유한 적이
있었는데 UI는 없고, 이클립스의
console 상으로만 실행이 가능한
소스였습니다~ 그래서 이번에는
UI까지 구현된 도서관리프로그램을
블로그에 올려 봅니다~ 자바로
구현한 건 아니고 C언어로 구현된
프로그램입니다. 자료는 pdReport
카페에 공유해 두었습니다.


아래 영상은 해당 도서검색 프로그램을
실행해 본 영상입니다. 보시면 아시겠지만
검색은 물론 새로운 도서의 추가/수정 및
기존 도서를 삭제할 수도 있고, 이름이나
가격 순서로 재정렬도 할 수 있습니다.


등록된 책의 정보는 파일로
남게 되어 있습니다. 도서리스트의 정보를
저장하는 파일의 경로는 자료를 받으셔서
압축을 푸셔서 아래로 가시면 됩니다.
도서검색시스템\bin\Debug\Book_Info.dat
도서를 추가/수정/삭제하면 위의 파일이
그 때 그 때 수정이 되겠죠~


그리고 하나 재미있는 기능이 있어
추가로 설명을 드리겠습니다.
위의 이미지를 보시면 제목으로
책을 검색을 했습니다.
그런데 검색어를 그락커퍼니 라고
입력을 했는데 검색 결과로 
책 제목이 극락컴퍼니, 그리스인 조르바
인 책들이 검색이 되었습니다.
검색어와 정확히 일치하는 것만 결과만
보여주는 것이 아니고, 어느 정도
일치하는 것까지 판단을 해서
보여주고 있습니다~~ㅎㅎㅎ
사용자가 오타를 치거나 정확한
제목이나 저자, 출판사를 모르고
어렴풋이 알아도 검색을 하면
유사한 결과도 보여준다는 겁니다~

실행


파일을 다운 받아서 압축을 푸시면
도서검색시스템\bin\Debug\도서검색시스템.exe
위에 경로에 있는 파일을 실행하시면 됩니다.
아 그리고 실행을 하셨을 때 닷넷이라는
프로그램에 설치가 필요한 경우가 있습니다.
그런 경우에는 창에서 알려주는 사이트에
가서 닷넷을 다운 받아 설치해 주시면
문제 없이 실행이 되실 겁니다~

해당 C언어로 구현한 도서검색시스템은
pdReport 카페에서 공유 받으실 수 있습니다.


위에 링크된 주소로 가시면 됩니다!!!

Friday, April 29, 2016

C언어로 구현한 퍼즐맞추기 게임 프로그램 예제 소스


퍼즐(Puzzle) 게임


카페에 괜찮은 C 퍼즐 게임 소스가 공유 되었습니다! 


안드로이드 예제 소스도 공유를 했었는데
드디어 C 언어로 구현한 퍼즐 게임도
카페에 공유할 수 있게 되었습니다 ㅠㅠ


카페에서 공유 받으신 후 실행하는
방법을 설명해 드리겠습니다.


해당 C 프로젝트의 구조는 위와 같습니다.
먼저 Debug 디렉토리로 들어 갑니다.


그럼 위와 같이 파일들이 있는데
0904실습.exe 실행해 주면 끝!


실행이 정상적으로 되면 위와 같이
커멘드 창과 조각으로 나뉘어진
퍼즐 게임 화면을 보실 수 있습니다.
마우스로 이미지를 눌러도 어떠한
반응도 없고, 게임을 시작하기 위해서는
게임 메뉴 -> 새 게임 버튼을
눌러 주시면 되고, 이미지가 랜덤으로
섞이고 나면 게임 시작이 가능합니다.

기능



기타 -> 옵션 버튼을 누르시면
위와 같은 창이 뜹니다.
퍼즐 조각 개수와 퍼즐 이미지를
선택할 수 있는데 선택의 폭은
넓지 못합니다 ㅎㅎ
조각개수는 3,5,7 중에 하나,
그림은 총 두 개 중에 하나만
선택이 가능합니다.


퍼즐을 다 맞추면 위와 같이
성공했다는 메시지와
퍼즐 맞추는 데까지
걸린 시간이 나옵니다.
버그가 한 두개 보이기는 하지만
그래도 중요한 기능은 다 동작하네요 

그리고 게임 중간에 게임 -> 힌트 보기
버튼을 누르시면 퍼즐이 섞이기 전의
이미지가 2~3초 동안 보여 집니다.

[게임소스] MFC로 개발한 배구 게임 예제 공유(애니메이션 캐릭터/능력 선택/멀티플레이 기능)


MFC 게임


대학교 MFC 최종 과제로 제출했었던 소스를 공유해 봅니다.
왜 아직도 블로그에 안올렸었는지 이해가 안가네요^^;
예전에 한창 유행했던 피카츄 게임의 업그레이드 버전으로
짱구,아톰,뽀로로,둘리,미키,케로로,도라에몽,쿠마 같은
애니메이션 캐릭터 선택이 가능하고, 각 캐릭터 별로
능력치가 다르며, 멀티플레이가 가능합니다~
전체 소스는 pdReport 카페에 공유해 놓았습니다.

2인용!


배구 게임 실행 후 첫 화면을 보시면 1player, 2player라고
써져 있는데 싱글 플레이는 지원이 안됩니다^^;;
2인용만 지워되는 게임이니 엔터를 누르시면
캐릭터 선택하는 화면으로 넘어 갑니다~


게임 제목은 막장배구라고 제가 임의로 지었는데
결국 이름 변경 없이 과제 제출을 했습니다 ㅎ

캐릭터 선택



8가지 캐릭터들 중에 하나를 선택을 할 수 있으며,
각 캐릭터 별 능력치를 보여주고 있습니다.
그리고 특정 시간 내에 캐릭터 선택을 하지 않으면
시간 초과되었을 때 선택하고 있던 캐릭터로
자동 선택이 되면서 배구 게임이 시작됩니다.

게임시작



예전에 피카츄 배구를 해보셨던 분이라면
많이 익숙한 화면일 겁니다ㅎㅎㅎ
화면 뿐만 아니라 게임 방식도 예전
피카츄 배구 게임과 동일합니다.
차이는 캐릭터 선택이 가능하고,
캐릭터 별로 능력치가 다르다는 점!
(이게 이 프로젝트의 핵심)

실제로 캐릭터 별로 이동 속도가 다르고,
슬라이딩 능력, 점프력, 공격력도 
모든 캐릭터가 다릅니다.

조종키


1p와 2p 의 조종키는 아래와 같습니다.

1p
a : 왼쪽 이동
d : 오른쪽 이동
w : 점프
Tab : 공격(캐릭터 선택)

2p
방향키와 엔터

동시에 여러 키가 눌려도 게임하는 데
아무런 지장이 없습니다!!!!!

Game Over/Continue


그러다가 게임이 끝나면 아래와 같이 게임을 계속 할 것인지
그만 할 것인지를 묻는 화면이 나옵니다.
이 때 게임에서 선택한 캐릭터의 승패에 맞는 캐릭터
사진으로 화면이 구성 되도록 구현했습니다~


계속 하기 위해 Yes를 누르면 캐릭터 선택하는
화면으로 넘어가는데 이 때 이긴 player는 기존의
캐릭터로 계속 게임을 진행해야 되고, 패배했었던


플레이어만 캐릭터를 새로 선택할 수 있습니다.
만약 No 를 선택하면 위와 같이
GAME OVER 가 나옵니다.

위의 MFC 배구게임 소스가 필요하신 분은
pdReport 카페에서 공유 받으시면 됩니다!


Thursday, April 28, 2016

AngularJS와 NodeJS간 호출(통신)하는 예제(KAFKA)

NodeJS


본사에서 프로젝트를 하다 보니 화면 작업을
하고 있고, 어느 순간 AngularJS라는 것을
사용하고 있고, 또 그렇게 작업을 하다가
막히는게 있어서 찾아보니 AngularJS가
NodeJS를 기반으로 돌아가고 있다고 하네요.
전 뭐 AngularJS와 NodeJS를 같이 사용해야
되는 건가 보네.. 라고 막연하게만 생각하고
있었는데 그렇지는 않다고 하네요 ㅋㅋㅋ


또 오늘 마침 NodeJS 관련 기사가 있길래
읽어 보니 NodeJS가 주목 받는 이유 중에
하나가 프론트엔드와 백엔드 작업을 할 때
화면과 같이 눈에 보이는 부분은 JavaScript
로 작업을 하고, 눈에 보이지 않는 서버 관련
작업은 JavaScript로 하지 않아 이 두 작업이
서로 다른 기술을 필요로 했으나 NodeJS에서는
프론트엔드건 백엔드건 모두 JavaScript로
작업을 할 수 있게 해서라고 합니다.
기존 자바스크립트 개발자들은 물론 저와 같이
자바스크립트를 해보지 않은 개발자들까지
관심을 가질 수 밖에 없게 되는 것이죠~

어찌 되었든 이러한 이유로 AngularJS로
개발을 하고 있고 위에서 말한 것처럼 화면,
서버 둘 다 JavaScript로 개발을 하고 있습니다.
정확히는 AngularJS로 개발을 하고 있죠.
(AngularJS 자체가 JavaScript 기반)

닥치는 데로 하다 보니 오늘 하루종일 삽질을
하다가 저녁 먹고 와서 해결한 게 있어서
푸념 삼아 블로그에 올려 봅니다.

AngularJS로 개발하고

구동은 NodeJS로...


아직도 개념이 정확히 잡히지 않은 상태라
표현이 길고 투박합니다;;;;
화면 개발을 AngularJS로 하고 있지만
그 바닥에는 NodeJS가 있는게 당연한 거지만
막상 제가 개발하고 있는 프로젝트에 NodeJS
문법이 사용되고 있다는 건 오늘 알게 되었답니다;

 
프로젝트를 구동할 때에 위에
파일로 실행을 하는데 전 이유도
모르고 그렇게 저 파일을 NodeJS로
실행하면 된다고 하니 실행만 했죠..
그러다가 오늘 이 파일에서 문제를
해결해야 되는 case가 생겨서 
기존AngularJS 방식대로 작업을
하려고 하는데 아무리 해도 안되는
겁니다. 나용을 간단히 설명하자면

기존에 Controller나 $scope, factory 로
개발한 화면 부분과 저 위에 실행하는
파일 간 통신을 할 필요가 생긴 겁니다.
그런데 아무리 해도 이 두 개가 연결이
안되는 겁니다... 계속 찾다 보니 이 실행
파일은 NodeJS 문법으로 작성된 소스이고,
화면 부분은 AngularJS 부분이니 서로 
다른 언어 간 통신을 하겠다고 둘 다
AngularJS 관점으로만 접근을 하니
NodeJS 부분이 제대로 돌아갈 리가
없는 거죠.....  결국 30분 전에
방법을 찾았습니다. 결과 내용은
다음과 같습니다.

AngularJS의 Controller에서 버튼을 눌러
NodeJS 의 특정 함수를 호출한다!

참 이 거 할려고 정말 오늘 하루 종일
엄청난 시간을 할애 했습니다...

<View>

 
<controller>

<NodeJS 소스>

소스 내용도 길지 않고, 내용도 별거 없지만
그건 알았을 때 이야기이죠... 몰랐던 거
알게된 걸로 전 오늘 만족할랍니다~

아 간단하게 설명을 드리자면 View 부분에
html 소스에서는 버튼을 누르면 test()라는
함수를 호출하고 test() 함수는 controller에
구현되어 있습니다. 호출된 test() 함수에서는
/performbatch 라는 값으로 nodeJS 부분을
호출하고 있고, 제일 밑에 NodeJS의 소스를
보시면 /performbatch라는 글자를 찾으실 수
있으실 겁니다. 그 값 옆에 function이 호출된
겁니다. 이로써 JavaScript 기반의 화면에서
NodeJS 부분을 호출에 성공을 한 겁니다 ㅠ

Wednesday, April 27, 2016

다기펜(Dagi펜 P604) - 아이폰/아이패드/에어/미니 터치펜 구매 및 사용후기

다기펜


지금 제가 아이패드미니2를 가지고 있는데
애초에 아이패드미니2를 구입했던 이유는
개러지밴드를 이용한 음악 작업과 이유로
그림을 그리겠다는 이유가 전부였습니다.
그리고 지금 실제로 아이패드미니를 사용하는
용도는 개러지밴드를 이용한 음악작업이
전부였습니다. 그러다가 근래에 좋은 기회가
생겨서 Dagi펜 p604라는 터치펜이 제 수중에
들어왔습니다 ㅎㅎ 시중에 나온 스마트펜과는
달리 아이폰이나 아이패드/에어/미니 액정에
직접 터치를 통해 손가락 대신의 역할을 합니다.




어찌 되었든 후딱 포장을 뜯어 사용해
보고 싶었지만 일단 사진 몇 장 찍으며
들뜬 마음을 진정 시켜 봅니다.
샤프만 사용하던 촌놈이 괜히 좋다고 막
사용했다가 뭐 하나라도 잘못되면 멘붕
올테니 설명서부터 꼼꼼히 읽어 봤습니다.

제가 가지고 있는 아이패드미니2에
살포시 올려 놓고 한 장 찍었습니다.
길이는 13cm 약간 넘고, 두께는 모나미펜보다
약간 더 두껍고, 무게는 일반 만년필 정도 됩니다.
일단 손으로 처음 잡아 봤을 때 일반 펜과
전혀 차이가 없었습니다.

Dagi펜 P604



겉 상자에 P604라는 모델명 적혀 있습니다.
원래는 P702가 제 것이 될 예정이었지만
이런 저런 사정으로 P604를 사용하게 됐는데
다기펜 P604랑 P702 차이는 P604에는 일반
볼펜도 있다는 점~ P604 숫자가 더 작아서
더 안좋은거겠구나라고 생각했는데 오히려
볼펜이 더 추가된 모델이라고 해서 급방긋~


위에 사진이 Dagi펜에 달린 일반 볼펜이고,
반대편에 터치펜이 있습니다. 볼펜심에 경우
시중에서 쉽게 구할 수 있는 zebra 볼펜심이고,
위에 사진에서 보시는 것처럼 뚜껑이 있습니다.
그리고 터치펜 부분은 펜을 돌려서 펜촉 부분을
넣었다 뺐다 할 수 있습니다.


위에서 펜촉 부분을 보시면 압정같이
둥그런 부분이 있는데 저 부분이 아래처럼
직접 아이패드/아이폰 액정과 닿아 터치를
해서 글씨를 쓰거나 그림 혹은 손가락으로 했던
작업 등을 할 수 있습니다. 보시면 아시겠지만
펜과 촉이 스프링으로 연결되어 있어서
화면에 촉이 닿은 상태에서 펜을 어떤 각도로
휘어도 문제 없이 사용할 수가 있습니다.


아무래도 오래 사용하면 이 부분이
약하지 않을까 라는 생각은 들지만
뭐 영구적인건 없으니깐요...ㅎㅎ
그리고 다행히 여분으로 촉 부분이
하나 더 있었습니다~~ㅋㅋㅋㅋ


그리고 아이패드 액정과 닿는 촉부분의
재질은 고무라 액정에 기스가 날 일은
없겠지만 스티커를 촉의 바닥에 붙여서
마음 놓고 작업할 수 있게 배려해 주네요ㅎ


제 두꺼운 손가락으로 스티커를
이쁘게 촉에 붙이느라
고생은 좀 했습니다 ㅎㅎㅎ


일단 앱스토어에서 그림 어플 하나 받고
실행시키는 동안 사진 한장이 아니고 두 장~
뿌듯뿌듯~~~ㅋㅋㅋ


촉이 펜 안 쪽으로 들어가 있는 상태(위)
촉이 펜 밖으로 나와 있는 상태(아래) 


다기펜에 초점이 안맞혀져 있고
배경이 더 선명하게 나왔네요;;
절치부심 해서 이번에는 주인공인
다기펜에 초점을 맞혀서 사진을
다시 찍었습니다(아래사진)
나름 성공????ㅋㅋㅋㅋ


볼펜부분에 뚜껑이 닫힌 상태의 사진입니다.
뚜껑은 절대 혼자 빠질 일은 없을 겁니다 ㅎ


그립감을 위한 디자인에 박수~ㅎㅎ
검지와 엄지가 닿는 부분에 위와 같은
홈이 있으니깐 다기펜을 잡았을 때
편한 느낌이 들었습니다.


왜 이제서야 전체 컷이 나오지???
위에 사진에 설명서만 추가하면
풀셋입니다~


드디어 처음으로 다기펜을 사용해서
글씨도 써보고 필기감도 확인해 봤습니다.
고무로 된 펜촉이 아이패드의 액정과 맞닿지만
투명하기 때문에 필기하려고 하는 위치를 알 수
있었고, 제 아이패드는 액정강화유리가 붙어 있지만
필기나 그림 그리는 데는 전혀 지장이 없었습니다.
문제는 제가 악필이라는 겁니다--;;;;;
아무리 이쁘게 써야지 써야지 해도 급한 성격과
타고나지 못한 손감각으로 인해 뭘해도
낙서로 귀결되네요......
게다가 아직은 처음이라 익숙하지 않은
다기펜.... 좀만 기다려라 남들이 알아볼 수
있는 글씨를 꼭 써주마.. 그리고 가능하다면
그림도~~~ㅋㅋㅋㅋㅋ


그래도 몇 번 사용해 보니 그래도
좀 뭔가 글씨가 보이기 시작합니다!


오호 ㅋㅋㅋ 이 정도면 좀만 지나면
자유자재로 Dagi펜 가지고 놀 수 있겠죠?
아 그리고 당연한건데 충전은 필요 없음요!