프레임워크 VS 라이브러리
개발을 하다 보면 반복적인 작업과 비효율적인 코드로 인한 불편함이 발생한다.
이를 해결하기 위해 개발자들이 자주 사용하는 기능들을 묶은 도구들이 바로 프레임워크와 라이브러리다.
프레임워크
- 개발에 필요한 구조와 흐름을 제공하는 개발 틀
- 개발자는 이 틀에 맞춰 코드를 작성
- 장점: 일관성, 생산성, 보안 기능 제공, 테스트 환경 지원, 풍부한 커뮤니티와 문서
- 단점: 진입 장벽 높음, 버전 호환 이슈, 자유도 제한
라이브러리
- 필요한 클래스나 기능을 모아 놓은 코드의 집합 (도구 모음)
- 개발자가 원하는 시점에 필요한 기능을 선택적으로 호출 가능
- 장점: 생산성 향상, 검증된 품질
- 단점: 지원 중단 가능성, 버전 충돌, 호완성 문제, 기능 과잉, 어려운 내부 구현 수정
Spring Framework
Spring Framework는 복잡한 서버 성능, 안정성, 보안 문제를 대신 처리해 줘서, 개발자가 비즈니스 로직에만 집중할 수 있게 만든 자바 개발 환경이다.
Spring Framework의 특징
- 애플리케이션의 다양한 구성 요소를 유연하게 연결하고 관리할 수 있도록 해준다.
- 누구나 사용할 수 있는 오픈소스
- 모듈화되어 있어 필요한 기능만 선택적으로 사용 가능
- 자바의 객체 지향 개념(캡슐화, 상속, 추상화, 다형성)을 잘 살려낸 프레임워크이다.
Spring Boot
하지만, Spring Framework도 초기 설정과 구성 파일이 복잡하고 방대하다.
그리하여 Spring Framework를 더 간편하게 사용할 수 있도록 도와주는 스타터 도구인 Spring Boot가 개발되었다.
Spring Boot의 특징
- 자동 구성(Auto-configuration) 기능 제공 → 복잡한 설정 없이도 개발 가능
- 내장 WAS(Tomcat) 제공 → 별도 서버 설정 없이 애플리케이션 실행 가능
- spring-boot-starter-web만 추가해도 웹 앱에 필요한 종속성과 설정 자동 구성
- 라이브러리 버전을 명시하지 않아도 자동으로 호환 가능한 버전 적용 (⚠️ 단, 버전 문제를 100% 해결해 주는 건 아님)
Spring MVC
Spring MVC는 MVC 디자인 패턴을 기반으로 하는 Spring의 웹 애플리케이션 개발 프레임워크이다.

1) Model (모델)
- 데이터와 비즈니스 로직을 다룬다.
- 사용자의 정보(이름, 나이, 주소 등)를 저장하거나 데이터베이스에서 가져오는 작업을 담당한다.
2) View (뷰)
- 사용자가 보게 될 화면을 담당한다.
- 화면에 출력될 내용(HTML, 텍스트 등)을 만들고, 사용자에게 보여주는 작업을 담당한다.
3) Controller (컨트롤러)
- 모델과 뷰를 연결하는 다리 역할을 한다.
- 사용자의 요청을 받아 그 요청을 처리하고 결과를 뷰에게 전달하는 작업을 담당합니다.
3 Layered Architecter
3 Layer 는 서버 개발 관점에서 각 계층 별로 역할을 분리하는 개념을 뜻한다.

1) Presentation Layer (프레젠테이션 레이어) Controller
- 사용자가 입력한 요청이 유요한 요청인지 검사하고 필터링하는 역할
- 사용자의 요청을 받고, 서비스로 데이터를 전달하는 역할
- 구성 요소: @Controller 또는 @RestController (@Controller + @ResponseBody)
2) Business Logic Layer (서비스 레이어) Service
- 사용자가 요청한 비즈니스 로직을 실질적으로 처리하고, 필요한 데이터를 리포지토리에게 요청하는 역할
- 구성 요소: @Service
3) Data Access Layer (데이터 접근 레이어) Repository
- 데이터베이스에서 실제 데이터를 가져오거나, 데이터를 저장, 수정, 삭제하는 역할
- 구성 요소: @Repository
(JPA, Hibernate, MyBatis 등과 같은 ORM 프레임워크를 사용해 데이터베이스와 상호작용)
※ DTO : 계층간 데이터 전달을 위해 사용되는 객체
Entity : 데이터베이스 테이블과 매핑되는 도메인 객체
'Spring' 카테고리의 다른 글
| [Spring] 요청 · 응답 데이터 (0) | 2025.05.12 |
|---|---|
| [Spring] Spring에서 Annotation을 사용하는 이유와 Spring Bean 관리 (0) | 2025.05.12 |
| [Spring] 웹 (0) | 2025.05.09 |
| [Spring] 웹 용어 정리 (0) | 2025.05.08 |
| [Spring] HTTP와 API (0) | 2025.05.08 |