( 결론부터 말하자면 로그인 화면의 유저 네임과 패스워드를 모를 때 사용하는 방법 ) 1. WebConfig 파일 수정으로 해결할 수 없는 경우와 그 이유 스프링부트에서 Spring Security를 적용한 프로젝트라면 Swagger를 사용할 때 로그인 화면을 만날 가능성이 매우 높다 해결 방법을 검색하면 build.gradle 에 springfox 관련 dependency 코드를 추가하고 WebConfig 라는 자바 Config 클래스를 생성하는 코드가 나온다 검색했을 때 나오는 대부분의 WebConfig 코드는 WebMvcConfigurer를 상속 받는 클래스인데 WebMvcConfigurer 의 WebMvcConfigurerAdapter 는 spring 5 버전부터 지원되지 않기 때문에 해당 코드들..
[ Development ]/[ Back-end ] Spring 기본
23-2 GDSC 23-24 chapter backend study스프링부트에서 Swagger를 사용하는 방법은 여러 가지가 있다 (일단 swagger를 모르는 분들을 위해 간단하게 설명하자면 API Documentation & Design Tools for Teams 이다 API를 확인하고 정리하기 편하게 돕는 툴...!) 1. spring fox를 사용할 수 없는 SpringBoot.3.n.n 이전 프로젝트에서는 spring fox를 이용했었는데 이제 스프링 부트 이니셜라이저에서 2.nn 버전을 제공하지 않고 3.n.n 버전만 제공하게 되면서 spring fox를 사용할 수 없게 되었다 2. SpringBoot 3.n.n 이상 버전에서의 Swagger 도입 방법 = springdoc 검색해보면 대부분의 Swagger 도입 프로젝트 코드는 springfox를 이용하고..
다양한 의존 관계 주입 방법 중 지금까지 생성자 주입 방식을 사용했으며 수정자 setter를 주입하는 방법, 필드에 바로 주입하는 방법, 일반 메서드를 통해 주입하는 방법, 자동 주입 대상을 옵션으로 처리하는 방법이 있다. 생성자 주입 방식을 선택하는 이유는 프레임 워크에 의존하지 않고 순수 자바 언어의 특징을 살리기 위함이다 생성자 주입을 사용하는 것이 기본적이며 필수 값이 아닌 경우에는 setter 주입 방식을 옵션으로 부여하는 방식을 사용할 수 있다. 생성자 주입과 수정자 주입을 동시에 사용할 수 있으며 생성자 주입 방식을 추천하는 편이다. Lombok 라이브러리를 제공하면 코드를 비교적 간단하게 정리할 수 있으며 final 키워드가 있는 필드들만 모아 생성자를 자동으로 만들어주는 @Required..
컴포넌트 스캔(Component Scan) 설정 정보(AppConfig.class) 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공 스프링 빈 등록 ->직접 자바 코드로 등록하는 방법, 컴포넌트 스캔과 자동의존관계를 설정하는 @Autowired 사용 방법 @ComponentScan은 탐색 위치에 @Component가 붙은 모든 클래스를 스프링 빈으로 등록 기본적으로 빈 이름은 맨 앞글자를 소문자로 변경해서 사용하고 어노테이션 뒤에 ("문자열")을 사용해 직접 설정할 수도 있음 탐색범위(basePackages) 필요한 위치부터 탐색할 수 있도록 탐색 시작 위치를 지정할 수 있음 basePackages : 탐색 시작 위치 지정, 해당 패키지부터 하위까지 basePackagesClasses : ..
순수 의존성 주입 컨테이너 - 클라이언트 요청마다 생성하는 문제 - 메모리 낭비 객체 하나만 생성하고 공유하도록 설계하여 해결 = 싱글톤 패턴 싱글톤 패턴 -> 클래스의 인스턴스가 단 하나만 생성되도록 보장하는 디자인 패턴 -> private 접근지정자로 설정 - new 연산자를 활용한 (동적할당) 외부에서의 접근, 객체 인스턴스 추가 생성을 방어함 private 접근지정자로 선언되었으므로 getter 메서드를 통해서만 조회 가능하고 해당 메서드 호출하면 항상 같은 인스턴스를 반환함 싱글톤 패턴이 언제나 좋기만 한가? - 당연히 NO 구현하는 코드가 길어짐 클라이언트가 구체 클래스에 의존하게 되는데 DIP 위반, OCP 위반 내부 속성 변경 및 초기화 難 (어려울 난) Private 접근지정자로 인해 자..
1. 스프링 컨테이너 스프링 컨테이너는 자바 객체의 생명 주기를 관리하며 생성된 자바 객체들에게 추가적인 기능을 제공한다. 스프링에서는 자바 객체를 빈이라고 부르기 때문에 스프링 컨테이너는 내부에 존재하는 빈의 생명주기를 관리하며 생성된 빈에게 추가적인 기능을 제공하는 것이다. xml, 어노테이션 기반의 자바 설정 클래스로 만들 수 있으며 스프링 부트가 등장하면서 대부분 사용하지 않게 되었다. 의존성 주입을 통해 애플리케이션의 컴포넌트를 관리할 수 있으며 서로 다른 빈을 연결하여 애플리케이션 빈을 연결하는 역할을 한다. 2. 스프링 컨테이너 구성 인터페이스 스프링 컨테이너는 Beanfactory 와 ApplicationContext 두 종류의 인터페이스로 구현되어 있다. 3. 스프링 컨테이너 생성 과정 ..
# 새로운 할인 정책 개발 다형성 덕분에 새로운 할인 정책 코드를 개발하는 것 자체는 아무 문제가 없다. 다만 적용하려고 할 때 클라이언트코드도 변경해야한다. 인터페이스와 구연 클래스 모두에 의존하기 때문이다. 이건 의존관계 역전 원칙을 위반한 것. # 관심사의 분리 클라이언트가 의존하는 서버 구현 객체를 직접 생성 및 실행하였으나 클라이언트 객체는 자신의 역할을 실행하는 것에만 집중하고 권한이 줄어들어 책임이 명확해졌다. appconfig는 애플리케이션 전체 동작 방식을 구성하기 위해서 구현 객체를 생성하고 연결하는 역할을 책임. # AppConfig 리팩터링 구성 정보에서 역할과 구현을 명확하게 분리하는 것이기 때문에 역할이 잘 드러나게 되고 중복을 제거할 수 있다. # SRP - 단일 책임 원칙 한..
이클립스에서 오류가 발생해서 조금 화나는 마음으로 강의만 먼저 듣고 정리한 후 한결 가벼워진 마음으로 인텔리제이 설치중.. # 프로젝트 생성 start.spring.io 에서 다음과 같이 설정하여 생성 스프링부트 3.0 이상은 java 17 이상, jakarta 패키지로 변경해야함 # Gradle 전체 설정 build.gradle plugins { id 'org.springframework.boot' version '2.3.3.RELEASE' id 'io.spring.dependency-management' version '1.0.9.RELEASE' id 'java' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' repos..
스프링 핵심 원리 - 기본편 (인프런 / 김영한 / 유료) # 스프링 - 자바 (= 객체 지향 언어) 언어 기반의 프레임 워크 - 객체 지향 언어가 가진 강력한 특징을 살려내 좋은 객체 지향 프로그램을 개발할 수 있도록 하는 프레임워크 # 객체 지향 요소 - 추상화 - 캡슐화 - 상속 - 다형성 : 인터페이스 / 구현 클래스 -> 클라이언트 변경 없이 서버 구현 기능을 유연하게 변경할 수 있다. -> 제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해서 역할과 구현을 편리하게 할 수 있도록 지원한다. -> 객체 지향의 핵심은 다형성이나 다형성 만으로는 구현 객체를 변경할 때 클라이언트 코드도 함께 변경되어 OCP, DIP를 지킬 수 없다. # 좋은 객체 지향 프로그래밍의 원칙 • SRP : 단..
# 스프링 JdbcTemplate 순수 Jdbc와 동일한 환경설정을 하면 된다. 스프링 JdbcTemplate과 MyBatis 같은 라이브러리는 JDBC API에서 본 반복 코드를 대부분 제거해주만 SQL은 직접 작성해야 한다. package hello.hellospring.repository; import hello.hellospring.domain.Member; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframe..