전체 글 202

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

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

[JPA] No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call;

특정 조건에서는 delete 후에 save가 되는 로직이 있었는데, 다음의 에러가 발생했다. Resolved [org.springframework.dao.InvalidDataAccessApiUsageException: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call; nested exception is javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process '..

Error 2022.05.13