- Today
- Total
목록Framework/Spring Boot (20)
개발하는 고라니
specification] framework - spring boot 2.6.3 test - Junit 5 들어가며 이제 애플리케이션을 개발하는데 있어 테스트는 선택이 아닌 필수가 되었으며, 작성을 용이하게 해주는 라이브러리 또한 플랫폼에 따라 많이 나와있다. 그만큼 개발자에게 테스트는 비교적 저렴한 비용으로 나의 코드가 안전함을 보장하는 이점이 있다. 대표적인 서적으로 Unit Test이 있고, 살짝 보았으나 역시 어려워 이해하는데 어려움이 있었다. 어쩃든, 테스트는 크게 단위 테스트와 통합 테스트로 나뉘는데 일반적으로 code review를 요청하기 위해 Github에 PR(Pull Request)을 올리는데, 이때 기존에 작성된 테스트 코드들이 깨지는지, 빌드가 깨지는지 등을 pipeline으로 정..
specification] spring boot - 2.6.3 서론 API를 만들면 종종 Exception이 발생하기 마련이다. Client에서 요청을 했는데, 예외가 발생했을 때 구체적이고 명시적으로 어떤 에러, 무엇 때문에 발생했는지를 "message"에 담아서 보낸다. fun validateMoney(money: BigDecimal) { if (money < BigDecimal(0)) { throw MinusMoneyException("금액이 음수입니다. money : $money") } } 하지만, 그간 무심코 넘어갔지만 에러 메세지를 확인해보려니 다음과 같이 발생한 적이 있을 것이다. { "timestamp": "2023-02-27T08:43:33.081+00:00", "status": 500,..
[Spring Boot] Mono Repo, Multi Module (with. Gradle Kotlin DSL) Intro 개인 프로젝트 정도의 규모라면 하나의 프로젝트 안에 api, web, admin 등이 모두 들어가있어도 커버가 되지만, 규모가 커지면 각각 개별 프로젝트로 나누어야 관리가 될 정도가 된다. 그럼 나 dev-gorany.tistory.com 이전 글에서 프로젝트를 다중 모듈로 구성해보았다. Gradle을 사용하면 어렵지 않게 구현가능하다. 하지만 Gradle Kotlin DSL의 문법은 생소하기도 하고, 사용법이 미세하지만 달라서 낯설기 때문에 여러 삽질이 필요했다. 이번 글에서는 Querydsl을 적용해 api에서 QDomain class를 사용하는 것을 목표로 해보자. 목표 ap..
Intro 개인 프로젝트 정도의 규모라면 하나의 프로젝트 안에 api, web, admin 등이 모두 들어가있어도 커버가 되지만, 규모가 커지면 각각 개별 프로젝트로 나누어야 관리가 될 정도가 된다. 그럼 나눴다고 가정하자. 우리는 4개의 repository가 있다. api web admin-api admin-web 이때 admin에 어떤 기능을 추가해달라고 요청이 왔다. 그래서 admin-api, admin-web을 수정해서 PR(Pull Request)을 올렸다. 다음 요구사항은 새 프로모션이다. api, web, admin 모두 개발을 했고 PR을 올렸다. 하나의 이슈이지만 4번의 PR을 올렸다. 지금은 '이게 어때서?' 라고 생각할 수 있다. 조금 더 극단적으로 가정해서 주문과 정산, 회원이 다시..
Servicee 나 Repository에 대해 테스트 코드를 짜는 것은 조금은 익숙하나, Controller 레이어를 구성하고 테스트 하기 위해서는 Postman이나 Web UI 테스트를 진행해왔다. 이번에는 어플리케이션 수준에서 Controller 테스트를 하는 방법을 간단하게 알아보고자 한다. Environment - Junit 5 - Spring Boot 2.1.7 - JPA (Hibernate) Controller Test * Service, Repository, DTO 및 Entity에 대한 코드는 따로 명시하진 않는다. Controller에 대해 테스트를 하려면 Mock이라는 개념이 필요한데, 이에 대해서는 다음에 자세히 알아보도록 하고, 이번에는 어떻게 사용하는지만 알아보자. package ..
들어가기 앞서 STOMP + RabbitMQ Dependency Configuration DTO Controller RabbitMQ HTML Javascript Destination 마치며 [Spring Boot] WebSocket과 채팅 (3) - STOMP [Spring Boot] WebSocket과 채팅 (2) - SockJS [Spring Boot] WebSocket과 채팅 (1) 일전에 WebSocket(웹소켓)과 SockJS를 사용해 Spring 프레임워크 환경에서 간단한 하나의 채팅방을 구현해본 적이 있다. [Sprin.. dev-gorany.tistory.com 이전에 Websocket + SockJS + STOMP로 클라이언트간 채팅을 간단하게 구현을 해보았다. 먼저 왜 이를 썻는지에 대..
Java로 웹 개발을 접해보았다면 Servlet/JSP로 입문을 했을 가능성이 높고, Spring과 MyBatis, JSP로 그 다음을 접해보았을 것이라 기대된다. JSP는 Java Server Page의 약자로 그간 많이 사용되어왔고, 현재도 많이 쓰이는 뷰 엔진(View Engine)이다. 하지만 최근 스프링 부트로 넘어오면서 JSP 대신 Thymeleaf라는 비교적 새로운 뷰 템플릿 엔진이 등장하였고 많은 사람들이 이것을 사용한다. 물론 Thymeleaf말고도 Mustache, Groovy, FreeMarker ... 등 많은 뷰 엔진이 있다. 이번 포스팅에서 알아볼 Thymeleaf은 Spring Framework(특히 Spring MVC)에 통합시킬 수 있는 뷰 엔진이다. Thymeleaf or..
Java를 이용해 웹 개발을 한다면 Spring Boot를 높은 확률로 사용할 것이고, 데이터베이스와 연결하기 위해 MyBatis나 JPA를 많이 사용하는 추세이다. 만약 Spring Boot와 MyBatis를 사용할 경우 간단한 설정과 사용법을 보도록 하자 MyBatis 먼저 이를 사용하려면 라이브러리가 필요한데, Maven Repository에서 가져와 인젝션 해주자. 나는 MySQL을 사용할 것 이기에 mysql 라이브러리도 가져왔다. 그리고 jdbc는 필수로 있어야 한다. org.springframework.boot spring-boot-starter-jdbc mysql mysql-connector-java 8.0.24 org.mybatis.spring.boot mybatis-spring-boot..