본문 바로가기

전체 글

(26)
DateTime 자동 저장 시 OS에 따른 Time Precision 문제 프로젝트를 진행하던 중 다른 팀원들의 컴퓨터에서는 RoadmapRepositoryTest의 테스트코드가 잘 돌아가지만 이상하게 내 컴퓨터에서만 테스트의 일부가 실패하는 일이 발생함. 추가적으로 실행시킬 때마다 실패하는 테스트가 다른 기이한 현상까지 발생. 내 컴퓨터만 Windows였고 다른 팀원들의 컴퓨터는 Mac이었기에 일단 운영체제에 따른 오류가 있는 것으로 일단 추측하고 일단 Jenkins를 통해 빌드하기로 결정했다. 하지만 이게 웬걸? Jenkins에서도 내 컴퓨터와 똑같은 부분에서 테스트가 실패해서 빌드가 안 됐다. 결국 문제 상황을 재현 가능한 환경이 내 컴퓨터뿐이었기에 하나하나 실험을 하며 원인을 찾아보았다. 실패하는 테스트의 특징 무한스크롤을 처리하는 로직이다. 무한스크롤 처리 시 data..
@DirtiesContext를 사용하지 않고 테스트 데이터베이스 초기화하기 수많은 통합 테스트들을 작성하다 보면 여러 테스트 메서드들마다 테스트 데이터베이스에 다양한 데이터들을 저장하게 된다. 테스트 메서드들마다 어떤 데이터들을 저장하고 삭제했는지 신경쓰면서 구현할 수도 있지만 어떤 테스트가 다른 테스트에 영향을 받는 것은 좋지 않고, 무엇보다 테스트간 순서가 보장이 안 돼서 오히려 더 어렵다. 그래서 간편하게 @DirtiestContext를 사용하여 다음과 같은 방식을 사용한다.@ActiveProfiles("test")@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM..
소프트웨어 개발 프로세스 “A process defines who is doing what, when, and how to reach a certain goal” (Ivar Jacobson, Grady Booch, and James Rumbaugh) 소프트웨어 개발 프로세스란 특정한 목표를 이루기 위해 무엇을, 언제, 어떻게 할 것인지 결정하는 과정을 말합니다. 프로덕트의 품질은 프로세스의 품질에 달려있다는 사실은 널리 받아들여지고 있습니다. “소프트웨어 프로세스”나 “소프트웨어 생명 주기”라고도 불립니다. 소프트웨어 개발 프로세스는 대체적으로 타당성 조사, 요구사항 분석, 설계 및 구현, 검증(테스트), 실행 및 유지보수 등으로 구성됩니다. 아래에서 다양한 소프트웨어 개발 프로세스를 살펴보겠습니다. 폭포수 모델 (Waterfa..
[우아한 테크코스] 레벨 2 - 쇼핑 주문(협업) 미션 회고 회고글은 굉장히 오랜만에 쓰네요 LEVEL 2동안 새로운 개념들을 허겁지겁 익히기만 하고 제대로 정리하지 못한 거 같아 불안한 감정이 듭니다 쇼핑 주문(협업) repository https://github.com/Ohjintaek/jwp-shopping-order GitHub - Ohjintaek/jwp-shopping-order Contribute to Ohjintaek/jwp-shopping-order development by creating an account on GitHub. github.com 🙄 무엇을 했지? 쇼핑 주문 우테코 LEVEL 2 두 번째 미션이었던 '쇼핑 장바구니'에서 주문 기능과 재화 관련 주문, 주문 목록 확인 기능을 추가하는 미션이다. 특히 재화 관련 기능은 백엔드 크루들..
REST와 RESTful API (2) 대규모 바이너리 리소스에 대한 부분 응답의 지원 리소스는 파일이나 이미지와 같은 큰 용량의 이진 필드를 가지고 있을 수 있다. 불안정한 연결로 인한 문제를 극복하고 응답 시간을 개선하려면 이러한 리소스를 chunk로 검색할 수 있도록 지원하는 것이 좋다. 이를 위해 API는 대규모 리소스에 대한 GET 요청에 대해 Accep-Ranges 헤더를 지원해야 한다. 이 헤더는 GET 작업이 부분 요청(partial requests)를 지원한다는 것을 나타낸다. 클라이언트는 바이트 범위로 지정된 리소스의 하위 집합을 반환하는 GET 요청을 보낼 수 있다. 또한 이러한 리소스에 대한 HTTP HEAD 요청 구현을 고려하자. HEAD 요청은 비어있는 body와 함께 리소스를 설명하는 HTTP 헤더만 반환한다는 점을..
REST와 RESTful API REST란? REST는 REpresentational State Transfer의 약자이며 분산 하이퍼미디어 시스템을 위한 아키텍처 스타일이다. 2000년에 로이 필딩(Roy Fielding)이 논문에서 처음 제시했다. 다른 아키텍처 스타일과 마찬가지로 REST에는 기본 원칙과 제약 조건이 있고 서비스 인터페이스를 RESTful로 참조하는 경우 이러한 원칙을 충족해야한다. REST의 기본 원칙 1. 통일된 인터페이스 구성 요소 인터페이스에 일반성의 원칙을 적용하여 전체 시스템 아키텍처를 단순화하고 상호 작용이 어떻게 이루어지는지 잘 볼 수 있도록 가시성을 향상시킬 수 있다. 다음 네 가지 제약 조건은 균일한 REST 인터페이스를 달성할 수 있다. Identification of resources (리소스..
[Spring 공식문서] Spring Core 1.5 😅 우선 글을 작성하기에 앞서 이 글은 스프링을 처음 공부하는 입장에서 Spring 공식 문서를 자의적으로 해석한 글이며 (번역기의 도움을 받아) 제게 필요하다고 생각되는 부분을 우선적으로 해석할 예정이라 중간중간 빈 부분이 있을 수 있으며 틀린 내용이 포함되었을 수 있습니다. 잘못된 부분이 있을 때 피드백 남겨주시면 능력껏 반영하도록 하겠습니다. 1.5. Bean Scopes 빈 정의를 만들 때, 빈 정의에 정의된 클래스의 실제 인스턴스를 생성하기 위한 레시피를 만듭니다. 빈 정의가 일종의 레시피라는 관점은 중요합니다. 그 뜻은, 클래스와 마찬가지로, 하나의 레시피로부터 많은 인스턴스를 생성할 수 있다는 의미이기 때문입니다. 당신은 특정한 빈 정의에 의해서 객체가 생성될 때 주입되는 다양한 의존성들과 ..
[Spring 공식문서] Spring Core 1.4 😅 우선 글을 작성하기에 앞서 이 글은 스프링을 처음 공부하는 입장에서 Spring 공식 문서를 자의적으로 해석한 글이며 (번역기의 도움을 받아) 제게 필요하다고 생각되는 부분을 우선적으로 해석할 예정이라 중간중간 빈 부분이 있을 수 있으며 틀린 내용이 포함되었을 수 있습니다. 잘못된 부분이 있을 때 피드백 남겨주시면 능력껏 반영하도록 하겠습니다. 1.4 Dependencies 일반적인 어플리케이션들은 하나의 객체(스프링에서의 빈)로 구성되어있지 않습니다. 간단한 프로그램이라도 몇몇 객체들이 서로 협력하여 사용자들에게 기능을 제공합니다. 해당 파트는 당신이 어떻게 독립되어 있는 수많은 빈들이 협력하도록 하여 원하는 기능을 제공할 수 있는지 설명합니다. 1.4.1 Dependency Injection (의..