Spring

Spring

스프링 주요 개념(IoC, DI, AOP, PSA)

IoC(제어의 역전) 제어의 역전은 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것을 말한다. 즉, 객체의 생성과 관리를 개발자가 하는 것이 아닌 프레임워크가 대신한다. [클래스 A에서 new 키워드로 클래스 B의 객체 생성] public class A { b = new B(); } [코드에서 객체를 생성하지 않음, 어디선가 받아온 객체를 b에 할당] public class A { private B b; } 다른 곳에서 받아와서 사용한다. 직접 생성하는 것이 아니다. 외부의 객체를 관리하는 주체를 스프링 컨테이너라고 한다. DI(의존성 주입) DI는 어떤 클래스가 다른 클래스에 의존한다는 말이다. public class A { @Autowired B b; }..

Spring

서버 템플릿 엔진 - Handlebars

서버 템플릿 엔진 JSP, Freemarker, Velocity는 한동안 업데이트가 안되고 있다. Springboot는 위 같은 엔진을 권장하지 않고, Thymeleaf를 권장하고 있다. 하지만 Handlebars를 사용해보는 것도 좋다. 이의 장점은 문법이 다른 템플릿 엔진보다 간단하고, 로직 코드를 사용할 수 없어 View 역할과 서버의 역할을 명확하게 분리할 수 있다. 템플릿 엔진은 일반적으로 비즈니스 로직과 연관되지 않는 것이 좋다. build.gradle 의존성 추가 implementation 'pl.allegro.tech.boot:handlebars-spring-boot-starter:0.3.4'

Spring

TestContainers

https://www.testcontainers.org/ TestContainers는 Junit Test를 지원하는 Java Library로, Docker 컨테이너를 사용할 수 있도록 일회용 인스턴스를 제공한다. 일회용이니 독립적이고 멱등성있는 환경을 얻을 수 있다. 장점 - 테스트할 때만 컨테이너를 띄우기 때문에 계속해서 메모리를 차지하지 않는다. - 테스트 환경 DB가 필요없기 때문에 추가 리소스가 필요하지 않다. 단점 - 테스트를 실행할 때마다 도커 컨테이너를 생성하고 세팅하는 작업이 추가된다. - 가벼운 테스트라도 도커 컨테이너를 생성하고 세팅하는 시간이 있어 시간이 소요된다. build.gradle 의존성 추가 testImplementation 'org.testcontainers:spock:1...

Spring

객체지향쿼리, JPQL

JPQL (Java Persistence Query Language) : 엔티티 객체를 조회하는 객체지향 쿼리다. JPQL은 SQL을 추상화하여 특정 데이터베이스에 의존하지 않는다. 따라서, 데이터베이스 방언이 바뀌어도 상관없다. Criteria는 JPQL을 생성하는 빌더 클래스이다. 문자열로 JPQL을 작성하면 런타임이 되어야 문법 오류를 알 수 있지만, Criteria는 자바 코드 기반이기 때문에 안전하게 JPQL을 작성할 수 있다. // Criteria 사용 시작 CriteriaBuilder cb = eb.getCriteriaBuilder(); CriteriaQuery query = cb.createQuery(Member.class); // 루트 클래스 (조회를 시작할 클래스) Root m = qu..

Spring

Spring MVC 동작순서

동작 순서 1. 핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다. 2. 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다. 3. 핸들러 어댑터 실행 : 핸들러 어댑터를 실행한다. 4. 핸들러 실행 : 핸들러 어댑터가 실제 핸들러를 실행한다. 5. ModelAndView 반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다. 6. viewResolver 호출 : 뷰 리졸버를 찾고 실행한다. (JSP의 경우 InternalResourceViewResolver가 자동 등록되고, 사용된다.) 7. View 반환 : 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다. ..

Spring

Front Controller 패턴 특징

Front Controller 도입 전에는 공통 로직을 컨트롤러마다 하나씩 다 만들어야했다. Front Controller 등장 후, Front Controller 서블릿 하나로 클라이언트의 요청을 받을 수 있다. Front Controller가 요청에 맞는 컨트롤러를 찾아서 호출한다. (입구를 하나로 만드는 것) 공통 처리가 가능하다. Front Controller를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 된다. 공통 코드는 Front Controller에서 처리하고, 서로 다른 코드들만 각 컨트롤러에서 처리할 수 있게 한다.

Spring

Maven과 Gradle

Maven과 Gradle은 빌드 관리 도구이다. 빌드 관리 도구는 프로젝트에서 필요한 xml, properties, jar 파일들을 자동으로 인식하여 빌드해주는 것이다. 외부 라이브러리를 참조하여 자동으로 다운로드를 진행하거나 업데이트를 관리하기도 한다. Maven은 자바의 대표적인 관리 도구였던 Ant를 대체하기 위해 개발되었다. 기존 Ant는 빌드의 기능만 가지고 있었다. Maven은 자동으로 라이브러리를 관리해주는 기능을 가지고 있어 Ant를 대체하였다. 만약, 라이브러리에 변동 사항이 있으면 자동으로 업데이트가 가능하다. 그리고 Maven은 pom.xml로 편하게 Dependency를 관리한다. pom.xml ? 1. 프로젝트 정보 관리 2. 해당 프로젝트에서 사용하는 외부 라이브러리 관리 3. ..

화서동 병아리
'Spring' 카테고리의 글 목록