회고 38

20220722 TIL #리패키징 #전략패턴

계속 미루고 미루던 리패키징을 했다. 처음에 패키징 구조를 제대로 정하지 않고 시작하다 보니 패키지가 같은 뎁스에 계속 추가만 되고 있었다. 또 중간중간에 기획이 계속 바뀌다 보니 동일한 뎁스에 있어도 될 것 같은 패키지가 흩어져 있는 것도 있었다. 계층구조로 구분할 건 구분하고, 필요한 건 가까워질 수 있도록 수정하였다. 네이밍과 api 계층도 일부 수정했다. 당장 기능 구현해야되는 것도 있어서 다 수정하지는 못했지만, 크게 패키지 구조는 정리가 되서 틈틈히 더 수정하면 될 것 같다. 이와중에 main만 패키지 구조가 변경되고 test는 변경이 안되서...... 도와주는 플러그인이 있다고 하는데 왜 변경이 안됬을까?? 당연히 test도 변경이 됬다고 생각하고 확인을 안했는데 나중에 다시 살펴보니 하나도..

회고 2022.07.22

20220707 TIL #트랜젝션 에러 @Transactional

어제 퇴근 직전에 새로운 에러를 발견했다. 다행히 오늘 오전에 배포할 때 수정해서 같이 적용하면 될 것 같다고 하셔서, 야근은 하지 않아도 됬다. 데이터 업로드 중에 오류가 발생하면 롤백이 되어야 하는데 롤백이 되지 않고 생성된 데이터가 그냥 저장되는 문제였다. 이전에는 1) Exception 발생 지점 2) 히스토리 데이터 생성 순서였기 때문에 문제가 발생하지 않았는데(엄밀히 말해서 문제를 인지하지 못한 거라고 하는게 맞는 것 같다.) 로직이 수정되면서 1) 히스토리 데이터 생성 2) Exception 발생 지점 으로 순서가 변경되면서 exception 발생 시 롤백이 안되고 1)에서 생성된 데이터가 그대로 저장되었다. 이 모든 과정을 하나의 트랜젝션 단위로 묶었어야 했다. 또, 이 로직 중간에 del..

회고 2022.07.08

20220706 TIL #테스트코드 리펙토링 @DataJpaTest @SpringBootTest

프로젝트에서 추가되거나 변경된 기능이 많다보니 사용하지 않는 변수나 메소드, enum이 많아졌다. 아직 어떤 맥락인지 파악이 가능할 때 정리하는 게 좋을 것 같아서 틈틈히 수정하고 있다. 비즈니스 로직을 수정하다보면 테스트코드도 수정이 필요할 때가 있어서 같이 보게 되는데, 테스트코드에도 삭제하고 치워야 할 흔적들이 많이 남아있었다. 특히 테스트코드에서 TestBase 클래스를 만들어서 공통으로 사용하는 클래스를 주입하거나 설정들을 동일하게 사용하는 경우들이 있었는데, 계속 새로 추가되면서 비슷한 TestBase 클래스가 여러 개 생긴 것을 확인할 수 있었다. 현재 프로젝트에서 단위테스트와 통합테스트를 하고 있는데, 통합테스트의 경우에는 @DataJpaTest를 사용하는 경우도 있고, @SpringBoo..

회고 2022.07.08

20220703 TIL #불변 객체를 사용하는 이유

개발을 시작하고 코딩을 하면서, 이 책에서는 몇 번을 읽어도 이해가 안되던 설명이 우연히 다른 걸 공부하다가 '아, 이런 뜻이었구나' 할 때가 있다. 자바를 공부하면서 이해가 잘 안되는 용어 중 하나가 '불변 객체'를 사용하는 것이었다. 그런데 김영한님의 JPA 강의를 듣다가 왜 불변객체를 권장하는지 조금 이해하게 된 것 같다. 모두 다 정확하게 이해한 건 아니지만, 앞으로 공부하는데 실마리가 될 것 같아서 기록해둔다. primitive type과 달리 객체는 참조가 가능하다. 즉, 각각의 변수들이 같은 객체를 참조하고 있을 수 있다. 예를 들어, 새로운 Value a를 만들고, b가 a를 가리킨다면 둘은 같은 객체를 참조하게 된다. public static void main(String[] args) ..

회고 2022.07.05

20220630 TIL #객체에게 메시지를 보내자

