Whiteship's Note


스프링 이메일 확장하기

모하니?/Coding : 2009. 7. 29. 21:49


Gmail의 SMTP를 이용하여 회원 가입시 메일을 보내서 회원 인증 링크를 보낸다. 그리고 해당 링크를 클릭할 시 회원 가입을 승인한다.

이러한 요구사항이 있습니다. 여기서 앞부분에 스프링 이메일을 사용하여 기능 구현을 하려고합니다.

먼저 GmailSender라는 녀석을 만들었습니다. 그러나 그런 클래스는 필요가 없었습니다. host, port, username, password만 설정하면 스프링이 제공하는 JavaMailSender가 GmailSender와 같은 녀석이 되기 때문이죠. 혹여나 그런 설정 이외에도 send()의 결과를 확인하고 싶어서 boolen 값을 반환해주도록 JavaMailSender의  send 메서드를 try-catch로 랩핑한 클래스를 만들었습니다. 하지만, 생각해보면 어차피 MailException은 런타임 예외기 때문에 false를 반환한다는 건 불가능한 일입니다. 오직 true 값을 반환하거나/MailExcpetion을 던지는 메서드가 되고 마는데... 이런 녀석이 존재할 필요가 있을까 싶어서 없애기로 결정했습니다.

없앨 코드 1.

    public boolean send(SpringSproutSimpleMailMessage mailMessage) {
        try {
            mailSender.send(mailMessage);
        } catch (MailException e) {
            throw e;
        }
        return true;
    }

또 하나 떠오르는 녀석은 SignupMailSender입니다. 이 Sender는 특정 Member를 인자로 받으면 해당 Member의 email로 Signup 관련 URL을 만들어서 보내주는 녀석입니다. 하지만 이 녀석도 잘 생각해보면, Sender의 책임이 두 가지가 되고 말았습니다. SRP를 위반하게 된거죠. 메시지를 만드는 일과 메일을 보내는 일이 합쳐졌습니다. 따라서 아래 코드의 대부분은  MailMessage 쪽으로 넘기는게 좋겠습니다.

리팩토링할 코드 2

    public boolean sendConfirmMail(Member receveMember) {
        List<Member> receives = new ArrayList<Member>();
        receives.add(receveMember);
        String authUrl;
        try {
            authUrl =
                    "http://localhost:8080/springsprout2/signupconfirm.do?email="+
                    URLEncoder.encode(receveMember.getEmail(), "UTF-8") +
                    "&authCode="+
                    URLEncoder.encode(receveMember.getAuthCode(), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("can not encoding url", e);
        }

        SpringSproutSimpleMailMessage message = new SpringSproutSimpleMailMessage(
                "[봄싹 SpringSprout] 사용자 인증 메일",
                "사용자 계정을 활성화 하려면 다음 링크를 클릭하세요. <a href=\""+authUrl+"\">"+authUrl+"</a>",
                receives);
        return mailSendService.send(message);
    }

마지막으로 한 개의 클래스가 더 떠오르는데, 바로 위에 보이는 MailMessage를 확장한 S3M2(SpringSproutSimpleMailMessage) 클래스입니다. 하지만 이 클래스의 이름에서 클래스가 무슨 일을 하는지 의도를 파악하기가 힘듭니다. 이 클래스는 생성자로 subjer, text, member list를 받아서 from, subject, text, to 등의 속성을 세팅해주는 클래스 입니다. 아쉬운 건 아직 이 녀석 생성자에 단일 member 객체를 받는 생성자가 없다는 것이죠. 그래서 위의 코드를 보면 Member List를 만들어서 보내는 모습을 볼 수 있었죠.ㅎㅎ 이 MailMessage는 봄싹에서 사용할 기본 메일 메시지를 설정하기 때문에, Abstract 클래스로 만들고, 좀 더 구체적인 메시지로 가입승인메시지(SignupConfirmMailMessage) 같은 녀석이 그것을 확장하는 것이 좋아보입니다. 그러면 클래스의 이름에서 의도도 알 수 있고, S3M2에 있던 과중한 업무도 분담이 될테니 말이죠.

결국 아래와 같은 구조가 될 듯 합니다. 오늘 밤... 코드를 조금 뜯어 고쳐야겠습니다. 새기능 만들것도 많은데 이번 주는 뜯어 고치는데 시간을 다 쓰네요~ 유후~


ps: 참..오늘의 영어과제부터 하고나서
top

  1. Favicon of http://toby.epril.com BlogIcon 2009.07.29 22:28 PERM. MOD/DEL REPLY

    달려

    Favicon of http://whiteship.tistory.com BlogIcon 2009.07.29 22:58 PERM MOD/DEL

    두번 이나..

  2. Favicon of http://toby.epril.com BlogIcon 2009.07.29 22:28 PERM. MOD/DEL REPLY

    달려

    Favicon of http://whiteship.tistory.com BlogIcon 2009.07.29 22:58 PERM MOD/DEL

    달려야 하나요.

Write a comment.


090729 Unit 1, 2 정리

모하니?/English : 2009. 7. 29. 10:22


Unit 1. Present continuous(현재 진행형)

- be + -ing 로 현재 진행을 나타낸다.
- 뭔가를 시작했지만, 아직 끝나지 않았을 때 사용한다.
- 꼭 말하는 당시 하고 있지 않아도 된다.
- today/this week/this year와 함께 쓸 수 있다.
- 현재 어떤 일이 발생했을 때 사용하며, 특히 다음 단어들과 함께 자주 사용한다.
get/change/become/increase/rise/fall/grow/improve/begin/start

외울 문장

1. I'm reading a really good book at the moment.
2. What's going on?(=What's happening?)
3. It isn't raining any more.
4. You're working hard today.
5. I'm becoming to enjoy it now.

