본문 바로가기

Web/Spring7

Unable to find a @SpringBootConfiguration 에러 내용 JUnit test 실행 중 발생한 에러이다 실행하려는 테스트 클래스의 위치가 main에서 @SpringBootApplication을 달고 있는 클래스의 하위 패키지에 위치하지 않으면 bean 탐색에 실패하는 것이다 ex) main.java.org.zerock.club.ClubApplication main.java.org.zerock.security.PasswordTests 해결방법 부트 프로젝트 실행 클래스의 하위 패키지에 위치하도록 변경해주면 정상적으로 동작 2022. 1. 20.
Spring IoC Container Spring IoC Container란? IoC Container는 제어의 역전(Inversion of Control)을 구현하는 프레임워크의 특징이다. Spring 프레임워크에서는 ApplicationContext interface가 IoC Container의 역할을 합니다. Spring Container는 객체를 bean이라는 이름으로 인스턴스화하고 구성 및 조합하며 등록된 bean의 lifecycle을 관리한다. Spring 프레임워크에서 ApplicationContext를 구현하는 방법은 ClassPathXmlApplication, FileSystemXmlApplication, WebApplicationContext 3가지가 있다. Container는 bean을 등록하기 위해 XML 형태의 설정 .. 2021. 10. 11.
의존성 주입 - DI(Dependency Injection) 의존성이란? 먼저 의존성에 대해 알아보려고 한다. 프로그램에서 의존성은 크게 두 가지로 나누어 생각해야 한다. 정적인 클래스 의존성 Class의 import만 보고 의존성을 쉽게 판단할 수 있는 것. 즉, 애플리케이션이 실행되지 않아도, 구현체를 직접 확인하지 않아도 의존성 파악이 되는 것. 동적인 객체 인스턴스 의존성 Runtime에 결정되는 동적인 객체(인스턴스)에 따라 의존성이 부여되는 것. DI란? 애플리케이션 Runtime에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존성이 연결되는 것, 즉 IoC를 구현하는 것을 의존성 주입(DI) 이라고한다. 의존성 주입을 사용하면 클라이언트 코드를 변경하지 않고, 호출하는 객체의 타입 인스턴스 변경 가능. 또한 정적.. 2021. 10. 11.
제어의 역전 - IoC(Inversion of Control) 제어의 역전 - IoC 란? 제어의 역전은 객체의 컨트롤 또는 프로그램의 일부분을 프레임워크의 컨테이너에 전송하는 SW 엔지니어링 개념이다. 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성, 연결, 실행했다. ( Service class가 Repository class를 직접 생성하거나, instance를 가져와서 호출하는 등 ) 즉, 구현 객체가 프로그램의 제어 흐름을 스스로 컨트롤했다. 각 객체의 설정을 대신해주는 Config class를 둠으로써 각 객체는 본인의 역할만을 수행하도록 할 수 있다. 즉, 프로그램의 제어 흐름을 Config class가 컨트롤하는 것이다. 이렇듯 프로그램의 제어 흐름을 개발자가 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전이.. 2021. 10. 11.
JPA Entity 생성자 JPA 강의를 보면서 라이브 코딩하던 중 아래와 같은 에러가 발생했습니다 에러의 내용은 생성한 Entity의 인스턴스화에 문제가 있는데, 그 원인이 기본 생성자가 없다는 것입니다. 왜 굳이 기본 생성자가 필요한 것일까?라는 의문에 공식문서를 찾아보았습니다. 기본 생성자가 존재해야 persistent class에 대해 Constructor.newInstance()를 사용해 인스턴스화 할 수 있다고 합니다. 이때 기본 생성자는 public, protected 중 하나여야 합니다. 더 자세한 내용은 아래 링크를 참조하면 좋습니다. https://stackoverflow.com/questions/2935826/why-does-hibernate-require-no-argument-constructor 2021. 7. 20.
객체지향 설계원칙 SOLID Spring이 Java 진영에 환영받고 표준으로 자리잡을 수 있었던 가장 큰 이유는 좋은 객체지향 프로그래밍을 할 수 있기 때문입니다. 그렇다면 좋은 객체지향 프로그래밍이란 무엇일까요? 그것은 바로 SOLID 원칙을 잘 지키는 것입니다. SOLID SRP(Single Responsibility Principle) - 단일 책임 원칙 모든 클래스는 각각 하나의 책임(기능)만 가져야 한다. 따라서 클래스를 수정할 때 다른 기능에 영향이 없어야 한다. OCP(Open Closed Principle) - 개방/폐쇄 원칙 확장에는 열려있고 수정에는 닫혀있어야 한다. 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다. LSP(Liskov Substitution Principle) - 리스.. 2021. 6. 15.
Spring 이란? 추운 겨울이 지나고 개발자들에게 봄이 왔다. Spring은 로드 존슨에 의해 처음 제시되었고 유겐 휠러, 얀 카로프의 제안으로 오픈소스 프로젝트로 프레임워크 개발이 시작되었습니다. Spring에는 BeanFactory, ApplicationContext, POJO, IoC, DI 등 핵심 개념들이 있는데 나중에 자세히 정리해보겠습니다. Spring이 Java Web 진영의 사실상 표준이 되면서 보다 나은 개발환경을 제공하기 위해 Spring Boot, Security, Cloud 등 다양한 서브 프로젝트들이 추가되고 있습니다. Spring F/W의 기술 스펙 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트 웹 기술: Spring MVC, Spring WebFlux 데이터 접근 기술: transacti.. 2021. 6. 14.