스프링 IoC 컨테이너스프링의 IoC 컨테이너는 Bean 객체들을 책임지고 의존성을 관리합니다.객체들을 관리한다는 것은 객체의 생성부터 소멸까지의 생명주기( LifeCycle ) 관리를 개발자가 아닌 컨테이너가 대신해준다는 말입니다. 그로 인해 개발자는 객체 관리의 주체가 프레임워크( Container ) 가 되기 때문에 로직에 집중할 수 있는 장점이 있습니다.스프링 빈의 LifeCycle스프링 컨테이너 생성 → Bean 생성 -> 의존성 주입 → 초기화 콜백 → Bean 사용 → 소멸 전 콜백 → 스프링 종료빈 생명주기 콜백의 필요성먼저 콜백에 대해 설명하면, 주로 콜백함수를 부를 때 사용되는 용어이며 콜백함수를 등록하면 특정 이벤트가 발생했을 때 해당 메소드가 호출됩니다. 즉, 조건에 따라 실행될 수..
빈이 2개 이상일 때 생기는 오류스프링에서는 같은 타입의 빈이 여러 개일 때, 어떤 빈을 사용할지 모호성이 발생합니다.예를 들어 @Autowired 는 타입으로 빈을 조회하기 때문에 interface 가 discountPolicy 인 구현체가 2개 이상이라면 오류가 발생합니다. 당연하게도 discountPolicy 로 만든 구현체가 하나여야 하는데 2개 이상이라서 어떤 구현체를 불러와야 할지 모르기 때문입니다.@Componentpublic class FixDiscountPolicy implements DiscountPolicy {}@Componentpublic class RateDiscountPolicy implements DiscountPolicy {}@Autowiredprivate final Disc..
의존성 주입 ( DI )의존성 주입(Dependency Injection, DI)은 객체 지향 프로그래밍에서 객체 간의 관계를 설정하는 방식 중 하나입니다.객체가 필요한 의존성( 다른 객체 )을 직접 생성하지 않고 외부에서 주입받는 방식을 말합니다.이를 통해 객체 간의 결합도를 낮추고, 유연한 코드와 테스트 가능성을 높일 수 있습니다. 만약 우리가 자동차를 만들고 있다고 했을 때, 자동차는 엔진, 타이어, 핸들 등 여러 부품이 필요합니다. 만약 자동차가 엔진을 스스로 만들어야 한다면, 자동차 클래스 내부에서 엔진을 직접 생성해야 합니다. 이 경우, 자동차와 엔진이 강하게 결합되어 있어서 자동차를 테스트하거나 엔진을 교체하는 것이 매우 어렵습니다. 하지만 의존성 주입을 사용하면, 자동차가 엔진을 외부에서 ..
간단한 설명Tomcat 은 웹 서버 소프트웨어 중 하나로, Java 로 만들어진 웹 애플리케이션을 실행할 수 있게 도와주는 프로그램입니다.쉽게 말해, Java 프로그램이 인터넷에서 동작할 수 있게 만들어주는 도구라고 생각하면 됩니다. 들어가기에 앞서톰캣을 설명하기 전에 혹시나 WAS , 웹 서버를 모르는 분들을 위해 설명하겠습니다.웹 서버란웹 서버는 우리가 인터넷 브라우저(크롬, 엣지등) 를 사용해 웹사이트를 볼 때, 그 웹사이트의 데이터를 보내주는 역할을 합니다. 만약 네이버에 접속하면, 네이버의 웹 서버가 네이버 화면을 여러분에게 보내줍니다.WAS(Web Application Service)WAS 는 웹 서버와 웹 컨테이너의 결합으로, 다양한 기능을 컨테이너에 구현하여 다양한 역할을 수행할 수 있는 ..
들어가기에 앞서 개발할 때 대부분 간단한 에러 출력 방법은 예외 처리에 유용하지만,보안상의 이유로 프로덕션 환경에서는 사용하지 않습니다. 예외프로그램 실행 중 발생할 수 있는 정상적인 범위를 벗어난 경우에 처리를 하기 위한 방법입니다.프로그램 실행 중 중요하게 처리해야 하는 부분중에 에러가 발생하였을 때 예외처리를 하여 로그를 어떻게 남길 것인지도 포함됩니다.Java에서는 try-catch 문으로 감싸서 에러를 처리할 때 로그를 남기는 방법은 다양합니다.Java Exception 에러 출력 방법1. e.getMessage()에러의 원인을 간단하게 출력합니다. 2. e.toString()에러의 Exception 내용과 원인을 출력합니다. 3. e.printStackTrace()에러의 발생근원지를 찾아서 단..
키(KEY)key는 데이터베이스에서 테이블에 있는 각각의 데이터(행)를 고유하게 구별하거나 연결하는 데 사용되는 중요한 요소입니다. 쉽게 말하면, 이 데이터가 누구 건지 정확히 찾을 수 있게 해주는 기준이라고 생각하시면 됩니다. 한 릴레이션에서 중복되는 튜플들은 존재할 수 없습니다. 그러므로 각각의 튜플에 포함된 속성들 중 어느 하나는 값이 달라져야 하고 각각의 튜플을 식별하는 역할을 키(key)가 담당합니다. 일반적으로 키는 단일 속성으로 지정하지만 아래의 그림처럼 못하는 경우에는 두 개 이상의 속성을 묶어 키로 사용합니다. 예를 들어 아래 릴레이션에서는 ( 고객번호, 도서번호 ) 나 ( 고객번호, 주문일자 ) 와 같은 집합을 키로 사용할 수 있습니다.슈퍼키튜플을 유일하게 식별할 수 있는 하나의 속성 ..