Til 29

20220920-21 TIL #비즈니스 로직은 분리 #레이어를 나누자 #Repository pattern

이번주 초까지 급하게 끝내야 하는 일정이 있어서 코드리뷰를 못하다가, 약간 시간이 생긴 오늘 코드리뷰를 했다. 평소에도 궁금한건 물어보면서 진행했지만, 오늘 리뷰하면서 전체적으로 우리 앱의 아키텍처에 대해서도 다시 설명을 해주셨다. 마침 오늘 아침에 서버 연동 부분을 보면서 어떤 레이어 구조로 나눠져 있는지, 각각 어떤 역할을 하는지 다시 살펴보았고, 계속 업무를 하면서 처음보다는 이해가 된 부분도 있고 궁금해진 점도 있어서, 2시간 가까이 얘기하면서 많은 부분이 정리되었다. 최근에 가장 큰 고민은 비즈니스 로직을 어디에 구현해야하는지, 였다. 우리 패키지 구조에서 이미 ui와 feature는 구분을 하고 있고, 위젯을 만들면서도 계속 위젯에는 로직이 들어가지 않게 분리하려고 했다. ui와 비즈니스 로..

회고 2022.09.21

20220803 #Factory

휴가가 끝나고 돌아오니, 새로운 리펙토링이 있었다. 휴가를 가기 전에 전략패턴을 사용하면서 type에 맞는 구현체를 찾아올 때 어떤 방법이 좋을지 고민이 있었다. 컨트롤러에서 해당 구현체를 List로 주입하고 type을 비교하는 메서드를 하나 만들어서 해당 구현체를 넣어주었는데, 구현체를 찾기 위한 목적의 메서드를 하나 만든다는 것에서 좋은 방법은 아닌 것 같았다. 팩토리를 사용하자는 의견이 있었는데, 며칠 자리를 비운 사이에 리팩토링이 되어 있었다. 컨트롤러에서는 Factory에 있는 메서드를 사용하고, Factory에서는 switch문을 사용해서 type에 따라 알맞은 구현체의 해당 메서드가 실행되도록 하였다. Factory가 너무 지저분해지지 않을까, 하는 걱정도 있었는데 구현해놓고 보니 오히려 가..

회고 2022.08.07

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

20220602 TIL #어떻게 하면 더 좋은 코드를...?

우리 프로젝트의 주요 로직들은 구현이 완료되었고, 앞으로 추가되는 부분들도 이미 구현된 기능에서 크게 달라지지 않을 것 같다. 데이터의 종류만 바뀌고 기능은 정말 거의 비슷하다. 며칠 전부터 새로 추가되는 엔티티에 따라 기능을 구현하면서 소소하게 메소드명을 수정한다거나 하나의 메소드가 많은 일을 하지 않도록 더 분리하는 등 리펙토링 작업도 병행하고 있지만, 기본적으로 너무 중복되는 코드가 많은 것 같다. 나름 처음에 로직들을 구현하면서 팀원들이 코드 중복을 최소화하고 유지보수를 위해 여러 노력들을 했지만 그럼에도 변수 하나, 메소드를 구현하는 구현체가 달라서 새로 작성되는 클래스가 있다. 그렇기 때문에 만약 로직에 수정이 생긴다면 모든 곳에서 수정을 해주어야 하는 상황이다. 인터페이스, 상속 등등을 ..

회고 2022.06.03

20220525 TIL #서버에서 프론트까지 작업하기 #테스트코드 작성하기

현재 진행하는 프로젝트는 TDD는 아니지만 관심이 많은 맴버들이 참여하고 있고, 나도 프로젝트를 하면서 테스트코드가 있으면 리펙토링 하기 훨씬 쉽다는 걸 느꼈기 때문에 가급적 테스트코드를 짜려고 노력하고 있다. (일단 수정 후 테스트코드로 확인하면 된다는 마음의 안정이 생긴다!) 그런데 테스트코드를 짜는 것도 쉽지 않다. 어떤 목적에서, 어떤 것을 테스트할지도 고민이 많이 되고, 생각이 있어도 코드로 구현하는 것 자체가 어렵다. 그래도 팀 맴버 중에 관심이 많은 분이 있어서 그분 코드를 많이 참고 하고 있고, 서비스 단에서 간단하게 정말 기능만 정상적으로 작동하는지 확인하는 정도는 이제 작성할 수 있게 되었다. repository에 Mock 대신 Fake 객체를 사용하는 것도 재밌었다. Mock을 사용하..

