목록프로젝트/어디가게 (6)
barded

유저의 회원가입을 진행하는 경우 SMTP를 사용하여 이메일 인증을 받도록 처리하였고 이를 EmailService라고 명명하여 서비스로 빼놓았다. @Service @Transactional(readOnly = true) @RequiredArgsConstructor public class EmailService { private final JavaMailSender javaMailSender; private final JwtProvider jwtProvider; public MimeMessage createAuthorizationEmail(String to, String token) { MimeMessage message = javaMailSender.createMimeMessage(); try { mess..

Spring Security의 Security Context에 고객의 정보를 넣고 인증 시 이를 사용하는 방식을 사용했다. loadUserByUsername 메서드를 통해 DB에서 User를 조회해 온 뒤 UserDetails을 implements한 UserAdapter에 user 객체를 넣어주기 때문에 영속성 컨텍스트에 당연히 user객체가 있을줄 알았다. 하지만 OSIV가 OFF인 상태이다. 그래서 User 객체의 영속성 컨텍스트 생존 범위가 Service단에서만 살아있다. OSIV (Open Session In View)란? OSIV(Open Session In View)는 영속성 컨텍스트를 뷰까지 열어두는 기능이다. JPA에서는 OEIV(Open EntityManager In View), Hibe..
현재 고객의 클래스는 다음과 같다. public abstract class User { @Id @GeneratedValue @Column(name = "user_id") private Long id; private String name; private String email; private String password; private String phoneNumber; private String nickname; //기본 유저 생성시 GUEST로 초기화 @Builder.Default @Enumerated(EnumType.STRING) private Role role = Role.GUEST; @CreatedDate @Column(updatable = false, nullable = false) privat..

현재 GlobalExceptionHandler를 통해 컨트롤러단에서 발생하는 에러는 전역적으로 처리가 되어있다. @Slf4j @RestControllerAdvice @RequiredArgsConstructor public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity handleException(Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage())); } @Excep..
로그인한 사용자의 정보를 파라미터로 가져오고 싶을때 `Java`의 표준 `Principal` 객체를 받아와 사용할 수 있지만 `Principal` 객체는 `name` 정보만 참조할 수 있다. 이때 `@AuthenticationPrincipal` 애노테이션을 사용하면 `UserDetailService`에서 return하는 객체를 파라미터로 직접 받아 사용할 수 잇다. //ava 표준 Principal 객체를 받아서 사용 @GetMapping("/") public String index(Model model, Principal principal) { if (principal == null) { model.addAttribute("message", "Spring security"); } else { model..

어디가게 프로젝트는 사용자를 크게 두가지로 구분할 수 있다. 고객(Customer) 사장(Owner) 이럴 경우에 테이블 설계 혹은 엔티티 클래스는 어떻게 작성해야 할까? 라는 고민을 조금 했었다. 이를 해결하기 위해 찾은 몇가지 방법과 채택한 방법을 소개하도록 하겠다. 먼저 객체와 데이터베이스의 차이점을 알아야 한다. 객체는 상속을 지원하므로 모델링과 구현이 똑같지만, 데이터베이스는 상속을 지원하지 않으므로, 논리 모델을 물리 모델로 구현할 방법이 필요하다. 이러한 방법은 슈퍼-서브타입 도출을 통해 특징을 구별해내고 이를 통해 관계를 변환시키면 된다. 슈퍼-서브타입의 도출 예시 (슈퍼, 서브타입 엔터티 식별자의 도메인은 반드시 같아야한다.) 공통된 데이터만 사원 엔터티에 남기고(슈퍼타입) 기술직, 관리..