[GO SOPT 서버] 2차 세미나 부족한 개념

ddongseop·2023년 4월 9일
1

GO SOPT 서버파트 2차 세미나(Spring boot의 이해)를 들으면서 과제로 나온 것 외에 스스로 부족하다고 느낀 개념들이 생겨 정리해보았습니다

⭐️ REST와 URI

위의 예시처럼, URL은 특정 자료의 위치까지 식별할 수 있어야함. 그러면 REST에서 사용하는 것은
URL이 아니라 URI.
❓ PORT 평소에 사용 잘 안하는데, 어떻게 가능한걸까?
👉 포트를 80 또는 443 으로 지정하면 URL 뒤에 포트번호를 지정하지 않아도 접속됨

⭐️ REST API의 규칙

1️⃣ 클라이언트, 서버 및 리소스로 구성되었으며 요청이 HTTP를 통해 관리되는 클라이언트-서버 아키텍처
2️⃣ 스테이트리스(stateless) 클라이언트-서버 커뮤니케이션
👉 요청 간에 클라이언트에 대한 데이터가 저장되지 않음
👉 각 요청이 분리되어 있고 서로 연결되어 있지 않음, HTTP 표준을 따르기 때문
3️⃣ 클라이언트-서버 상호 작용을 간소화하는 캐시 가능 데이터
👉 GET메소드를 Last-Modified와 함께 보낼 경우 컨텐츠의 변화가 없을 때 캐시된 값 사용
4️⃣ 요청된 정보를 검색하는 데 관련된 서버(보안, 로드 밸런싱 등을 담당)의 각 유형을 클라이언트가 볼 수 없는 계층 구조로 체계화하는 계층화된 시스템
👉 클라이언트로서는 REST API 서버만 호출하지만, 서버는 다중 계층으로 구성될 수 있음
5️⃣ 정보가 표준 형식으로 전송되도록 하기 위한 구성 요소 간 통합 인터페이스
👉 URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행함, HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능

⭐️ Dependencies 분석

1️⃣ spring-boot-starter-json
👉 Spring Boot 애플리케이션에서 JSON 데이터로 작업하는 데 필요한 종속성을 제공함, 여기에는 널리 사용되는 JSON 구문 분석 라이브러리인 Jackson과 해당 종속성이 포함됨
2️⃣ spring-boot-starter-tomcat
👉 Tomcat 서블릿 컨테이너를 사용하여 웹 애플리케이션을 실행하는 데 필요한 종속성을 제공합니다. 여기에는 Tomcat 서버와 해당 종속 항목이 포함됩니다.
❗️ Tomcat: JSP와 서블릿을 구동하기 위한 서블릿 컨테이너 역할을 수행. 아파치서버와는 다르게 DB연결, 다른 응용프로그램과 상호 작용 등 동적인 기능들을 사용할 수 있음
❗️ 서블릿: 웹에서 동작하는 JAVA 프로그램
3️⃣ spring-boot-starter
👉 Spring Boot 애플리케이션에 필요한 기본 종속성을 제공하는 코어 스타터. 여기에는 Spring Boot, Spring Core 및 기타 일반적인 Spring 라이브러리가 포함됨
4️⃣ spring-web
👉 Spring으로 웹 애플리케이션을 구축하는 데 필요한 종속성을 제공. 여기에는 MVC(Model-View-Controller) 디자인 패턴을 사용하여 웹 애플리케이션을 구축하기 위한 프레임워크인 Spring MVC가 포함됨
5️⃣ spring-boot-starter-webmvc
👉 Spring MVC를 사용하여 웹 애플리케이션을 빌드하는 데 필요한 종속성을 제공함. 여기에는 Spring Web, Spring MVC 및 기타 관련 종속성이 포함됨

⭐️ build.gradle 분석

repositories { // 종속성을 해결하기 위해 빌드가 살펴봐야 하는 저장소
	mavenCentral() // 다수의 오픈 소스 Java 라이브러리 및 종속성을 호스팅하는 공개 저장소
}

dependencies { // 종속성 설정
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
    // testImplementation: 종속성이 프로젝트의 테스트에만 필요하며 최종 빌드에는 포함되지X
    // JUnit 및 Mockito와 같은 일반적인 테스트 유틸리티 및 프레임워크를 제공
}

tasks.named('test'){
    useJUnitPlatform()
}
// gradle test 명령을 사용하여 JUnit5 테스트를 실행하도록 함

⭐️ Project Structure

❓ Service Layer 비대해지면 어떻게 처리?
1️⃣ Service 계층 리팩터링
2️⃣ SRP (Single Responsibility Principle) 구현
3️⃣ 마이크로서비스 아키텍처 사용: 마이크로서비스 아키텍처에서 애플리케이션은 API를 통해 서로 통신하는 작고 독립적인 서비스로 구성됨
4️⃣ DDD (Domain-Driven Design) 원칙 적용: DDD는 도메인 모델의 중요성을 강조하는 소프트웨어 개발 접근 방식. DDD 원칙을 적용하면 핵심 비즈니스 개념을 식별하고 이에 부합하는 서비스를 설계하는 데 도움이 될 수 있음
5️⃣ 캐싱 구현: 캐싱은 자주 액세스하는 데이터를 메모리에 저장하여 서비스 계층의 부하를 줄이는 데 도움이 될 수 있음

❓ Domain Model
👉 도메인 모델은 특정 문제 도메인의 실제 개념, 엔터티 및 프로세스를 나타내는 개념적 모델

0개의 댓글