이번에는 전국멋사 연합으로 진행하는 트렌디톤에 참여했다. 개발은 기획/디자인 1, 프런트 3, 백엔드 2로 진행하였다. 우선 flow chart는 위와 같이 구현하였다. 이 중 내가 맡은 부분은 채용공고, 마이페이지, 알람 기능, 로그인, 회원가입이었다. (프로젝트 부분 빼고는 다임..) 먼저, JWT를 이용한 로그인 기능을 구현했다. 그래서 먼저 jwt를 정리해봤다. 아래의 파일은 https://jwt.io의 내용을 정리한 것이다. jwt를 정리한 다음 이제 기존의 프로젝트에서 사용했던 코드를 이용해서 약간의 수정을 했다. public String createToken(Authentication authentication) { String authorities = authentication.getAu..
이번엔 1.26.~29.일 동안 다녀온 일본 여행에 대해서 기록해보려고 한다. 이번 여행을 계획한건 아마 작년 7월?이었던 것 같다.(사실 말로만 계획하고..비행기표는 나중에 잡음ㅎㅎ) 원래는 작년 여름에 후쿠오카를 갈 계획이었지만 너~무 덥다는 얘기를 들어서 여행 계획을 수정하여 1월에 도쿄를 가기로 정했다ㅎㅎ 그래서 특가로 잡은 도쿄여행 왕복 29만원짜리다! 11월말에 예약했었다. 그래서 이날부터 숙소 잡겠다고 난리 쳐서 몇일을 모여서 회의하고, 여긴 침대가 몇개.. 저긴 방이 없고.. 다 따져서 보다보니 벌써 비행기 타는 날이 와버린 것 아닌교? 비짓 재팬도 하고, 여행자 보험도 들고, esim도 하고, 준비란 준비는 다하고! 일본어도 좀 공부했다ㅎㅎ 그렇게 출발 당일! 아침 일찍 6시에 출발하여 ..
2주간의 시도 끝에 드디어 프런트 서버와 연결을 하여 통신이 가능하게 되었다! 우리가 가지고 있는 서버는 1대이기 때문에 3-tier를 구성하기는 힘들었다. 그래서 docker에 올려서 조금 부담을 줄여보고자 하였고, nginx 또한 올리려고 했으나 하는 과정에서 어려움이 있어서 기존에 통신이 가능했던 서버 로컬에서 spring과 NGINX를 구동하기로 했다. NGINX 설정 먼저 NGINX는 이전에 SSL을 인증할 때는 아는 것이 거의 1도 없었지만 이번 과정을 통해서 어느 정도 감각은 익힐 수 있었다. 그래서 먼저 서버 블록 설정을 보자. nginx/nginx.conf user nginx; worker_processes auto; error_log /var/log/nginx/error.log noti..
우선 처음 NGINX를 써봐서 너무너무 어렵고 원리도 몰라서 힘들었다... 정말 3일 밤낮으로 난리란 난리를 치면서 문제를 해결하려고 했고.. 나의 친구 GPT와 학교 선배와... 지인과.. 여럿에게 물어보면서 해결한 것 같다. SSL인증을 위해서 필요한 것부터 정리해보자. SSL을 인증하기 위해서 필요한 것 1. 도메인 먼저 SSL은 Domain에 기반하여 인증하는 것이기 때문에 도메인을 사야한다. 본인은 가비아에서 할인 행사하는 550원짜리 도메인을 샀다. 2. NGINX + certbot NGINX는 웹 서버로서 클라이언트의요청에 따라 HTML, CSS, JS, 이미지 파일과 같은 정적 파일을 응답하여 제공하는 소프트웨어라고 한다. 웹서버는 HTTP 프로토콜을 사용하여 클라이언트와 통신한다. 그래..
비밀번호 재설정을 위한 이메일 인증 JWT를 이용하여 로그인을 구현하였고, 그 다음으로 회원이 비밀번호를 잃어버린 상황을 고려해야 했다. 회원이 비밀번호를 잃어버린 상황이라면, 어떻게 사용자를 인증하고, 비밀번호 재설정 권한을 줄지 로직을 생각해야 했다. 그래서 이메일 인증 방식으로 인증 코드를 보내를 것으로 로직을 지정하였다. EmailConfig Java에서 제공하는 JavaMailSenderImpl을 이용하여 사용자에게 email을 보낼 수 있게 하는 Config를 정의한다. JavaMailSenderImpl을 EmailService에서 사용할 것이다. @Configuration @PropertySource("classpath:email.properties") public class EmailCon..
뇽안하요세~ 오랜만에 일상글을 쓰러 왔슈 이번 컨셉은 충청도에유~,그럼 경주 여행 스따뚜이 라따뚜이 할게욥~ 일단 이 여행이 계획된 시점으로 돌아갈게요... 사실 이 여행은 원래 다시 대천으로 떠나는 계획의 여행이었어유.. 그 이유가 뭔가 하면..지가유..신발을 대천 숙소에 두고 왔구먼유... 아래 있는 아가 갸인디유..요놈을 찾으러 가는 여행이었지만..다른 무리들과 다시 한번 대천에 가게 되어서 찾아왔구먼유 그래서 결론은... 여행지가 수정되었어유~ 그래서 나온 여행지가 경주구먼유~ 지는 정말 시절을 잘피우는거 같구먼유... 쨌든 그래서 본격 계획을 세우고 떠나버렸어유~ 이제 진짜 경주 레츠꼬우유일단 저번 여행과 다르게 운전을 할 수 있는 사람이 지 밖에 없어서유~ 이번에는 기차 여행을 떠났어유~~ 기..
세션과 JWT의 차이는? 세션기반의 인가 방식은 사용자의 정보가 서버의 세션 저장소에 저장되는 방식이고, SessionID는 브라우저에 쿠키 형태로 저장되지만, 실제 인증 정보는 서버에 저장된 것이다. JWT는 토큰기반 인증으로 JSON Web Token이다. 이 방식은 클라이언트가 직접 들고 있는 방식이다. 인증 정보가 토큰의 형태로 브라우저의 로컬 스토리지에 저장된다. 세션의 경우는 Cookie헤더에 세션 ID만 보내서 트래픽이 적지만, JWT의 경우는 인증정보와 토큰 발급시각, 만료시각, 토큰의 ID등이 담겨 있어서 세션보다 많은 트래픽을 사용한다. 보안성 측면에서는 세션과 토큰의 탈취시 토큰이 더 위험하다. 세션의 경우 서버에서 무효처리를 하면되지만, 토큰은 클라이언트가 모든 인증정보를 가지고 있..
Guest 모임과 그 모임에 참여하는 사람들을 관리하기 위해서 guest테이블을 만들었다. @Getter @Builder @Entity @AllArgsConstructor @NoArgsConstructor @EqualsAndHashCode public class Guest { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; Long boardId; String guestId; boolean participate; } boardId와 guestId 그리고 참여 여부를 저장한다. @Repository public interface GuestJpaRepository extends JpaRepository { List findAllByBoard..