하나를 완성한다는것의 무게

emptynote의 이미지

자체 자바 언어로 개발한 것을 소개하기 위해 커뮤니티 사이트를 완성하고자 하는데,

비밀번호 찾기를 할 경우 이메일로 비밀 값을 보내서 그 값을 맞출 경우에 비밀번호를 재 설정할 수 있게 할려는데

아.... 메일을 보내야 하는데,

자바언어에서 메일 보내기 검색을 해 보니 SMTP 서버랑 연결후 보내는 방법뿐이네요.

SMTP 서버를 외부에 있는 예를 들면 다음이나 네이버 이용시

보통 계정 비밀번호 까지 입력해야 하는데,

문제는 이 비밀번호를 노출시켜서는 안된다는것인데

이게 오픈 소스 하에서는 어렵습니다.

이를 해결할 다양한 방법들이 있겠지만 소스에 비밀번호를 박아 넣는 하드 코딩 보다

모두 어렵고 손이 많이 갑니다.

아..소스를 공개하면 하드코딩된 비밀번호 이것이 문제입니다.

DB 비밀번호는 권한을 CRUD 로 제한하고 공개해도 아무 문제 없는 비밀번호를 사용하고 있지만

메일은 어떻게 해야 할까요.

현재 제가 선택한 방법은 SMTP 서버를 운영하여 공개된 비밀번호를 갖는 계정을 생성하는 방법입니다.

그러면 메일 계정의 비밀번호를 오픈해도 아무런 문제가 없어집니다.

방향을 제대로 찾은건지도 잘 모르겟고

하나의 서비스를 완성해 가는것 정말로 쉽지 않네요.

----------------
아래는 자바에서 SMTP 서버 없이 메일 본내는 방법이지만 아쉽게도 해당 기능을 수행하는 라이브러리가 GPLv2 classpath exception 라이센스인지라 아파치2 라이센스와 양립할 수 없어 사용할 수 없는 방법입니다.

"java.mail without specifying SMTP server" :

https://coderanch.com/t/274456/java/java-mail-SMTP-server

황병희의 이미지

올려준 링크(/java-mail-SMTP-server) 가보니 아웃본드로 smtp.gmail.com 을 예시로 적혀져있더라구요.

제가 경험해본 무료로 쓸 수 있는 아웃본드 적어볼께요.

제 주변 우분투 사용자분중 어떤분이 아웃본드로 메일건 쓰더라구요,,,
저도 테스트 해봤는데 괜찮습니다. 딱 개발자분들을 위한 아웃본드 느낌이었어요.

그리고 아마존 SES 쓰시는분들도 심심찮게 많더라구요;;;
거의 대부분 광고 메일이나 뉴스레터 뿌리시는 분들...

감사합니다^^^

[크롬OS 에서 적었어요]

--
ㄱㅅㅎㄴㄷ!

emptynote의 이미지

답변 감사합니다 ^^

말씀하신 2군데 살펴 보았는데요.

모두 비밀번호를 요구하고 있는것 같습니다.

사실 비밀번호 요구는 당연한것 같습니다.

메일 계정을 갖고 스팸 메일을 보낼 경우에 책임 소재를 분명히 하기 위해서 비밀번호는 불가피한것 같습니다.

어떤 나쁜 사람이 비밀번호 공개된 메일 계정을 이용하여 스팸 메일을 보낼 경우

선의로 공개를 했을뿐 내가 아닌 나쁜놈이 한짓이라고 했도

메일 계정주는 도덕적 책임과 법적 책임에 자유로울 수 없다고 생각합니다.

하여 도덕덕 법적 책임이 있는 중요한 비밀번호를 오픈할 수 없기때문에

비밀번호를 노출 안하는 방법을 찾던가

노출해도 좋은 방법을 찾아 보아야 할듯합니다.

소중한 시간을 내주셔서 답변을 해 주셨는데 이런 답변을 해서 죄송합니다.

좋은 하루 보내세요~

Hodong Kim@Google의 이미지

개발하신 어플에서 이메일을 직접 보내실게 아니라, 외부 이메일 클라이언트를 자바 어플에서 사용하시면 해결됩니다. MTA(mail transport agent)라고도 하는데, sendmail, exim4, mailx 이런 프로그램에 이메일을 보내라고 시키면 됩니다.

https://ko.wikipedia.org/wiki/%EB%A9%94%EC%8B%9C%EC%A7%80_%EC%A0%84%EC%86%A1_%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8

https://en.wikipedia.org/wiki/Message_transfer_agent

익명_사용자의 이미지

Quote:
문제는 이 비밀번호를 노출시켜서는 안된다는것인데
이게 오픈 소스 하에서는 어렵습니다.
이를 해결할 다양한 방법들이 있겠지만 소스에 비밀번호를 박아 넣는 하드 코딩 보다
모두 어렵고 손이 많이 갑니다.
.

그 자바로 개발한 프로젝트는 소스코드와 configuration data가 분리가 안 되어있고, 코드에 설정값을 하드코딩 하시나요?
당연히 DB 비번이나 내부백엔드 프론트엔드간의 IP설정, SMTP 비번, 기타 등등은 소스코드와 상관없는 부분들입니다. 오픈소스라는것이 프로그램 자체랑 상관이 없는, 가령 데모사이트의 관리자 계정 비번도 공개하진 않죠. 서비스를 운영하는데 필요한 각종 설정들은 conf 파일이나 DB의 settings table같은 곳에 넣습니다. 행여나 해당 프로젝트에 configuration data management interface가 전혀 구현이 안되어있으면, smtp보다 해당 인터페이스부터 구현하시길 적극 권장드립니다. 그런 모듈이 구현되어 있다면, 그냥 설정키 이름과 값 정해서 .conf 파일에 한줄 추가하거나 settings table에 row하나 추가하면 끝날 일이어야만 합니다.

이건 오픈소스랑 상관없는, 클로즈 소스도 당연히 구현해야 하는 부분입니다. 설마 DB root 비밀번호도 하드코딩 하셨을것이라고는 생각치 않습니다.

여기부터는 서명입니다.
"저는 인터넷에서 숨어서 정확한 의견을 피력하는 자들과 말을 섞습니다."

emptynote의 이미지

저는 오픈소스를 다운 로드 받자 마자 컴파일과 구동에 필요한 모든 파일들이 존재하는 것을 선호합니다.

없는 파일을 이렇게 저렇게 만들어라는 말을 싫어합니다.

하여 DB 설정 파일은 당연히 버전 관리자인 git 에 위치합니다.

DB 관련 내용을 설정 파일로 뺐다고는 하지만

보안 면에서 git 에 위치해 버리면 하드 코딩과 차이가 없기때문에

걍 다른 분들께 설명하기 쉽게 하기 위해 널리 알려진 하드코딩이라는 단어를 사용한것입니다.

이렇게 DB 설정 파일이 git 에 위치하면 하드 코딩과 동급인지라 보안이 위험하기때문에

DB 는 허용된 IP 에서만 접속을 허용할거고

공개된 DB 계정의 권한은 CRUD 정도로 제한할것입니다.

또한 현재에는 외부에 오픈된 상태가 아니며 외부에 오픈할때에는

당연히 git 에 올리지 않는 비밀번호로 바꾸어서 사용할 예정입니다.

현재 제가 찾은 방법은 자체 메일 서버를 운영하여 메일 계정을 생성하여 그 계정으로 메일 보내기입니다.
메일 서버는 리눅스/윈도우 2군데 다 동작해야 하므로 james 라는 메일 서버를 후보자로 생각하고 있는데 쉽지 않네요.