Spring Boot 19

[Spring boot] REST API

REST API대중적으로 가장 많이 사용된 애플리케이션 인터페이스이 인터페이슬르 통해 클라잉너트는 서버에 접근하고 자원을 조작할 수 있다.REST란?Representational State Transfer의 약자로 월드 와이드 웹(WWW)과 같은 분산 하이퍼미디어 시스템 아키텍처의 한 형식주고 받는 자원(Resource)에 이름을 규정하고 URI에 명시해 HTTP 메서드(GET, POST, PUT, DELETE)를 통해 해당 자원의 상태를 주고 받는 것을 의미REST API란?API는 Application Programming Interface의 약자로 애플리케이션에서 제공하는 인터페이스를 의미API를 통해 서버 또는 프로그램 사이를 연결할 수 있다.REST API는 REST 아키텍처를 따르는 시스템/애..

[Spring boot] 디자인 패턴

소프트웨어를 설계할 때 자주 발생하는 문제들을 해결하기 위해 고안된 해결책이다.디자인 패턴에서 ‘패턴’이라는 단어는 애플리케이션 개발에서 발생하는 문제는 유사한 경우가 많고 해결책도 동일하게 적용할 수 있다는 의미를 내표한다.but 디자인 패턴이 모든 문제의 정답은 아니며, 상황에 맞는 최적 패턴을 결정해서 사용디자인 패턴의 종류대표적 분류 방식인 ‘GoF 디장니 패턴’ == ‘Gang for Four’의 줄임말구체화하고 체계화해서 분류한 4명의 인물 의미Gof 디자인 패턴은 생성 패턴, 구조 패턴, 행위 패턴의 총 3가지로 구분됨생성 패턴 → 객체 생성에 사용되는 패턴, 객체를 수정해도 호출부가 영향 받지 않는다.구조 패턴 → 객체를 조합해서 더 큰 구조를 만드는 패턴행위 패턴 → 객체 간의 알고리즘이..

[Spring boot] 레이어드 아키텍처

