스프링부트는 기본적으로는 내장 톰캣의 내부로그와 HTTP요청에 대한 상세한 내용을 표시하지 않는다. 각 로그 레벨에 대해 표시하는 내용은 아래와 같이 오름차순으로 나타내는 정보가 자세하지 않다. TRACE 가장 상세한 로그 레벨로, 애플리케이션의 실행 흐름과 디버깅 정보를 상세히 기록한다. 주로 디버깅 시에 사용된다. DEBUG 디버깅 목적으로 사용되며, 개발 단계에서 상세한 정보를 기록한다. 애플리케이션의 내부 동작을 이해하고 문제를 분석하는 데 도움을 준다. INFO 정보성 메시지를 기록한다. 애플리케이션의 주요 이벤트나 실행 상태에 대한 정보를 전달한다. WARN 경고성 메시지를 기록한다. 예상치 못한 문제나 잠재적인 오류 상황을 알리는 메시지이다. 애플리케이션이 정상적으로 동작하지만 주의가 필요한..
HTTP 메서드의 속성은 크게 3가지로 안전(Safe), 멱등(Idempotent), 캐시 가능(Cacheable)이 있다. HTTP 메서드별로 가지는 속성이 다르기 때문에 어떤 HTTP 메서드로 요청을 했냐에 따라 설계나 로직, 요청 실패시 처리하는 방법 등이 달라질 수 있다. 웹 개발자라면 이에 대해 알아야 할 필요가 있기 때문에 이번 포스팅은 이를 정리해 보는 시간. 이번 포스팅에서는 HTTP 주요 메서드(GET, POST, PUT, PATCH, DELETE)에 대해 정리할 것이다. 안전 (Safe) HTTP 메서드의 안전성이란 호출해도 리소스가 변경되지 않는 성질을 말한다. (RFC 문서) GET메서드는 데이터 조회기능을 호출해도 리소스를 변경하거나 수정하지 않기 때문에 안전한 메서드이다. 그 외..
빈 스코프란 ? 빈 스코프는 빈의 생존 기간을 의미한다. 보통의 경우는 스프링 컨테이너의 시작과 함께 싱글톤으로 생성되어 종료될 때 까지 유지된다. 다른 설정이 없다면 이 경우가 기본 스코프이며 '싱글톤 스코프' 라고 한다. 스프링은 이 외에도 다음과 같은 스코프를 지원한다. 빈 스코프 종류 싱글톤 (singleton) 기본 스코프. 별도 설정이 없다면 싱글톤 스코프로 간주한다. 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프. 프로토타입 (prototype) 스프링 컨테이너가 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 스코프. 관리 책임은 프로토타입을 받는 클라이언트에 있다. 그렇기에 @PreDestroy와 같은 콜백메서드는 호출 불가 스프링 컨테이너에 ..
빈 초기화와 소멸 스프링 컨테이너(DI 컨테이너라고도 불린다)에서 관리되는 빈의 생명 주기는 크게 세 가지 단계로 나뉜다. 빈 초기화 빈 사용 빈 소멸 스프링 빈은 객체가 생성되고 의존관계 주입이 끝난 후에 사용할 수 있다. 그렇기 때문에 DB Connection Pool(DBCP), Network Socket과 같이 애플리케이션 시작 시점에 미리 연결하고 종료 시점에 연결을 끊는 작업을 진행하는 경우는 의존관계 주입이 끝난 후 빈 초기화 작업이 이루어 져야 하고, 애플리케이션 종료 시점에 빈 소멸이 되어야 한다. 그렇다면 개발자가 이 시점을 어떻게 알고 프로그래밍을 할 수 있을까? 스프링에서는 친절하게 개발자에게 의존관계 주입이 완료된 시점과 스프링 컨테이너가 종료되는 시점에 콜백(callback)기능..
이전 포스팅에서는 스프링 빈 등록 방법에 자동,수동으로 등록하는 방법이 있다고 정리 했었다. 스프링 컨테이너가 자동으로 스프링 빈 객체의 요구 사항에 맞는 다른 빈을 찾아 연결해주는 것을 오토와이어링(Autowiring) 이라고 하며, 2가지 방식이 있다. 타입을 사용한 방식 이름을 사용한 방식 필드 이름을 사용한 방식은 @Resource 애너테이션을 활용하는데 생성자 주입에는 사용하지 못한다. 이번 포스팅에서는 타입을 사용한 방식으로 지금까지 자주 봐왔던 @Autowired 애너테이션에 대해서 정리하고자 한다. @Autowired 위에서 설명했듯이 @Autowired 애너테이션은 스프링 빈을 자동으로 등록 하는 방법 중 타입을 사용한 방식이며 다음과 같이 빈을 조회하고 매칭시키는 규칙이 있다. 주입받고..
의존관계 주입 방법은 크게 4가지가 있다. 생성자 기반 의존성 주입 설정자 기반 의존성 주입(setter) 필드 기반 의존성 주입 일반 메서드 주입 생성자 기반 의존성 주입 컨스트럭터 인젝션이라고도 불리는데 이름 그대로 생성자를 통해서 의존관계를 주입 받는 방법이다. @Component public class OrderServiceImpl implements OrderService { private MemberRepository memberRepository; private DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy..
스프링 빈 (Bean) 이란? POJO(Plain Old Java Object)로써 스프링 컨테이너에 의해 관리되는 객체이다. - 주요 구성 요소 클래스(class) : 빈은 일반적으로 자바 클래스로 표현된다. id, name : 빈을 식별하는데 사용됨 scope : 스프링 빈의 생존 기간 ( bean 생성 방법이기도 함, singleton, prototype 등) constructor-arg : 빈 생성시 생성자에 전달할 파라미터 property : 빈 생성 시 setter 메서드를 통해 전달할 인수 Lifecycle Callback : 빈의 생명 주기 관리를 위해 초기화와 소멸 단계에서 실행 되는 메서드를 정의함 초기화 콜백 - 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출 소멸전 콜백 - 빈..
🔎 스프링에서 싱글톤을 사용하는 이유 앞선 포스팅에서 스프링 컨테이너가 의존관계를 주입할 객체를 생성하고 관리한다고 했었다. 그렇다면 대규모 트래픽 처리를 요구하는 애플리케이션에서 매 요청마다 새로운 빈(Bean)을 만든다고 생각해보자. 이 애플리케이션에 1초에 1천번의 요청이 온다고 하면 1분에는 6만번의 새로운 객체가 생성되는 현상이 발생하게 된다. 이는 성능에 부하가 생길 수 있다. 위와 같은 상황처럼 대규모 트래픽을 처리할 수 있게 스프링에서는 이미 만들어진 객체(1개)를 공유해서 효율적으로 사용할 수 있게 해준다. ❔ 어떻게 객체 인스턴스를 하나만 만들까? 그렇다면 스프링에서는 어떻게 하나의 인스턴스만 생성되도록 해줄까? 기본적으로 생각할 수 있는 싱글톤 패턴을 Java언어로 구현하는 방법을 생..
Series 1. IoC(제어의 역전)/ DI(의존관계 주입) 용어 정리 2. DI (Dependency Injection, 의존관계 주입) 이란? 제어의 역전/ 의존관계 주입을 간단히 정리한 거에 이어, DI (의존관계 주입)가 스프링에서 쓰이는 이유, 특징에 대해 정리하는 시간. 스프링은 자바 언어 기반 프레임워크로 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 도구라고 할 수 있다. 이것을 가능하게 해 주는 객체 지향 프로그래밍의 핵심은 '다형성'에 있다. 다형성이 무엇인지 간단하게 정리해 보자. (객체 지향 프로그래밍과 다형성에 대한 자세한 내용 다른 포스팅에서 정리하도록 하겠다.) 🔍 다형성 다형성은 이름 그대로 객체의 속성이나 기능(메소드)이 여러 가지 다른 형태로 가질 수 있는 것을..
Window10에 Docker 설치를 하다 오류가 나기도 했고 해서 정상적으로 설치한 과정을 정리하게됨. 시작하기 전에, Docker Desktop은 Docker가 리눅스 기반으로 동작하기 때문에 Window , Mac 환경에서도 손쉽게 사용할 수 있게 나온 것이라고 한다. 🔍 설치하기 전에 설치가 잘 안되서 가장 먼저 찾아본 공식문서. (오늘도 공식문서의 중요성을 깨닫습니다..) Install Docker Desktop on Windows Get started with Docker for Windows. This guide covers system requirements, where to download, and instructions on how to install and update. docs.do..