회고 2022.05.25

20220518 TIL #에러코드 #Exception

어제 로그 작업하면서, 계속 에러는 결국 Enum으로 관리하는게 낫지 않을까 라고 생각했는데 오늘 마침 작업에 대해 논의하다가 이미 우리 회사의 다른 애플리케이션에서처럼 Enum으로 처리하는 것도 좋겠다는 얘기가 나왔다. 에러에 대한 response는 기존에 ApiModel을 사용하던게 있어서 여기에 필요한 변수를 추가해서 수정하였다. 그런데 에러가, 에러로 안 찍히고 200으로 나오는 문제가....! ResponseStatus도 변경을 해주어야 하는데, 이전에 내가 적용했던 것처럼 ResponseEntity에서 바꿔주는 수도 있고, 그냥 ExceptionHandler에서 해당 에러 처리 부분에 어노테이션으로 처리할 수도 있다.(@ResponseStatus(value = HttpStatus.~~) 에러코..

회고 2022.05.18

20220517 TIL #함수형 인터페이스 #log남기기

오늘 함수형 인터페이스, @Functional Interface에 대해 알게 되었다. 이 인터페이스의 특징은 추상메소드를 하나만 가진다는 것인데(default, static 제외), 정말 재미있어 보이는 점은 이런 예제가 있다는 점이다!!! https://tecoble.techcourse.co.kr/post/2021-11-21-functional-interface-with-lambda/ 함수형 인터페이스와 람다를 이용한 코드 중복 제거 … tecoble.techcourse.co.kr 코딩을 하면서 코드가 정말 비슷해서 리펙토링을 하고 싶은데 정말 애매하게 메서드만 다른 경우를 꽤 봤다. 이거는 어떻게 할 수 없을까, 하는 고민이 있었는데 함수형 인터페이스의 이런 점들을 활용하면 뭔가 코드를 더 깔끔하게 ..

회고 2022.05.17

20220516 TIL #for, stream, 어떤 방식으로 구현할 것인가

JPA 강의 듣기 자바의 정석 공부 소프트웨어 장인 읽는 중 요즘에는 항해 하면서 급하게 기능을 구현하느라 제대로 공부하지 못한 개념들(JPA, 자바 등등)을 정리하는 중인데 생각만큼 속도가 나가지 않는 것 같다. 아무래도 일을 시작하고 나니 조급함이 많이 생긴다. 빨리 팀에 도움이 되고 싶고, 일이 주어졌을 때 더 잘 해내고 싶다. 그래서 간단하게 라도 TIL을 쓰기 위해 노력해야겠다. 마음이 급해지니 짧게라도 오늘 한 것을 남기면서 리마인드하고, 페이스를 조절해야 겠다. 지난주에 작성한 코드 중에 Enum에서 선언한 String을 Enum으로 변환하는 코드가 있었다. 예를 들면, DEPOSIT("입금")에서 "입금"을 DEPOSIT으로 변환하는 것을 구현했다. 구글링 한 코드를 참고하여 for문으로..

회고 2022.05.16

20220502 TIL #첫출근! #JAVA 환경변수

첫 출근을 했다! 정말 들은 것 처럼 세팅하는데도 은근 시간이 오래걸렸다... 윈도우 데스크탑을 받아서 익숙한 환경이었는데도, JAVA 환경변수 설정한다고 한참 걸리고 여러 툴들 등등 설치해야 할게 많았다. 환경변수.. 계속 에러가 났는데 혹시 제대로 설정한 것 같은데도 cmd에서 java --version이나 javac가 제대로 동작하지 않는다면 환경변수>PASS에서 oracle 쪽 경로가 포함되어 있지 않은지 확인해봐야한다! 처음에 jdk가 아니라 jre를 설치하면서 pass에 경로가 추가되었고, 그 상태에서 jre를 지우고 jdk를 다시 설치해도 경로를 제대로 인식하지 못한 거였다. 그리고 당분간은 다시 볼 수 없을거라고 생각한 vscode를 설치하게 되었다...! 프론트 작업도 해야할 수도...?..

회고 2022.05.02