Projects 15

[리팩토링] 권한 별 기능 제한 로직 구현 (3) (업데이트 중..)

Controller💡@PreAuthorize@PreAuthorize("#userId == authentication.principal.userId")@PutMapping("/users/{userId}")public void update( @PathVariable Long userId, @AuthenticationPrincipal CustomUserDetails user) {}userRole 역할 별로 필터링 하기💡@AuthenticationPrincipal@GetMapping("/profile")public ResponseEntity profile( @AuthenticationPrincipal CustomUserDetails userDetails) { pro..

Projects/HubEleven 2026.01.16

[리팩토링] 공통 모듈 수정으로 인한 리팩토링

공통 모듈 repo 위치 변경💡build.gradle 변경repositoriesrepositories { mavenCentral() maven { url 'https://jitpack.io' }}implementationimplementation 'com.github.ElevenHub:HubEleven-common:v0.0.1' 💡변경 사유기존 common (공통 모듈) 이 팀장님 개인 repo 위치에 있어, 팀원 모두 공통 모듈 변경 가능하도록 팀 organization repo로 변경응답값 변경💡기존 코드@Operation(summary = "주문 생성 API", description = "새로운 주문을 생성한다.") @PostMapping public ResponseEnt..

Projects/HubEleven 2026.01.15

[리팩토링] 권한 별 기능 제한 로직 구현 (2) (업데이트 중..)

Controller → Service💡Controller 에서 User 정보 받아오기@Operation(summary = "주문 전체 조회 API", description = "주문 전체 목록을 조회한다.") @GetMapping public ResponseEntity>> getOrders( CommonPageRequest request, @RequestHeader("X-User-Id") Long userId, @RequestHeader("X-User-Role") String userRole ) {Header에서 받아온 userId 와 userRole 을 활용해 권한 관리 로직을 구현한다.💡User Role 을 통해 Contr..

Projects/HubEleven 2026.01.08

[리팩토링] 권한 별 기능 제한 로직 구현 (1) (업데이트 중..)

권한 관리💡상품 (Product) 도메인 권한 💡주문 (Order) 도메인 권한권한 로직💡Controller@PostMappingpublic ResponseEntity> createHub( @Valid @RequestBody HubCreateRequestDto request, @RequestHeader("X-User-Id") Long userId, @RequestHeader("X-User-Role") String userRole, @RequestHeader("X-Username") String userNameString) { if (!"MASTER".equalsIgnoreCase(userRole)) { throw new Global..

Projects/HubEleven 2026.01.07

[리팩토링] Swagger Request DTO 메서드 충돌 트러블슈팅

문제 상황💡 문제 상황 Spring Boot + springdoc-openapi 환경에서 API 문서를 Swagger UI로 확인하던 중, 서로 다른 Request DTO임에도 Swagger에서 하나의 Schema로 인식되는 문제가 발생했다. - ProductRequests.Createpublic class ProductRequests { public record Create( @NotBlank(message = "상품명은 필수 입력 항목입니다.") @Size(max = 150, message = "상품명은 150자 이하여야 합니다.") String name, @NotNull(message = "업체 ID는 필수 입력 항목입니다.") UUID companyId, @NotNull(mes..

Projects/HubEleven 2026.01.06

[동시성 처리] 테스트 코드 런타임 에러 발생 (업데이트 중..)

테스트 코드 런타임 에러동시성 처리 테스트 진행을 위해 재고 감소 로직 테스트 코드 작성 중 런타임 에러 발생💡런타임 에러 내용ConfigClientFailFastException: Could not locate PropertySource ... failingResourceAccessException: I/O error ... http://localhost:8888/... Connection refused테스트가 @SpringBootTest로 ApplicationContext를 띄우는 순간 Spring Cloud Config Client가 설정을 가져오려고 http://localhost:8888/product-service/default 로 GET 요청을 보냄그런데 localhost:8888(Confi..

Projects/HubEleven 2026.01.05

[동시성 처리] 재고 감소 통합 테스트 코드 3 - Test Fixture

Test Fixture 활용Test Fixture를 사용하지 않고 UUID를 매번 랜덤으로 생성하면, 테스트 실행마다 서로 다른 데이터가 만들어져 동일한 테스트라도 결과를 재현하기 어려워진다.이는 테스트 실패 시 원인 분석을 어렵게 만들고, 테스트 신뢰도를 떨어뜨린다.Test Fixture를 통해 고정된 UUID를 사용하면, 테스트 데이터가 항상 동일한 상태로 구성되어 테스트 실패 시 원인을 명확히 추적할 수 있고 안정적인 테스트를 보장할 수 있다.StockServiceImplTest.java💡수정 전// 테스트 전 상품 재고 입력 @BeforeEach public void setUp() { // 테스트용 고정 ID 생성 (각 테스트마다 새로 생성) testProdu..

Projects/HubEleven 2026.01.01

[리팩토링] Stock 도메인 리팩토링 (2)

Stock Entity - restoreQuantity 메서드 수정💡수정 전public void restoreQuantity(int restoreQuantity) { validateRestoreQuantity(restoreQuantity); if (restoreQuantity > 0) { this.quantity += restoreQuantity; }}validateRestoreQuantity가 이미 restoreQuantity if (restoreQuantity > 0)는 절대 false가 될 수 없어서 중복💡리팩토링public void restoreQuantity(int restoreQuantity) { validateRestoreQuantity(restoreQu..

Projects/HubEleven 2025.12.27

[리팩토링] Stock 도메인 리팩토링 (1)

Stock Entity - quantity 필드 타입 변경 💡기존 quantity 필드@Column(name = "quantity", nullable = false)private Long quantity;Long 타입으로 선언한 이유int 나 Integer 보다 넓은 범위를 지원하고 null 값을 허용하는 Long 타입 사용request 값에서 quantity에 null이 들어오는 경우를 고려해 nullable 타입 활용💡수정한 quantity 필드@Column(name = "quantity", nullable = false)private int quantity;int 타입으로 변경한 이유기본형은 객체를 생성하지 않아 메모리 사용량 측면에서 효율적이다.null을 허용하지 않기 때문에 의미있는 수치가 ..

Projects/HubEleven 2025.12.18

[리팩토링] 서비스 코드 주석 제거, 메서드명 변경

서비스 코드 주석 제거서비스 코드에서 주석을 제거해야 하는 이유코드를 수정했는데, 주석을 수정하지 않은 경우 상충되는 내용이 서비스 장애까지 이어질 수 있다.기존 서비스 코드@Override@Transactional(readOnly = true)public StockResult getStockByProductId(UUID productId) { // 상품 존재 여부 확인 Product product = validateProductExists(productId); // 삭제된 상품인지 확인 if (product.isDeleted()) { throw new GlobalException(PRODUCT_DELETED); } // 재고 조회 Stock stock ..

Projects/HubEleven 2025.12.17