넥스트스탭에서 과정을 수강하고 있는데, 최근에 굉장히 인상깊은 내용이 있었다. 객체를 가져와서 그 값을 처리하는게 아니라, 해당 객체에게 메시지를 보내라는 것이다. 예를 들어서, 이런 식으로 if문에 원하는 조건을 검증하기 위해 해당 객체의 값을 getter로 가져와서 비교하는 것이 아니라 for (int i = 0; i < QUANTITY_OF_BALL; i++) { if (Integer.parseInt(inputs[i]) == answer.getBalls().get(i)) { strikeCnt++; continue; } for (int j = 0; j < QUANTITY_OF_BALL; j++) { if (Integer.parseInt(inputs[i]) == answer.getBalls().get(..

회고 2022.07.01

20220627 TIL #테스트코드의 중요성

프로젝트를 하면서 최소한 서비스에서 단위테스트는 만들고 있지만, 이것만으로는 부족한 것 같아서 통합테스트도 추가하기로 했다. 특히 우리 프로젝트는 주요 로직들이 모두 특정조건에서 데이터베이스에서 데이터를 조회하거나, 업데이트를 하는 것이라서 Repository에 Fake 객체를 만들어서 특정 값을 리턴하는 방식으로 Repository를 분리한 단위테스트만으로는 한계가 있는 것 같다. 그래서 DB connection을 갖는 통합테스트를 통해 특정 데이터를 DB에 저장해서 테스트를 하기 위한 상황을 만들고, 해당 데이터를 조회하거나, 원하는 경우에 의도한 에러가 잘 나타나는지 확인하였다. 그리고 테스트가 끝나면 테스트를 위해 저장한 데이터들은 모두 롤백하였다. 이미 일부 파트는 운영을 하고 있는 프로젝트이고..

회고 2022.06.29

20220621-22 TIL #인터페이스 #동적 파라미터화 #일급컬렉션

을 읽기 시작했다. 책 자체가 굉장히 잘 쓰여져 느낌을 받았고, 편집도 좋다. 아마 최근에 관심 주제랑도 맞닿아 있어서 더 그런 것 같은데, 왜 람다를 사용해야 하는지에 대해 설득력 있게 느껴지고 있다. 특히 동적 파라미터화로 메서드를 전달할 수 있다는 점이 재미있다. 1. 인터페이스를 활용하면 메서드를 변수로 받을 수 있다. 예를 들어 List을 색깔로 필터할 수 있다. public static List filterApplesByColor(List inventory, Color color) { List result = new ArrayList(); for (Apple apple : inventory) { if(apple.getColor().equals(color)) { result.add(apple);..

회고 2022.06.22

20220609 TIL #스터디 시작!

고민만 하던 스터디를 드디어 시작했다. 우선 가볍게 6월에 4주동안 특별한 주제 없이 모각코를 진행하기로 했다. 항해를 하면서 혼자 코딩하는 것보다 다른 사람들과 함께 코딩하고 개발 이야기를 하는게 즐겁다는 것을 알게 되었고, 함께 항해를 했던 사람들과 지속적으로 교류를 하고 싶다는 목적도 있었다. 함께 스프링을 공부했던 백엔드 개발자 3분과 프론트 개발자 1분, 이렇게 총 5명이 스터디를 시작하게되었다. 처음에 인원을 최대 6명정도로 생각하고 있었고, 인원이 안모이면 항해 슬렉이나 다른 커뮤니티에 올리려고 했는데 항해 단톡방 몇개에서 인원이 다 모이게 되었다. 백엔드 개발자라고 하지만 다들 회사에서 프론트도 좀씩 해야하는 분들이고, 프론트 개발자 분도 node를 공부하고 계셔서 재밌다. 프론트/백이..

회고 2022.06.15

20220608 TIL #인터페이스와 service 구현체

오늘 신기하고 재밌는 코드를 보았다. 우리 프로젝트는 데이터 유형만 다르고 기능은 비슷한 그룹이 여러 개 있는데, 각각 인터페이스와 서비스를 만들다 보니 중복되는 코드가 많다. 그래서 이 중 한 기능을 인터페이스를 하나로 통합하고 각각 데이터 유형별로 구현체가 있는 형태로 바꾸었다. 이렇게 하면 해당 service를 주입받는 controller에 해당하는 구현체를 넣어주면 된다. @Service("exampleServiceType")과 같이 어노테이션을 통해 빈 이름을 설정하고 이 값으로 구현체를 받아올 수 있다. 비슷한 전략을 controller에서도 적용할 수 있다. 이런 방식으로 구현할 수 있다고 예시를 본 것을 참고해서, 간단하게 테스트 프로젝트를 만들어보았다. https://paran21.tis..

회고 2022.06.15

20220607 TIL #쉬기 공부하기 #테스트코드 #자바

모처럼 3일 연휴였다. 직전에 선거날로 하루쉬어서 되게 긴 연휴처럼 느껴질 줄 알았는데 전혀 아니었다. 일단 토요일부터 하루종일 너무너무 피곤했다. 아니 분명 정시에 퇴근하고 있는데 왜 이렇게 피곤한지 모르겠다. 운동을 시작했으니 좀 나아지려나...? 연휴니까 좀 놀고 싶기도 했고, 근데 한편으로는 연휴동안 밀린 공부를 좀 해야겠다고 생각했다. 근데 또 몸이 피곤하니까 잠도 좀 자고싶고?? 토일을 좀 쉬면서(사실 공부해야된다는 강박감이 살짝 생겼다ㅋㅋㅋ요새 대학원 시절이 생각나는 중ㅋㅋㅋ) 월요일에는 그래도 컨디션이 좀 좋아져서 책도 좀 보고 강의도 들었다. 우선, 를 보기 시작했다. 지금 프로젝트에서 단위 테스트 코드를 짜면서 실질적으로 공부가 좀 필요한 것 같아서 구입했다. 그래도 프로젝트하면서 간단..

회고 2022.06.08