레이어드 아키텍처애플리케이션의 컴포넌트르 유사 관심사를 기준으로 레이어로 묶어 수평적으로 구성한 구조를 의미한다.여러 방면에서 쓰이는 개념이며, 어떻게 설계하느냐에 따라 용어와 계층의 수가 달라진다3 계층 또는 4계층 구성을 의미한다.이 차이는 인프라(DB)레이어의 추가 여부로 결정된다. 프레젠테이션 계층애플리케이션의 최상단 계층이며 HTTP 요청/응답을 처리사용자 입력 받기, API 라우팅 역할별도의 비즈니스 로직을 포함하지 있지 않으므로 비즈니스 계층으로 요청을 위임하고 받은 결과를 응답하는 역할만 수행@RestController, @Controller@GetMapping("/users")public ResponseEntity getUsers() { return ResponseEntity.ok(..

[Spring boot] 스프링부트의 동작 방식

스프링 부트의 동작 방식일반적인 웹 요청이 들어왔을 때의 스프링 부트의 동작 구조(1) 클라이언트 → 서블릿 컨테이너 → DispatcherServlet(2) DispatcherServlet → HandlerMapping → 해당 컨트롤러 찾기(3) DispatcherServlet → HandlerAdapter → 컨트롤러 실행(4) 컨트롤러 → 결과 반환(5) DispatcherServlet → ViewResolver → 뷰 이름 → 뷰 파일 위치 찾기(6) 뷰 렌더링 → 사용자에게 HTML/JSON 응답 스프링 부트의 동작 구조를 예제 코드로 보자@Controllerpublic class HelloController { @GetMapping("/hello") public String hel..

[Spring boot] 서버 간 통신

서버 간 통신어떤 포털 사이트를 하나의 서비스 단위로 개발한다고 가정즉 블로그, 카페, 메일 등의 기능들을 하나의 애플리케이션에 통합했다는 뜻서비스를 이렇게 구성한다면 서버를 업데이트 하거나 애플리케이션을 유지보수 할 때마다 ‘사이트 작업 중입니다’ 라는 팻말을 걸고 작업을 해야됨그만큼 개발에 보수적인 입장을 취할 수 밖에 없고, 서비스 자체의 규모도 커지기 때문에 서비스를 구동하는데 걸리는 시간도 길어진다.이러한 문제를 해결하기 위해 나온 것이 → 마이크로서비스 아키텍처(MSA:Microservice Architecture)마이크로서비스 아키텍처는 단어 그대로 서비스 규모를 작게 나누어 구성한 아키텍처이 기능 적용 → 애플리케이션 하나에 여러 기능을 넣어 개발하지 않고 블로그 프로젝트, 카페 프로젝트,..

[Spring boot] 내장 WAS

내장 WAS스프링 부트의 각 웹 애플리케이션에는 내장 WAS(Web Application Server)가 존재웹 애플리케이션을 개발할 때 가장 기본이 되는 의존성인 ‘spring-boot-starter-web’의 경우 밑 그림과 같은 톰캣을 내장한다.스프링 부트이 자동 설정 기능은 톰캣에도 적용되므로 특별한 설정 없이도 톰캣을 실행할 수 있다. 필요에 따라서 톰캣이 아닌 다른 웹 서버(Jetty, Undertow 등)로 대체 할 수 있다.WAS이란?Was(Web Application Server)란?HTTP 요청을 받아서,자바로 만든 웹 프로그램(Servlet, JSP 등)을 실행하고,응답을 클라이언트에게 돌려주는 역할을 한다.자바로 만든 웹 서비스를 동작시키려면 WAS가 꼭 필요하다. WAS 동작 순서..

[Spring boot] 자동 설정

자동 설정스프링 부트 → 스프링 프레임워크의 기능을 사용하기 위한 자동 설정(Auto Configuration)을 지원자동 설정은 애플리케이션에 추가된 라이브러리를 실행하는데 필요한 환경 설정을 알아서 찾아준다.예제@SpringBootApplicationpublic class Chapter1Application { public static void main(String[] args) { SpringApplication.run(Chapter1Application.class, args); }}@SpringBootApplication이걸 붙이기만 해도 Spring이 자동으로 필요한 설정과 Bean을 찾아서 알아서 등록해줌@SpringBootApplication 애너테이션3개의 애너테이션이 합쳐진 것포함된 어..

[Spring boot] 의존성 관리

의존성 관리Spring Framework는 의존성 설정을 개발자가 직접 하고, 호환되는 버전 관리도 수동으로 해야 해서 불편함이 많았음.하지만 스프링 부트에서는 이 같은 불편함을 해소 하기 위해💡 ‘spring-boot-starter’라는 의존성을 제공의존성은 여러 종류가 있음각 라이브러리의 기능과 관련해서 자주 사용되고 서로 호환되는 버전의 모듈 조합을 제공 → 이를 통해 개발자는 라이브러리 호환 문제를 해결할 수 있다. 좀 더 예를 들어 설명한다면기존 Spring Framework 방식의 문제점예전에는 어떻게 했을까?기존 Spring 프로젝트에서는 다음과 같은 식으로 직접 라이브러리 버전을 정해서 명시해야 했음dependencies { implementation 'spring-core:4.3...

[Spring boot] 스프링 프레임워크 vs 스프링 부트

스프링 프레임워크 vs 스프링 부트하이버네이트(Hibernate) → 자바 객체 ↔ 관계형 데이터베이스 간의 매핑(ORM, Object-Relational Mapping) 을 도와주는 프레임워크즉, 자바 객체를 DB 테이블과 자동으로 매핑해주고, SQL문 없이도 DB에 접근하게 해줌Spring에서는 JPA(Java Persistence API)라는 표준 인터페이스를 사용하고, 그 구현체 중 가장 유명한 것이 HibernateJDBC(Java Database Connectivity)란? (1990년대 후반~)Java에서 DB 연결하는 가장 원시적이고 기본적인 방식Java와 DB 사이를 연결해주는 가장 기본적인 방법이고 직접 SQL문 작성 필요반복적인 코드가 많고 생산성이 낮음Connection conn =..

[Spring boot] 다양한 모듈

스프링 프레임워크의 다양한 모듈스프링 프레임워크는 기능별로 구분된 약 20여 개의 모듈로 구성돼 있다. 그림 1.3은 스프링 공식 문서에서 제공하는 다이어그램스프링 프레임워크 공식 문서에는 스프링 버전 별로 다른 다이어그램을 제시하고 있지만 큰 틀은 유사하다.스프링 프레임워크를 사용한다고 해서 모든 모듈을 사용할 필요는 없다.애플리케이션 개발에 필요한 모듈만 선택해 사용하게끔 설계되어 있다. == 경량 컨테이너 설계