연습문제 틀린 갯수 1개

1. he isn't enjoyng his work at the moment.

dosen't enjoing 이라고 써서 틀림.

문법적으로 첫 번째에 정리했듯이 현재 완료는 be + -ing 형태기 때문에 does가 오면 안 됨.
현재 진행 부정문은 be + not + -ing

Unit 2. Present simple(현재형)

- 일반적인 것들(things in general)을 말할 때 사용한다.
- 3인칭 단수에는 s/es가 붙는다.
- 의문문과 부정문을 만들 때 do/does를 사용한다.
- 빈도를 나타낼 때도 사용한다.
- 무언가 말할 때 그 행위를 언급하기도 한다.
I promise/I suggest/I apologise/I advice/I insist/I agree/I refuse

외울 문장

1. What do you do? (첫 번째 나온 do는 의문문을 만들기 위한 do)
2. How often do you go to the dentist?
3. The cafe opens at 7:30 in the morning.
4. Rice dosen't grow in cold climates.
5. I promise I won't be late.

연습문제 틀린 갯수 5개

1. but I don't use it much.

I doesn't 라고 써서 틀림.

정신 차리자. @_@ I는 1인칭이지 3인칭 단수가 아니자나..

2. Liars are people who dont' tell the truth.

doesn't 라고 써서 틀림.

역시.. 정신 차리자. 복수자나.

3. Vegetarians don't eat meat

doesn't 라고 써서 틀림.

역시.. 복수닷.

4. An atheist doesn't believe in God.

doesn't believe가 아니라 believe라고 써서 틀림.

Atheist의 단어 뜻을 몰라서 문맥적으로 말이 안되게 작성함.
Atheist는 무신론자. a(not) + theo(god) + ist(person)

5. The River Amazon flows into the Atlantic Ocean.

flowes라고 써서 틀림.

발음을 해보자. 불편하다.
s/es 붙이는 것과 관련해서는 Appendix 6를 보자.

Unit 140까지 70일 남았다. 달리자. 하루에 무조건 두 개씩. 하루도 안 빼고 블로그에 정리하기가 목표.
 
목표를 달성하면 상을 받자.. 그런데.. 뭐 받고 싶은게 있어야지.. @_@ 그럴듯한 당근이 있음 좋을텐데...
일단 채찍은 이명박. 한나라당. 조중동.

'모하니? > English' 카테고리의 다른 글

[BBC News] Naples pizza protected by EU  (5) 2010.02.18
[BBC News] Ukraine and Russia argue about spies  (2) 2010.02.17
[EGIU] Unit 19, 20정리  (0) 2009.09.02
[EGIU] Unit 13, 14 정리  (0) 2009.08.11
[EGIU] 20090807 Unit 9, 10 정리  (0) 2009.08.07
20090801 Unit 7, 8 정리  (2) 2009.08.01
090731 Unit 5, 6 정리  (6) 2009.07.31
090730 Unit 3, 4 정리  (0) 2009.07.30
090729 Unit 1, 2 정리  (6) 2009.07.29
영어 공부 계획  (2) 2009.07.28
영어 공부하자  (4) 2009.07.21
top

  1. Favicon of http://http://blog.naver.com/j81811 BlogIcon aStRe 2009.07.29 10:59 PERM. MOD/DEL REPLY

    기초가 튼튼해야죠~ 좀 더 detail 하게 해봐봐..
    어렵지만.. 인칭에서 틀리는건 쫌...

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.07.29 11:05 신고 PERM MOD/DEL

    졸려서 그래.. -_-; 어제 12시 넘어서 공부했다고
    설마 몰라서 틀렸겠어.

    Favicon of http://toby.epril.com BlogIcon 2009.07.29 15:13 PERM MOD/DEL

    몰라서 틀렸음 [O]

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.07.29 17:27 신고 PERM MOD/DEL

    으윽... 오늘은 다 맞춰버리겠어~~~

  2. Favicon of http://http://blog.naver.com/j81811 BlogIcon aStRe 2009.07.29 11:15 PERM. MOD/DEL REPLY

    그런거 같어..
    어제 너무 피곤해 보이더라~
    난 오늘 부터 tofeling 다시 보고 자기가 주는거 다 풀어 보고
    단어 정리하고 단어 외우고 하려고. 편입 영단어도 같이 외워 버릴라고.
    고등학교때 배웠던거 찾아보고 것도 다시 보고.

    오늘 혼. 비.백. 산. 정신줄 놓였어.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.07.29 11:32 신고 PERM MOD/DEL

    공부하기 전에 건강부터 챙겨.
    한약은 언제 만들러가?

Write a comment.