SPRING 9

[Spring] MVC, MVP, MVVM의 차이는 무엇일까?

Spring 프레임워크에서 주로 사용되는 MVC 구조는 익숙하지만, 프론트엔드나 모바일 개발 환경에서는 MVP, MVVM 구조도 자주 등장한다. 각 구조는 어떤 차이를 가지고 있고, 어떤 상황에서 각 구조를 사용하는걸까? 1. MVC (Model-View-Controller) 패턴애플리케이션의 구성요소를 Model, View, Controller 3가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있다. 구성 요소(1) 모델(Model)모델은 애플리케이션의 데이터인 데이터베이스, 상수, 변수 등을 뜻한다. 뷰에서 데이터를 생성하거나 수정하면 컨트롤러를 통해 모델을 생성하거나 갱신한다. (2) 뷰(View)뷰는 사용자에게 보여지는 인터페이스 요소, 화면을 뜻한다. 모델이 가지..

SPRING 2025.06.07

[Spring] Custom AutoConfiguration 만들어보기

AutoConfiguration이란?Spring Legacy와 Spring Boot의 가장 큰 차이점 중 하나는 설정 방식입니다.  기존의 Spring에서는 XML이나 Java Config를 통해 직접 모든 Bean을 등록해야 했지만,  Spring Boot는 AutoConfiguration을 통해 필요한 Bean을 상황에 맞게 자동으로 등록해줍니다.  Auto-configuration을 사용하고 싶다면 @EnableAutoConfiguration 또는 @SpringBootApplication 어노테이션을 @Configuration 클래스 중 하나에 추가하면 됩니다. 간단한 AutoConfiguration 만들기실제로 나만의 AutoConfiguration 클래스를 만들어보겠습니다. 한국말로 "안녕하세요..

SPRING 2025.04.10

[Spring] MSA(MicroService Architecture) 구현

