TDD가 정확히 무엇일까?
·
TDD
- test Driven Development프로덕션 코드보다 테스트 코드를 먼저 작성하여 테스트가 구현 과정을 주도하도록 하는 방법론  1단계 : Red //TDD 1단계 : RED @Test void test(){ //요구사항잉 반영된 test 구문 작성 assertThat(tatalPrice).isEqualTo(8500); } 2단계 : GREEN public int calculateTotalPrice() { return 8500; } 3단계 : REFACTOR//3단계 : 리팩토링 (여러번도 가능)public int calculateTotalPrice() { return beverages.stream() .mapToInt(Beverage::..
단위테스트(Unit test)
·
TDD
작은 코드 단위로 독립적으로 검증하는 테스트 (클래스 or 메서드)검증 속도가 빠르고, 안정적이다. 예시로 음료 여러 잔을 한번에 담는 기능을 단위테스트 해보자기능을 구현 할 때는 아직 드러나지 않은 요구 사항이 있는가 항상 고민해야한다 테스트 케이스 세분화하기1. 해피케이스 : 성공하는 케이스  cafeKiosk.add(americano,2); //해피케이스 assertThat(cafeKiosk.getBeverages().get(0)).isEqualTo(americano); assertThat(cafeKiosk.getBeverages().get(1)).isEqualTo(americano); 2. 예외케이스 : 실패하는 케이스 //예외 케이스assertThatThrownBy(()-> cafeK..
테스트는 왜 필요할까?
·
TDD
여기 기능을 가진 Production code가 있다. Production code는 계속해서 요구사항을 반영해서 기능을 확장해 나간다.만약 Production code를 사람이 계속 테스트 한다면?Production code 확장하는 만큼, 기존의 코드도 또 테스트 하게 되며, 커버 할 수 없는 영역 발생 하게된다.코드가 확장됨에 따라, 경험과 감에 의존하게 된다.시간이 오래걸리니 늦은 피드백을 받게 된다.유지보수가 어려워진다.결국 소프트웨어의 신뢰도가 하락하게 된다.   테스트 코드를 작성하지 않는다면? 변화가 생기는 매 순간마다 발생할 수 있는 모든 case를 고려해야 한다.변화가 생기는 매 순간마다 모든 팀원이 동일한 고민을 해야한다.빠르게 변화하는 소프트웨어 안정성을 보장할 수 없다. 아무렇게나..
[데이터베이스] Pagination 구현 SQL
·
Database
Pagination 의 경우 사용하는 DB에 따라 달라질 수 있다일반적으로 SQL에서 사용하는 방식은 LIMIT과 OFFSET을 사용하여 특정 범위의 레코드를 조회하는 것이다.각 페이지에 해당하는 데이터만을 가져와 효율적인 데이터 전송과 조회를 할 수 있습니다.MySQL을 기준으로 작성한 쿼리 예시SELECT * FROM UESRORDER BY created_date DESCLIMIT 10 OFFSET 0;LIMIT : 조회할 레코드 수를 지정OFFSET : 건너 뛸 레코드 수를 지정 OFFSET 0 은 첫번째 부터 시작Pagination의 한계점 과 고려사항큰 OFFSET 성능 문제 : 페이지 수가 증가할 수 록 성능 저하가 발생할 수 있습니다.인덱스 기반 Pagination 이나, 커서 기반 방식으로..
[데이터베이스] SQL 안티패턴
·
Database
SQL 안티패턴에 대해서 알아보자 전체 조회SELECT * FROM USERS -- 안티패턴SELECT ID, NAME, EMAIL FROM USERS -- 권장SELECT *는 불필요한 데이터 전송을 발생 시키고, 테이블 구조 변경 시 예기치 못한 오류가 발생할 수 있습니다. 필요한 컬럼만 명시적으로 지정해야합니다.문자열 연결로 동적 쿼리 생성-- 안티패턴name = request.getParameter("name")sql = "SELECT * FROM USER WHERE NAME = '"+name+"'"; --안티패턴-- 권장sql = "SELECT * FROM USER WHERE NAME = ?";pstmt = conn.prepareStatement(sql);pstmt.setString(1,name..