개발자상식 <백엔드 개발자> (11)[책리뷰 & Book review]
본문 바로가기

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

개발자상식 <백엔드 개발자> (11)[책리뷰 & Book review]

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

개발자상식 <백엔드 개발자> (11)

[책리뷰 & Book review]

 

 

웹 서버와 웹 컨테이너는 무엇인가?

웹 컨테이너(Web Container)는 서블릿(Servlet)이나 JSP(Java Server Pages) 등의 자바 웹 컴포넌트를 실행할 수 있는 환경을 제공하는 소프트웨어를 말합니다. 웹 서버와 연동하여 동작하며,

 

웹 서버는 정적인 데이터를 처리하고

웹 컨테이너는 동적인 데이터를 처리합니다.

웹 컨테이너는 클라이언트로부터 HTTP 요청을 받으면, 해당 요청을 처리할 서블릿을 찾아서 요청을 전달하고, 서블릿이 처리한 결과를 다시 클라이언트에게 전달하는 역할을 합니다. 또한 웹 컨테이너는 서블릿의 생명주기를 관리하고, 서블릿 간의 통신을 지원하며, 멀티스레딩 처리와 같은 기능을 제공합니다.

웹 컨테이너에는 Tomcat, Jetty, Undertow 등이 있습니다.

 이들은 모두 웹 컨테이너의 기능을 수행하지만 성능, 확장성, 설정의 유연성 등에서 차이가 있습니다.

스프링 부트는 임베디드 웹 컨테이너를 제공합니다. 즉, 애플리케이션 안에 웹 컨테이너가 내장되어 있어서 별도의 웹 서버나 웹 컨테이너를 설치할 필요 없이 애플리케이션을 실행하면 웹 서버가 동작합니다. 

이는 개발과 테스트를 더욱 빠르고 편리하게 해 주며, 애플리케이션의 배포도 간단해집니다.

반면에 스프링 MVC는 별도의 웹 컨테이너에 배포해야 합니다. 이를 위해 WAR 파일을 생성하고 이를 웹 컨테이너에 배포하는 과정이 필요합니다. 이는 배포 과정이 복잡해지고, 웹 컨테이너에 따라 설정이 달라질 수 있다는 단점이 있습니다. 하지만 이런 방식을 사용하면 웹 컨테이너에서 제공하는 기능(예: 세션 관리, 보안 설정 등)을 이용할 수 있다는 장점도 있습니다.

 

 

 

 

 

스프링과 스프링부트에서 웹 컨테이너는 어떻게 작동하는가? 

웹 컨테이너가 내장된 스프링 부트와 별도의 웹 컨테이너에 배포하는 스프링 MVC에 대한 코드 예제와 그림 설명을 드리겠습니다.

1. 스프링 부트 (임베디드 웹 컨테이너 사용)

스프링 부트에서는 웹 컨테이너가 내장되어 있습니다. 이를 임베디드 웹 컨테이너라고 부릅니다. 

따라서 별도의 웹 서버를 설치할 필요 없이 애플리케이션 실행만으로 웹 서버가 동작합니다.

java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootApplication.class, args);
    }
}


위 코드를 실행하면, 스프링 부트 애플리케이션은 내장된 웹 컨테이너에 배포되고 실행됩니다.

[임베디드 웹 컨테이너 사용 스프링 부트]
  └─ 애플리케이션 실행
      └─ 스프링 부트 애플리케이션 시작
          └─ 내장 웹 컨테이너 시작
              └─ 애플리케이션 배포 및 실행

 



2. 스프링 MVC (별도의 웹 컨테이너에 배포)

스프링 MVC에서는 애플리케이션을 WAR 파일로 패키징하여 별도의 웹 컨테이너에 배포해야 합니다.

java

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class SpringMvcApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SpringMvcApplication.class);
    }
}


위 코드는 스프링 MVC 애플리케이션을 WAR 파일로 패키징 하기 위한 설정입니다. 

이렇게 생성된 WAR 파일을 별도의 웹 컨테이너에 배포하면 웹 애플리케이션이 실행됩니다.

[별도의 웹 컨테이너에 배포하는 스프링 MVC]
  └─ 애플리케이션 패키징
      └─ WAR 파일 생성
  └─ 웹 컨테이너에 배포
      └─ 웹 컨테이너 시작
          └─ 애플리케이션 배포 및 실행

 


이렇게 스프링 부트와 스프링 MVC는 웹 컨테이너에 대한 핸들링 방식에서 차이를 보입니다. 

