전체 글
-
[appling] CORS 처리appling 프로젝트 2024. 9. 24. 07:39
🔴 CORS 처리🟠 크로스 도메인 이슈크로스 도메인 이슈는 브라우저에서 다른 도메인으로 요청을 보낼 때 발생하는 보안 이슈브라우저는 보안을 위해 동일한 출처 정책을 적용출처가 다르면 브라우저는 요청을 보낼 수 없음이를 해결하기 위해 CORS(Cross-Origin Resource Sharing) 헤더를 사용🟢 CORS 헤더CORS 헤더는 브라우저에서 다른 도메인으로 요청을 보낼 때 사용되는 헤더브라우저는 이 헤더를 통해 서버에서 허용하는 도메인을 확인하고, 허용되지 않는 도메인에서는 요청을 보낼 수 없음이 헤더는 서버에서 설정하고, 브라우저는 이를 확인하여 요청을 보낼 수 있는지 여부를 결정🟢 CORS 헤더의 종류Access-Control-Allow-Origin: 허용된 출처를 지정Access-C..
-
[appling] 주문 상세 조회appling 프로젝트 2024. 9. 22. 15:24
🔴 주문 상세 조회🟠 주문 상세 Domain 정의🟢 주문 상세 요청 정의@Getter@Builder@AllArgsConstructor(access = AccessLevel.PROTECTED)@NoArgsConstructor(access = AccessLevel.PROTECTED)public class GetOrderListRequest { private int size; private int page; private Sort sort; private String orderContact; public static GetOrderListRequest from(int size, int page, Sort sort, String orderContact) { retur..
-
[appling] 주문 조회appling 프로젝트 2024. 9. 21. 21:46
🔴 주문 리스트 만들기🟠 주문 도메인 정의🟢 주문 요청 정의@Getter@Builder@AllArgsConstructor(access = AccessLevel.PROTECTED)@NoArgsConstructor(access = AccessLevel.PROTECTED)public class GetOrderListRequest { private int size; private int page; private Sort sort; private String orderContact;}orderContact를 통해 주문자를 구별하기 위해 연락처만 받았다.🟢 주문 응답 정의@JsonInclude(JsonInclude.Include.NON_NULL)@JsonNaming(PropertyNam..
-
[appling] 주문 서비스 만들기appling 프로젝트 2024. 9. 19. 11:29
🔴 주문 만들기🟠 ERD 그리기🟠 주문 도메인 정의@Entity@Table(name = "orders")@AllArgsConstructor(access = AccessLevel.PROTECTED)@NoArgsConstructor(access = AccessLevel.PROTECTED)@Builder@Getterpublic class OrderEntity extends CommonEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "order_id") private Long orderId; @Enumerated(EnumType.STRING) private OrderStatus o..
-
[appling] 상품 상세 기능 추가 (with. 코드리뷰, n+1 문제 해결)appling 프로젝트 2024. 9. 13. 13:26
🔴 상품 상세 (with. 코드리뷰, n+1 문제 해결)이제 어느정도 세팅이 된거 같으니 일반적으로 기능을 만드는 과정을 해보려고 한다! 상품 상세에 대해 작성해보자🟠 Service 추가🟢 서비스 및 도메인 정의public interface ProductService { ... /** * 상품 상세 * @param productId * @return */ ProductDetailResponse getProductDetail(Long productId);}우선 서비스를 정의해보자. getProductDetail을 정의하려고 하면 ProductDetailResponse 반환하고자 하는 class가 존재하지 않는다. 반환 class를 먼저 작성해야 한다.@Js..
-
[appling] Product Option 추가 (with. unit test code)appling 프로젝트 2024. 9. 12. 15:23
🔴 Product Option 추가상품을 만들때 옵션을 고려하지 않으려고 했는데 옵션을 추가해달라는 요구사항이 들어와서 구조를 변경해보려고 한다.🟠 Product 데이터 정리 및 Option 데이터 추가🟢 Product 데이터 정리@Entity@Table(name = "product")@AllArgsConstructor(access = AccessLevel.PROTECTED)@NoArgsConstructor(access = AccessLevel.PROTECTED)@Builder@Getterpublic class ProductEntity extends CommonEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) priv..
-
[appling] 전역 Log 처리 (with. AOP)appling 프로젝트 2024. 9. 9. 16:02
🔴 log 전역으로 처리하기간단한 로그를 남기려고 하는데 Controller랑 Service마다 로그를 직접 찍지 않고 자동화처리 하고 싶다.해당 부분을 Aspect(AOP)를 사용하여 처리해보자.🟠 설정dependencies { ... implementation("org.springframework:spring-aop:6.0.11")}의존성 주입만 해주면 끝이다.🟠 적용🟢 Controller Log@Component@Aspect@Slf4jpublic class GlobalControllerLog { @Around("execution(* com.simol.appling..*.controller..*.*(..))") public Object around(ProceedingJoi..
-
[appling] Service 예외 처리appling 프로젝트 2024. 9. 9. 14:32
🔴 Service에서 예외 발생 부분 처리하기Controller에서 반환하는 데이터를 처리하면서 Service에서 Exception이 발생하는 경우도 처리해야 된다.🟠 Service에서 Exception 발생하는 경우@Service@RequiredArgsConstructor@Transactional(readOnly = true)public class ProductServiceImpl implements ProductService { private final ProductRepository productRepository; private final ProductCustomRepository productCustomRepository; ... @Transactional @Ove..