왜 마이크로서비스를 구현하게 되었는가?기존에는 하나의 Spring Boot 프로젝트 안에 결제, 주문, 인증.인가 등의 기능을 모두 넣는 방식으로 개발을 해왔지만, 실제 서비스에서는 각 도메인을 독립적으로 분리해서 관리하는 방식이 더 일반적이다. 왜 단일 프로젝트가 아닌 마이크로서비스로 구성했는가?단일 모놀리식(Monolithic) 아키텍처는 개발 초기에는 구조가 간단하고 빠르게 구축할 수 있다는 장점이 있다. 하지만 기능이 많아질수록 다음과 같은 문제들이 생긴다:코드베이스가 커져 유지보수가 어려움빌드/배포 시 전체 시스템이 영향을 받음도메인마다 다른 팀이 협업하기 힘듦특정 기능 하나가 문제가 생기면 전체 서비스에 영향을 줄 수 있음반면 마이크로서비스 아키텍처는 각 기능(예: 결제, 주문, 인증.인가 등..

SPRING 2025.04.09

[Spring] JWT(JSON Web Token) 방식과 주의할 점

JWT 의 필요성과 등장 배경JWT는 클라이언트-서버 간의 인증 정보를 안전하고 간편하게 전달하기 위해 고안되었습니다. 특히, 서버가 상태를 관리하지 않는(stateless) 환경에서 확장성과 성능 면에서 큰 이점을 제공합니다. JWT(Json Web Token) 은 통신 정보를 JSON 형식을 사용하여 안전하게 전송하기 위해 사용됩니다. JWT는 토큰 자체에 정보가 포함되어 있는 클레임 기반 토큰입니다. 일반적인 애플리케이션에서 JWT는 주로 인증과 인가를 구현하기 위해 사용됩니다.  JWT의 구조JWT는 헤더, 페이로드, 시그니처로 구분됩니다. 헤더에는 토큰의 암호화 알고리즘이나 타입을 가지며, 페이로드에는 데이터(만료일, 사용자 정보 등)을 가집니다. 시그니처는 헤더와 페이로드가 변조되지 않았는지 ..

SPRING 2025.03.05

[Spring] Spring Boot Container란 무엇인가?

1. 컨테이너(Container)를 왜 사용하는가?객체 간의 의존성 문제 해결소프트웨어 개발에서 객체 간의 의존성은 필수적이다. 그러나 객체가 서로 강하게 결합되어 있으면 코드 변경 시 모든 연관된 코드가 수정되어야 하는 문제가 발생한다. Spring Boot의 컨테이너는 객체 간의 의존성을 주입해주는 역할을 하여 이런 문제를 해결한다.코드의 모듈화와 유지보수성 향상컨테이너는 객체 생성을 개발자가 직접 처리하지 않도록 하여 코드의 모듈화를 지원합니다. 이는 객체 간의 결합도를 낮추고, 유지보수성과 확장성을 향상시킨다.개발자 작업의 단순화컨테이너는 애플리케이션의 객체 생성과 의존성 주입, 생명주기 관리를 자동으로 처리한다. 개발자는 비즈니스 로직 구현에 집중할 수 있으며, 반복적인 작업에서 벗어날 수 있다..

SPRING 2024.12.26

[Spring] Maven vs Gradle

Maven과 Gradle은 Java 애플리케이션의 빌드와 의존성 관리를 위해 널리 사용되는 도구이다. 이 두 도구는 소프트웨어를 컴파일, 테스트, 패키징, 배포하는 데 필요한 프로세스를 자동화하여 개발 생산성을 높이는데 기여한다. Maven은 XML기반의 선언적 방식으로 설정을 정의하며, 전통적인 빌드 도구로 널리 사용되어 왔다. 그에 반해 Gradle은 선언적 방식과 프로그래밍적 방식을 혼합한 DSL(Domain-Specific Language)을 활용하며, 현대적인 빌드 요구사항에 맞춘 유연성과 속도를 제공한다.1. Maven과 Gradle의 주요 차이점기본 철학과 빌드 스크립트항목MavenGradle철학선언적 빌드. XML파일을 사용하여 의존성 선언선언적 + 프로그래밍적 빌드. Groovy 또는 K..

SPRING 2024.12.24

[Spring] Spring Boot AutoConfiguration(자동 설정)

Spring Boot AutoConfiguration은 개발자가 복잡한 설정을 간소화 하고 애플리케이션을 빠르게 구성할 수 있도록 설계된 기능이다. AutoConfiguration은 애플리케이션 실행 시 필요한 설정을 자동으로 적용해주며, 개발자가 비즈니스 로직에만 집중할 수 있게 해준다. 예를 들어, spring-boot-starter-data-jpa 의존성을 추가하면 DataSource 및 JPA 설정이 자동으로 구성된다. 웹 서버는 spring-boot-starter-web 의존성을 추가하면 내장 Tomcat과 Spring MVC가 자동으로 설정된다. 이는 Spring Framework에서 수작업으로 설정해야 했던 작업들을 간소화 해준다. 1. AutoConfiguration 동작 원리@Enable..

SPRING 2024.12.23

[Spring] Spring Boot 2 vs Spring Boot 3 차이가 무엇일까?

Spring Boot 2와 Spring Boot 3의 차이점을 알아보자. JDK VersionSpring Boot 3에서는 JDK 17미만의 버전을 지원하지 않습니다. JavaEE -> JakartaEESpring Boot 3는 모든 종속성을 위해 Java EE에서 Jakarta EE API로 마이그레이션 되었습니다. Jakarta EE는 엔터프라이즈 급 Java 기반 서버 사이드 애플리케이션을 개발하기 위한 표준을 의미합니다.javax.servlet.* -> jakarta.servlet.*javax.annotation.* -> jakarta.annotation.*javax.transaction.* -> jakarta.transaction.* - Java EE는 엔터프라이즈 애플리케이션 개발을 위한 Ja..

SPRING 2024.12.23

[Spring Boot] 스프링(Spring) vs 스프링 부트(Spring Boot)

1. Spring FrameworkSpring은 Java 애플리케이션 개발을 위한 오픈소스 프레임워크로, 좀 더 가벼운 애플리케이션 개발을 목적으로 설계되었다. Spring 프레임워크를 사용했을 때, 장점은 다음과 같다.유연성 : Spring은 여러 기술과 잘 통합되며, 다양한 아키텍처 패턴을 선택할 수 있다. XML, Java Config, 애노테이션 기반 설정을 모두 지원하여 개발자의 선호에 따라서 유연하게 선택가능하다.DI(Dependency Injection) : 객체 간의 의존성을 외부에서 관리하여 유연하고 테스트 가능한 코드를 작성할 수 있다.AOP(Aspect-Oriented Programming) : 로깅, 트랜잭션 관리 등 공통 관심사를 분리하여 코드의 가독성과 유지보수성을 높인다.다양한..

SPRING 2024.12.23