Project
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. 나의 목표 ** 이번 프로젝트에서 놓치고 싶지 않은 것!! - 이제까지 배운 기술들을 명확히 이해하면서 코드를 작성할 것 - 어떠한 기술을 선택할..
1. 초기 데이터 설정하기 (Board의 Category) Board 테이블의 카테고리들은 변하지 않는 파트로 한 번 입력된 후 변경 가능성이 거의 없다. 처음에는 전체 게시판 카테고리 불러오기 메서드 안에서 네가지 카테고리를 입력하고, 그것들을 불러오는 로직을 짰다. ex. // BoardService class // 전체 게시판 카테고리 불러오기 // 게시판의 카테고리가 정해져있기 때문에 불러오면서 바로 카테고리를 저장하도록 했다. // todo: 고민점은 카테고리를 저장하는게 맞는지가 ? 고민... 확장성도 고려하고 싶은데.. public List readBoardCategories() { Board board1 = Board.builder().category(BoardCategory.자유).bui..
엔티티를 직접 반환하고 사용하고 있는데, 뭔가 말이 안된다는 느낌이 든다... 데이터베이스에 직접 왔다갔다 하는게... 괜히 엄청나게 위험한 행동인듯한 느낌.. 그리고 DTO를 만들어두고서는 사용을 한번도 안한것도 이상하다. DTO는 Data Transfer Object로 클라이언트와 서버 간 데이터 전송을 위해 설계된 객체. Entity는 데이터베이스에 저장되는 데이터 객체. >> 이것만이 데이터베이스와 직접적으로 연결되게 된다. Entity를 직접 반환할 경우 여러가지 문제가 생긴다. 1) 필요한 데이터만 전송하기 어렵다. : 엔티티 반환시 엔티티에 존재하는 모든 데이터가 반환된다. 불필요한 데이터를 사용자에게 전달하게 될 수 있다. 2) 순환 참조 문제 : 엔티티 간에 양방향 관계가 존재할 경우, ..