이랜서, AI '씨름' 동작 분석 알고리즘 과기정통부 NIA 우수과제 선정

Spring Framework, 개발 시간을 단축하고 싶으면 ‘3가지’를 확인하세요.

프리랜서의 모든 것

비즈니스 팁, 23 Feb 2024

spring-framework


촉박한 프로젝트 마감시간, 잦은 코드 수정에 따른 사이드 이펙트, 복잡한 웹 개발 모델 등 프로젝트를 진행할 때 개발자를 힘들게 하는 요소들이 너무 많습니다.


정해진 시간 내에 개발을 마치기 위해  머리를 싸매며 업무를 진행하다 보면, 좀 더 효율인 방법은 없는지, 유지 보수할 때 사이드이펙트 없이 깔끔하게 코드를 개발할 수 있는 방법은 없는지를  고민하게 되는데요.


이럴 때, Spring Framework만 잘 활용해도 업무의 효율성을 높여 개발 시간을 단축시킬 수 있다는 것 알고 있으신가요? 현장에서 개발 업무로 고군분투하고 있는 개발자분들을 위해 현직 개발자가 업무 시간 단축을 위해 실무에서 활용하는 ‘Spring Framework 3가지’에 대해 알려드리겠습니다!




Spring Framework란?


java-spring


Spring Framework자바 기반의 오픈 소스 프레임워크로, 풍부한 기능을 활용하여 

거대한 프로그램을 개발하기 적합한 하나의 개발 툴인데요. 의존성 주입(Dependency Injection)과 관점 지향 프로그래밍(Aspect-Oriented Programming)을 포함한 다양한 기술을 바탕으로 유연한 코드를 작성할 수 있도록 도와주는 개발 도구입니다.


Spring Framework에는 다양한 기술이 있는데요. 개발자들의 업무 시간이 많이 소요되는 유지보수와 웹 개발, Test 시간 단축에 도움이 되는 Spring Framework 3가지를 알려드릴게요.


Spring Framework에 대해 이미 알고 있는 분이라면 이 글을 Skip하셔도 좋습니다. 하지만 Spring Framework를 활용한 개발 시간 단축 노하우를 알고싶은 분은 끝까지 주목해주세요!



  • 이 글을 읽는 것만으로도 개발 시간을 효과적으로 단축하는 방법을 알 수 있습니다.

  • 이 글을 끝까지 읽으면 유연하고 재사용성이 높은 코드를 작성 할 수 있습니다.

  • 이 글을 통해 가독성이 좋은 코드를 작성하는 방법을 알 수 있습니다.




Spring DI, 효율적인 유지보수가 가능합니다. 


spring-mvc


Spring DI란?


Spring DI는 Spring Framework의 핵심 중에 핵심 개념 기술로써 또 다른 표현으로는 의존성 주입(Dependency Injection), 줄여서 DI라고 부르는데요.


DI는 객체 지향 프로그래밍에서 객체 간의 결합도를 낮추기 위한 디자인 패턴 중 하나로 객체가 직접 필요로 하는 의존 객체를 생성하거나 제어하지 않고, 외부에서 생성된 의존 객체를 주입받아 사용하는 방식을 말합니다.


DI만 잘 활용해도 객체 간의 결합도가 낮아지고, 코드의 유연성과 재사용성이 높아지게 되어 코드 생성에 불필요한 시간을 줄일 수 있게 되는데요. 코드 작성 시 DI가 어떻게 활용되는지 예시 사례로 보여드리겠습니다.



Spring DI 이럴 때 활용합니다.


  • Spring DI  활용 안 한 코드


react-spring


위 코드에서는 Car 클래스가 직접 V8Engine 객체를 생성하고 있어 객체 간의 결합도가 높고 코드의 유연성을 떨어지는 코드가 됩니다. 만약 추후에 전기 자동차를 만들기로 결정한다면, Car 클래스를 수정해야 합니다. 수정하기 위해서는 새롭게 ElectricEngine 클래스를 만들고 Car 클래스 내부에서 V8Engine 객체를 생성하는 코드 전부를 ElectricEngine으로 수정해야 합니다. 


