- Spring 숙련에 관한 학습을 진행했다.
1)Jpa
역할에 대해 상세 구현 원리와, 그에 따른 구현 기능을 알아보았다.
2) 어떻게어노테이션
으로 해당 객체가 매핑 되며,Spring Bean
에 대해서 학습했다.
3)@Entity
를 여러개로 분리하였을 때, 어떠한 연관관계가 있고, 그 연관관계에 대한외래키
의 개념을 학습하고 실습했다.
4)UI
를 제외하고PostMan
을 통해Controller(Url)
->Service
->Repository
순으로 원하는 기능에 대한 요청과 응답값을 확인하는 과제를 진행했다.
5) 인증 -> 인가 방식으로JWT
방식을 사용해 보았다.
1)
@Entity
의 연관 관계를 매핑 할 때, 단방향 양방향 연관관계에 대한 어려움이 존재했고 아직
@ManyToMany
의 연관 관계는 조금 더 학습해야 할 것 같다.
2)JWT
의 방식의 진행과 토큰을 만들고, 토큰의 유효성을 검증하는 부분의 로직에 대한 이해는 했지만,
만약 이 부분을 스스로 다시 만들어 보라고 하면 조금 힘들 것 같다.. 기존에 있는 것을 가져다가 쓸듯..!
@Entity
매핑 시 항상 양방향으로 연관시켜 놓는게 좋을 것이라고 생각했다.
->TIL34
에서도 언급했듯, 이렇게 된다면 많은 연관 관계를 맺고 있는 하나의 엔티티가 무거워진다.
-> 따라서 단방향의 연관관계를 사용하고, 필요에 따라 양방향의 연관관계를 매핑하자!
- 페이징 처리 방식에 대해 아직은 모호하지만 이런 식으로 사용되는 구나 라는 것을 학습했다.
@Transactional(readOnly = true)
public Page<Product> getProducts(HttpServletRequest request,
int page, int size, String sortBy, boolean isAsc) {
// 페이징 처리
Sort.Direction direction = isAsc ? Sort.Direction.ASC : Sort.Direction.DESC;
Sort sort = Sort.by(direction, sortBy);
Pageable pageable = PageRequest.of(page, size, sort);
// Request에서 Token 가져오기
String token = jwtUtil.resolveToken(request);
Claims claims;
// 토큰이 있는 경우에만 관심상품 조회 가능
if (token != null) {
// Token 검증
if (jwtUtil.validateToken(token)) {
// 토큰에서 사용자 정보 가져오기
claims = jwtUtil.getUserInfoFromToken(token);
} else {
throw new IllegalArgumentException("Token Error");
}
// 토큰에서 가져온 사용자 정보를 사용하여 DB 조회
User user = userRepository.findByUsername(claims.getSubject()).orElseThrow(
() -> new IllegalArgumentException("사용자가 존재하지 않습니다.")
);
// 사용자 권한 가져와서 ADMIN 이면 전체 조회, USER 면 본인이 추가한 부분 조회
UserRoleEnum userRoleEnum = user.getRole();
System.out.println("role = " + userRoleEnum);
Page<Product> products;
if (userRoleEnum == UserRoleEnum.USER) {
// 사용자 권한이 USER일 경우
products = productRepository.findAllByUserId(user.getId(), pageable);
} else {
products = productRepository.findAll(pageable);
}
1)
@Entity
매핑과 연관관계 설정시 무작정 하지말고 정확한 설계를 바탕으로 진행해야겠다..중요..!
2) 세션 - 쿠키 의 방식보다 JWT방식이 가지고 있는 이점이 확실히 강력한 것 같다..!