JAVA/요점정리15 클린 아키텍쳐(clean architecture)란? 책을 읽고나서 클린 아키텍쳐 건물을 만들기 전 제대로된 청사진을 만든 후 그것을 보며 만들게 되면 더 튼튼한 건물을 만들 수 있습니다. 소프트웨어도 마찬가지입니다. 클린 아키텍쳐를 설계하면 소프트웨어의 지속적인 관리, 유지보수를 하는데 엄청난 효과를 볼 수 있습니다. 초반에 한 회사에 대한 이야기가 나옵니다. 회사는 성공적으로 애플리케이션을 만듭니다. 그리고 애플리케이션을 유지보수하고 새로운 기능을 추가합니다. 그 과정에서 직원 수는 계속해서 늘어나지만 새로운 기능의 개발속도는 점점 줄어듭니다. 막바지에는 거의 개발을 하지 못하는 지경에 이르게 됩니다. 원인은 바로 클린 아키텍쳐 설계를 잘못했기 때문입니다. 빈약한 아키텍쳐는 지저분한 코드를 만들게 되고 이는 새로운 코드를 추가하거나 기존의 코드를 수정할 때 다양한 문.. 2024. 7. 2. 자바 스프링부트 테스트코드 작성 JUnit5 그리고 Mock 테스트 코드의 중요성 개발자의 길을 어느덧 3년 걸었지만 테스트 코드의 중요성을 깨닫지 못하고 있었습니다. 웹 프로젝트 여러개를 맡으며 개발이 끝나고 테스트 기간이 되면 단위 테스트를 진행하였는데 직접 버튼을 누르고 로그와 DB를 눈으로 확인하였습니다. 물론 이 방법이 가장 직관적이고 확실한 테스트 방법일 수 있습니다. 하지만 규모가 작은 프로젝트라도 테스트 케이스가 100개가 넘어가는 경우가 비일비재한데 수작업으로 진행하다보니 제대로 확인하지 못하는 경우가 많았습니다. 실제로 회사에 있을때 프로젝트의 완성도에 관한 이야기는 끊임없이 나오곤 했습니다. 저 또한 이 테스트에 대해 많은 고초를 겪었습니다. 내가 더 꼼꼼하게 확인해보면 되겠지, 하며 해봐도 예상치 못한 곳에서 오류가 터졌습니다. 물론 제 부.. 2024. 6. 18. 스프링 부트 초기세팅(Spring initializer, gradle kotlin, MariaDB, IntelliJ, Java17) 시작 토이 프로젝트를 만들어 보려고 합니다. 회사에서 주구장창 쓰던 1.8에서 벗어나 최신버전인 17을 사용하려고 합니다. 그 뿐만 아니라 최대한 안쓰던 기술 스택을 사용하여 구성합니다. 큰 틀인 스프링 부트, 마리아 db에서는 벗어나지 않으나 jsp 대신 리액트를 사용하려고 합니다. 이번 포스팅은 해당 프로젝트 중 스프링 부트를 구성하는데 필요한 세팅을 차례차례 알아보려고 합니다. 구성IntelliJSpring Boot 3.2.5MariaDB(tool : Sequel Ace)JPA, HibernateJava 17GitSourceTree준비tool을 먼저 설치합니다. 기본 환경은 맥입니다. 저는 홈브류(Homebrew)를 이용했습니다. CLI명령어로 프로그램을 간편하게 설치할 수 있어 애용합니다. 홈브류.. 2024. 6. 14. 클린코드(clean code)를 읽고 요점 정리 및 코딩의 방향성 잡기 시작 클린 코드. 말그대로 깔끔한 코드를 작성하기 위해 개발자가 알아야 할 사항들을 집필한 교과서 같은 책이었습니다. 다만 우리나라 저자가 아닌 점, 최초 발행일이 2008년인 점을 감안하여 맹목적으로 따르는 것이 아닌 옳은 방향을 잡는 나침반과 같은 용도로 삼아야겠다 생각했습니다. 회고 클린 코드의 옮긴이는 서문에서부터 시간에 쫓겨 나쁜 코드를 작성한 자신을 후회한다고 반성하였습니다. 1회독을 한 저도 그와 같이 반성을 하게 되었습니다. 이 책은 그런 책입니다. 개발에 대한 꿈을 가지고 공부한 뒤 입사를 하였지만 시간이 흐르며 일정에 치이고 현실과 타협한다는 자기합리화로 편한 길을 찾느라 망가진 코드에 대해 생각하게 만듭니다. 비슷해 보이는 기능을 찾아 제대로 검토하지 않고 복사 붙혀넣기를 하고 그저.. 2024. 6. 12. 스프링 부트 DI - 필드 주입과 생성자 주입의 초기화 시점 DI(의존성 주입)의존성 주입이란 객체가 스프링 빈에 등록된 다른 객체를 필요로 할 경우 해당하는 객체를 가져오는(주입해주는) 행위이다.전통적인 자바에서는 스스로 객체를 생성하거나 찾지만 스프링 부트에서는 이 과정을 외부에서 처리한다. (SOLID원칙을 지켜 객체 간 결합도를 낮추고 코드의 유연성을 증가함.)의존성 주입의 유형생성자 주입수정자(setter) 주입필드 주입일반 메소드 주입포스팅을 하게 된 배경과거 실무에서 저는 이 필드 주입만을 사용하여 DI를 진행했습니다. 그러나 김영한 선생님의 강의를 들으며 이 필드 주입은 그다지 권장하지 않는 방법이다, 라는 것을 배웠습니다.why?-> 필드 주입을 할 경우 객체가 생성되고 난 뒤에 의존성 주입이 일어나기 때문에 객체가 가변적이게 됩니다.-> 이는 다.. 2024. 6. 12. 스프링 부트 유효성 검증 예외처리하는 방법(jakarta validation) 시작SI 회사에 재직할때부터 유효성 검증하는 방법은 꽤 자주 바뀌었다. 자바 jsp를 주로 사용해서 그냥 jsp에서 모두 처리를 하고 백엔드에서 처리해야할 로직이 있을 경우에만 service단에서 처리하기도 했다. 나중에는 컨트롤러와 jsp에서 더블체킹하기도 했고 dto의 어노테이션을 사용하여 컨트롤러에서 BindResult 객체를 사용하여 처리를 하기도 했다.사이드 프로젝트를 진행하며 이에 대해 고민하다 나름대로 길을 정하여 그 과정을 포스팅해보고자 한다.Service 처리재직 초반에 사용했던 방법이다. 로그인 API를 예로 들자면, 아이디나 패스워드가 공백은 아닌지, 패스워드 정규식을 만족하는지 등의 체크사항들이 있을 것이다. 그중 프론트엔드에서 처리 가능한 로직은 jsp단에서 전부 체크한다.if(x.. 2024. 6. 12. 이전 1 2 3 다음