spring-aop


이러한 수정은 매우 번거로울 뿐만 아니라 휴먼 에러를 발생시킬 가능성을 높이기 때문에 개발자의 생산성을 떨어뜨리는 주범이 됩니다.



  • Spring DI 을 활용한 코드


spring-cloud-gateway


이 코드에서는 Spring의 @Component 애노테이션을 사용하여 V8Engine 클래스가 Spring의 컨테이너에서 빈(Bean)으로 등록될 것임을 알려주고 있습니다. 이것은 Spring이 해당 클래스의 인스턴스를 생성하고 필요에 따라 주입할 수 있게 됩니다.


Car 클래스는 엔진 객체를 필드로 가지고 있으며  @Autowired 애노테이션을 통해 Car 클래스의 생성자에 Engine 타입의 객체를 주입받습니다. 이것은 Spring이 Car 객체를 생성할 때 필요한 Engine 객체를 자동으로 찾아서 주입해 주는 것을 의미합니다. 따라서 Car 객체를 생성할 때마다 필요한 엔진 객체가 주입되어 사용이 가능합니다.


메인 클래스에서는 Spring 컨테이너를 생성하고, 이를 통해 Car 객체를 얻어와서 자동차 시동을 거는 과정을 보여주고 있습니다. 이때 Car 객체가 생성될 때 Engine 객체가 자동으로 주입되어서 사용됩니다. 


spring-docs


만약 추후에  V8 Engine 을 Electric Engine 으로 바꾼다고 한다면 기존의 V8 Engine 클래스를 삭제하고   ElectricEngine 클래스를 만들고 @Component 애노테이션을 붙이면 간단하게 수정할 수 있습니다.


이와 같이 DI만 잘 활용해도 코드의 유연성이 높아져 유지보수를 할때 주입하고자 하는 객체만 수정하면 되는 편리함이 생길 뿐만 아니라 코드의 재사용성 또한 좋아집니다.


때문에 주입 객체가 자주 변동이 된다 하더라도 여러 객체 클래스를 작성해 높고 상황에 따라 주입하는 객체에 @Component 애노테이션을 붙이기만 하면 언제든지 주입하는 객체를 바꿀 수 있어 개발자의 업무 효율에 많은 도움을 줍니다.  




Spring MVC를 잘 활용하면 웹 개발이 쉬워집니다. 


spring-documentation


Spring MVC란?


Spring MVC는 Spring Framework에서  제공하는 기능 중 하나로, Java 기반에서 웹 애플리케이션을 구축하기 위한 모델-뷰-컨트롤러(Model-View-Controller) 아키텍처를 구현한 프레임워크입니다. 


spring-io


위와 같이 분리된 MVC 모듈로 구성되어 있어, 각각의 컴포넌트가 특정 역할을 담당하게 됩니다. 모듈이 용도에 따라 분리가 되면서 각 부분은 독립적으로 개발, 테스트, 유지 보수 될 수 있게 되었는데요. 


이는 특정 애플리케이션 요구 사항이 변경되었을 때, 전체 아키텍처를 뜯어고치지 않고도 해당 부분만 수정하거나 확장할 수 있기에 그때 그때 변경되는 고객의 요구사항에 맞춰 유연하게 대체가 가능한 이점이 있습니다. 예시를 통해 spring  MVC에 대해  자세하게 보여드리겠습니다.



Spring MVC 이렇게 활용합니다.


  • Spring MVC 활용 안 한 코드


spring-webflux


위에 예시 코드는 MVC 모델이 나오기 전 주로 쓰던 웹 개발 기술인 서블릿 작성 코드인데요. 클라이언트의 요청을 처리하기 위한 doPost 메서드를 구현한 부분입니다. 메서드 내용을 보면 비즈니스 로직인 String greeting 부분과 뷰 처리 로직인 html 코드가 한페이지에 뒤엉켜 있는 예시 코드입니다. 


