Spring 16

[Spring] 테스트 환경 통합

들어가며 요즘 테스트 코드의 중요성이 부각되며 테스트 코드들을 많이 작성하실 것 같습니다. 혹시 통합 테스트코드를 작성하기 위해 다음과 같이 작성하셨다면 오늘 글이 도움이 되길 바라며 적어봅니다. @SpringBootTest class MemberServiceTest { // test code .. } @SpringBootTest class PostServiceTest { // test code .. } Spring TestContext Framework Spring TestContext Framework는 Spring Application 테스트를 위한 핵심 기능들을 제공합니다. Context Management Dependency Injection of Test Fixtures Transaction ..

Spring 2024.03.09

[Spring] @Retryable, Event 적용기

들어가기 앞서 커플 기반 다이어리 프로젝트에서 커플의 활동 지표를 나타내는 사랑의 온도라는 기능이 존재합니다. 사랑의 온도는 해당 서비스를 사용할 때마다 특정 조건에 대해 온도를 높여주는 기능입니다. 사용자들의 서비스 참여도를 높이기 위해 해당 기능을 추가했었습니다. 리팩토링을 진행하며 @Retryable 그리고 ApplicationEventPublisher를 적용했던 일화에 대해 기록하고자 합니다. @Retryable 적용기 기존 코드 온도 증가 기능 사랑의 온도 기능의 경우 다이어리 작성, 오늘의 질문에 대한 답변 작성 시마다 온도가 1도씩 증가하도록 설계했습니다. 앱 사용량이 많은 커플의 경우 동시성 문제가 발생 할 수 있다고 판단을 했었고 이에 따라 optimistic lock을 적용해 온도 증가..

Spring 2023.12.04

Spring, 그리고 Test

개요 개인적으로 개발을 함에 있어 테스트 코드는 매우 중요하다고 생각합니다. 제가 테스트 코드를 중요하게 생각하는 이유는 다음과 같습니다. 개발자가 작성한 코드에 대한 검증 프로젝트가 작거나 클래스가 맡은 기능이 적은 경우에는 그 역할들이 정상적으로 돌아가는지 파악하기 쉽습니다. 하지만 프로젝트가 점점 커질수록, 단일 클래스의 역할이 늘어날 수록 그 역할들이 정상적으로 돌아가는지 파악하기 어렵습니다. 테스트 코드는 프로젝트의 규모에 상관없이 개발자가 작성한 코드가 개발자의 의도와 동일하게 흘러감을 보장할 수 있습니다. 협업 프로젝트의 경우 혼자 진행하는 경우는 드뭅니다. 다른 개발자와 팀을 이루어 개발을 진행하는데 다른 개발자가 작성한 코드에 대해서 어떠한 기능을 하는 지 테스트 코드를 통해 쉽게 파악할..

Spring 2023.10.11

Spring MVC - 요청과 관련된 사용법 정리

RequestMapping @RequestMapping("URL") Spring Controller를 사용할 때 특정 URL 경로에 대해 요청이 들어오는 경우 메서드가 실행할 수 있게 끔 매핑해 줍니다. /** * RequestMapping에 별다른 method를 지정하지 않는 경우 * 모든 HttpMethod 허용 * * 권장하지 않는 방식 */ @RequestMapping("/request-mapping") public String requestMapping() { log.info("requestMapping 실행"); return "ok"; } RequestMapping을 적용하고자 하는 메서드 위에 @RequestMapping 어노테이션을 기입해 주면 됩니다. 괄호 안의 "/request-mapp..

Spring 2023.07.06

Junit에서 TestInstance의 생명주기

Spring을 사용할 때 보통은 Junit을 사용해서 테스트를 실행하게 됩니다. 오늘은 테스트 코드 실행 시 어떠한 생명주기를 가지며 테스트를 실행하는지 알아보도록 하겠습니다. Test LifeCycle Of Junit @BeforeAll BeforeAll 어노테이션은 클래스에 정의된 모든 테스트를 시작하기 전에 실행하는 메서드입니다. BeforeAll 어노테이션이 붙은 메서드는 static 접근 제어자를 사용해야 합니다. @BeforeEach 각각의 테스트를 진행하기 전에 실행하는 메서드 입니다. BeforeEach 어노테이션이 붙은 메서드는 접근 제어자 static를 사용할 수 없습니다. @AfterEach 각각의 테스트가 끝난 후 실행하는 메서드입니다. Aftereach 어노테이션이 붙은 메서드는 ..

Spring 2023.07.03

NamedParameterJdbcTemplate

JdbcTemplate의 문제점 JdbcTemplate을 사용함으로 인해 개발자들은 코드에서 높게 일어나는 중복 현상들을 제거해 주어 개발자에게 많은 도움을 주었습니다. 하지만 JdbcTemplate에서 종종 일어나는 문제들이 있습니다. Jdbctemplate은 순서 기반으로 파라미터들을 할당해줍니다. 그렇기 때문에 순서가 쿼리와 맞지 않게 뒤바뀐다면 큰 문제가 발생합니다. String sql = "update customer set customer_name = ?, age = ?, phone_number = ? where id = ?"; jdbcTemplate.update(sql, updateParam.getCustomerName(), updateParam.getAge(), updateParam.get..

Spring 2023.07.01

JdbcTemplate 사용 방법에 대해서

JdbcTemplate 소개 직접 Jdbc을 사용하려는 경우 데이터 베이스와의 커넥션 연결 및 에러 났을 때에는 어떻게 할 것인지 등등... 개발자가 고려해야 하는 상황들이 많아지며, 추가적으로 비즈니스 로직 외적으로 구현해야 하는 코드의 양이 늘어나는 문제점이 존재합니다. JdbcTemplate을 사용하면 비즈니스 로직 외적인 부분을 관리해 줍니다. 직접 SQL구문을 작성하는 경우 JdbcTemplate은 좋은 선택지가 될 수 있습니다. JdbcTemplate의 장점 및 단점 장점 설정의 편리함 JdbcTemplate은 spring-jdbc라이브러리에 포함되어 있습니다. 스프링으로 JDBC를 사용하는 경우 기본으로 사용되는 라이브러리이며, 별도의 복잡한 설정 없이 사용할 수 있습니다. 반복 문제 해결 ..

Spring 2023.07.01

프론트 컨트롤러 패턴은 무엇인가요?

Definition of Wiki 위키피디아에서 설명하는 프론트 컨트롤러는 다음과 같습니다. Front Controller는 웹 애플리케이션 Workflow를 구현하는데 자주 사용되는 방식입니다. 꼭 필요한 것은 아니지만, 각 페이지에서 탐색 책임을 지는 것보다 Front Controller에서 페이지 탐색의 책임을 지는 것이 좋습니다. 그림으로 알아보는 Front Controller Front Controller 패턴 적용 전 다음 그림과 같이 클라이언트가 각각 다른 요청을 한다고 가정해보겠습니다. 각각의 요청에 대해서 공통되는 로직이 있을 것입니다. 로그인 여부 조회 권한 검증 화면 이동 그 외 필요한 검증 및 수행 기능 이러한 공통된 기능들을 각 Controller에서 매번 구현하는 것은 매우 귀찮..

Spring 2023.06.01

[스프링] 빈 생명주기 콜백에 관하여

애플리케이션이 시작되었을 때 초기화 작업, 종료되기 전에 종료 작업이 필요한 경우가 있습니다. 스프링 빈은 객체가 생성되고, 의존관계 주입이 끝나야 사용가능한 상태가 됩니다. 개발자들은 어떻게 그 시기를 알 수 있으며, 종료 전에 종료작업을 진행 할 수 있을까요? => 콜백메서드를 통해 초기화 작업 및 종료 작업을 진행할 수 있습니다. 스프링 빈의 생명주기 스프링 빈의 경우 두가지 등록 과정을 거칩니다. 스프링 빈 생성 의존관계 주입 두가지 등록 과정을 마쳤을 때, 사용가능한 상태가 됩니다. 이 때, 스프링이 초기화 콜백메서드를 호출해 줍니다. 또한 스프링은 스프링이 종료되기 전에 소멸전 콜백메서드를 호출해 줍니다. 빈 생명주기 콜백 방식 빈 생명주기 콜백 방식은 크게 3가지로 나뉩니다. 인터페이스 (I..

Spring 2023.05.25

Spring의 핵심 Concept는 무엇인가

들어가기에 앞서 Spring은 자바 언어 기반의 프레임워크입니다. 자바언어는 객체지향언어라는 주된 특징을 지니고 있습니다. 스프링은 객체지향언어가 가진 특징을 극대화시켜 주는 프레임워크입니다. 다시 말해 스프링은 좋은 객체지향 애플리케이션을 개발할 수 있도록 도와주는 프레임워크입니다. 좋은 객체지향이란 무엇인가? 해당 부분에 대해 간략하게 정리해 놓은 내용을 참고 부탁드립니다. 좋은 객체 지향 설계의 5가지 원칙 좋은 객체 지향 설계의 5가지 원칙 Robert Martin의 클린코드에서 좋은 객체 지향 설계의 원칙을 SOLID로 정의 하였다. S : SRP(Single Responsibility Principle) 단일 책임 원칙 O : OCP(Open/Closed Principle) 개방-폐쇄 원칙 L..

Spring 2023.05.23