spring은 프레임워크이다
프레임워크는 큰 틀인데 정해져있다는 뜻이다
(springBoot 전에 레거쉬 먼저 진행)
프레임워크 VS 부트
📍 부트 (자바설정)
부트는 모든 설정을 @(어노테이션) 기반으로 한다
JAVA 코드에 붙임
@Override
@WebServlet
자바 코드에 붙어있어 코드랑 같이 보기 때문에 가독성이 좋다
📍 프레임워크 (전역설정)
.xml 설정파일로 한다
ex) web.xml
가독성 ⬇
그런데 사용하는 이유는 세밀한 설정이 가능하기 때문이다
어노테이션은 한계가 있고 전체 적용이 어렵다
<< Spring Tools (Spring Tool Suite, STS) 를 설치하기 >>

새 프로젝트 workspace2로 시작!


Help ▶Eclips Marketplace ▶ spring 검색 후 install ▶Confirm

accept 체크 후 ▶ Finish


Select All ▶ Trust Selected

Restart Now로 다시 시작하깅

New ▶ spring 검색 ▶ Spring Starter Project 클릭

[ 설정하기 ]
타입 : Maven
웹 : War
Package은 왜 3계층? : 국제 표준이기 때문 굳이 구격을 맞출 필요는 없지만
맨 앞에는 회사 / 중간은 프로젝트 / 마지막은 기능 (웹, 앱, 어플리케이션 등등)이 들어간다
Dependencies는 넘어가기
Java Resource에 나는 처음 에러는 무시하고 시작~

Java Resource
src/main/java : 컨트롤러와 모델이 사용하는 곳
src/main/resource : xml 파일, 설정 파일이 들어가는 곳
ㄴ static : 정적인 자원 넣는 공간 ex) error.page / html / css / js / image
ㄴ templiates : (건너뛰기)
ㄴ application.properties : .xml과 매우 유사하다! 서버에 대한 설정 파일
[ .xml과 .properties 의 차이 ]
.xml : 컨테이너 설정 파일
.properties : 설정 파일

src
ㄴ webapp : 페이지 들어가는 곳 (위에 static과 비슷)
pom.xml : 스프링 컨테이너 설정 파일 (스프링 프로젝트에만 있음)
web.xml : 서블릿 컨테이너(톰캣, 웹 서버) 설정 파일
[ 프레임워크 장점 ]
1. 개발자들의 역량 상향 평준화
2. 구현시간이 단축
3. 개발 비용 절감
[ 참고 ]
구글링을 하다보면 EJB를 만날 수 있는데
진입장벽이 높은 웹 프레임 워크였는데 개발자를 위해 Spring이 생겼고
Spring의 대부분은 EJB에서 왔다
[ Spring을 잘 표현하는 문장 ]
IoC와 AOP를 지원하는 경량의 프레임워크
IoC = 제어의 역행
AOP = 관점 지향 프로그래밍
경량의 = POJO 기반의
[ AOP ]

결제 기능은 결제 컨트롤러가 한다
처음에 로그를 찍고 본인 인증 확인하고 결제 기능 있고 다 끝나면 로그 찍고 나감
회원가입 기능은 회원가입 컨트롤러가 한다
처음에 로그 찍고 데이터 확인 멤버 DAO불러서 확인 ~~~ 로그 찍고 나간다
댓글 삭제 기능은 댓글 삭제 컨트롤러가 한다
로그 찍고 본인확인 ~~~ 로그 찍고 나감
빨간 : 모든 컨트롤러 전후로 로그를 찍었다
파란 : 결제나 댓글 삭제 전에 본인인증을 함
나머지는 그 컨트롤러가 하는 일이다
[ 횡단 관심사 : concern ]
본인인증
권한확인
인가
보안
로그
트랜잭션
[ OOP와 AOP ]
OOP : 결제, 회원가입, 댓글 삭제 컨트롤러를 만드는 것
AOP : 객체와 무관한 것들은 떼어서 분리하면 좋겠어
spring이 뜯어서 가져가 설정을 한다
때에 맞게 불러 사용한다
빨간색 시작 로그를 빼서 하나로 만들고
파란색 본인 확인을 빼서 하나로 만들고
마지막 빨간색 종료 로그를 뺴서 하나로 만들어 코드를 줄일 수 있다
[ 공통 관심사 | 공통 로직 | 횡단 기능 ]
공통 == common == 횡단
관심사 == 로직 == 기능 == concern
[ IoC ]
제어의 역행
= 제어권이 원래 A한테 있었는데? B한테 갔다!
= 제어권이 원래 개발자한테 있었는데? 스프링한데 갔다!
(내 할일이 줄어들기 때문에 좋다)
여기서 말하는 제어권은 "객체 생성 및 관리"이다
객체 생성 및 관리 : 객체의 라이프사이클 (생명주기)
개발자가 new라는 글자를 작성하지 않게 됨! ➡ new를 안씀!
객체를 누군가는 new하고 호출도 해줘야함 ➡ 컨테이너
컨테이너는 객체를 생성과 관리를 담당하는 역할
[ 컨테이너 예시 ]
서블릿 컨테이너 == 웹 서버 == 톰캣
FrontController fc = new FrontController();
fc.doGet();
fc.doPost();
[ 서블릿 컨테이너의 동작 순서 ]
1. web.xml 파일을 로드 (컨테이너는 .xml 없이는 동작하지 않는다)
2. 브라우저(어플리케이션, 클라이언트, view, 사용자)로부터 요청(xxx.do)을 받음
3. 요청에 맞는 객체를 찾아 생성 및 호출
new, doGet(), doPost()
4. 메서드 호출된 결과를 브라우저(클라이언트, view, 사용자)에게 반환
[ IOC가 왜 좋은지? ]
1. 복습
2. 클린코드
Coupling(결합도 ) 낮추기
결합도란? A가 변경되었을 때, B도 같이 변경되는가?
-> DTO를 DAO의 인자로 이용한 것!
3. IoC의 장점 맛보기
Phone을 만들자! ➡ 추상화
다형성 ➡ turnOn() 같은 메서드를 호출하는데?
실제 객체가 아이폰/갤럭시냐에 따라 다른 결과가 나오니까
[ 결합도를 낮추는 방법 ]
1. 다형성 이용하기 (인터페이스 활용)
2. 디자인패턴 이용하기 (팩토리 패턴, MVC, Template, 싱글톤)
[ BeanFactory ]

BeanFactory의 getBean의 메서드 시그니처 형식은 보통 고정되어 있다
MySQL 설치 ➡ Workbench 툴 사용
https://bobaejin.tistory.com/238
MySQL 설치하기 ( Workbench 툴 사용 )
https://downloads.mysql.com/archives/installer/ 1) MySQL Installer 다운로드 준비 MySQL :: Download MySQL Installer (Archived Versions)Please note that these are old versions. New releases will have recent bug fixes and features! To download the lates
bobaejin.tistory.com
'🍃 Spring' 카테고리의 다른 글
| .xml 대신 @ (어노테이션) 사용해보자! (0) | 2026.01.14 |
|---|---|
| 의존성 주입(DI, Dependency Injection)와 생성자 주입, 세터 주입 (0) | 2026.01.14 |
| MySQL 설치하기 ( Workbench 툴 사용 ) (0) | 2026.01.13 |
| 🌺 Spring 시작하기.. 구조와 원리 (init-method="initMethod") (0) | 2026.01.13 |
| 🌺 Spring 시작하기.. 구조와 원리 (applicationContext.xml 설정 파일) (0) | 2026.01.13 |