지난 블로그 글 [Spring] ArgumentResolver로 검증 기능 통합하기 와 이어지는 주제입니다. [Spring] ArgumentResolver로 검증 기능 통합하기 우테코에서 진행한 스프링 장바구니 미션 중 Interceptor와 ArgumentResolver에 대해 알게되었고 이를 바로 코드에 적용해 보려 했다. 장바구니(Cart)의 기능들은 우선 1. 호출하는 유저가 시스템에 등록 notbusyperson.tistory.com 이전에 진행한 장바구니 미션에서 ArgumentResolver를 통해 여러 컨트롤러에서 공통으로 필요한 회원 확인 로직에 대한 중복 제거 작업을 진행했다. 그러던 중, ArgumentResolver에서 Service를 참조할지 dao를 참조할지, 아니면 둘 다 참조..
우테코에서 진행한 스프링 장바구니 미션 중 Interceptor와 ArgumentResolver에 대해 알게되었고 이를 바로 코드에 적용해 보려 했다. 장바구니(Cart)의 기능들은 우선 1. 호출하는 유저가 시스템에 등록된 사용자인지 확인 2. 해당 사용의 장바구니에 물건 추가/삭제 등의 과정을 거친다. 여기서 Interceptor를 적용하면 Controller에 진입하기 전에 인증 여부를 검증할 수 있다. -> 컨트롤러 메서드들에서 기본적으로 진행했던 중복 로직을 통합 가능하고, 약간이지만 오버헤드를 줄일 수 있다.(컨트롤러 로직 실행 전에 예외처리 할 수 있으니까) LogInInterceptor public class LoginInterceptor implements HandlerIntercepto..
웹 애플리케이션을 구현하는 우테코 미션 진행 중 전체 테스트 실행 시 특정 Dao 테스트에서 실패하는 경우가 발생했는데, 해당 테스트 코드와 실행 결과를 보면 다음과 같다. @Test @Transactional void findWinners() { gameLogDao.insert(3, "달리", 4); gameLogDao.insert(3, "디노", 4); gameLogDao.insert(3, "저문", 2); winnersDao.insert(3, "달리"); winnersDao.insert(3, "디노"); assertThat(winnersDao.find(3)) .isEqualTo(List.of(new Car(new Name("달리"), 4), new Car(new Name("디노"), 4))); } ..
체스 게임 미션을 진행 중에 노트북이 퍽 하더니 블루스크린을 띄웠다. 어느 정도 시간이 지나니 다행히 재시작되었지만 문제는 다른데 있었다. 체스 게임과 연동하여 사용하던 ChessBoard와 ChessGame, User 테이블이 보이지 않았다. 설마 하며 ChessBoard에 select 쿼리를 날려 보았더니 테이블이 존재하지 않는다는 에러가 출력된다. 쿼리를 통해서도 테이블이 존재하지 않음을 확인한 셈이다. 도커를 사용해 작업중이었기 때문에 재시작하는 과정에서 테이블이 삭제되었다고 생각했다. 테이블에 딱히 중요한 정보가 없었기 때문에 '아쉽지만 그냥 다시 만들면 되지'라는 생각으로 create table 쿼리를 실행했다. 이번엔 또 있단다. 이게 도대체 뭔소린가 하며 살짝 머리가 아파올 즈음에 두 에러..
List userNames = new ArrayList(); 자바로 프로그래밍을 하는 분들이라면 굉장히 흔하게 볼 수 있는 구문이다. '제네릭'이라는 용어를 들어본 적이 없더라도 다들 자연스럽게 위와 같은 형태로 String 리스트를 선언하는 방식을 사용하고 있을 텐데, 여기서 꺽쇠(, )는 무엇이고 어떤 역할을 하고 있는 걸까? 제네릭이란? 클래스나 메서드에서 사용할 내부 데이터 타입을 외부에서 지정하는 방법으로, 자바 5부터 추가되었다. 꺽쇠 안에 타입 매개변수를 위치시켜() 제네릭 타입을 선언하고, 해당 객체의 타입은 컴파일 타임에 지정한다는 특징이 있다. 타입 매개변수에는 보통 T, E, K, V 등의 시그니처를 사용하지만, 굳이 따르지 않아도 된다. 외부에서 지정하는 것이 뭔지, 컴파일 타임에 ..
2023년 2월 7일 오리엔테이션을 시작으로 우아한테크코스 5기 백엔드 교육을 받기 시작했다. 백엔드 교육은 잠실캠퍼스에서 진행하며 레벨 1과 2까지는 고정이라고 한다. 재수 생활 이후로 잠시 잊고 있었던 9호선 지옥철 여정을 당분간 계속하게 될 듯하다. 오리엔테이션에서 들은 얘기 중 가장 기억에 남는 부분은 우테코에 임하는 자세에 관한 이야기였다. 우테코에서 원하는 목표는 무엇인가? 각자 목표가 다를 것이고 그렇기 때문에 방법도 다를 것이다. 어쩌면 목적이 같다고 해도 해당 목적을 향한 방법이 다를 수도 있다. 이러한 상황에서 우리들은 어떻게 목적을 이루고 우테코는 어떻게 우리들을 서포트해 줄 것인가? 이제까지의 교육 또는 강의에서 내가 들어온 방식은 '물고기를 잡아주지 않는다, 그 대신 잡는 방법을 ..
1. 일급 컬렉션이란? 소트웍스 앤솔러지의 9가지 객체지향 생활체조 중 8번째 규칙으로 처음 언급된 단어이다. 규칙 8: 일급 컬렉션 사용 이 규칙의 적용은 간단하다. 컬렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다. 각 콜렉션은 그 자체로 포장돼 있으므로 이제 컬렉션과 관련된 동작은 근거지가 마련된 셈이다. 필터가 이 새 클래스의 일부가 됨을 알 수 있다. 필터는 또한 스스로 함수 객체가 될 수 있다. 또한 새 클래스는 두 그룹을 같이 묶는다든가 그룹의 각 원소에 규칙을 적용하는 등의 동작을 처리할 수 있다. 이는 인스턴스 변수에 대한 규칙의 확실한 확장이지만 그 자체를 위해서도 중요하다. 컬렉션은 실로 매우 유용한 원시 타입이다. 많은 동작이 있지만 후임 프로그래머나 유지보수 담당자에 ..
1. 단위 테스트란? 단위 테스트(Unit Test)는 앱의 작은 단위를 사용하여 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차이다. 여기서 모듈의 범위는 정해져 있지 않으며 보통 하나의 기능 또는 메서드를 의미한다. 예를 들어 앱에서 아이디 입력 기능을 만들었다면 해당 기능이 주어진 조건(4~10글자, 특수기호 미포함 등)을 충실히 만족하는지 검증하는 독립적인 테스트가 1개의 단위 테스트가 될 수 있다. 즉, 단위 테스트는 개발을 진행하며 구성하는 기능들이 각각 올바르게 동작하는지를 독립적으로 검증하는 것으로, '기능 A 실행 결과 == 내가 예상한 결과' 의 방식으로 테스트를 진행한다. 2. 단위 테스트의 필요성 단위 테스트의 가장 큰 특징은 기능 단위의 코드 조각을 독립적으로 테스트한다는..