📖위클리 페이퍼

[👾코드잇] 위클리 페이퍼 (3)

_채채_ 2025. 7. 7. 01:43

🆀 웹 서버(Web Server)와 WAS(Web Application Server)의 차이를 설명하고, Spring Boot의 내장 톰캣이 이 둘 중 어디에 해당하는지 설명해주세요.

웹 개발 환경에서 두 개념이 자주 혼동되기 때문에 정확하게 알아두는 것이 좋다고 강사님이 여러 번 강조하셨었다..!

 

웹서버(Web Servier)

-정적인 콘텐츠(HTML, CSS, JS, 이미지 등)를 클라이언트(브라우저)에 제공하는 역할을 한다.

자바 코드나 동적인 로직을 처리할 수 없다는 한계가 있다.

 

WAS (Web Application Server)

-웹 애플리케이션의 비즈니스 로직을 처리하는 서버로 동적인 콘텐츠(JSP, 서블릿, 스프링 컨트롤러 등)을 생성하고 응답한다.

대부분의 자바 EE/서블릿 기반 기술을 지원한다.

 

Spring Boot의 내장 톰캣은 둘 중 어디에 해당할까?

-Spring Boot는 기본적으로 Tomcat을 내장하고 있으며, 이는 WAS역할을 한다.

➡️ 즉, Spring Boot애플리케이션 = 내장 WAS(Tomcat) + 비즈니스로직 이기때문에 따로 외부 WAS를 설치하지 않고도 웹 애플리케이션을 실행이 가능하다.

 

구분 웹 서버 WAS
처리 대상 정적 콘텐츠 동적 콘텐츠
역할 HTML/CSS/JS 전달 서블릿, JSP, 스프링 로직 처리
Spring Boot에서의 위치 내장(Tomcat)

 

 

🆀 Spring Boot에서 사용되는 다양한 Bean 등록 방법들에 대해 설명하고, 각각의 장단점을 비교해 보세요.

Spring Boot에서 Bean 등록 방식은 크게  세 가지로 나눌 수 있다. 각각의 방식은 빈을 어떻게 생성하고 관리할지 결정하는 방법이다.

 

1. @Component 계열 어노테이션 사용하기(자동 등록)

@Component
public class MyService { }

@Service   // 비즈니스 로직에 특화
@Repository // DAO에 특화
@Controller // MVC 컨트롤러에 특화

*DAO(Data Access Object): 데이터베이스와 직접 소통하는 객체, DB에서 데이터를 조회, 저장, 수정, 삭제하는 로직을 담당

*MVC(Model-View-Contorller): 웹 애플리케이션을 구성하는 대표적인 설계 패턴 구조

 

👍 장점

-대상이 컴포넌트 스캔 대상(@ComponentScan)이 됨

-어노테이션만 붙이면 자동 등록!

-코드가 간결하고 직관적

-구조적으로 구분(Service, Repository)가능

 

👎단점

-라이브러리 클래스나 외부 클래스를 빈으로 등록하기 어려움

-세밀한 관리(이름지정, 조건등록 등)가 어려움

 

2. @Configuration + @Bean (수동 등록)

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyService();
    }
}

개발자가 직접 메서드를 통해 빈을 등록하고 복잡한 객체 생성 시 또는 외부 라이브러리 등록에 적합하다.

 

👍 장점

-의존성 주입을 명시적으로 제어할 수 있음

-외부 라이브러리 클래스도 빈으로 등록할 수 있음

 

👎단점

-코드가 다소 길어질 수 있음

-상대적으로 번거로움

 

3. @Import, @ComponentScan (특수 등록)

외부 설정 파일이나 특정 설정 클래스를 주입할 때 사용하며 간접적으로 Bean 등록을 도와준다.

@Configuration
@Import(DataSourceConfig.class)  // ✅ 다른 설정 클래스 가져오기
public class AppConfig {
    // AppConfig에도 DataSource가 등록됨
}
@ComponentScan(basePackages = {"com.example.service", "com.example.repository"})

@Import

: 다른 설정 클래스를 등록할 때! 설정 클래스를 여러 개로 나눴을 경우, 한 곳에서 한 번에 등록하고 싶을 때 사용한다.

@ComponentScan

: spring boot에서는 @SpringBootApplication이 본인의 패키지 하위만 스캔하므로, 다른 경로의 컴포넌트까지 스캔하려면 이렇게 직접 지정해야 한다. -> 스캔 대상 커스터마이징

 

👍 장점

-모듈화와 설정 분리에 유리함

-외부 설정을 손쉽게 통합할 수 있음

 

👎단점

-상대적으로 명시성이 떨어짐

-잘못 구성되면 디버깅이 어려움