이로 인해 역할에 따른 분리가 안 되어 있어 코드의 복잡성을 증가시켜 개발자가 코드를 보고 해석하는데 시간이 오래 걸리며, 또한 html 코드의 경우 메서드마다 코드의 중복이 있어 과거의 웹개발자는 하드한 노동 강도를 자랑했습니다.



  • Spring MVC 활용 한 코드


spring-boot


뒤엉켜있던 비즈니스 & 프레젠테이션 로직이  Spring MVC를 사용하면 비즈니스 로직(@Controller 애노테이션이 있는 코드)과 뷰 로직(html 코드)을 명확히 분리됩니다. 명확하게 역할이 분리 됨에 따라 개발자가 한눈에 보기에도 어떤 역할을 하는 코드인지 코드 해석을 좀 더 수월하게 할 수 있습니다. 


위에 예시 코드 또한 컨트롤러가 반환하는 ‘greeting’ 을 view 리졸버에게 전달하고 view 이름과 매핑하는 ‘greeting.jsp’를 찾아 해석하여 클라이언트가 볼 수 있는 화면으로 제공해 줍니다.


이렇게 뷰가 구분이 되면서 비즈니스 로직에서는 비즈니스 로직만 집중해서 백단을 개발할 수 있고 뷰에서는 클라이언트의 UI/UX 사용성에 집중해 프론트단을 개발할 수 있어 과거보다 좀 더 효율적인 웹 개발을 할 수 있게 되었습니다.


예시 코드를 들어 설명드렸듯이 Spring MVC를 활용하면 하면 코드의 가독성이 높아져 코드의 해석을 쉽게 할 수 있어 A개발자가 개발을 하든 B 개발자가 개발을 하든 특정 개발자의 영향을 받지 않고 업무를 배분하고 협업할 수 있어 웹 개발자에게 spring MVC는 업무 처리 과정에 많은 변화를  주었습니다.


또한  모델-뷰-컨트롤러(Model-View-Controller)로 각각의 역할을 분리 함으로써 

각 컴포넌트는 독립적으로 동작하기 때문에, 한 부분에서 발생한 문제가 다른 부분으로 전파될 가능성이 줄어들어 유지보수 시 해당하는 특정 컴포넌트 부분만 코드를 보고 수정하면 되기 때문에 유지보수 측면에서도 좀 더 수월하게 업무를 할 수 있습니다.




Spring Test 잘 활용하면 개발 시간을 단축할 수 있습니다.


hot-springs


Spring Test란?


Spring Test는 Spring Framework에서 제공하는 테스팅 지원 모듈입니다. 과거에는 개발하는 프로그램 자체가 작은 규모가 많았고 서버를 돌려 수정된 코드가 잘 돌아가는지 테스트하는 경우가 대부분이었습니다. 


하지만 시간이 흘러 프로젝트의 규모가 커지면서 서버를 돌리는데 적게는 몇 분 많게는 몇십 분이상 걸리기 때문에 시간적인 부분이나 서버의 불안정성 등의 문제로 최대한 서버에 영향을 주지 않으면서 테스트를 할 수 있게끔 Spring Framework에서 Spring Test 기능을 제공하게 되었습니다.


이 모듈은 Spring 애플리케이션의 구성 요소를 효율적으로 테스트할 수 있도록 설계되어 Spring Test 모듈을 사용하면, 개발자는 Spring의 의존성 주입 기능을 활용하여 애플리케이션 컨텍스트를 쉽게 테스트 환경에 통합할 수 있으며, 실제 실행 환경과 유사한 조건에서 단위 테스트(Unit Test)나 통합 테스트(Integration Test)를 수행할 수 있습니다. 


이를 통해 서버의 부담을 주는 행위 없이도 비슷한 테스트 환경에서 테스트할 수 있으며 복잡한 수동 설정과 준비 작업 없이도 앞서 배운 Spring DI 와 간단한 애노테이션 설정으로

