spring 21 [Spring] Servlet과 Servlet Container Servlet이란? 클라이언트 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그램입니다. 클라이언트의 Request에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트 HTML을 사용하여 Response 한다. JAVA의 스레드를 이용하여 동작한다. MVC 패턴에서의 컨트롤러로 이용된다. HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다. Servlet Container 내부에서 Singleton 형태로 존재합니다. UDP보다 속도가 느리다. HTML 변경 시 Servlet을 재차 컴파일해야 하는 단점이 있다. 서블릿은 자바로 구현 된 CGI라고 흔히 말합니다. CGI(Common Gat.. Domain/Spring 2021. 9. 18. [Spring] Component와 ComponentScan ( Component / SpringBootApplication / Bean ) Component? @Component는 개발자가 직접 작성한 Class를 Bean으로 등록할 수 있도록 해주는 어노테이션입니다. ComponentScan? @ComponentScan은 스프링 3.1부터 도입된 어노테이션입니다. ComponentScan은 스프링이 직접 클래스를 검색해서 Bean으로 등록해주는 기능입니다. 설정 클래스에 빈으로 등록하지 않아도 원하는 클래스를 빈으로 등록할 수 있으므로 설정 코드가 크게 줄어듭니다. 스프링이 검색해서 빈으로 등록할 수 있으려면 @Component 어노테이션을 붙여야 합니다. @Component 어노테이션은 해당 클래스를 스캔 대상으로 표시합니다. @ComponentScan("패키지 경로") 해당 패키지에 있는 컴포넌트 객체(@Component, @Contr.. Domain/Spring 2021. 9. 12. [Spring] 의존성 주입의 방식 ( Autowired / Inject / Resource / Bean / DI / Constructor / Setter / Field / 순환참조 ) 스프링에서 DI를 적용하는 방식은 필드 주입 방식(Field Injection), 수정자 주입 방식(Setter Injection), 생성자 주입 방식(Constructor Injection)이 있습니다. 스프링 공식 문서에서는 생성자 주입 방식(Constructor Injection)과 수정자 주입 방식(Setter Injection)만 소개하고 있지만, 실제로 필드(Field) 방식도 가능합니다. 스프링에서는 필수적인 의존성에서는 생성자 주입 방식(Constructor Injection)을, 선택적인 의존성에서는 Setter Injection를 사용하라고 합니다. 이번 글에서는 주입방식 사용방법을 예시로 나타내고 왜 생성자(Constructor) 주입 방식을 사용해야 하는지에 대해 알아보도록 하겠습니.. Domain/Spring 2021. 9. 10. [Spring] DTO vs VO vs Entity DTO Data Transfer Object, 데이터 전송 객체라고 불리며 계층(Layer)간 데이터 교환을 위해 사용하는 객체입니다. 로직을 가지고 있지 않은 순수한 데이터 객체이며 getter/setter 메서드만 가지고 있습니다. 데이터를 전송하는 바구니라고 생각하면 됩니다. VO Value Object, 값 객체라고 불리며 특정한 값 그 자체를 표현하는 객체입니다. 서로 다른 이름을 가진 VO의 인스턴스가 모든 속성값이 같다면(hashCode, equals) 같은 객체라고 볼 수 있습니다. 또한 생성된 후 상태 변경이 불가능한 객체의 불변성을 보장합니다. DTO와 다르게 로직을 포함할 수 있습니다. Entity Entity는 실제 DB의 테이블과 매핑되는 데이터입니다. 또한 가변 객체로 생성 후 .. Domain/Spring 2021. 8. 31. [Design Pattern] Proxy Pattern 프록시는 대리인이라는 뜻으로 무엇인가를 대신 처리하는 의미입니다. 프록시 패턴은 프록시를 사용하는 방법 중에서 타깃에 대한 접근 방법을 제어하려는 목적을 가진 경우를 가리킵니다. 프록시 패턴의 프록시는 타깃의 기능을 확장하거나 추가하지 않습니다. 대신 클라이언트가 타깃에 접근하는 방식을 변경해주는 역할을 합니다. 타깃 오브젝트를 생성하기가 복잡하거나 당장 필요하지 않은 경우에는 꼭 필요한 시점까지 오브젝트를 생성하지 않는 편이 좋습니다. 그런데 타깃 오브젝트에 대한 레퍼런스가 미리 필요할 수 있습니다. 이럴 때 프록시 패턴을 적용하면 됩니다. 클라이언트에게 타깃에 대한 레퍼런스를 넘겨야 하는데, 실제 타깃 오브젝트는 만드는 대신 프록시를 넘겨주는 방식입니다. 그리고 프록시의 메소드를 통해 타깃을 사용하려.. Computer Science/Design Pattern 2021. 8. 18. [Spring] JDBC와 Transaction 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미합니다. DB는 그 자체로 완벽한 트랜잭션을 지원합니다. SQL을 이용해 다중 로우의 수정이나 삭제를 위한 요청을 했을 때 일부 로우만 삭제되고 나머지는 안 된다거나, 일부 필드는 수정했는데 나머지 필드는 수정이 안 되고 실패로 끝나는 경우는 없습니다. 하나의 SQL 명령 을 처리하는 경우는 DB가 트랜잭션을 보장해준다고 믿을 수 있습니다. 하지만 여러 개의 SQL이 사용되는 작업을 하나의 트랜잭션으로 취급해야하는 경우도 있습니다. 문제는 선행 SQL을 성공적으로 실행했지만 후행 SQL이 성공하기 전에 장애가 생겨서 작업이 중단되는 경우입.. Domain/Spring 2021. 8. 18. [Spring] JdbcTemplate 스프링은 JDBC를 이용하는 DAO에서 사용할 수 있도록 준비된 다양한 템플릿과 콜백을 제공합니다. 거의 모든 종류의 JDBC코드에 사용 가능한 템플릿과 콜백을 제공할 뿐만 아니라, 자주 사용되는 패턴을 가진 콜백은 다시 템플릿에 결합시켜서 간단한 메소드(update(), query(), queryForObject()) 호출만으로 사용이 가능하도록 만들어져 있기 때문에 템플릿/콜백 방식의 기술을 사용하고 있는지도 모르고도 쓸 수 있을 정도로 편리합니다. 스프링이 제공하는 JDBC 코드용 기본 템플릿이 바로 JdbcTemplate입니다. update() update는 다양한 형태를 제공하지만 기본적으로 SQL 구문과 '?' 치환자를 대체할 수 있는 가변인자들을 파라미터로 받아 사용하는 메서드입니다. //예.. Domain/Spring 2021. 8. 9. [Spring] Bean ( Spring Bean ) Bean Spring에서는 Container를 이용해 객체들을 관리합니다. 이때 Container가 관리하는 자바 객체를 Bean이라고 부릅니다. 흔히 알고 있는 new를 통해 생성된 객체는 Bean이라고 할 수 없습니다. Bean은 getBean()을 통해 얻어질 수 있는 것을 Bean이라고 합니다. Spring에서의 빈은 ApplicationContext가 알고있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미합니다. Spring에서 Bean을 등록하는 방법은 ComponentScan 방법과, Configuration에서 직접 등록하는 방법이 존재합니다. 스프링은 기본적으로 모든 Bean을 Singleton으로 생성하여 관리합니다. Bean은 다양한 Scope를.. Domain/Spring 2021. 7. 23. [Spring] 컨테이너( Container / IoC Container / BeanFactory / ApplicationContext ) Container는 Spring의 핵심입니다. Container는 개발자를 대신하여, Bean의 생명주기를 담당합니다. Container가 Bean을 관리해주기 때문에, 개발자는 모듈 간에 의존 및 결합으로 인해 발생하는 문제로부터 자유로워 졌습니다. 이렇게 개발자가 할 일을 Container가 대신해주는 것을 IoC(Inversion of Control)이라고 합니다. Container는 스프링의 핵심인 IoC가 가능하도록 해주는 역할을 합니다. Container는 필요로 하는 자원을 런타임에 전달하는데, 이것을 Dependency Injection이라고 부릅니다. IoC와 DI는 Spring에서 핵심적인 부분이기 때문에 이러한 부분을 자동으로 관리해주는 Container 또한 Spring에서 핵심적인.. Domain/Spring 2021. 7. 13. [Spring] POJO ( Spring POJO / Spring Triangle / Plain Old Java Object ) 스프링 핵심 개발자들은 “스프링의 정수는 엔터프라이즈 서비스 기능을 POJO에 제공하는 것”이라고 했습니다. 분리됐지만 반드시 필요한 엔터프라이즈 서비스 기술을 POJO 방식으로 개발된 애플리케이션 핵심 로직을 담은 코드에 제공한다’는 것이 스프링의 가장 강력한 특징과 목표입니다. 스프링 애플리케이션은 POJO를 이용해서 만든 애플리케이션 코드와, POJO가 어떻게 관계를 맺고 동작하는지를 정의해놓은 설계정보로 구분됩니다. 스프링의 주요 기술인 IoC/DI. AOP와 PSA는 애플리케이션을 POJO로 개발할 수 있게 해주는 가능기술이 라고 불립니다. POJO란? POJO는 Plain Old Java Ojbect를 의미합니다. POJO는 자바의 단순한 오브젝트라고 할 수 있습니다. 진정한 POJO의 의미는.. Domain/Spring 2021. 7. 13. 이전 1 2 3 다음