Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

J.one_DevNote

기초 CS지식 (1) 본문

CS

기초 CS지식 (1)

중엔 2022. 6. 24. 16:02

Spring이란?

스프링은 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크입니다. 스프링의 특징으로는 크기와 부하 측면에서 경량 시킨 것과, IOC 기술로 애플리케이션의 느슨한 결합을 도모시킨 것이 있습니다.

Spring과 Spring Boot의 차이점은?

Spring Boot는 스프링에서 사용하는 프로젝트를 간단하게 설정할 수 있는 서브 프로젝트 입니다. 독립 컨테이너에서 동작할 수 있기 때문에 임베디드 톰켓이 자동실행되고, 임베디드 컨테이너에 애플리케이션을 실행시키기 때문에 다소 안전성이 떨어져 큰 프로젝트에서는 사용하지 않는것이 좋습니다.

MVC 패턴이란?

MVC패턴은 Model, View, Controller로 나눠서 관리하는 방식으로 모델은 핵심비즈니스 로직을, 뷰는 사용자에게 보여주는 화면, 컨트롤러는 모델과 뷰 사이에서 정보교환을 할 수 있도록 연결시켜주는 역할을 합니다. 이는 코드의 재사용에 유용하며, 사용자 인터페이스와 응용 프로그램 개발에 소요되는 시간을 줄여줄 수 있습니다.

MVC 패턴 1 과 MVC 패턴 2의 차이점은?

패턴 1은 JSP페이지 안에서 로직처리를 위한 자바코드가 함께 사용됩니다. 요청이 오면 자바 빈이나 클래스를 이용해 작업을 처리하고, 이를 클라이언트에 출력해줍니다. 구조가 단순하지만, JSP내에 HTML과 JAVA코드가 같이 사용되어 복잡하고 유지보수성이 떨어집니다.

패턴 2는 JSP페이지 안에 있는 자바 코드를 서블릿이라는 컨트롤러에 넣어 역할을 옮긴 패턴입니다. JSP에서는 요청과 결과를 출력해주고, 서블릿은 비즈니스 로직과 컨트롤러의 역할을 하게됩니다. 이처럼 역할을 나눠 유지보수가 용이해지지만 패턴 1보다 습득이 어렵고 구조가 복잡해지는 단점이 있습니다. 

Spring MVC의 구조 흐름

우선, 클라이언트로부터 요청이 오면 디스패처 서블릿(Dispacher Servlet)이 이를 가장 먼저 받아 요청을 처리할 핸들러를 찾기위해 핸들러 매핑(Handler Mapping)을 통해 요청 URL에 맞는 핸들러를 찾습니다. 만약 인터셉터가 만들어져 있다면 핸들러를 처리 전후에 인터셉트를 실행합니다. 인터셉터를 지나 요청을 받은 핸들러는 응답에 맞는 서비스를 호출하고, 이를 렌더링할 View의 이름을 판단하여 디스패쳐 서블릿에게 전송합니다. 디스패쳐 서블릿은 받은 요청을 뷰 리졸버에게 전달하여 응답에 필요한 뷰를 생성하여 클라이언트에게 응답합니다.

Dispatcher-Servlet이란?

HTTP프로토콜을 통해 들어오는 모든 요청을 제일 앞에서 처리해주는 프론트 컨트롤러를 말합니다. 기존에는 모든 서블릿을 URL 매핑 활용을 위해 web.xml에 등록해주었지만, 디스패처 서블릿은 그전에 모든 요청을 핸들링 해주면서 작업을 편리하게 할 수 있도록 도와줍니다.

DI(Dependency Injection)란? 

스프링 컨테이너가 지원하는 핵심 개념 중 하나로, 설정 파일을 통해 객체간의 의존관계를  설정하는 역할을 합니다. 각 클래스 사이에 필요한 의존관계를 Bean설정 정보를 바탕으로 컨테이너가 자동으로 연결해줍니다. 객체는 직접 의존하고 있는 객체를 생성하거나 검색할 필요가 없으므로 코드관리가 쉬워지는 장점이 있습니다.

AOP(Aspect Oriented Programming)이란?

Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 말합니다. 관점지향이란 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점과 부가적인 관점을 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것입니다.

AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미입니다. 이때, 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는 데 이것을 흩어진 관심사 (Crosscutting Concerns)라 부릅니다. 이런 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지입니다.

이러한 흩어진 관심사 (웹 애플리케이션의 보안, 로깅, 트랜잭션과 같은 공통 관심 사항)을 AOP를 이용해 핵심 로직 코드를 수정하지 않고도 간단한 설정만으로도 공통 기능을 여러 클래스에 적용할 수 있는 장점이 있습니다.  

MVC모델에서   Service 와 DAO의 차이

Service는 업무를 담당하는 영역, 즉 비스니스 로직이라고 합니다. DAO는 데이터에 접근하는 영역, 즉 DB에서 데이터를 조작하는 기능들을 수행합니다. 따라서 두 영역을 구분함으로서 프로젝트가 클경우 코드 관리와 유지보수가 쉽게 할 수 있습니다.

Spring Bean이란?

Spring loC제어의 역전 (IOC, Inversion Of Control) 컨테이너가 관리하는 자바 객체를 빈(Bean)이라고 부릅니다. (**IOC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡깁니다. 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 됩니다. 즉, 사용자의 제어권을 다른 주체에게 넘기는 것을 IOC(제어의 역전) 라고 합니다.)

Annotation은 클래스와 메서드에 추가하여 다양한 기능을 부여하는 역할을 합니다. Annotation을 활용하여 Spring Framework는 해당 클래스가 어떤 역할인지 정하기도 하고, Bean을 주입하기도 하며, 자동으로 getter나 setter를 생성하기도 합니다. 특별한 의미를 부여하거나 기능을 부여하는 등 다양한 역할을 수행할 수 있습니다.

@Component : Spring Framework는 @Component, @Service, @Repository, @Controller, @Configuration 중 1개라도 등록된 클래스를 찾으면, Context에 bean으로 등록합니다.

@Bean : 개발자가 제어가 불가능한 외부 라이브러리와 같은 것들을 Bean으로 만들 때 사용합니다

@Controller : 해당 Class가 Controller의 역할을 한다고 명시하기 위해 사용하는 Annotation입니다.

@RequestMapping :  요청 들어온 URI의 요청과 Annotation value 값이 일치하면 해당 클래스나 메소드가 실행됩니다. 

@RequestParam : URL에 전달되는 파라미터를 메소드의 인자와 매칭시켜, 파라미터를 받아서 처리할 수 있는 Annotation

@RequestBody : Body에 전달되는 데이터를 메소드의 인자와 매칭시켜, 데이터를 받아서 처리할 수 있는 Annotation

@ResponseBody : 메소드에서 리턴되는 값이 View 로 출력되지 않고 HTTP Response Body에 직접 쓰여지게 됩니다

Lombok 의 대표적인 Annotation

@Setter : 모든 필드의 Setter method를 생성해줍니다.

@Getter : 모든 필드의 Getter method를 생성해줍니다.

@AllArgsConstructor : 모든 필드 값을 파라미터로 받는 생성자를 추가합니다.

@NoArgsConstructor : 기본 생성자를 자동으로 추가해줍니다.

@ToString : 모든 필드의 toString method를 생성한다.

 

 

 

 

 

 

'CS' 카테고리의 다른 글

클라우드 아키텍쳐의 이해  (0) 2024.11.07
Mac Address & IP  (0) 2023.01.11
개념 공부  (0) 2022.10.27
DI 정리글 모음  (0) 2022.10.27
{JAVA} - 메모리  (0) 2022.06.27
Comments