반응형

2023/06 6

[스프링 Core] 도대체 DI(Dependency Injection) 란 무엇인가?

[스프링 Core] 도대체 DI(Dependency Injection) 란 무엇인가? 스프링의 핵심 3대 요소 AOP, IOC, DI를 들어보신 적이 있을 것 입니다. 오늘은 DI가 도대체 무엇인지 확실하게 설명해드리겠습니다…!! 그리고 스프링 컨테이너가 IoC인 이유를 알아봅시다. 문제 인식 🤔 public class Driver { private Avante avante; public Driver() { this.avante = new Avante(); } public void drive() { avante.start(); } } 위 클래스는 2가지 문제점이 있습니다. 두 클래스가 강하게 결합 객체들간의 관계가 아니라 클래스간의 관계가 맺어짐 두 클래스가 강하게 결합 Driver 클래스는 Avante..

[JUnit] 회원가입 API 컨트롤러, 서비스, 리포지토리 테스트 예제

[JUnit] 회원가입 API 컨트롤러, 서비스, 리포지토리 테스트 예제 인프런에서 박우빈님의 [Practical Testing: 실용적인 테스트 가이드] 강좌를 들으면서 강의 내용을 복습할 겸 테스팅하는 방법에 대하여 공유하고자 합니다. 좋은 강의 만들어주신 우빈님 감사합니다.^^ 들어가기에 앞서 여러분은 테스트 하면 어떤 생각이 떠오르나요? 라는 질문을 받았습니다. 저의 머리속에는 “귀찮다.” 라는 생각이 떠올랐습니다. 그런데 강의에서도 귀찮다. 라고 소개했습니다. 😲 (독심술이 있으신건가…?) 그렇습니다. 테스트는 매우 귀찮은 작업입니다. 기능 구현하는데 시간이 모자른데 테스트 코드까지 작성해야 한다? 에바지~ 라는 생각이 먼저 듭니다. 그리고 무엇보다 테스트는 귀찮습니다. (일반적으로 개발자는 귀..

테스트/0+ JUnit 2023.06.09

[스프링 Core] 스프링 빈 초기화(@PostConstruct, @PreDestroy)

[스프링 Core] 스프링 빈 초기화(@PostConstruct, @PreDestroy) 우리는 스프링 빈을 등록하고 초기화 해야하는 작업을 해야할 때가 있습니다. 객체를 생성할 때 초기화하면 되지 않나? 🤔 라고 생각할 수 있습니다. 하지만, 객체를 생성하는 생성자와 초기화 작업은 분리하는 것이 좋습니다. 그렇다면 어떻게 스프링 빈을 초기화할 수 있을까요? 참고 생성자 안에서 상대적으로 무거운 초기화 작업을 함께 하는 것보다는 객체를 생성하는 부분과 초기화 하는 부분을 명확하게 나누어 관리하는 것이 유지보수에도 좋습니다. 스프링 빈 생명주기 🌱 먼저 스프링 빈의 생명주기에 대해서 알아야 합니다. 스프링 빈은 아래와 같은 생명주기를 갖고 있습니다. 객체 생성 -> 의존관계 주입 -> (데이터 사용 가능)..

[JPA] 조건절을 포함한 일대다 페이징 최적화

[JPA] 조건절을 포함한 일대다 페이징 최적화 방법 일대다 조인에서 페치조인을 사용하면 페이징을 할 수 없습니다. 우리는 일대다에서 일(1)을 기준으로 페이징하는 것이 목적입니다. 그런데 데이터는 다(N)를 기준으로 row를 생성합니다. 그렇다면 페이징을 하기 위해서는 지연로딩으로 1+N 문제가 발생하는 것을 모르는척 해야할까요? 🤔 일대다 페치조인의 문제 일대다 페치조인을 하면 다(N)를 기준으로 데이터가 생성됩니다. Order OrderItem라고 할 때 다음과 같습니다. 우리는 Order를 기준으로 페이징을 하고 싶습니다….! 😭 조건절을 포함한 일대다 페이징 최적화 방법 목표 Item의 상품명을 조건으로 Order를 Delivery, OrderItem, Item 데이터를 함께 조회하여 페이징 되..

[스프링 + 포트원] 스프링으로 포트원 사용해서 결제 구현 하는 방법(Spring Boot, JPA, PortOne)

[스프링 + 포트원] 스프링으로 포트원 사용해서 결제 구현 하는 방법(Java, Spring Boot, JPA, PortOne)  깃허브 링크https://github.com/ssosee/portone-sample-onedollar-shop   포스팅 동기쇼핑몰을 개발하면 결제 부분에서 어떻게 해야할지 막막한 개발자들이 있을 것 입니다.저 또한 그랬습니다. 😭 결제를 구현하기 위해서는 각 PG사에서 제공하는 API를 사용하여 개발을 진행해야하는데,만만한 작업이 아니라고 생각합니다… 이러한 문제를 해결하고자 포트원이라는 업체가 등장했습니다.그런데…. 이마저도 막상 개발하다보면 어려움을 느낍니다… 그리고 구글링을 하다보면 대부분 javascript를 사용하여 구현한 예제들만 있고,Spring을 사용한 예제..

0+ 스프링 2023.06.03

[스프링 Core] @Configuration를 사용하면 싱글톤을 유지할 수 있는 이유(CGLIB)

[스프링 Core] @Configuration를 사용하면 싱글톤을 유지할 수 있는 이유(CGLIB) 미리 보는 결론 @Configuration은 싱글톤을 위해서 존재합니다. @Bean만 사용해도 스프링 빈으로 등록이 가능 @Configuration을 사용하면 바이트 코드를 조작하는 CGLIB를 사용하여 클래스를 상속받는 프록시 객체를 만들어서 스프링 빈을 싱글톤으로 관리할 수 있게 해준다. 스프링 설정 정보는 반드시 @Configuration을 사용하자! @Configuration 예시 스프링 컨테이너는 기본값으로 모든 인스턴스를 싱글톤으로 관리합니다. 그런데 아래와 같은 코드를 보면 좀 이상하지 않나요? ApplicationConfig @Configuration public class Applicati..

반응형