스프링 부트는 내장된 웹 컨테이너를 사용하여 개발 및 배포 과정을 단순화하고, 

스프링 MVC는 별도의 웹 컨테이너에 배포하는 방식을 사용하여 웹 컨테이너의 기능을 최대한 활용할 수 있습니다

 

 

 

스프링 부트와 스프링 MVC의 웹 컨테이너 설정 방식 

스프링 부트와 스프링 MVC의 설정 방식에 대해 좀 더 자세히 설명드리겠습니다.

1. 스프링 부트 설정 (임베디드 웹 컨테이너 사용)

스프링 부트는 애플리케이션 프로퍼티를 통해 간편하게 웹 서버를 설정할 수 있습니다. 

이 설정은 application.properties 파일이나 application.yml 파일에 작성됩니다.

properties
# application.properties
server.port=8080
server.contextPath=/myapp


위의 설정은 스프링 부트 애플리케이션의 웹 서버 포트를 8080으로 설정하고, 

콘텍스트 패스를 '/myapp'으로 설정합니다.

[스프링 부트 설정]

  └─ 애플리케이션 실행
      └─ 스프링 부트 애플리케이션 시작
          └─ 내장 웹 컨테이너 시작
              └─ 애플리케이션 설정 적용 및 배포


2. 스프링 MVC 설정 (별도의 웹 컨테이너에 배포)

스프링 MVC에서는 웹 컨테이너의 설정을 따라가야 합니다. 

이 설정은 웹 컨테이너의 설정 파일에 작성되거나, 애플리케이션의 web.xml 파일에 작성됩니다.

xml

<!-- web.xml -->
<web-app>
  <servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>


위의 설정은 스프링 MVC 애플리케이션의 디스패처 서블릿을 설정하고, 모든 요청을 이 서블릿으로 매핑합니다.

[스프링 MVC 설정]

 └─ 애플리케이션 패키징
      └─ WAR 파일 생성
  └─ 웹 컨테이너에 배포
      └─ 웹 컨테이너 시작
          └─ 웹 컨테이너 설정 적용 및 애플리케이션 배포


이처럼 스프링 부트와 스프링 MVC는 웹 서버 설정 방식에서 차이가 있습니다. 스프링 부트는 내장된 웹 컨테이너를 이용하므로 애플리케이션의 프로퍼티 파일만으로 설정이 가능하며, 스프링 MVC는 별도의 웹 컨테이너를 사용하므로 웹 컨테이너의 설정을 따라야 합니다.




 

 

 

 

 

 

IT 운영직무는 어떤 일을 할까?



구체적인 업무 내용은 다음과 같을 수 있습니다:

예약 시스템 관리: 항공사의 핵심 시스템 중 하나인 예약 시스템의 운영과 관리를 담당합니다. 

사용자의 예약 요청을 처리하고, 변경사항을 관리하며, 이에 대한 데이터를 정확하게 유지하는 것이 중요합니다.

 

체크인 시스템 관리: 온라인 및 공항에서의 체크인 프로세스를 관리하는 시스템을 운영합니다. 여객들이 편리하게 체크인할 수 있도록 시스템을 유지하고 개선하는 업무를 수행합니다.

 

항공 데이터 관리 및 분석: 여객, 항공편, 예약 등 관련 데이터를 관리하고 분석합니다. 이 데이터를 통해 항공사의 서비스 개선 방향을 제시하거나, 효과적인 운영 전략을 수립하는 데 도움이 됩니다.

 

시스템 트러블슈팅 및 개선: IT 시스템에서 발생하는 문제를 해결하고, 시스템 성능을 개선하는 업무를 수행합니다. 사용자의 피드백을 바탕으로 시스템의 안정성과 효율성을 높이는 작업을 진행합니다.

 

신기술 도입 및 시스템 업그레이드: 최신 IT 트렌드와 기술을 항상 모니터링하고, 이를 항공사의 시스템에 적용하여 서비스를 개선하거나, 기존 시스템의 업그레이드를 진행합니다.


이러한 업무를 수행하기 위해서는 IT 관련 지식뿐만 아니라, 항공 산업에 대한 이해도 필요하며, 빠르게 변하는 기술 트렌드를 파악하고 적용할 수 있는 능력도 요구됩니다.




 

 

 

멀티쓰레드는 무엇인가?

 

멀티스레딩은 한 프로그램 내에서 여러 개의 실행 흐름을 동시에 처리하는 방식을 말합니다. 

