Project
가제 : 우리집에 가면~🎶 1. 기획 배경몇 년간 동생과 동거해오며 느꼈던 불편한 점이 있었다. 우리 집은 미친듯한 냉장고/냉동실 포화 상태로 장 보는게 두려울 정도였다.무엇이 어디에 있는지도 잘 파악이 안되고, 유통기한이 지난 음식들도 제때제때 버리지 못했다.또한 서로의 생활패턴이 달라서 누가 재료를 사서 채워넣어도 냉장고에 뭐가 있는지도 제대로 알지 못한채 생활이 지속되기도 한다. 다 들어갈까?의 고민을 하며 장을 봐온지 4년째... 이제는 좀 변화가 필요하다고 느껴 토이 프로젝트로 개발을 시작하기로 했다. 홈메이트와 공유가 가능한 냉장고 재료 확인이 가능한 재고 관리 시스템! 여기에 추가로 살림 재고 관리도 가능하다면 하려고 한다. 2. 필요한 기능들을 기획해보자면1) 사용자 인증 및 권한 관..
시큐리티 관련 예외처리를 파다 보니, 또 다른 문제가 보였다. 바로,,, 예외 처리에 대한 계층 분리 문제. 현재 나의 코드의 문제점은 모든 예외상황에 같은 Exception을 던진다는 것이다. 코드로 확인하면 이렇다.// 프로필 사진 추가 @Transactionalpublic String uploadProfileImage(String accountId, List multipartFile) { //... // s3에 해당 프로필 사진 업로드 (단 한장만 가능!!) if (multipartFile.size() > 1) { throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "프로필 사진은 한장만 업로드 가능"); } ..
1. 프로젝트 마지막 날에 WebSecurityConfig를 간단하게 저장할 수 있을거라 생각하고 다른 기능 모두 완성하고서 처리하기 위해 마지막까지 미루었는데... 당장 기능 영상 찍어야 하는 상황에 시큐리티가 말썽을 부렸다... (물론 내가 해결한 것이 아니라 팀원이 애를 무쟈게 씀... ㅠ 우리 보안지킴이님..ㅠㅠ) 2. 다 제대로 작동하지가 않았지만 문제의 상황은 이것이었다. 열심히 HttpMethod와 함께 url을 연결지어 주었는데요 만약 일반 사용자가 공연정보 업로드를 하려고 post요청을 한다면 권한이 주어지지 않았기에 요청이 금지된다. 그런데 만약 비로그인 사용자(anonymous)가 공연정보 업로드 페이지에 접근해서 post요청을 날리면 그건 금지되지 않는다.... 왜그런거죠!!!? @..
왜 why 1차 회고가 되었냐!? 나중에 말씀드리겠습니다. 일단은 근 3주동안 3월 13일부터 4월 5일까지 1차로 프로젝트가 진행되었다. 3주간 거의 바쁘다바빠 인생과 더불어 사람만날 틈이 없는.. 즉 컴퓨터와 나만의 시간을 달렸다. 하하하 그래 세상엔 너와 나뿐이야 그리고 ... 요가도 꼬오옥.. 껴줘. 그래서 집 - 수업 - 회의 - 개발 - 개발 - 개발 - 요가 - 개발 - ...반복...정도 ? 근데 이번주는 진짜 요가도 못가고 계속 코딩... 진짜 이게 현업에서는 더더 어렵고 힘들겠지? 싶기도 하고 그 듀데이트를 맞추는 것에 대한 압박감이 있었다. 그래서 진짜 이번주는 내내 2-3시간 자면서 계속 작업을 했다... 잠을 안자니 혼이 빠져나가는 느낌쓰~ 그래도 끝내고 나니 속이 시~~원하다! ..
1. 알림 서비스 구현하기 🖥️ 상황 사용자는 아티스트와 장르에 대해 구독할 수 있다. 새로운 공연 정보가 업로드될 때 사용자가 구독한 아티스트가 참여하거나, 사용자가 구독한 장르의 공연이라면 사용자에게 이메일로 알림을 보낸다. 이때, 이메일 알림은 Jakarta Mail로 메일 발송 처리를 하는데, 공연 정보를 업로드하는 메서드 내부에 구현해야할지? 구체적으로 어떤 방식으로 구현해야 할지 고민이 되었다. 🖋️ 알림 처리에 대한 공부 1) Spring 비동기 처리 기능 : 알림 작업을 비동기적으로 처리하여 메인 작업(공연 정보 업로드)의 응답 시간을 최소화할 수 있다. @EnableAsync + @Async : 단순한 스레드를 만들어준다. SpringAsyncConfig(@EnableAsync) + @A..
처음 프로젝트를 시작할 때 세운 목표이다. 최대한 목표를 고려하며 프로젝트를 진행하려 했다. 프로젝트를 진행하며 배운 것들을 정리해보려 한다. 1. Spring Security와 JWT 이해하기 : 나에겐 너무너무 어렵고 두려웠던 스프링 시큐리티와 JWT를 직접 사용하여 프로젝트 전체에 적용해봄으로써 점점 이해하게 되었다. 어떤 구조로 어떻게 구현해야할지 시행착오를 겪으며 이해해왔다. 물론 모든것이 착착 머릿속에 존재하지는 않지만, 계속 여러번 정리하고, 반복하고, 공부하면서 조금 더 이해에 가까워졌다. 특히 필터가 작용하는 흐름을 이해하게 되어 속시원해졌다. 다음 인터셉터 이해해보기.. 2. 오류에 대한 기록: 오류가 수없이 많이 찾아왔다. 그때마다 기록하기 정말 귀찮게 느껴졌지만, 기록하지 않으면 다..
1. UserDetailsManager와 UserEntity - UserDetailsManager의 구현체인 CustomUserDetailsManager를 만들어주었고, 여기서 UserEntityRepository와의 연결점이 되었다. 고민은 UserDetails의 구현체인 CustomUserDetails 자체를 UserEntity 취급을 하여야 할 것인지, CustomUserDetails는 UserEntity와는 다른 것으로 취급해야할지 잘 모르겠다. 일단 내가 구현한 방식은 CustomUserDetails, CustomUserDetails는 Spring Security에서 제공되는 부분이므로 이는 유저의 인증과 관련한 부분을 다루어야 하고, UserEntity는 인증보다는 실제 DB에 저장되는 유저 ..
https://hehesim.tistory.com/36 스프링 시큐리티 인증 절차 1) Authentication (인증) : 'A'라고 주장하는 주체가 'A'가 맞는지 확인하는 것. - 코드에서 Authentication : 인증 과정에 사용되는 핵심 객체. 2) Authorization (권한) : 특정 자원에 대한 권한이 있는지 확인하 hehesim.tistory.com 이것은 내가 이전에 공부하며 만들었던 Spring Security 인증 절차이다. 이때는 딱 Spring Security만을 사용하여 인증과정을 구현하고 공부했다. 이번 프로젝트에서는 여기에 더하여 JWT토큰을 활용한 인증을 구현했다. 이유는 Stateless를 지키기 위하여였다. 상태를 저장하지 않기 때문에 세션관리가 필요없고, ..
1. 프로젝트 개요 - 일반 사용자는 중고거래가 가능 - 사업자는 인터넷 쇼핑몰을 운영 가능. - 프론트엔드 없이 백엔드만 개발. (포스트맨으로 테스트/ CORS는 고려X) 2. 기능 설명 1) 기본 과제 - 사용자 인증 및 권한 처리 - 중고거래 중개하기 - 쇼핑몰 운영하기 2) 추가 과제 (최소 2개 구현) - 결제 시스템 (Toss payments) - 사용자 위치기반 기능 (NCP maps) - 알림 기능 추가하기 (Email - Jakarta Mail) - 알림 기능 추가하기 (NCP SENS) - 사용자 자동 로그인 방지 (NCP Capcha) 3. 나의 목표 ** 이번 프로젝트에서 놓치고 싶지 않은 것!! - 이제까지 배운 기술들을 명확히 이해하면서 코드를 작성할 것 - 어떠한 기술을 선택할..