카테고리 없음2025. 7. 25. 14:39[WIL] 2주차 (Software Design)

이번 주 목표요구사항을 설계로 옮기는 힘, 도메인을 해석하는 힘을 기른다. 이번 주에 학습한 키워드요구사항 정리 / 기능 명세시퀀스 다이어그램클래스 다이어그램ERD (Entity Relationship Diagram)도메인 모델 / 엔티티 / VO설계 문서화 배운 점이번 주차의 주제는 Software Design이었다.요구사항 정리 -> 시퀀스 다이어그램 -> 클래스 다이어그램 -> ERD 순서로 설계하는 과제가 제공되었다.이전에 프로젝트를 할 때, ERD는 그려본 적이 있었지만, 이렇게 다양한 기법들을 사용해 본 것은 처음이었다. 사실 귀찮은 작업이라고 생각했는데, 과제와 멘토링을 진행하면서 왜 이것들의 중요성을 강조하셨는지 알 수 있었다.이런 과정을 통해 우리는 요구사항을 좀 더 명확하고 뾰족하게 다..

좋아요 기능 설계 (POST/DELETE vs PUT)
카테고리 없음2025. 7. 25. 11:51좋아요 기능 설계 (POST/DELETE vs PUT)

이커머스 프로젝트에서 상품에 대한 좋아요 기능을 설계하던 중, 고민되는 지점이 있었다.좋아요 등록/취소는 어떻게 설계하는 게 좋을까? 두 가지 접근 방식1. POST / DELETE (분리)좋아요 등록과 해제를 별도의 API로 분리하는 방법이다.POST /api/v1/products/{productId}/like # 좋아요 등록DELETE /api/v1/products/{productId}/like # 좋아요 해제 2. PUT (통합)좋아요 상태를 하나의 API로 통합하는 방법이다.PUT /api/v1/products/{productId}/like # 좋아요 상태 설정{ "liked": true } # 좋아요 등록{ "liked": false ..

회고2025. 7. 18. 15:39[WIL] 1주차 (TDD & 테스트 가능한 구조)

이번 주 목표필요한 단위/통합/E2E 테스트를 적절하게 작성할 수 있다.테스트를 작성하는 습관을 들인다.이번 주에 학습한 키워드단위 테스트, 통합 테스트, E2E 테스트테스트 더블(Mock, Stub, Spy, Fake)테스트 가능한 코드 구조테스트 주도 개발 (TDD) 배운 점 테스트가 중요하다는 말은 정말 많이 들었지만, 테스트를 심도 있게 공부해 본 적은 없었다.이번 주에 많은 키워드를 학습하고 실습도 해봤는데, 내가 테스트에 대해 정말 몰랐구나 하는 생각이 들었다. 이전에 한 프로젝트에서 작성한 테스트코드를 보면, 단위 테스트와 통합 테스트도 구별을 못하고 있었다.과제를 하면서 단위 테스트, 통합 테스트, E2E 테스트가 무엇이고 어떻게 작성해야 하는지 배울 수 있었다. "테스트 더블" 이란 키워..

테스트2025. 7. 18. 13:16"X-USER-ID 헤더가 없을 경우" 한 줄 요구사항에서 배운 것들

포인트 시스템 API를 개발하고 있는데 다음과 같은 요구사항이 있었다. "X-USER-ID 헤더가 없을 경우, 400 Bad Request 응답을 반환한다." 처음에는 헤더를 안 보내는 경우를 테스트하면 되겠지?라는 생각으로 다음과 같은 테스트를 작성했다.//whenResponseEntity> response = testRestTemplate.exchange(ENDPOINT, HttpMethod.GET, null, responseType);//thenassertThat(response.getStatusCode()).isEqualTo(HttpStatus.BAD_REQUEST); 테스트는 통과했고 그냥 그렇게 다음과제를 진행했다. 과제를 어느정도 마치고 다시 테스트와 요구사항을 둘러보다가 의문이 들었다...

스프링 GlobalExceptionHandler
Spring2024. 6. 24. 16:35스프링 GlobalExceptionHandler

코드를 작성하다 보면 예외처리를 할 부분이 점점 많아진다.예외처리 코드는 굉장히 반복적이고 코드의 일관성과 가독성을 떨어뜨리며 유지보수를 어렵게 한다.분산되어 있는 예외처리를 한 곳에서 관리해서 이러한 문제를 해결할 수 있는 스프링의 GlobalExceptionHandler에 대해 알아보자. GlobalExceptionHandler스프링의 GlobalExceptionHandler는 애플리케이션 전역에서 발생하는 예외를 처리할 수 있는 기술이다.이를 통해, 각 컨트롤러에서 반복되는 예외처리 코드를 제거하고 중앙에서 일관된 예외처리를 구현할 수 있다.GlobalExceptionHandler를 구현하기 위해, @ControllerAdvice와 @ExceptionHandler 어노테이션을 사용한다. @Contr..

Spring Transaction 기술 사용법
Spring2024. 6. 11. 19:05Spring Transaction 기술 사용법

트랜잭션(Transaction)트랜잭션은 데이터베이스에 수행하는 작업의 단위이다.만약에 DB의 데이터를 수정하는 동안 예외가 발생하면 어떻게 해야 할까? 데이터들을 수정하기 전의 상태로 되돌려야 할 것이다.이렇게 문제가 생겼을 경우에 데이터를 원상태로 되돌리기 위해 사용하는 것이 트랜잭션이다. 트랜잭션의 마무리 작업으로는 크게 2가지가 있다.트랜잭션 커밋: 작업이 모두 성공적으로 완료트랜잭션 롤백: 작업을 취소하고 이전의 상태로 되돌림작업이 성공적으로 완료되었다면 커밋을 통해 작업 내용을 반영해야 하며, 문제가 생겼다면 작업 취소를 위해 롤백을 해주어야 한다.  트랜잭션의 4가지 특징 : ACID원자성(Atomicity): 트랜잭션은 DB에 모두 반영되거나 혹은 전혀 반영되지 않아야 한다.일관성(Cons..

image