Spring 기초(41)
-
UUID란, UUID vs 자동증가 pk
개요 💡 강의에서 엔티티의 PK를 UUID로 사용하고 있다. UUID란 무엇이며, 자동 증가 PK 와 비교했을 때 어떤 장단점이 있는지 알아보았다. MySQL에 UUID를 저장하고 조회할 때 발생할 수 있는 문제를 간략하게 정리했다. UUID란 UUID는 정보 식별을 위해 사용되는 식별자로, 128-bit 숫자로 구성되어있다. 네트워크 상에서 각 개체들을 식별하기 위해서는 각각의 고유한 이름이 필요하며, 이 이름은 유일성이 매우 중요하다. 중복되는 이름의 개체가 존재하면 구별이 불가능하기 때문이다. 중앙에서 관리시스템을 두어 고유한 이름을 부여해 주면 고유성을 확보할 수 있다. 하지만 독립적으로 개발되는 시스템들은 중앙 관리 시스템으로 관리할 수 없다. 따라서 개발 주체가 스스로 이름을 지으면서 유일성을..
2022.11.12 -
순환 참조 문제(Setter 주입 vs 생성자 주입)
순환참조란 A 클래스가 B 클래스의 Bean을 주입받고, B클래스가 A 클래스의 Bean을 주입받는 상황처럼 서로 순환되어 참조되는 경우를 말한다. 특정 클래스에서 DI를 받을 수 있는 방법은 필드 주입, Setter 주입, 생성자 주입이 대표적으로 가능하다. 이번에는 지난번 Setter 주입과 생성자 주입에서 각각 순환참조 문제가 다르게 나타나는 것을 살펴본다. 준비한 예제에서는 DependencyA와 DependencyB가 서로 순환 참조를 하고 있는 상황이다. Setter 주입의 경우 class DependencyA { private DependencyB dependencyB; @Autowired void setDependencyA(DependencyB dependencyB) { this.depen..
2022.11.02 -
수정자 DI, 생성자 DI
스프링 DI 방법 2가지 Dependency Injection(의존관계 주입) 강한 결합 객체 내부에서 다른 객체를 생성하면 강한 결합도를 갖게된다. A 클래스 내부에서 B라는 객체를 직접 생성할 경우, B 객체를 C로 변경해야 한다면 A 클래스 내부의 코드를 직접 수정해야한다. 런타임 이전에 의존관계가 이미 형성된다. 느슨한 결합 객체를 주입받는다는 것은 외부에서 생성된 객체를 인터페이스를 통해 넘겨받는 것을 의미한다. 이는 결합도를 낮추고 런타임 시에 의존관계가 결정된다. 스프링에서는 의존관계 주입을 통해 객체 간 느슨한 결합을 유지할 수 있는데, 대표적으로 의존관계를 주입할 수 있는 Setter 주입과 생성자 주입에 대해 알아보자. 1. Setter 주입 IDE의 자동생성 기능으로 setter 메소..
2022.11.02 -
IoC(Inversion of Control)란
Ioc(제어의 역전)란 단순히 말하자면 프로그램의 제어 흐름 구조가 뒤바뀌는 것이다. [일반적인 실행 흐름] main() 메소드 등 시작 지점에서 다음에 사용할 오브젝트를 결정하고 생성 --> 생성한 오브젝트의 메소드를 호출 --> 해당 메소드 내에서 다음에 사용할 것을 결정하고 호출 --> 반복 제어의 역전은 이런 제어 흐름의 개념을 뒤집는다. 자신이 어떤 오브젝트를 사용할지 스스로 선택하지 않으며, 본인도 어디서 사용되는지 알 수 없다. 모든 제어 권한을 다른 대상에게 위임하기 때문이다. 서블릿을 예로 들면, 우리는 서블릿을 개발하고 서버에 배포할 수 있어도 그 실행을 우리가 직접 제어할 수 있는 방법은 없다. 대신 서블릿에 대한 제어권한을 가진 컨테이너가 적절한 시점에 서블릿 클래스의 오브젝트를 만..
2022.11.01 -
Spring Boot CLI 로 프로젝트 생성하기
필자는 Window, Java 11, Intelli J를 사용하고 있다. 이번 포스팅에서는 Spring Boot CLI로 스프링 프로젝트 생성하는 방법을 살펴본다. 1. 우선 Spring Boot CLI를 다운로드 한다. 나는 아래 링크에서 2.7.5 버전으로 수동 설치했다. https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started.installing.cli Getting Started If you are getting started with Spring Boot, or “Spring” in general, start by reading this section. It answers t..
2022.10.31 -
Redirect VS Forward
Redirect 와 Forward는 둘 다 현재 작업중인 페이지에서 다른 페이지로 이동하는 기능이다. 둘의 차이점을 간단한 비유로 설명하자면, 고객은 클라이언트, 중국집은 서버, 전화번호는 URL이라고 이해하면 쉽다. [Redirect] 1. 고객이 '일미반점' 중국집에 123-4567로 전화를 건다. 2. 종업원은 고객에게 다음과 같이 말한다. "여기는 일미분식입니다.. 짜장 주문은 234-4567로 연락하시오!" 3. 고객은 234-4567로 다시 전화를 해서 주문을 한다. [Forward] 1. 고객이 '일미반점' 중국집에 123-4567로 전화를 건다. 2. 종업원은 재고나 부엌 사정을 알지 못해 옆에 주방장에게 문의해서 답을 얻는다. 3. 종업원이 고객의 주문을 처리한다. 대충 감은 익혔을 테니..
2022.09.28