[공부 일지] 2. 개발 기초 지식

모히또·2025년 5월 27일

공부 일지

목록 보기
2/3

2.1 서버 간 통신 & MSA

단일 서비스 아키텍처

• 모든 기능(블로그, 메일, 카페 등)을 하나의 애플리케이션에 포함해 개발

• 서비스가 많아질수록 유지보수가 어려워지고 전체 배포 시간이 길어짐

마이크로서비스 아키텍처(MSA)

• 각 기능을 별도의 독립적인 서비스로 나누어 개발

• 서버 간 통신 필요 → 일반적으로 HTTP/HTTPS 사용

• 장점: 독립 배포, 확장 용이, 장애 격리

2.2 스프링 부트의 동작 구조

• spring-boot-starter-web 사용 시 Tomcat을 내장 WAS로 포함

• DispatcherServlet의 요청 흐름:

	1. 클라이언트 요청 → DispatcherServlet 진입

	2. URI 기반 핸들러 매핑 (HandlerMapping)

	3. 핸들러 어댑터(HandlerAdapter)가 컨트롤러 호출

	4. ModelAndView 생성 후 ViewResolver로 뷰 결정

	5. View 반환

RESTController 사용 시

• 뷰를 사용하지 않고 MessageConverter를 통해 JSON 등으로 응답

• @ResponseBody에 의해 자동 적용됨

2.3 레이어드 아키텍처

일반적인 3계층 구조

  1. Presentation Layer (UI): Controller, 사용자 요청 처리

  2. Business Layer (Service): 비즈니스 로직 처리

  3. Data Access Layer (DAO/Repository): 데이터베이스 연동

2.4 디자인 패턴

▷ 생성 패턴

팩토리 메서드: 객체 생성 로직을 하위 클래스에 위임하여, 새로운 객체 생성 로직이 필요할 때 코드 변경 없이 확장 가능

	예시: Spring에서 Bean 생성 시 실제 구현체를 외부 설정 파일이나 팩토리 클래스에 맡김으로써 유연성 확보

예시 코드:

interface Product {
	void use();
}
class ConcreteProduct implements Product {
    public void use() {
        System.out.println("Product 사용");
    }
}
abstract class Creator {
    abstract Product factoryMethod();
    public void operate() {
        Product p = factoryMethod();
        p.use();
  	}
}
싱글턴: 프로그램에서 단 하나의 인스턴스만 존재하게 보장하는 패턴

	사용 예: DB 커넥션 풀, 설정값 관리 객체, Logger 등 공유 자원에서 많이 사용됨

	주의점: 멀티스레드 환경에서는 동기화 이슈 발생 가능 → synchronized, enum 싱글턴 방식으로 해결
    

예시 코드:

public class Singleton {
    private static final Singleton instance = new Singleton();
    private Singleton() {}
    public static Singleton getInstance() {
        return instance;
    }
}

▷ 구조 패턴

프록시(Proxy): 실제 객체를 대신하여 요청을 가로채거나 기능을 부가한 대리 객체

	예시: API 호출 전에 캐시된 결과를 리턴하거나, 권한 체크, 지연 로딩 등에 활용

	실체 객체를 직접 사용하지 않고 필요한 시점에 로딩함으로써 효율성과 보안성 확보
    

예시 코드:

interface Service {
	void run();
}
class RealService implements Service {
    public void run() {
        System.out.println("실제 서비스 동작");
    }
}
class ProxyService implements Service {
    private RealService realService = new RealService();
    public void run() {
        System.out.println("프록시 사전 처리");
        realService.run();
        System.out.println("프록시 후처리");
    }
}

▷ 행위 패턴

템플릿 메서드: 알고리즘의 기본 구조를 상위 클래스에서 정의하고, 세부 구현은 하위 클래스가 담당

	공통되는 로직은 추상화하여 코드 중복 최소화, 특정 단계만 오버라이딩하여 재사용성 극대화

	예시: AbstractController에서 doGet(), doPost()를 템플릿으로 제공하고 세부 로직은 상속 클래스에서 구현

예시 코드:

abstract class Template {
    public final void process() {
        step1();
        step2();
    }
    abstract void step1();
    abstract void step2();
}
class SubProcess extends Template {
    void step1() { System.out.println("1단계 실행"); }
    void step2() { System.out.println("2단계 실행"); }
}

2.5 REST API

2.5.1 REST란?

• Representational State Transfer의 약자

• URI로 자원을 식별하고 HTTP 메서드(GET, POST, PUT, DELETE)로 상태 조작

2.5.2 REST API란?

• REST 아키텍처 스타일을 따르는 API

• 시스템/애플리케이션이 서로 통신하기 위한 인터페이스로 RESTful하게 구성

2.5.3 REST의 특징

• 유니폼 인터페이스: 일관된 HTTP 표준 사용

• 무상태성: 서버가 클라이언트 상태를 저장하지 않음

• 캐시 가능: 응답 캐시를 통해 성능 최적화 가능

• 레이어 시스템: 네트워크 상 여러 계층 구성 가능

• 클라이언트-서버 구조 : 사용자 정보와 처리 로직 분리 설계
profile
신입 개발자 윤현수입니다!

0개의 댓글