Do it! 알고리즘 입문: 자바 편 (5)[책리뷰 & Book review]
본문 바로가기

컴퓨터공부/책리뷰 & book review

Do it! 알고리즘 입문: 자바 편 (5)[책리뷰 & Book review]

by Life & study 2024. 1. 30.
반응형

 

 

 

 문자서비스 업체에서 spring mvc패턴 2

spring MVC 패턴과 Spring Boot를 이용한 웹 애플리케이션 개발의 기본적인 순서와 동작 방식

사용자 요청(Request): 사용자가 웹 브라우저를 통해 특정 URL로 요청을 보냅니다.
DispatcherServlet: Spring MVC에서 핵심적인 역할을 하는 DispatcherServlet이 요청을 가로챕니다. 

DispatcherServlet은 모든 요청을 중앙에서 관리합니다.


HandlerMapping: DispatcherServlet은 HandlerMapping에게 어떤 Controller가 요청을 처리할 것인지 물어봅니다. HandlerMapping은 URL 패턴과 Controller를 매핑한 정보를 가지고 있습니다.


Controller: HandlerMapping으로부터 받은 정보에 따라 DispatcherServlet은 해당 Controller에게 요청을 위임합니다. Controller는 비즈니스 로직을 처리한 후, 결과를 ModelAndView 객체에 담아 DispatcherServlet에게 반환합니다.


ViewResolver: DispatcherServlet은 ViewResolver에게 뷰 이름에 해당하는 실제 뷰를 찾아달라고 요청합니다.


View: ViewResolver는 뷰 이름에 해당하는 JSP나 Thymeleaf 등의 뷰를 찾아 DispatcherServlet에게 알려줍니다.


응답(Response): DispatcherServlet은 뷰에게 Model을 전달하고, 뷰는 Model 정보를 이용해 최종적인 HTML을 생성한 후 사용자에게 응답합니다.


이러한 과정을 코드로 표현하면 다음과 같습니다.

java

// Controller
@Controller
public class MessageController {
    @Autowired
    private MessageService messageService;

    @RequestMapping("/send")
    public ModelAndView sendMessage(@RequestParam("message") String message) {
        messageService.sendMessage(message);
        ModelAndView mv = new ModelAndView();
        mv.addObject("message", message);
        mv.setViewName("resultPage");
        return mv;
    }
}

// Service
@Service
public class MessageService {
    public void sendMessage(String message) {
        // 문자 전송 로직
    }
}


위의 코드는 간단한 예시이며 실제로는 보안, 예외 처리 등의 여러 가지 사항을 고려해야 합니다. 

또한, Spring Boot에서는 DispatcherServlet, HandlerMapping, ViewResolver 등의 Bean은 자동으로 설정되므로 개발자는 Controller와 Service, Repository 등의 비즈니스 로직에만 집중할 수 있습니다.

마지막으로, Spring MVC 패턴의 작동 방식은 아래와 같습니다.

[사용자] ---(요청)---> [DispatcherServlet] ---(Handler Mapping)---> [Controller]
  ^                         |                <---(ModelAndView)---
  |                         |
  |                         |
  |---(응답)--- [View] <---(View Resolver)


위의 설명은 Spring MVC 패턴과 Spring Boot의 기본적인 사용 방법에 대한 것이며, 

실제로는 프로젝트의 요구 사항과 구조에 따라 달라질 수 있습니다.




 

문자서비스 업체에서 springboot

 

 

 

 

 

 

 

스프링이 무엇이냐 물어본다면 OOP 객체지향 프로그램이다라고 한다?

 

스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 오픈 소스 프레임워크로, 

엔터프라이즈급 애플리케이션을 구축하는 데 사용됩니다. 

객체 지향 프로그래밍(OOP)의 원칙을 따르는 것이 맞지만, 

그 자체가 OOP라고 표현하기보다는 OOP를 지원하는 도구라고 보는 것이 더 정확합니다.

스프링은 다음과 같은 특징을 가집니다:

IoC(Inversion of Control): 객체 간의 의존 관계를 개발자가 아닌 컨테이너가 관리하는 것을 말합니다.
AOP(Aspect Oriented Programming): 공통 기능을 재사용하고 비즈니스 로직에 집중할 수 있도록 도와줍니다.
트랜잭션 관리, MVC 패턴 지원 등 다양한 서비스를 제공합니다.


스프링을 사용한 간단한 예시를 들어 보겠습니다.

의존성 주입을 위한 POJO 클래스 생성
java

public class TextEditor {
   private SpellChecker spellChecker;

