본문 바로가기

Programming

(208)
API 테스트 API 테스트 세팅 package com.example.projectorderservice; import io.restassured.RestAssured; import org.junit.jupiter.api.BeforeEach; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.server.LocalServerPort; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) publi..
테스트 코드 테스트 코드 예시 package org.example; import java.util.stream.Stream; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Asserti..
FactoryBean 사용 FactoryBean 사용 new 연산자로 생성할 수 없는 의존성을 어떻게 생성해 주입할때, 어댑터인 FactoryBean 인터페이스를 제공하여 사용한다. 정적 팩터리 클래스로 접근해야 하는 객체처럼 new 연산자로 생성할수 없는 객체를 생성할때는 일반적으로 FactoryBean을 사용한다. FactoryBean은 다른 빈을 생성하는 팩터리 역할을 담당 FactoryBean은 일반적인 빈과 마찬가지로 ApplicationContext에서 구성되지만 스프링이 FactoryBean 인터페이스를 사용해 의존성 요청이나 검색 요청에 응답할때는 일반적인 빈과 달리 FactoryBean 인스턴스를 반환하지 않는다. 대신 스프링이 FactoryBean.getObject() 메서드를 호출해 반환받는 결과를 반환한다. ..
빈 라이프 사이클 관리 빈 라이플 사이클 관리 스프링을 포함한 IoC 컨테이너가 제공하는 주요 기능 중 하나는 생성이나 소멸 같은 빈 라이프사이클의 특정 시점에 통지를 받을 수 있게 빈을 생성하는 것이다. 빈이 라이프 사이클 이벤트 통지를 받을 수 있게 설정하면 빈은 이벤트 발생 시점에 관련 처리를 할수 있다. 초기화 이후(post-initialization)와 소멸이전(pre-destruction) 이벤트 3가지 방법으로 인터페이스기반, 메서드 기반, 애너테이션 기반 인터페이스 기반은 콜백을 사용해 해당빈을 통지 메서드 기반은 빈이 초기화될때, 소멸될때 호출할 메서드 이름을 ApplicationContext 구성에 지정 애너테이션 기반은 빈을 초기화한 후나 소멸 전에 호출해야 할 메서드를 JSR-250에 정의된 애너테이션으로..
디자인 패턴의 아름다움 #코드 설계 디자인 패턴의 아름다움 코드 설계를 배우는 이유 코드 설계에 대한 지식은 확장성과 가독성이 높아 유지보수가 용이한 고품질의 코드를 작성할때 필요하다. 고품질의 코드 작성 먼저 코드 설계에 대한 이론적인 지식을 갖춰야 한다. 복잡한 코드 개발 다루기 소프트웨어를 개발할때 만나는 어려움 2가지 매우 높은 수준의 기술이 필요한 경우 (자율주행, 비디오 인식, 높은 성능 등) 높은 수준의 기술이나 최신의 기술이 필요하지는 않지만 복잡한 비즈니스를 갖춘 대규모의 프로젝트 (물류, 금융, ERP 시스템등 개발에 많은 사람이 참여하는 경우) 대부분의 소프트웨어 엔지니어는 프로그래밍 언어, 개발도구, 그리고 개발 프레임워크에 익숙하며 프레임워크를 사용하여 비즈니스 요구사항에 따라 코드를 채우는 것이 일반적인 업무 비즈..
파이브 라인스 오브 코드 높은 품질의 코드가 유지관리 비용을 절감하고, 오류를 줄이고, 개발자의 만족도를 향산 시킨다. 높은 품질의 코드를 얻는 방법이 리팩터링 스킬 어떤 코드가 잘못됐으며 리팩터링이 필요한지를 파악하는 스킬이 필요하다. 숙련된 프로그래머는 코드 스멜에 대한 지식을 가지고 이를 알아낼 수 있다. 그러나 코드 스멜은(판단과 경험이 필요해서) 경계가 모호하거나 다양하게 해석될수 있으므로 배우기가 쉽지 않다. 그러한 이유로 주니어 개발자들은 코드 스멜을 스킬이라기보다는 육감 같은 것으로 이해한다. (코드스멜에 대한 지식) 문화 리팩터링에 시간을 들이는 것을 권장하는 문화와 절차가 필요하다. 많은 경우 이것은 테스트 주도 개발에서 많이 사용되는 레드-그린-리팩터 순환절차로 구현된다. 그러나 테스트 주도 개발은 매우 어려..
개발자 글쓰기 개발자 글쓰기 요약 기획자나 관리자의 글쓰기에 논리력, 설득력, 실행력이 중요하다. 개발자의 글쓰기에는 정확성, 간결성, 가독성이 중요하다. 정확성 - 틀림없이 확실한 것을 말한다. 글로 쓰인 대로만 개발하면 버그없이 실행돼야 한다. 간결성 - 글에 군더더기가 없고 간단하고 깔끔한 것을 말한다. 구구절절 설명하는 것이 아니라 핵심만 써야 한다. 가독성 - 쉽게 읽히는 것을 말한다. 쉬운용어를 사용하고 필요한다면 표나 그림으로 잘 정리해야 한다. 문단과 문서 전체에 체계와 위계가 잘 갖추어져야 한다. 트레이드오프 정확성을 높이면 간결성과 가독성이 낮아진다. 간결성이 높이면 정확성과 가독성이 낮아진다. 가독성이 높이면 간결성과 정확성이 낮아진다. 문장과 단락을 구조화하는 법 문장을 구조화하는 법 예문) "색..
애플리케이션 설정 웹 애플리케이션 설정 웹 애플리케이션을 설정하는 방법은 크게 3가지로 분류 스프링 웹 프레임워크에서 제공하는 확장 인터페이스를 사용하여 필요한 기능을 추가하거나 교체하는 방법 WebMvcConfigurer 인터페이스에 제공하는 콜백메서드를 개발자가 설정할 부분만 구현하는 것이다. 애플리케이션을 실행하면 개발자가 구현한 메서드가 실행되고 설정된다. 스프링 프레임워크에 기본 설정으로 만들어진 스프링 빈을 재설정하는 방법 @Primary 사용하여 스프링 빈을 덮어 정의한다. 스프링 웹 MVC 프레임워크에서 미리 정의한 스프링 빈 이름과 타입으로 사용자가 생성하는 방법 애플리케이션을 실행하면 스프링 프레임워크는 미리 정의된 이름의 스프링 빈이 있는지 확인하고 있으면 로딩한다. DispatcherServlet은 ..