Language/Spring Boot || Spring 2024. 2. 26.
[계산기 프로젝트] 스프링 시큐리티 SecurityFilterChain "리디렉션한 횟수가 너무 많습니다" 오류 해결
SecurityConfig.class @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.csrf((x)->x.disable()); http.authorizeHttpRequests(a-> a .requestMatchers("/four-basic-calc/**" ,"/programming-calc","scientific-calc","exchange-rate-calc").permitAll() .requestMatchers("/","/login", "/loginProc", "/j..

Language/Spring Boot || Spring 2024. 2. 18.
스프링 빈 스코프
빈 스코프 : 빈이 존재할 수 있는 범위 스프링은 다양한 스코프를 지원한다. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 지원되는 가장 넓은범위의 스코프 프로토타입: 컨테이너가 프로토타입 빈의 생성과 의존관계 주입까지만 관리하는 짧은 범위의 스코프 웹 스코프 request : HTTP 요청 하나가 들어오고 나갈때까지 유지되는 스코프. 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고 관리된다. session : 웹 세션이 생성되고 종료될때까지 유지되는 스코프 application : 웹의 서블릿 컨텍스트와 같은 범위(동일한 생명주기)로 유지되는 스코프 websocket : 웹 소켓과 동일한 생명주기를 가지는 스코프 프로토타입 스코프 프로토타입 빈은 클라이언트가 스프링 컨테이너에 요청할..
Language/Spring Boot || Spring 2024. 2. 17.
Spring Boot에서 base64로 이미지 업로드,다운로드 기능 구현하기
Base64 : 이진데이터를 텍스트(ASCII)로 바꾸거나 (인코딩) 반대 과정(디코딩) 을 처리하는 방법 중 하나이다. 이진 데이터는 6비트씩 묶이는 반면에 ASCII 문자는 8비트로 표현되기 때문에 인코딩 과정 후 텍스트 데이터는 원래 데이터보다 크기가 약 33% 증가한다. Board에 byte[] mediaData 엔티티 추가 @Lob @Column(name = "mediaData", columnDefinition="LONGBLOB") private byte[] mediaData; public void setMediaData(MultipartFile file) { try { this.mediaData = file.getBytes(); // 이미지 파일을 byte 배열로 변환하여 저장 } catch ..

Language/Spring Boot || Spring 2024. 2. 15.
Spring 빈의 생명주기와 생명주기 콜백에 대해 알아보자
스프링 빈의 생명주기란? 빈의 생명주기(라이프사이클)이란 스프링 컨테이너가 빈을 생성하고 관리하는 과정 전반을 의미한다. 빈 정의 → 빈 생성 → 의존관계 주입 → 빈 초기화(초기화 메소드 콜백) → 빈 사용 → 빈 소멸(소멸 전 콜백) 으로 이루어져 있다. Q. 콜백 (콜백 메소드)란? A. 콜백과 콜백 메소드는 같은 말이다. 객체가 특정 상태에 도달했거나 특정 이벤트가 발생했을 때 자동으로 호출되는 메소드이다. (초기화 상태 도달 → 초기화 메소드 콜백, 소멸 상태로 전환 → 종료 메소드 콜백) Q. 빈 초기화와 초기화 메소드란? A. 초기화 메소드는 빈이 생성된 후에 추가 설정과 초기화 작업(외부 서비스와의 연동, 속성 설정, 캐시 초기화 등)을 하기 위해 호출되는 메소드이다. 스프링 컨테이너를 통..

Language/Spring Boot || Spring 2024. 2. 8.
Spring 생성자 주입을 선택해야 하는 이유
생성자 주입을 선택해야 하는 이유 1. 불변 대부분의 DI는 한번 주입되면 애플리케이션 종료 시점까지 의존관계가 변하면 안 된다.(불변해야 한다) 수정자(setter) 주입은 set00 메소드를 public으로 열어두어야 한다. 그렇게 하면 의존관계를 누군가 변경할 수 있기 때문에 좋은 방법이 아니다. 생성자 주입은 객체를 생성할 때 딱 1번만 호출되고 이후에 호출되는 일이 없다. 따라서 불변하게 설계할 수 있다. 2. 누락 수정자 주입을 사용하면 의존관계가 누락되었을 때, 애플리케이션 실행은 가능하지만 실행 결과는 NPE가 뜨게 된다. 생성자 주입을 사용하면 같은 상황에서 컴파일 오류를 알려줌과 함께 인텔리제이가 어떤 의존관계를 필수로 주입해야 하는지 알려준다. (생성자 주입 사용시 의존관계 누락되었을..

Language/Spring Boot || Spring 2024. 2. 7.
Spring 의존관계 주입(DI) 방법
1. 생성자 주입 :생성자를 통해 의존관계를 주입받는다. 특징 : 불변, 필수 의존관계에 사용, 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 생성자가 딱 하나뿐이라면 Autowired를 생략해도 빈이 자동주입된다. @Component public class OrderServiceImpl implements Orderservice { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired //생성자가 단 하나(OrderServiceImpl) 뿐이라면 Autowired를 생략해도 스프링 빈이 자동 주입된다. public OrderServiceImpl(MemberRepo..

Language/Spring Boot || Spring 2024. 1. 31.
스프링부트 순환참조 문제
실행 시간을 측정하는 TimeTraceAop 클래스를 만들었더니 스프링부트 순환참조 에러메세지가 떴다. Description: The dependencies of some of the beans in the application context form a cycle: memberController ↓ memberService defined in class path resource [hello/hellospring/SpringConfig.class] ┌─────┐ | timeTraceAop defined in class path resource [hello/hellospring/SpringConfig.class] └─────┘ Action: Despite circular references being al..
