BACK/SPRING 36

[Spring] 컴포넌트 스캔 / @Autowired

지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. → 관리할 빈이 많아지면 관리하기 번거로워 진다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 설정파일이 없다면 의존관계는 어떻게 주입할까? → @Autowired를 사용해 자동 의존관계 주입을 한다 컴포넌트 스캔 @Component를 가진 모든 대상을 가져와서 빈에 등록하기 위해 찾는 과정 컴포넌트 스캔은 @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다. 참고로 @Configuration 이 컴포넌트 스캔의 대상이 된 이유도 @Configuration 소스코드를 열어보면 @Compone..

BACK/SPRING 2023.01.17

[Spring] DI / IoC, 컨테이너, 의존성 주입 방법

DI (Dependency Injection) DI(Dependency Injection)란 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다. DI(의존성 주입)를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다. 의존 관계 먼저 의존 관계가 무엇인지 알아보자. UML 모델에서는 두 클래스의 의존관계를 다음과 같이 점선으로 된 화살표로 표현한다. A가 B에 의존하고 있음을 나타낸다. B의 기능이 추가하거나 변경되면 A에 영향을 미친다. 의존 관계에는 방향성이 있다. A가 B에 의존하지만, 반대로 B는 A에 의존하지 않는다. 의존성 주입 첫번째 방법은 A객체가 B와 C객체를 New 생성자를 통해서 직접..

BACK/SPRING 2023.01.09

[Spring] AOP란

Spring AOP 관점 지향 프로그래밍(AOP-Aspect Oriented Programming) AOP는 관점을 기준으로 묶어 개발하는 방식을 말한다. 관점(aspect)이란, 어떤 기능을 구현할 때 그 기능을 핵심 기능과 부가 기능으로 구분해 각각을 하나의 관점으로 보는 것을 의미한다. 핵심 기능은 주로 핵심 비지니스 로직이고, 부가 기능은 핵심 로직을 실행하기 위한 데이터베이스 연결, 로깅, 파일 입출력 등이 있다. 여러 비지니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식을 AOP라고 한다. => 흩어져 있는 부분들을 Aspect를 이용해 모듈화 시킨 것을 볼 수 있다. 모듈화 시킨 Aspect를 어느 곳에 사용해야 하는지 정의해주면 된다. 스프링 AOP..

BACK/SPRING 2023.01.02

[Spring] MVC 동작 원리

Spring MVC Spring MVC란 웹 애플리케이션 개발을 위한 MVC 패턴 기반의 웹 프레임워크이다. 애플리케이션의 구성 요소를 Model, View, Controller로 분리한다. Model 데이터 관리 및 비지니스 로직을 처리하는 부분이다. 요청에 의한 로직만 처리하고 이 결과를 어디에, 어떻게 사용하는지는 상관하지 않는다. 뷰나 컨트롤러에 대한 어떠한 정보도 알면 안된다. 데이터의 변경이 일어났을때 뷰를 참조하는 내부속성값을 가지면 안된다는 것이다. ex) DAO, DTO, Service @Service를 통해 스프링 컨테이너에 등록된 객체는 Model에 해당된다. View 비지니스 로직의 처리 결과를 통해 사용자 인터페이스가 표현되는 구간이다. Model을 통해 전달받은 데이터가 어떤 데..

BACK/SPRING 2022.12.25

[Spring Boot] Gradle 환경에 Swagger 적용하기

build.gradle 에 아래와 같이 추가한다. 최신 버전인 3.0.0을 사용한다. implementation 'io.springfox:springfox-boot-starter:3.0.0' config 파일에 SwaggerConfiguration.java를 작성한다. package com.toy.projectmate.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.Pa..

BACK/SPRING 2022.12.18

Spring Boot Project(1) - 프로젝트 개요

이전에 다른 친구들과 함께 같이 슿프링부트 버킷리스트 공유 사이트를 만든 경험이 있다. 백엔드 여러명끼리 기능을 분담하여 나는 게시판, 댓글 CRUD, 공유 기능, AWS 배포 등을 맡아 담당하였다. 그 때는 스프링부트를 처음 시작하자마자 바로 프로젝트에 들어간거라 많이 미흡했고, 이해보다 기능 완성에 급급했던 것 같다. 이 후에 스프링부트를 좀 더 공부하고, 백엔드는 혼자로써 웹 사이트의 기능을 모두 구현해보고자 하는 마음이 들기 시작해 이 프로젝트를 시작하게 되었다. 주제는 학교 내 팀플의 팀원들을 모집할 수 있는 사이트이고, 전반적으로 웹의 기본적인 기능을 갖춘 사이트를 만들어 보고자 한다. 서버는 내가 스프링 부트로 구현하고, 프론트는 리액트를 사용해 프론트 담당 두분과 함께 작업했다. 1. 프로..

BACK/SPRING 2022.12.15

[Spring Boot] Logback 적용하기

로깅(logging) : 애플리케이션이 동작하는 동안 시스템의 상태나 동작 정보를 시간순으로 기록하는 것 Logback은 자바 진영에서 가장 많이 사용되는 로깅 프레임워크 리소스폴더 안에 logback-spring.xml 파일 추가 INFO [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger %msg%n 컨트롤러의 LOGGER 전역 변수로 Logger 객체 정의 @RestController @RequestMapping("/api/v1/get-api") public class GetController { private final Logger LOGGER = LoggerFactory.getLogger(GetController.class); ... } 로그..

BACK/SPRING 2022.10.11

[Spring Boot] Maven 환경에 Swagger 적용하기

pom.xml 파일에 Swagger 의존성 추가 io.springfox springfox-swagger2 2.9.2 io.springfox springfox-swagger-ui 2.9.2 config라는 패키지 생성 후에 Swagger관련 코드 작성 SwaggerConfiguration.java package com.springboot.hello.config; import org.springframework.boot.autoconfigure.influx.InfluxDbOkHttpClientBuilderProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configu..

BACK/SPRING 2022.10.11