본문 바로가기

전체 글373

테스트 격리: 인수 테스트에서 사용했던 방법 테스트 격리 현재 ATDD, 클린 코드 with Spring 8기에 참가해서, 미션을 진행 중이다. E2E(API) 테스트 기반의 인수 테스트를 작성해야 하기 때문에, '데이터베이스와의 격리를 어떠한 방법으로 할 것인가?' 를 고민을 해봐야 했다. 하지만, 나는 요구사항을 분석하고 인수 테스트를 작성하는 프로세스를 익히는 데만 급급한 나머지 비교적 간단한 @DirtiesContext 를 사용했다. 나도 테스트 실행속도가 너무 느려서 답답했는데, 리뷰어님께서 마지막 단계에서 아래와 같이 조언을 해주셨다. 따라서, 공부한 내용을 이번 기회에 제대로 정리해보고자 한다. 테스트 격리가 왜 필요할까? 우선, 격리가 왜 필요한지부터 생각해보자. 가령, 아래 두 테스트는 독립적으로 진행되어야 하고 테스트 간에 간섭이.. 2024. 2. 9.
약속합시다: 프로미스(Promise) Promise(프로미스) Promise란 무엇일까요? 비동기 작업을 수행하는 함수의 Return 타입이라고 볼 수 있습니다. 이에, 대표적으로 네트워크 요청을 만들고 응답을 처리하는데 사용하는 fetch 함수가 있습니다. 예를 들면, 아래와 같이 사용합니다. fetch('https://api.example.com/data') .then(response => { if (!response.ok) { // 네트워크 요청이 성공 throw new Error(`HTTP error! Status: ${response.status}`); } return response.json(); }) .then(data => { console.log(data); // 처리된 데이터를 사용 }) .catch(erro.. 2024. 1. 7.
IT 회사에 입사하기까지 지난날들을 되돌아보며: 개발자로서의 첫 회고 IT 회사에 입사하기까지 지난날들을 되돌아보며: 개발자로서의 첫 회고 현재 나는 좋은 회사에서 선배 개발자분들에게 열심히 질문하고, 열심히 일하고 있다. 개발자라는 직업을 선택했을 때, 취업을 하게 된다면 회고록을 반드시 작성해야겠다고 생각했다. 개발자로써 처음으로 작성해보는 회고록이다. 엄청나게 설렌다. 내가 개발자라는 직업을 선택하기까지... 나는 지금까지 총 3번에 직종변경을 했었다. 기계설계 기업컨설팅 IT 회사(현재 회사) 왜 나는 직종 변경을 했을까? 이유는 간단하다. 내가 뭘 잘하는지, 내가 중요하게 생각하는 직업 가치관이 무엇인지 깊게 생각하지 않았다. 그냥 흘러가는 대로, 생각 없이 살아왔다. 그렇다고, 나는 이러한 경험들이 나에게 부정적인 영향을 주었다고 생각할까? 아니다. 절대, 아니.. 2024. 1. 6.
항상 잘 확인해야하는 시간 개념과 좋은 코드 만들기 항상 잘 확인해야하는 시간 개념 최근 사내에서 시간과 관련된 이슈를 해결했었고, 앞으로도 자주 헷갈릴 수 있는 내용에 대해서 기록해보고자 합니다. 어떠한 이슈였나면... 현재 날짜로부터 지정된 개월 수 이전까지의 기간을 의미하는 [startDate, endDate] 형식의 배열을 반환하는 함수가 제대로 동작하지 않았습니다. 왜 제대로 동작하지 않았는지를 언급하기 전에, 함수에 대한 내용을 작성해보겠습니다. 시작날짜와 종료날짜를 반환하는 함수 함수의 입력값(매개변수)과 출력값(반환값)입니다. 입력값 지정된 개월 수(numberOfMonthsAgo) 출력값 [시작 날짜(startDate), 종료 날짜(endDate)] 코드로 직접 확인해보겠습니다. (보안상 사내 코드를 넣을 순 없으므로, 다른 코드로 대체하.. 2023. 12. 22.
Test Double 이란? Test Double 이란? 테스트를 목적으로 Real Object를 흉내내는 모든 대역 객체를 통틀어 Test Double이라고 합니다. 또한, 테스트 대역은 Dummy, Stub, Spy, Mock, Fake로 나눠집니다. Test Double의 필요성 테스트 하려는 객체가 여러 객체들 혹은 의존성(데이터베이스, 메일 등)으로 묶여있을 때, 테스트를 하기 위해서는 대역이 필요하게 됩니다. 테스트 수행 시 외부 의존성에 영향을 주면 안되는 경우 테스트 수행 시 외부 의존성의 응답을 원하는 응답으로 만들어야 하는 경우 Test Double의 종류 Dummy 실제 사용되지는(호출되지는) 않는 객체 주로 메서드 시그니처를 맞추기 위해 사용 public class DummyLogger implements Lo.. 2023. 11. 7.
Chat GPT 써봤어요? 나는 PG 관련 서비스를 운영 중인 회사에 지원했었고, 운이 좋게 이력서와 1차(기술) 면접에 통과되었다. 그래서 어제 2차(임원) 면접을 보고 왔는데, 대표님께서는 자기소개를 시킨 후 바로 Chat GPT에 대한 질문을 하셨다. 'Chat GPT 써봤어요?' 어떻게 대답을 했는지에 대해서 말하기 전, Chat GPT에 대한 나의 생각을 적어보고자 한다. Chat GPT는 나에게 많은 도움을…? 나는 최근 1인 프로젝트를 진행하면서 Chat GPT의 도움을 정말 많이 받았다. 그 도움은 아래와 같이 정리해볼 수 있다. 변수 명, 메서드 명, 클래스 명 추천 메서드의 주석(javadoc) 추천 테스트 코드 추천 UI/UX, script 코드 구현 등.. 정말 많은 도움을 받았지만, Chat GPT의 답을 .. 2023. 11. 3.
콘솔 기반 UI 테스트를 어떻게 해야할까? 콘솔 기반 UI 테스트를 하게 된 계기 이전까지 상태 값을 가지는 도메인 클래스를 구현할 때 TDD로 구현을 해서 깔끔하게 잘 해왔다고 생각한다. 다만, UI 로직에 대해서는 고민만 했을 뿐… '굳이..?' 라는 생각에 지금까지 제대로 된 테스트를 하지 않았다. 최근, 취업을 위해 사전과제를 진행했었다. 해당 과제는, csv 파일(key-value 형태)을 읽어서 사용자로부터 입력받은 key 값에 해당하는 value를 출력하는 내용이었다. 이 또한 상태 값을 가지는 도메인 클래스를 구현할 때는 비교적 깔끔하게 잘 해왔다고 생각하지만, UI 로직에 대해서는 수동적으로 테스트를 하고 제출했었다. 시간적 여유가 없어서, 제출했지만.. 근래 UI 로직에 대한 테스트를 못한 것에 대한 아쉬움이 남아서 '어떻게 테.. 2023. 10. 20.
좋은 코드(Good Code) 좋은 코드(Good Code)에 대해서 개발자 라는 직업을 선택하고나서, 매일 코드를 보고있고, 코드를 작성하고 있지만 단 한번도 좋은 코드에 대해서 진지하게 고민을 해본적이 없었다. 이번 기회를 통해서 스스로에게 물어보고 대답한 것을, 문서로 남기고자 한다. 내가 생각한 좋은 코드란 무엇일까? 읽기 쉬운 코드 역할과 책임이 명확하게 분리된 코드 테스트 가능한 코드 1. 읽기 쉬운 코드 나는 읽기 쉬운 코드를 만들기 위해서 몇가지 규칙을 가지고 있다. 명확한 변수 혹은 메서드 이름을 사용하기 줄 바꿈 활용하기 주석을 상세하기 적어놓기 어떤식으로 이를 적용했는지 코드로 살펴보자. 1-1. 명확한 변수 혹은 메서드 이름을 사용하기 아래 클래스는 커뮤니티 게시글을 나타내는 도메인 클래스다. public cla.. 2023. 9. 30.
Rate Limiting 인터셉터를 활용한 트래픽 관리 NOW 프로젝트를 진행하면서 기록한 글입니다. Rate Limit에 대해서 고민을 하게된 계기 현재 컨테이너 기반 PaaS 클라우드 서비스를 이용해서 배포 후 운영 중, 잠시 다음과 같은 생각을 하게되었는데요. 추후 실제 서비스를 시작하게 된다면? … 혹은 사용자가 점차 늘어난다면? 어떠한 플랜을 구독할까?.. 또 어떠한 플랜들이 있을까? 출처: https://www.cloudtype.io/pricing 현재 사용 중인 플랜은 디벨로퍼로, 매달 허용하는 트래픽을 10GB로 제한하고있는데, 현재 서비스에서 대략적으로 발생되는 트래픽량이 어느정도인지 가늠해보고자 했습니다. 메인 페이지 기준으로 디버깅을 해보았습니다. 초기 로딩 시 현재 프로젝트 구조가 SPA(Single Page Application) 이다.. 2023. 9. 11.