   public TextEditor(SpellChecker spellChecker){
      System.out.println("Inside TextEditor constructor." );
      this.spellChecker = spellChecker;
   }

   public void spellCheck(){
      spellChecker.checkSpelling();
   }
}

스프링 설정 파일 작성
xml

<!-- Beans.xml -->
<bean id="textEditor" class="com.example.TextEditor">
    <constructor-arg ref="spellChecker"/>
</bean>
<bean id="spellChecker" class="com.example.SpellChecker"/>


스프링 컨테이너에서 빈 가져오기


java

ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
TextEditor te = (TextEditor) context.getBean("textEditor");
te.spellCheck();


위 코드의 동작 방식은 다음과 같습니다:

TextEditor 객체는 SpellChecker 객체에 의존합니다. 

SpellChecker 객체는 TextEditor의 생성자를 통해 주입됩니다.
스프링 설정 파일에서 textEditor 빈의 생성자 인자로 spellChecker 빈을 참조하게 설정하였습니다.
이렇게 하면, 스프링 컨테이너가 textEditor 빈을 생성할 때 spellChecker 빈을 자동으로 주입합니다.

Beans.xml ----(define beans)----> Spring Container ----(create beans)----> 
TextEditor ----(use)----> SpellChecker


위 예제에서는 생성자를 통한 의존성 주입을 보여주지만, 스프링은 세터 메서드를 통한 의존성 주입도 지원합니다. 

이러한 방식을 통해 스프링은 객체 간의 결합도를 낮추고 코드의 재사용성, 테스트 용이성 등을 향상합니다.

 

 

 

 

 

 

 

 

 의존성 주입을 위한 POJO 클래스 생성은 무엇인가?






 

 

 

 

 

스프링 프레임워크의 핵심 기능인 IoC, AOP, 트랜잭션 관리, MVC 패턴을 활용한 간단한 웹 애플리케이션 예제

 

스프링 프레임워크의 핵심 기능인 IoC, AOP, 트랜잭션 관리, MVC 패턴을 활용한 간단한 웹 애플리케이션 예제

를 들어보겠습니다.

의존성 주입(IoC): Service 클래스가 Repository 클래스에 의존하고 있습니다. 

이 의존성은 스프링 컨테이너에 의해 주입됩니다.
java

@Service
public class UserService {
    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User getUser(String id) {
        return userRepository.findById(id);
    }
}


AOP: 로깅 기능을 AOP를 활용해 공통 기능으로 분리하여 재사용합니다.
java

@Aspect
@Component
public class LoggingAspect {
    @Before("execution(* com.example.service.*.*(..))")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("Method " + joinPoint.getSignature().getName() + " is called");
    }
}


트랜잭션 관리: @Transactional 어노테이션을 사용하여 사용자 정보를 DB에 저장하는 작업을 트랜잭션으로 관리합니다.
java

@Service
public class UserService {
    //...

    @Transactional
    public void addUser(User user) {
        userRepository.save(user);
    }
}


MVC 패턴: 

Controller 클래스를 통해 클라이언트의 요청을 처리하고,

 Model을 통해 데이터를 관리하며,

 View를 통해 사용자에게 결과를 보여줍니다.

 

java

@Controller
public class UserController {
    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/user/{id}")
    public String getUser(@PathVariable String id, Model model) {
        User user = userService.getUser(id);
        model.addAttribute("user", user);
        return "user";
    }
}


이 코드의 동작 방식은 다음과 같습니다:

클라이언트가 '/user/{id}' URL로 GET 요청을 보냅니다.
UserController는 이 요청을 받아 해당 id의 사용자 정보를 조회하고, Model에 사용자 정보를 추가한 후 'user'라는 이름의 View를 반환합니다.
UserService는 UserRepository를 통해 DB에서 사용자 정보를 조회합니다. 

이때 UserRepository는 스프링 컨테이너에 의해 UserService에 주입됩니다.
LoggingAspect는 UserService의 모든 메서드가 호출될 때 로깅 기능을 수행합니다.

Client ----(GET /user/{id})----> UserController ----(getUser)----> UserService ----(findById)----> UserRepository
                                                                                   |
                                                                 LoggingAspect <---+


위 예제에서는 스프링의 IoC, AOP, 트랜잭션 관리, MVC 패턴을 활용한 간단한 웹 애플리케이션 구조를 보여주었습니다. 이를 통해 스프링은 객체 간의 의존성 관리, 공통 기능의 재사용, 트랜잭션 처리, 클라이언트 요청의 효율적인 처리 등을 도와줍니다.

 

 

 

 

 

 

반응형

댓글