본문 바로가기

전체 글

(39)
[스프링부트] 필수 약관 - Native Query 요구사항1) 회원가입 시 User는 필수 약관 동의를 동의하지 않으면 가입할 수 없다.2) 약관의 최초 생성 일자만 남기면 된다. (약관의 수정 일자는 저장하지 않아도 된다.)3) 필수 약관 생성 또는 수정 시, 약관에 따라 User에게 동의를 구하지 않고 동의로 체크한다 .4) 이 때, 공지사항은 약관 생성 또는 수정이 반영되기 이전에 관리자가 직접 게시한다. 1) 필수 약관 생성 Entity 생성[module-common & module-admin] → TermsCondition@Entity@NoArgsConstructor@Table(name = "terms_condition")public class TermsCondition { @Id @Column(name = "terms_conditi..
[스프링부트] JPA Specification 이용한 멤버 조회 구현 ※ 어드민 기능: Member 조회1. 기간 설정 (생일, 가입일)2. 필터링 조건 설정 (MemberId, 이메일, 닉네임, 생년월일, 성별, 권한, 임신 유무, 흡연 유무, 고혈압 유무, 당뇨병 유무)→ Member 객체 (MemberId, 이메일, 닉네임, 생년월일, 성별, 권한), Profile 객체 (임신 유무, 흡연 유무, 고혈압 유무, 당뇨병 유무)→ Profile은 메인 프로필만 사용한다. (추가 프로필은 사용 X)→ 이메일, 닉네임은 대소문자를 구분하지 않는다.조건이 두가지만 들어가서 필터링 자체는 간단하다. QueryDsl보다는 JPA Specification이 더 적합하다.  JPA SpecificationJPA Specification은 JPA의 Criteria API를 기반으로 하..
[스프링부트] LazyInitializationException 지연 로딩 오류 흑..흑...어드민 기능 중 탈퇴 회원을 회원으로 복구하는 로직을 짜다가 DeletedMember로 불러온 List인 DeletedProfile을 불러오는 과정에서 오류 발생 "trace": "org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.example.domain.deleted.entity.DeletedMember.deletedProfiles: could not initialize proxy - no Session ...  [module-admin] → DeletedMember@NoArgsConstructor@Getter@Entity@Table(name = "deleted_me..
[스프링부트] 탈퇴 회원 처리 (Postgres DB 분리, @Scheduled) 탈퇴한 회원 그냥 repository.delete() 했는데 몇 년간 보관해야된다 음... 탈퇴한 유저 데이터에 접근하는 경우가 뭐지 흠. 삭제 회원 데이터 접근할 일 딱히 없을 것 같고.. DB 분리하는게 성능상 이점이 있다 DB 분리module-common → [application.yml]DB를 2개 이상 사용할 경우, 직접 DataSource를 생성해야한다. yml 파일 설정 중 만난 오류: jdbcUrl is required with driverClassName.  HikariCP의 Database URL 설정은 url이 아닌 jdbcUrl을 사용하기 때문에 발생하는 오류로, 대부분의 블로그에서 datasource.url을 datasource.jdbc-url로 변경하라고 추천한다.하지만 자동설정..
[Spring Cloud Gateway] Admin 로그인 API가 따로 필요한가 ? ? module-admin → [AdminFIlter]@Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { String path = exchange.getRequest().getPath().toString(); System.out.println("path = " + path); String authorizationHeader = exchange.getRequest().getHeaders().getFirst("Authorization"); if (authorizationHeader == null || !authorizationHeader.startsWith(..
[Spring Cloud Gateway] module-admin admin 체크하는 필터만들고 .yml파일에 이어서 적용하려니까 너무 길어지고 복잡하다모듈들 관리하기 편하라고 GatewayConfig 새로 만들음  apigateway → [GatewayConfig]@Configurationpublic class GatewayConfig { @Autowired private AdminFilter adminFilter; @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route("module-common", r -> r.path("/module-common/**") ..
[Springboot + Redis + CoolSms] 회원가입 인증 부분 문제 해결 현재 로직1. User가 회원가입 진행 시 coolSms를 통해 인증코드를 발급받는다.2. redis에 sms:{email} 형식으로 저장되면 data에 발급받은 coolSms로 전송된 인증 코드를 저장한다.3. User가 전송받은 인증코드를 [확인] 버튼을 누를 경우 redis 내의 코드와 비교한다.  → 현재는 보안을 생각해서 이 단계에서 인증 코드를 삭제하지 않고, 회원가입 버튼을 누를 경우 DTO에 인증 코드를 다시 전송하여 회원가입 로직에서 Redis의 인증 코드와 일치하는지 다시 확인한다.→ 인증 코드 검증과 회원가입 버튼을 누르기까지 큰 시간의 차이가 없어서 괜찮을 것 같지만 뭔가 찝찝한게 문제.......  오.!>!>1>!>!!>?!!?~ 귀찮 ㅠ Redis 전화번호 인증 성공 시 1. ..
[Spring Cloud Gateway] 로그아웃 확인 [로그아웃 로직]accessToken과 email을 받음email 값으로 Redis내의 Refresh:{email} 삭제accessToken은 따로 저장되어있는 곳이 없기때문에 로그아웃 처리 시 redis에 logout:{accessToken}으로 저장한다.인가 필터에서 accessToken이 redis의 logout:{accessToken} 으로 저장되어있는지 확인한다.true → Exception 처리  1. module-common → [AuthController]/** * 로그아웃 * 1. Redis내의 refresh_token 삭제 * 2. Redis에 현재 access_token을 logout 상태로 등록 * - 2.1. 해당 access_token의 남은 유효시간..