2023.08.03.목.TIL

heeh·2023년 8월 3일

TIL

목록 보기
57/82
post-thumbnail

2023.08.03.목.TIL

  • successfulAuthentication
    				response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(new ObjectMapper().writeValueAsString(new MsgResponseDto("로그인 성공", HttpStatus.OK.value())));
    • 포스트맨에 성공 메세지 표시하기 위해 추가

UserController - 예외 처리로 실패 시에도 포스맨에 뜰 수 있게 하기

  • RejectedExecutionException exception
    • RejectedExecutionException은 "거부된 실행 예외"라고 한글로 표현할 수 있습니다. 이 예외는 주로 스레드 풀이 작업을 처리할 수 없을 때 발생합니다. 스레드 풀이 이미 최대 작업 큐 크기를 가득 채웠거나, 스레드 풀이 종료된 경우에 작업을 거부하고 발생하는 예외입니다.
  • return ResponseEntity.ok().body(new MsgResponseDto("회원가입 성공", HttpStatus.OK.value()));
    • ok()는 ResponseEntity의 메서드
    • OK는 HttpStatus의 enum 타입
      • OK.value() = 200
  • OK(200, Series.SUCCESSFUL, "OK")
  • BAD_REQUEST(400, Series.CLIENT_ERROR, "Bad Request")

이메일 인증

  • User 클래스에는 verified라는 boolean 타입의 속성이 있으며, setVerified() 메서드는 해당 속성을 설정하는 메서드입니다.

    • 모라는거야
  • MimeMessage message = mailSender.createMimeMessage(); 객체를 생성

  • https://mvnrepository.com/ 사용법

  • 자바x와 자바17이 호환되지 않음

    • implementation group: 'javax.mail', name: 'mail', version: '1.4.7’
    • implementation group: 'com.sun.mail', name: 'jakarta.mail', version: '2.0.1’
    • implementation 'org.springframework.boot:spring-boot-starter-mail’
      • 주석 처리된 import 삭제 후 가능해짐!!!
  • EmailConfig 추가

  • joinEmail으로 이름 잘 맞춰주기!

  • EmailServiceImpl implements EmailService

    • public String joinEmail(String email)를 @Override로 재정의
  • Email 발신 계정 만들기 + google 인증

    • https://jee2memory.tistory.com/entry/스프링-프레임워크-회원가입-시-이메일-인증-구현하기 참고
    • Email 발신 계정 앱 비밀번호 발급 후 어디에 입력해주나?
      • 애플리케이션 프로퍼티스 기준으로 알아봐서 나는 애플리케이션 프로퍼티스에 입력!
    • 이 블로그에서는 xml을 사용하여 email-context.xml 에서 에서 찾아볼 수 있다
    • EmailConfig에서 @PropertySource("classpath:email.properties") 삭제
      • @PropertySource("classpath:email.properties") : 해당 소스에서 밸류를 가져오겠다
  • applicatoin.properties 에서 정보를 가져와서 Email 보내는 설정을 해주는 EmailConfig

  • 발신 이메일 계정

    • EmailServiceImpl
      String setFrom = "[heehee010010@gmail.com](mailto:heehee010010@gmail.com)";
      // email-config에 설정한 자신의 이메일 주소를 입력
      
      sendEmail(setFrom , toMail, title, content);
      
      public void sendEmail (String setFrom, String toMail, String title, String content)
      
      helper.setFrom(setFrom);
    • EmailConfig
      @Value("${AdminMail.id}")
          private String id;
          @Value("${AdminMail.password}")
          private String password;
    • applicatoin.properties
      # admin 구글 계정
      AdminMail.id = heehee010010
      AdminMail.password = 
    • 연결 되어 있따!?
  • 이메일 인증과 회원가입은 각각 따로

    • 순서나 회원가입시 이메일 인증을 하려는 상황은 프론트엔드가 한다구!? 라는 방법도 있지만 위험하당
  • setFrom의 정체는 무엇인가?

    • setFrom도 email 주소를 기입해줘서 발신자를 설정
    • 하지만 해줘도 applicatoin.properties에서 정해준 아이디로 발송이 됨
  • setFrom이 발신자를 변경, 수정할 수 있는 것 같지만 applicatoin.properties에서 설정해준 기능들이 더 먼저 움직이는 느낌
    applicatoin.properties에 설정해주면 다른 곳에 설정해 줄 필요 X

  • 왜 setFrom이 먹히지 않았는가?

  • 이렇게 변경할 수도 있다!

    private int authNumber;
    
    public void makeRandomNumber() {
            // 난수의 범위 111111 ~ 999999 (6자리 난수)
            Random r = new Random();
            int checkNum = r.nextInt(888888) + 111111;
            System.out.println("인증번호 : " + checkNum);
            authNumber = checkNum;
        }
    public int makeRandomNumber() {
            // 난수의 범위 111111 ~ 999999 (6자리 난수)
            Random r = new Random();
            int checkNum = r.nextInt(888888) + 111111;
            System.out.println("인증번호 : " + checkNum);
            return checkNum;
  • 인증 번호를 받고 인증 번호 기입하는 것 까지…. 구현해야함…..

  • EmailServiceImpl을 따로 Impl로 만들어주는게 이상,,, → UserService에 넣기,, 코드 많이 바뀌어질 것

  • 5개의 원칙 중 4개를 만족해야 Impl로 나눌 수 있음

  • signauth table의 방법, radis.. 방법이 있지만 지금 방법으로 도전을 해보세여!

  • 또! 해야할 것!

    • 기존 verifyEmail를 sendEmail 만들고 // 이메일 전송 메서드 이후에 verifyEmail를 만들어주기
    • 인증키와 유저가 입력한 인증키(authNum)를 비교
    • 인증 성공 시 회원가입 완료, 인증 실패 시 실패
  • 설계를 하기! …엔티티

    • 이메일, 어스, 상태, 시간(later…) 등등..
  • SimpleMailMessage… MimeMessage…!

  • DB 마다 특징이 있다

    • ex) mySQL 경우 소스 코드 공개의 의무가 있음
profile
공부하자개발하자으쌰으쌰

0개의 댓글