테스트 코드를 작성하여 테스트를 빠르게 진행할 수 있도록 해줍니다. 


이는 개발 시간을 단축할 수 있어 큰 프로젝트를 개발하는 개발자 라면 꼭 알아야 할 ‘칼퇴 치트키’ 같은 기능입니다. 예시를 통해 spring test에 대해  자세하게 알아보겠습니다.



Spring Test 이럴 때 활용합니다.


  • Spring Test를 활용 안 한 코드

(서비스와 리포지토리 인터페이스는 생략하고, 단위 테스트 코드만 작성한 예시 코드 입니다.)


spring-initializr


이 예제에서는 Mockito를 사용하여 UserRepository의 목 객체를 생성하고, UserService에 수동으로 주입합니다. 이 방법으로 UserService의 findUserById 메서드를 단위 테스트할 수 있습니다. 하지만, 이 접근 방식은 매 테스트마다 의존성을 수동으로 설정해야 하며, Spring 컨테이너의 기능을 전혀 활용하지 못하는 단점이 있습니다. 


테스트를 할 메서드가 한 두개 정도면 수동으로 객체를 설정하는 건 크게 불편하지 않으나, 

상황에 따라 주입 객체를 여러번 바꿔서 테스트를 해야 되는데, 개발하고 있는 프로젝트 규모가 크다면 테스트할 메서드만 여러 개가 될 테고 주입 객체에 따라 일일이 수동으로 설정한다면 같은 작업을 여러 번 반복하기 때문에 개발 시 많은 시간을 잡아먹게 됩니다.



  • Spring Test를 활용 한 코드


spring-security


Spring Test는 @ExtendWith(SpringExtension.class) 애노테이션을 사용하여 Spring의 테스트 컨텍스트를 초기화하고, @MockBean을 사용하여 Spring 컨테이너에 의해 관리되는 UserRepository의 목 객체를 생성하고, 이 객체는 Spring 컨테이너에 의해 UserService에 자동으로 주입됩니다. 


간단하게 @ExtendWith(SpringExtension.class) 애노테이션 설정으로 Spring의 의존성 주입, 트랜잭션 관리, 애플리케이션 컨텍스트 관리 등을 테스트에서 사용할 수 있습니다.


때문에 개발자의 입장에서는 애노테이션 설정 하나만으로 Spring의 의존성 주입 기능을 가져와 필요에 따라 여러 객체를 최소한의 수정으로 테스트가 가능하기 때문에 테스트 시간을 절약하여 더욱 중요한 개발에 집중할 수 있습니다.


또한 위에 예시 코드를 보면 @MockBean 애노테이션을 사용하는 부분이 나오는데 추가적인 설명을 덧붙이자면 자동으로 Mock 객체를 생성하고, 해당 Mock 객체를 Spring의 애플리케이션 컨텍스트에 빈으로 추가하여 필요에 따라 자유자재로 Mock 객체를 주입할 수 있습니다. 


이 Mock 객체를 통해서 외부 시스템이나 서비스에 대한 연동 없이 테스트를 진행할 수 있기 때문에 외부 서비스의 불안정성이나 변동성으로부터 독립적인 테스트 환경을 만들 수 있습니다.


개발자 입장에서는 외부의 연동 문제 없이 내가 개발한 코드만 검증할 수 있어 테스트 때 에러가 발생했다면 코드만 수정하면 되어 문제를 진단하고 해결하는 시간이 많이 줄어듭니다. 특히 외부 연동이 많은 대규모 프로젝트를 진행시 빠르게 문제 해결을 위하여 익혀야 되는 필수 기능 중 하나입니다.





개발 시간 단축에 좋은 

Spring Framework 3가지 잘 보셨나요?


위에 소개한 3가지 이외에 Spring은 수많은 기능이 있습니다. Spring에 대해서 제대로 알고 사용만 해도 빠르고 효율적으로 개발이 가능합니다. 대한민국 No.1 IT 인재 매칭 플랫폼 이랜서에서 알려드리는 Spring Framework 대표 3가지를 활용하고 개발 시간을 단축해보세요.