이를 통해 CPU의 활용도를 높이고 프로그램의 응답 시간을 줄일 수 있습니다.

자바에서는 Thread 클래스를 상속받아 멀티스레딩을 구현할 수 있습니다.

java

class MyThread extends Thread {
    public void run(){
        System.out.println("Thread is running...");
    }
}

public class Main {
    public static void main(String[] args){
        MyThread t1 = new MyThread();
        t1.start();
    }
}


위 코드는 하나의 스레드를 생성하고 실행하는 예제입니다.

 run() 메서드가 스레드의 작업을 정의하며, start() 메서드를 호출하여 스레드를 시작합니다.

프링에서는 @Async 어노테이션을 이용해 비동기 메소드를 만들어 멀티스레딩을 구현할 수 있습니다.

java

@Service
public class MyService {

    @Async
    public void asyncMethod() {
        System.out.println("Async method is running...");
    }
}


위 코드는 스프링 서비스에서 비동기 메소드를 정의하는 예제입니다. 

이 메소드는 별도의 스레드에서 실행되어 메인 스레드와 동시에 작업을 수행합니다.

[멀티스레딩]
  └─ 메인 스레드 시작
      └─ 작업 1 실행
  └─ 별도의 스레드 시작
      └─ 작업 2 실행


이처럼 멀티스레딩은 프로그램의 성능을 향상하는 데 유용하지만, 스레드 간의 동기화 문제를 주의해야 합니다. 여러 스레드가 동일한 자원에 동시에 접근할 때 발생하는 문제를 해결하기 위해 자바에서는 synchronized 키워드를 제공하며, 

스프링에서는 @Async 어노테이션과 함께 @EnableAsync 어노테이션을 사용하여 비동기 작업을 관리할 수 있습니다.

 

 

 

 

 

 

자바와 메모리 와 객체의 상관도는 무엇인가?

 

객체는 클래스를 기반으로 생성되며, 메모리에 공간을 할당받아 데이터와 메서드를 저장합니다. new 키워드는 자바에서 객체를 생성하고 메모리를 할당하는 데 사용됩니다.

예를 들어, 다음과 같은 Person 클래스가 있다고 가정해 보겠습니다.

java

public class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void introduce() {
        System.out.println("Hello, my name is " + name + " and I'm " + age + " years old.");
    }
}


위의 Person 클래스를 기반으로 객체를 생성하려면 new 키워드를 사용합니다.

java

Person person = new Person("John", 25);
person.introduce();


위의 코드를 실행하면 "Hello, my name is John and I'm 25 years old."라는 메시지가 출력됩니다. 

이때 new Person("John", 25)라는 코드는 메모리에 Person 객체를 생성하고, 그 주소를 person 변수에 저장하는 역할을 합니다.

메모리 구조를 간략하게 그림으로 표현하면 다음과 같습니다.

[메모리 구조]

  └─ Stack 영역
      └─ person 변수 (Person 객체의 주소를 저장)
  └─ Heap 영역
      └─ Person 객체 (name: "John", age: 25)


이처럼 new 키워드는 객체를 메모리에 생성하고, 그 주소를 변수에 저장하는 역할을 수행합니다. 이를 통해 프로그램에서 객체를 사용하고 관리할 수 있습니다.

 

 

 

 

 

 

 

 

#개발자취업 #개발자기초 #개발자 #개발자분야 #개발자분류 #개발자종류 #it개발자 #서버개발자 #개발자성장 #신입개발자 #ios개발자 #개발자노트북 #개발자 되는 법 #개발 #앱개발 #웹개발 #개발분야 #it개발 #개발공부 #코딩상식 #개발공부 #개발초보

 

#개발자취업 #개발자면접 #개발자채용 #백엔드개발자 #백엔드개발자 #백엔드개발자취업 #백엔드개발 #프론트엔드개발자 #개발자상담 #백엔드 #개발자 #앱개발자 #웹개발자 #개발자팁 #앱개발자 #백엔드취업 #백엔드공부 #백엔드강의 #백엔드독학

 

#전산직면접 #면접 #면접팁 #면접관 #공공기관전산직면접 #공사면접 #면접질문 #면접할말 #면접준비 #면접준비 #면접답변 #면접질문 #면접기출 #전화면접 #면접복장 #면접답변 #면접꿀팁 #모의면접 #면접후기 #롯데면접 #면접후기 #임원면접 #최종면접 #면접꿀팁

 

 

 

 

 

반응형

댓글