Hyunseok
현재 사이트는 2024년 11월 이후로 업데이트 되지 않습니다. 새 글은 블로그로 확인해주세요. 블로그로 이동
프로그래밍 [팀프로젝트 외전] 스프링 부트에서 메일을 보내보자
2022. 10. 4. 07:01

현재 사이트는 2024년 11월 이후로 업데이트 되지 않습니다. 새 글은 블로그로 확인해주세요. 블로그로 이동

저번 주 금요일의 수라장의 코드들을 적으며 되돌아보는 시간을 가져보려 한다

덤으로 지금 하는 프로젝트의 코드들도 설명하며 써보려 한다 

 

 

먼저 구성, 매우 간단하다 

 

메일 인증이 들어온다 >

dto > service로 가서 repository에 체크 >

문제없으면 sql에 메일 주소와 임시키, 시간과 등록 >

mailsender에 이메일과 임시 값을 보내 smtp로 메일 발송

> 프론트에는 발송 완료 신호 

> 프론트에서 임시값이 들어오면 db 와 비교

> 조건이 맞다면 맞는 처리 후 프론트에 ok사인

 

정도가 되겠다

 

먼저 controller부터 보자 

 

 

이메일 인증과 

이메일 비교 두 개다 만들어준다 

 

이메일 인증에서 db에 값이 없다면 임시 값 저장과 메일을 보낸 뒤 true혹은 false를 return 한다

 

이메일 비교는.. 원래 int값으로 넘겨주려 했는데  (여러 조건값이 있으니)

급하니(진짜 단시간에 만들어야 했다) 일단 최대한 오류를 피하려고 백엔드에서 String을 작성해 그냥 프론트로 넘겨줬다 

 

body에 요구한 값은 아래와 같다

 

실로 간단하다, 딱 필요한 값만 받았다

 

그리고 db로 들어가는 entity는 아래와 같다

일단 습관적으로 인덱스 번호를 넣어주고..

들어갈 email, 난수로 들어갈 authNum, 회원가입 시 인증되었는지 요구할 isAuthrized정도를 넣었다

 

사실 이거 말고도 더 좋은 방법이 있지 않을까 하지만 1분 1초가 급한 상황에서는 그런 거 없다 일단 생각나는대로 넣었다

 

그리고 메일 발송할 자바 클래스를 아래와 같이 줬다

메일보낼때 필요한 대부분의 값들은 properties에 환경변수로 빼놨고..

간단하게 title과 context, 그리고 보낼 대상이 될 mailAdress를 받아오게끔 했다

 

그리고 여기서 맨 위에 Component 어노테이션 없이 냅다 하려니 스프링이 자꾸 @Bean을 등록하여라 어리석은 자여!라고 자꾸 뿜길래..

 

@Bean을 넣으려 하니 뭔가 또 오류 가뜨고 자료를 좀 더 찾다 보니 @Component 혹은 @Configuration을 달면 된다는데 

 

세 개의 차이점이 뭔지 몰라서 좀 찾아보니 @Bean과 Configuration은 수정이 불가한 외부 라이브러리에 대한 Bean의 추가고

Componenet의 사용자 지정의 라이브러리, 직접 만든 라이브러리..? 라기보다는 수정, 제어가 가능한 라이브러리에 대한 어노테이션이라 한다

 

여하튼 스프링 객체를 만드는 것에는 다름이 없다 하니.. 뭐... 여하튼 붕어빵 틀에서 붕어빵 하나 만들어놨다 생각하자 (오브젝트와 클래스)

 

그리고 서비스 부분은 이러하다

 

 

지금 봐도 매우 졸작이다.. 그래도 이걸로 잘 돌아갔다.. 내게 시간이 더 있다면 더 잘 짤 수 있었지 않을까 라는 생각이 들지만 여하튼..

 

앞서 말한 바와 같이 메일이 들어오면 일단 체크하고 없으면 저장, 있으면 삭제해버리고 다시 저장을 한다

(유저가 다시 인증을 요청할 수도 있으니.. 그리고 시연 때 이 부분에서 오류난 기억이 있는데.. 나중에 한 번 왜 오류 났는지 파봐야겠다)

 

그리고 인증번호가 들어오면 시간 기준으로 체크를 해서 인증 완료면 인증을 위한 시간 1시간을 주고 나머지는 싸악 뭐 없이 리턴 값을 준다 

 

생각보다 간단하다 

 

vue는 찍기도 초라하다, 버튼 몇 개의 v-if의 분기문과 axios를 통한 response값 + 그 값에 따른 분기와 태그 처리 등으로 끝을 냈다 

 

 

 

사실 4시간 걸릴 코드가 아니다.. Bean넣는곳에서 살짝 헤메고 바로 저기 시간 부분에서 LocalDateTime과 LocalDate, 그리고 ChronoUnit을 찾고 익히고 적용한다고 살짝 시간이 걸렸다.. 흑흑..

 

 

부디 1년 뒤 내가 이 코드를 발견하길 빌고.. 어떤 감상이 있을지 블로그에 남기길 빈다.. 어떤 식으로 느끼고 그때는 어떤식으로 더 아름답게 더 효율적으로 짤지.. 코드를 남기길 빈다 흑흑..


프로그래밍의 다른 글