본문 바로가기

SERVER

(14)
[Spring] Bean Scope의 종류 스프링 빈은 기본적으로 싱글톤 스코프로 설정된다. 하지만 필요에 따라 비싱글톤이 필요한 경우도 많다. 스프링이 지원하는 Bean Scope의 종류에 대해 알아보자! Scope의 종류 싱글톤 스코프: 스프링에서 기본으로 설정되는 스코프. 스프링 컨테이너의 시작부터 종료까지 하나의 객체로 유지된다. 프로토타입 스코프: 스프링 컨테이너는 프로토타입 스코프의 생성과 의존관계 주입, 초기화까지만 관여한다. 이후로 더 관여하지 않고, 프로토타입을 받은 클라이언트가 객체를 관리해야 한다. 따라서 @PreDestroy 같은 종료 메소드가 호출되지 않는다. 또한 싱글톤과는 다르게 요청이 오면 계속 새로운 객체를 생성 후 반환한다. 웹 reqeust: 각각의 요청이 들어오고 나갈때까지 유지된다. session: 세션이 생..
[Spring] Bean Life Cycle(생명주기) 스프링 빈은 기본적으로 [객체 생성 -> 의존관계 주입]이라는 생명주기를 가진다. 예외적으로 생성자 주입만이 객체 생성과 의존 관계 주입이 동시에 일어나는데, 이는 생성자 호출이 될 때 의존관계가 존재하지 않는다면 객체 생성이 불가능하기 때문이다. 하지만 setter 주입이나 field 주입의 경우, 의존관계 없이도 객체를 먼저 생성하는 것이 가능하다. 따라서 객체 생성 후 의존관계를 주입하게 된다. 스프링 빈 이벤트 라이프 사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 메소드 호출 -> 사용 -> 소멸 전 콜백 메소드 호출 -> 스프링 종료 초기화 콜백 메소드 : 빈 생성 -> 의존관계 주입 후 호출된다. 소멸 전 콜백 메소드 : 빈이 소멸되기 직전에 호출된다...
[Spring] 스프링에서 의존성을 주입하는 방법 스프링에서는 내부에서 new를 통해 의존성 객체를 직접 생성해서 쓰는 방법을 이용하지 않고, 외부에서 의존성을 주입해주는 방법을 통해 모듈 간 결합도를 낮추고 유연성을 높일 수 있다는 얘기를 했었다. 스프링에서는 Bean으로 등록되면 IoC 컨테이너가 알아서 의존성 주입을 해준다! Bean은? 스프링 컨테이너가 생성 및 관리하는 객체를 의미한다. IoC 컨테이너에 등록된 Bean들은 스프링이 의존성 주입 및 관리를 해주게 된다. Bean은 default 싱글톤 패턴으로 관리된다.(싱글톤 패턴이란 객체가 여러 차례 호출되어도, 한번만 생성한 후 참조하도록 하는 것이다) 스프링 IoC 컨테이너는? Bean의 생성 및 의존성을 관리한다. 스프링 컨테이너(IoC 컨테이너)의 종류는? 1) BeanFactory ..
[Spring] IoC와 DI 스프링의 핵심 개념을 나타내는 삼각형 중 가장 처음에 접해볼 만한 IoC와 DI에 대해 이해해보자. DI(Dependency Injection) : 의존성 주입. 의존성이 뭐길래 의존성을 주입한다는 걸까? 먼저 의존성에 대한 이해를 돕기 위해 다음과 같은 코드가 있다고 하자. 개발자가 카페를 생성하고, 카페는 내부적으로 오늘의 커피로 아메리카노를 생성한다. Cafe 객체가 Americano 객체를 사용하는 것은, 다른 표현으로는 Cafe가 Americano에 의존한다고 얘기할 수 있다. 이 경우, 개발자가 직접 new 를 이용해서 아메리카노 객체를 생성하고 있으므로, 내부에서 의존성을 만들고 있다고 볼 수 있다. public class Cafe { private Coffee today; public Ca..
[Spring Boot/ERROR] Port 8080 was already in use. spring boot으로 run을 하면 가끔씩 뜨는 오류같다. 말그대로 8080 포트가 이미 사용 중이라 발생한 오류이므로 8080 포트를 쓰고 있는 프로세스를 찾아 kill하면 된다. 1. 8080 포트를 쓰는 프로세스 확인. netstat -ano | find "8080" 그냥 netstat -ano를 써도 되지만 TCP/IP 네트워크의 모든 연결 및 수신 상황을 알려주므로 아래 사진처럼 매우 길다. 따라서 8080 포트를 찾는다는 것까지 함께 명령해주는 것이 빠르다. 2. 해당 프로세스 KILL taskkill /f /pid {PID} 이 외에도 Spring boot 프로젝트에서 다른 포트를 사용하도록 변경해줄 수도 있다.
[WEB] DAO, DTO 개념 및 실습 - JDBC(Java Database Connectivity) : 자바 프로그램 내에서 SQL문을 실행하기 위한 자바 API. (자바를 이용한 데이터베이스 접속과 SQL 문장의 실행, 그리고 실행 결과로 얻어진 데이터의 핸들링을 제공하는 방법에 대한 규약) JDBC 클래스 생성단계: DriverManager를 통해 Connection 객체를 얻는다. Connection을 통해 Statement를 얻는다. Statement를 통해 ResultSet을 얻는다. 질의 수행 & 결과 받은 후 객체를 생성 반대순서로 Close한다. - DAO(Data Access Object) : DAO, 말그대로 데이터베이스에 접근하기 위한 객체. DAO 구현을 통해 서비스 로직 부분과 DB에 접근하는 로직을 분리하여 작성할 ..