회고 38

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

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

회고 2022.06.03

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

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

회고 2022.05.25

20220519 TIL #Thymeleaf #dataList #Vue

검색 조건에 국적를 추가하기 위해, 1) DB에 저장된 Country 테이블을 조회해서 dataList로 선택할 수 있게 보여주기 2) 해당 국적으로 검색 시 해당되는 데이터 조회하도록 수정하기 를 해야했다. 처음에는 DB에 있는 country를 조회하는 api를 RestApi로 만들고, 뷰에서 axios로 데이터를 가져와서 보여주려고 했는데, 어차피 정적인 데이터이므로 아에 model attribute + thymeleaf로 뿌려도 될 것 같다는 얘기를 들었다. 해당 페이지를 랜더링할 때 같이 데이터가 나가도록 해당 컨트롤러에 만들어 놓은 서비스를 주입해서 data를 view와 함께 같이 내려주었다. 그리고 view에서 input이 아니라 dataList를 사용하여 자동완성되도록 하기로 했다. 다행히 ..

회고 2022.05.20

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

20220504 TIL #업무로 개발하기

오늘 프로젝트 회의를 하다가 팀장님이 해주신 말씀 중에 인상 깊었던 부분이 있었다. 내가 이해한 걸로 표현하면 "업무로 개발하기"이다. 클린코드로, 성능도 좋고, 구조도 깔끔하고, 유지보수도 쉬운 멋있는 코드를 작성해서 개발하면 너무너무 좋겠지만 단순히 취미로 개발을 하는 것이 아니라면 개발자는 결국 기한 안에 필요한 기능을 구현해야 한다. 요구사항을 기한 안에 끝내는 것과 더 좋은 코드를 작성하는 것, 이 사이에서 어떻게 하면 균형을 잘 잡을 수 있을까? 우선은 기한 안에 끝내야 겠지만, 좋은 개발자라면 그 기한 안에서도 더 좋은 코드를 작성하지 않을까?? 그리고 '기한'이라는 것이 적절한 동력을 줄 수 있다고 생각한다. 분명 기한을 정하지 않고 아무 계획도 없이 ~를 만들어보자! 라고 생각한다면 다른..

회고 2022.05.05

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

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

회고 2022.05.02