LG 유레카 2기_프론트엔드

[ DB ] Spring framework

ChatjihoiPT 2025. 4. 21. 20:42

1. Spring framework

복잡한 XML 설정 없이 시작 가능하며 애플리케이션을 빠르고 쉽게 만들 수 있게 도와주는 프레임워크

 

< JSON vs XML >

데이터 크기 작음 (경량) 큼 (태그 중복)
가독성 높음 (간결한 구조) 낮음 (복잡한 태그)
파싱 속도 빠름 느림
데이터 검증 별도 로직 필요 스키마(DTD/XSD) 지원
확장성 제한적 네임스페이스 지원
사용 용이성 간편 복잡

< Spring Core >


1. IOC (Inversion of Control, 제어의 역전)
객체의 자동 생성 및 관리

2. DI (Dependency Injection, 의존성 주입)
객체 간의 의존성 자동 관리

3. AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍)
공통적으로 필요한 기능(예: 로깅, 보안 검사, 트랜잭션)을 코드에 여기 저기 반복하지 않고,
한 곳에 정의하고 여러 곳에서 사용할 수 있도록 도와주는 기능

4. Spring MVC (Model-View-Controller)
웹 어플리케이션을 쉽게 생성할 수 있도록 프레임 워크 제공

2. Spring Boot 구조

myapp/
 ├── src/
 │   ├── main/
 │   │   ├── java/com/example/myapp/
 │   │   │   ├── MyApplication.java  👈 (메인 클래스)
 │   │   │   ├── controller/  👈 (웹 요청을 처리하는 클래스)
 │   │   │   ├── service/  👈 (비즈니스 로직을 처리하는 클래스)
 │   │   │   ├── repository/  👈 (데이터베이스 관련 코드)
 │   │   ├── resources/
 │   │   │   ├── application.properties  👈 (설정 파일)
 ├── pom.xml (Maven 프로젝트 설정 파일)

 

  • MyApplication.java → 프로젝트를 실행하는 메인 클래스
  • controller/ → 웹 요청을 처리하는 파일들이 들어감 (@RestController)
  • service/ → 비즈니스 로직을 처리하는 클래스 (@Service)
  • repository/ → 데이터베이스 관련 코드 (@Repository)
  • application.properties → 설정 파일 (서버 포트, DB 정보 등)

 

< 스프링의 의존성 관리 & 자동 설정 >

1. @Repository: 객체 생성(재료 자동 생성)
디비에 접근하는 클래스임을 명시해주는 @

2. @Autowired: 생성한 거 줘(자동 연결)
원하는 필드에 자동으로 객체를 꽂아주는 기능

3. @SpringBootTest: springbootTestapplicationBookTests
Spring Boot Application을 테스트하는 클래스 이름

3. BEAN 등록 & 애노테이션

 

1. Bean이란?

Spring이 관리하는 객체(인스턴스)를 말함

클래스를 객체로 만들어서 사용하는데, spring이 자동으로 만들어서 관리하는 객체가 바로 BEAN


2. 애노테이션 Bean 등록

애노테이션 설명
@Component 가장 기본적인 Bean 등록 방법 (모든 클래스에 사용 가능)
@Repository 데이터 관련 클래스를 Bean으로 등록 (DAO, DB 접근용)
@Service 비즈니스 로직을 처리하는 클래스를 Bean으로 등록
@Controller 웹 요청을 처리하는 클래스를 Bean으로 등록 (Spring MVC에서 사용)
@Bean Java Config 클래스에서 수동으로 빈 등록
@Configuration 자바 설정 클래스임을 명시
@Scope Bean의 스코프(lifecycle)를 설정 (singleton, prototype 등)

3. BEAN의 생명주기 설정

@Scope : Bean의 생명 주기를 설정

@PostConstruct : Bean이 생성된 후 실행할 코드 지정

@PreDestroy : Bean이 제거되기 전에 실행할 코드 지정


4. DI (의존성 주입)

애너테이션 설명]

@Autowired 타입 기반으로 의존성 자동 주입
@Resource(name="") 이름 기반으로 주입 (Java 표준)
@Inject 자바 제공 의존성 주입 (JSR-330)
@Qualifier("빈이름") 동일 타입 Bean 여러 개일 때 특정 이름 지정

5. Web 계층 (Spring MVC)

@RequestMapping("/url") URL 매핑 (GET/POST 등 포함 가능)
@GetMapping, @PostMapping 등 HTTP 메서드에 따른 매핑
@RequestParam 쿼리 파라미터 받기 (ex. ?id=1)
@PathVariable URL 경로에서 값 추출 (ex. /users/{id})
@ModelAttribute 폼 데이터 → 객체로 매핑
@RequestBody JSON 등 바디 데이터를 객체로 매핑
@ResponseBody 리턴값을 그대로 HTTP 응답 본문에 출력
@RestController @Controller + @ResponseBody 조합, REST API용

6. 예외

@ExceptionHandler 특정 예외 처리 메서드 지정
@ControllerAdvice 전역 예외 처리 클래스 지정

4. Rest

자원을 url로 표현하고, HTTP 메서드로 행위를 지정하는 아키텍쳐

- Spring에서는 @RestController, @GetMapping, @RequestBody 등으로 구현

- DAO/ SERVICE/ CONTROLLER로 레이어를 나눔

- Client는 JSON으로 데이터를 요청 및 응답함

 

1. Rest, Rest API, Restful 서비스

REST
(Representational State Transfer)
웹의 자원을 URI로 표현하고,
HTTP 메서드(GET, POST 등)로 상태를 전송(Transfer)하는 아키텍처 스타일
REST API REST 규칙을 따르는 API. 클라이언트가 HTTP를 통해 요청하고 서버가 응답(JSON 등)
RESTful 서비스 REST 원칙을 잘 지켜서 만든 서비스. REST API를 통해 자원 기반의 통신을 함

2. REST 원칙 요약

URI는 자원을 나타냄 예: /books/1 (1번 책)
HTTP 메서드로 동작 표현 GET 조회, POST 생성, PUT 수정, DELETE 삭제
무상태성 (Stateless) 서버가 클라이언트 상태를 저장하지 않음
JSON 형식 응답 대부분 JSON으로 데이터를 주고받음

3. RESTful 서비스 구성요소

View 화면(UI), 사용자와 상호작용 (예: React, Android, iOS 등)
Container Spring Boot와 같은 서버 플랫폼
Model 데이터를 표현하는 객체 (DTO, Entity 등)
DAO (Data Access Object) DB 접근 계층. 보통 테이블당 1개의 DAO 클래스
Service 비즈니스 로직 담당, 트랜잭션 처리
Controller URL 요청을 받고 서비스 호출, REST API 형식으로 응답

4. Client와의 관계

Client 웹, 모바일(Android/iOS), React 등
Request/Response HTTP 통신 기반. 보통 AJAX, Fetch API, Axios 사용
CSR (Client Side Rendering) 클라이언트가 페이지를 렌더링. REST API로 JSON 받아서 화면 구성

5. 제 1정규형

한 컬럼에 하나의 값만 저장

- 반복 컬럼 없음

- 원자성 유지(데이터를 분리해서 중복을 줄임)