대한민국 No.1 IT 인재 매칭 플랫폼 이랜서


spring-batch


이랜서데이터를 바탕으로 기업의 프로젝트와 가장 적합한 IT 프리랜서를 매칭하는 매칭 플랫폼입니다. Java, React, Vue, 앵귤러, Next js, Nest js, Node js 등 개발 전문가부터 서비스 기획자, 웹/앱 기획자, PM, PO 등의 기획 전문가와 UX/UI 디자인, 웹/앱 디자인을 전문으로 다루는 웹/앱 디자이너, ERP, SAP, MES 등 전사적 자산관리 시스템 개발 지식을 갖춘 ERP 전문가까지 약 40만명의 IT 프리랜서를 보유하고 있습니다.




개발 프로젝트를 찾으시나요? 


24년의 데이터로 검증된 프로젝트를 매칭해드립니다!

이랜서에 회원가입하고 전문성과 성향에 딱 맞는 프로젝트를 매칭받으세요!



이랜서는 IT 전문가에게 딱 맞는 프로젝트를 매칭하기 위해 24년간 데이터를 쌓아왔습니다. 약 1.5억 개의 사용자 데이터350만 개의 프리랜서 평가 데이터를 활용하여, IT 전문가의 전문성과 성향에 딱 맞는 프로젝트를 매칭해 드립니다. 




이랜서에서 매칭하는 프로젝트는 다른 플랫폼과 다른가요? 


이랜서를 처음 사용하는 IT 프리랜서의 경우 타 플랫폼의 서비스와 어떤 점이 다른지 궁금해하시는 분들이 많습니다. 타 채용 플랫폼의 경우 프로젝트를 의뢰한 기업에게 요구사항만 맞으면 매칭을 진행하는 경우가 많습니다. 그래서 실제로 면접이나 채용 시 좋지 않은 결과를 보이며 불만족스러운 사례를 많이 남기고 있습니다. 



이랜서의 매칭 서비스는 다릅니다.


이랜서는 24년의 데이터를 바탕으로 전문성과 성향 

모두 검증된 프로젝트를 매칭해 드립니다.



이랜서의 서비스는 경력 기술서이력서만 열람한 기업에 매칭하는 일반적인 매칭 서비스와 다릅니다. 이랜서는 IT 전문가에게 딱 맞는 프로젝트를 매칭하기 위해 24년간 데이터를 쌓아왔습니다.


약 1.5억 개의 사용자 데이터와 350만 개의 프리랜서 평가 데이터를 활용하여, IT 전문가의 전문성과 성향에 딱 맞는 프로젝트를 매칭해 드립니다. 데이터로 검증된 프로젝트 매칭의 효과는 이랜서를 사용한 기업들의 재의뢰율로 확인할 수 있습니다. 




이랜서를 사용한 기업들의 프로젝트 재의뢰율 98%

24년의 데이터를 활용한 프리미엄 매칭 서비스, 이랜서는 결과로 보여드립니다.



start-spring-io



나보다 나를 더 잘아는 이랜서의 맞춤형 매칭 서비스

실력있는 프리랜서라면 이랜서를 자신있게 추천합니다! 


spring-cloud


이랜서를 사용하는 IT 프리랜서의 요구사항을 최대한 반영하기 위해 1:1로 매니저를 매칭하여 프로젝트 매칭을 진행합니다. 날짜, 근무지, 업무 조건 등 필요한 사항이 있다면 매니저에게 말씀해 주세요. 요구사항과 전문성에 가장 적합한 IT 프로젝트를 매칭해 드립니다.




실력있는 IT 전문가가 되고 싶으세요?

이랜서에 회원 가입 후 오토폴리오를 업데이트하세요!

전문성과 인성에 가장 적합한 프로젝트를 매칭해 드립니다!





최신 블로그