본문 바로가기
FrameWork & Runtime/Spring

<코드 프레소 웹 개발 트랙> Spring Boot 웹 개발 입문 [1]

by jaeaemin 2022. 2. 2.

[0] Spring

 

[1] Web ( World Wide Web ) 이란 

인터넷 상 정보 공유 기술 중 하나로 , Web에서의 정보는 Hyper Text 문서(html등) 로 작성되고 공유 된다.

Web brower는 Hyper text 문서를 읽어 사람이 보기 좋게 만들어주는 프로그램을 의미한다. 

 

Hyper Text란 일종의 문서로, "링크를 포함하여" 다른 문서들과 서로 연결 된 문서를 의미한다 ( 웹 페이지 ) 

 

 

[2] HTTP ( Hyper Text Transfer Protocol ) 

Hyper Text (웹 페이지)를 컴퓨터가 주고 받기 위한 규약이다.

모든 브라우저와 웹 서버는 HTTP 표준에 따라 개발되고 정보를 주고 받는다

 

 

[3] Client 와 Sever의 기본 동작 구조

Cilent 가 Server에 요청을 하면 , Server는 요청에 대한 처리를 한 후 결과를 응답함

Server는 요청에 대한 처리를 한 후 결과를 응답한다.

 - 단순 문자열, 이미지, 영상, HTML, JSON 등 ..

 

 

 

 

[1] SPRING FRAMEWORK

 

Rod Johnson에 의해 개발되어 2004년 1.0 버전이 출시됨

2017년 5.0 , 2014년에 1.0 , 202 0년 Spring Boot 2.x 출시 됨

주로 웹 애플리케이션 개발을 위해 활용되고 작은 게시판부터 Neflix 수준의 대규모 애플리케이션을 개발하는 데 작용

국내외 많은 기업들이 Spring Framework을 핵심 기술로 활용 중이다.

 

 

Spring Framework의 장점 

  • 경량화 된 Java Framework
  • POJO의 사용으로 재사용가능한 코드 개발 가능
  • DI와 AOP의 적용 
  • Transaction 관리와 편의성
  • MVC 아키텍처의 지원
  • 테스트 용이 & 높은 보안성 
  • 방대한 프로젝트
    • Spring Framework은 22개 카테고리의 수 백개의 프로젝트를 보유
    • 대규모의 웹 애플리케이션 개발/운영을 위한 거의 모든 기술 제공
  • 끊임없는 개선
    • 최근 SW 시스템은 점점 거대해지고 복잡해지고 있음
    • 더 나은 SW 시스템을 위한 다양한 기술과 아키텍처가 소개되는 상황
      • 마이크로 서비스 아키텍처
      • NoSQL
      • 클라우드 컴퓨팅 및 컨테이너
    • Spring Framework는 변화하는 기술에 빠르게 대응해 새로운 프로젝트 출시 중
      • Spring Cloud 프로젝트, Spring Native 등..

 

 

 

Spring Framework 단점

  • 높은 러닝커브
    • Bean, Di, AOP, 객체지향 설계, 디자인 패턴 등 다양한 개념 이해 필요
    • Spring Framework은 대규모 서비스 개발을 위한 목적으로 개발
    • SW의 유연한 ㅎ확장성을 위해 다양한 기술들이 내포되어 있음
  • 복잡한 설정
    • "Spring Framework는 XML의 지옥이다"
    • 간단한 웹 애플리케이션 개발을 위해서도 상당한 수준의 설정이 필요함
    • Spring Boot가 출시 되어 단번에 문제가 해결 됨
      • 자동화 된 설정, 간편화 된 의존성 관리 등 

 

 

Spring Boot 

  • 일반적인 스프링 프레임 워크보다 손쉽게 활용할 수 있게 지원하는 기술이다.
  • Spring Framework를 기반으로 된 프로젝트이다.
  • 설정, 의존성 관리, 애플리케이션 모니터링, 서버의 실행 등을 가볍고 빠르게 수행 가능
  • Spring Boot의 주요 기능
    • 설정 간편화 - Auto Configuration
    • 의존성 관리 - Starter Project
    • 배포 프로세스 간소화 - Embedded WAS
    • 애플리케이션 모니터링 - Actuator

 

 

웹 서비스 개발 및 운영 직군 

  1. 퍼블리싱, 마크업 개발
    1. 사용자에게 노출되는 웹 화면 개발
    2. 디자인을 HTML/CSS 코드로 옮기는 과정
  2. 프론트엔드 개발
    1. 사용자의 입력/이벤트를 백엔드로 전송
    2. 백엔드의 데이터를 받아 화면에 노출
    3. JS. Jquery, VusJS, ReactJS 등 Framework로 사용
  3. 백엔드 개발
    1. 웹 서비스의 비지니스 로직을 처리하는 역할
    2. 브라우저에서의 요청을 적절하게 처리
      1. 로직 처리, DB연동, 외부 시스템 연동DB 설계, 운영
  4. DB설계/운영
    1. 웹 서비시의 데이터가 저장 될 DB 설계 DBMS 운영 관리
    2. DB 분석/설계와 DBMS 운영은 다른 역할 
      1. RDBMS - Oracle, MySQL, MSSQL 등이 사용
      2. NOSQL - MongoDB , Cassandra, DynamoDB 등이 사용
  5. 시스템 엔지니어링, 인프라 엔지니어링 
    1. 웹 서비스가 운영 될 기간 인프라를 설계하고 운영
    2. 서버, 네트워킹, 스토리지 보안 등 설계, 구축, 운영 
    3. 기존 = 프레미스 기반 , 최근 = 클라우드 및 컨테이너 기반 

 

웹 프레임워크 

 

Web Framework 종류

  • Spring - Java
  • Flask , Django - Python
  • NodeJs - Javascript
  • Laravel - PHP
  • Rails - Ruby

 

SW Framework

  • SW 개발을 효율적으로 하기 위한 반제품
  • 특정 분야의 SW 개발에 필요한 공통 기능을 제공한다.
  • 사용자는 Framework에 필요한 기능을 추가하여 전체 애플리케이션 완성

 

Postman

  • REST API 통합 관리하기 위한 SW
  • Spring Boot로 구현하는 API를 테스트하기 위한 용도로 사용

 

 

 

 

 

 

 

 

 

[2] Spring Boot 컨트롤러와 REST API

 

1. 계층형 아키텍처란 ? 

 

[1] SW 아키텍처 →  SW의 구조를 정의한 것으로 SW를 구성하는 주요 요소들과 요소들의 관계를 정의 

[2] 디자인 패턴   → 특정 상황의 문제를 해결하기 위한 일반화된 솔루션을 의미함 

 

 

계층형 아키텍쳐 패턴 

웹 서비스 개발에 주로 사용되는 패턴으로 서로 다른 역할의 SW를 3~4개 계층으로 구분함.

계층 간 호출을 하며 데이터를 주고 받아 협력하여 전체 웹 서비스를 구성한다.

  1. Presentation Layer    -> 사용자의 요청과 응답
  2. Application Layer      -> 특정 목적의 비지니스 로직 처리 
  3. Business Layer
  4. Data Access Layer     -> DB에 접근해 데이터 저장,조회 

 

각 계층에서 수행되는 역할의 예시 ; 웹 서비스의 계층형 아키텍쳐 패턴의 적용 ;

 

 

 

 

 

 

 

[2] Spring Controller 

 

  • Spring Controller는 계층형 아키텍처의 Presentation Layer에 해당 
  • Clinet의 요청을 받고 Application Layer에 요청에 대한 처리를 위임하고, Client에 최종 응답을 하는 역할
    • (응답1 )  View : Client 응답의 결과로 보게 되는 " 웹 페이지 "
    • (응답2 )  Data : Client 응답의 결과로 받게 되는 " 데이터 " 
  • Spring Controller를 구현하기 위해 3개의 기본 Annotation이 사용됨
    • @Controller - 컨트롤러 역할의 클래스 지정 < 응답 형태가 View의 형태 >
    • @RestController - 컨트롤러 역할의 클래스 지정 < 응답 형태가 Data의 형태 >
    • @RequestMapping - 특정 요청을 처리하는 메소드를 지정
  • Framework 활용은 규칙을 지키는 것으로 Spring 프레임워크의 규칙을 지켜야 함
  • 약속된 Annotaion들은 Spring Framework가 스캔하게 되고 관리된다.
  • 관리되는 Annotation은 Spring Framework에 의해 특정 목적으로 사용된다.

 

Annotation < @ >
  - Java 소스코드에 추가적인 정보를 제공하는 방법 
  - @로 시작해서 클래스, 메소드, 멤버변수, 파라미터 등에 부착이 가능하다
  - 3가지 유형의 Annotation이 존재함
-------------------------------------------------------------------

<1> 자바 컴파일러에게 정보를 제공하는 역할
<2> SW 툴에 의해 사용되어 코드 생성이나 추가 작업을 진행하는 역할
<3> run-time 시 특정 동작을 추가적으로 실행하는 역할

 

 

@RestController  VS  Controller

  • 대부분의 동작 유사
    • 요청을 받아서 처리하고 응답을 반환함
  • 차이점은 응답 형태 !
    • Controller :  view를 응답 ( html 파일 등 )
    • RestController : data를 응답 ( 문자열, json, xml 등 ) 

 

@RestController
public class HelloController {
        @RequestMapping(value = "/hello")
        public String hello() {
                return "hello"'

@Controller
public class HelloController {
        @RequestMapping(value = "/hello")
        public String hello() {
                return "hello";

hello라는 문자열이 웹에 표시되게 된다 hello라는 html 문서 혹은 템플릿 엔진 등을 사용해서 표시한다.
View의 파일을 응답함 !

 

 

 

 

@RequestMapping 

특정 요청을 처리하는 메서드를 지정

 

  • RequestMapping이 붙어 있는 메소드는 Client의 특정 요청이 왔을 때 Spring Framework에 의해 호출된다.
  • 즉 Spring Frameworks는 @ReqeustMapping Annotation을 인식해서 특정 요청을 처리할 메소드를 관리한다.
  • 기본 도메인에 이어지는 URI path 정보를 기반으로 Clinet 요청을 특정 메소드에 전달한다.
  • 예시 URI는 아래와 같다.  (  " URI/hello" ,  "URI/bye"  )  => hello, bye : 클라이언트 요청

 

아래 코드는 유저가 hello, bye 요청을 했을 경우 처리되는 특정 메소드를 의미한다.

@RestController
public class HelloController {
	
    @RequestMapping(value = "/hello")
    public String hello() {
    	return "hello";
    }
    
    @ReqeustMapping(value = "/bye")
    public String bye() {
    	return "bye";
    }
}

 

 

 

URI (Uniform Resource Identifier ) 

   자원의 주소를 의미하고 계층적으로 표현하는 것이 가능한 주소체계

  • URL과 유사한 개념
    • Uniform Resource Locator 로 URI의 하위 개념
  • 특정한 자원에 접근 하기 위한 이름 또는 주소를 의미한다
  • 웹 상의 모든 자원들은 URI를 가지고 있음
    • 웹 페이지, 이미지, 영상 등...
  • URI는 요청히는 자원의 종류에 따라 이름을 정한다
    • www.codepresso-blog.com/user
  • URI는 계층 관계로 표현 가능하고, '/'로 계층을 구분한다.
    • www.codepresso-blog.com/user/enterprise/google
  • 단일 웹 애플리케이션 내에서 URI는 중복 될 수 없고, 중복 시 에러 발생
  • 네이밍 규약이 존재함 
    • 소문자를 주로 사용
    • 요청하는 자원에 대한 명사 형태로 작성
    • 두 단어 이상 연결 될 경우 "-"를 사용한다.
    • 의미있는 이름으로 일관성있게 작성해야 함.

 

 

API이란 ? 

API : Interface란 두 개체 간의 정보를 공유하기 위한 방법으로, API는 프로그램 간 정보를 공유하기 위한 방법이다

- 함수나 메소드를 호출하는 형식의 API

- HTTP등의 기술로 네트워크를 통한 원격 자원을 호출하는 API 등 ..

 

(1) HTTP API  :  HTTP(s)를 활용해서 원격의 데이터를 공유하기 위한 API를 의미한다.

 

(2) REST API (Representational State Transfer)

 웹 상에서 효율적으로 데이터를 공유하기 위한 아키텍처 스타일을 의미한다.

 다양한 조건이 만족되어야 하며, 실무에서 모든 조건을 만족하게 구현하는 것은 어려움 

 

실무에서는 HTTP API와 REST API를 혼용하는데 주로 "REST API"라는 명칭이 사용됨
@RestController AnnotationREST API, HTTP API를 위한 클래스를 명시하는 것이다.
@RestController 내에 @RequestMapping이 붙은 개별 메소드들이 하나의 REST API, HTTP API

 

 

 

 

 

 

Spring의  RequestMapping 과 URI

 

  • Spring Controller의 메소드들은 URI에 따라 호출이 결정된다.
  • 기본 도메인에 이어지는 '/path'들에 의해 결정 됨.
    • https://localhost:8080/user
    • https://localhost:8080/post/1 
  • RequestMapping Annotatiion에 URI path 정보를 명시한다.
    • @RequestMapping(value = "/user") 
    •    →  xxxxx/user 의 요청시 프레임워크에 의해  해당 메서드가 호출

 

RequestMapping 의 예시;

 

  • 특정 Controller 클래스 내부의 모든 메소드에 Path를 적용하는 것이 가능하다
    • user/paid , user/enterprise , user/administrator
    • user의 하향식 구조 지정된 Path 처리

하향식 구조로 다수의&amp;amp;amp;nbsp; Path시 처리 controller 지정&amp;amp;amp;nbsp;

 

 

 

 

 

 

 


[3] Request 파라미터 

 

  • Client가 Server에 요청(Request)를 할 때 추가적으로 전송하는 데이터
  • Spring Framework는 Request 파라미터메소드의 파라미터에 저장
  • 2가지 유형의 Request 파라미터가 주로 사용됨
    • Query String
    • Path Parameter
  • 크기가 큰 데이터를 보내기 위해서는 다른 방식이 필요함 
    • Request Body ..

 

 

[1] Query String  ( key , value , & )

 

  • URI와 파라미터의 영역을 구분하여 사용할 수 있다.
    • URI에 이어지는 '?' 뒤에 Key1 = value1&key2=value2& ...형태로 작성
  • KEY가 파라미터의 이름을 의미하고, Value는 파라미터의 값을 뜻함
  • @RequestParam를 통해 Query를 통해 들어온 값을 처리한다.

(ex) RequestParam의 예시

→ https://www.google.com/search"?q=codepresso&sourceid=chrome&ie=UTF-8" 

( Key 1 : q , Value : codepresso , Key 2 : sorceid , Value 2: chrome ... )

 

→ https://www.naver.com/search.naver"?where=nexearch&query=codepresso

( Key 1 : where , Value : nexearch , Key 2 : query , Value = codepresso )

 



Query String의 Spring 활용

 

path 경로를 통한 변수 할당 예시&amp;amp;amp;nbsp;

>> https??localhost:8080/psot?category=it&id=10

>> URI에서 들어온 인자를 통해서 id와 category가 변수안에 저장되어 출력하게 된다.

>> You Request it-10 post

 

 

Request 파라미터의 요소

  1. name : query String의 key, key와 변수명이 같을 경우 생략 가능
  2. required : 필수 여부
  3. defaultValue : 데이터가 없는 경우 기본 값
@RequestParam(  name = "category",
                required = false,
                defaultValue = "it") String category)

 

 

 

 

 

[2] Path parameter ( name, required, defaultvalue )

 

  • URI의 일부를 파라미터 값으로 사용 한다.
    • domain/user/1
    • domain/user/3/post/27
    • @PathVariable

(ex)

→ https://brunch.co.kr/@thinkaboutlove/199 

→ https://www.codepresso.kr/course/9

 

 

  • @RequestMapping value URI{xxx}로 Path param임을 표시한다.
  • 메소드 파라미터에 @PathVariable Annotation을 사용한다.
  • 선택적 데이터의 경우에는 Path Param을 잘 사용하지 않음 ( 들어 올 수도/ 안들어 올 수도 )
  • { } 를 통해서 Path parameter가 input 될 위치를 표현한다.

 

Path Parameter를 Spring에서 활용

>> https??localhost:8080/user/admin/id/100

>> You Request admin-100 post

 

 

 

 

일반적인 추천 사항

- 조직마다 표준이 존재하고, 표준에 따라 개발하는 것이 원칙 

Path Param -> 특정 자원을 요청 하는 경우는 path param을 주로 사용한다.
-> 필수 데이터는 Path param을 주로 사용한다.
Query String  -> 정렬이나 추가 필터링을 위한 데이터는 Query String을 사용한다.
-> 선택적 데이터는 Query String을 주로 사용한다.

- 서로 mix하여 사용하는 것도 가능하다

- https://codepresoo.kr/courses/Spring?order=latest

 

 

 

 

 

[3] Request Body

  • 일반적으로 데이터를 저장 및 수정하는 경우 POST, PUT Method가 사용된다.
    • GET, DELETE, Query String, Path Param이 주로 사용
  • Request Body에 다양한 포맷의 데이터 전송이 가능하다.
    • JSON 데이터 형식이 주로 사용된다.
  • Clinet에서는 Json 데이터를 전송하고, Sping에서는 Json 데이터를 JAVA 객체 파라미터로 저장함.

 

 

 

 

 

 

 

 

 

[3] Response 

    Spring Controller와 Response 데이터

 

Response란

> Clinet가 Server에 특정 요청을 하면, Server는 요청에 대한 처리를 한 후 결과를 응답한다. 

> 응답 형식은 단순 문자열, 이미지, 영상, HTML 페이지, JSON 등..

 

@Controller HTML 파일과 같은 view를 응답함
@RestController 메소드 반환 값 자체를 응답 ( 단순 문자열, JSON ) 

  

    객체를 반환하면 반환하는 객체의 구조와 유사한 JSON 형태의  데이터가 응답 된다.

 

 

 

JSON - JavaScript Object Notation

데이터를 교환하는데 사용되고 XML보다 가볍고 읽기 편리함 

  1. 웹 개발 시 가장 일반적으로 사용하는 응답 데이터 포맷
  2. 프론트엔드에서는 JSON 형식의 데이터를 응답 받아서 화면을 구성함
  3. 각 REST API 별로 어떤 JSON 데이터를 응답할 것 인지 사전에 정함
  4. 프론트-백엔드 사이 사전에 협의된 JSON 데이터에 맞춰 구현함 
  5. Spring Boot에서는 객체를 반환하면 적절한 JSON 형식으로 변환하여 Client로 최종 응답함

 

JSON 기본 문법 

  • JSON 객체(Object)가 가장 기본 단위로 "Key":value의 데이터를 포함한다.
  • JSON 객체의 시작과 끝은 중괄호 {} 를 사용한다
  • Key는 큰따옴표""로 묶는다
  • value에는 다양한 형태의 데이터 타입이 사용 가능하다
    • 문자열, 숫자, Bool, Null, json 배열, json 객체
  • 다수의 "Key":value는 쉼표(,)로 구분한다.
  • Key-value 형식은 중첩되어서 사용하는 것이 가능하다.
  • Json 배열은 순서가 있는 데이터의  나열로 대괄호 [] 로 표현한다.
  • Json 배열 안에 다양한 자료형과 객체, 배열도 포함하는 것이 가능하다.

 

 

 

 

 

 

 

 

HTTP

  • Hyper Text(웹 페이지)를 컴퓨터가 주고 받기 위하 규약
  • 컴퓨터 간의 데이터를 주고 받기 위해서 국제 표준 단체의 명확학 약속이자 표준
  • 모든 브라우저의 웹 서버는 HTTP 표준에 맞춰 개발되고 배포 통신된다.

 

HTTP 메소드

  • HTTP 규약 중 하나로, 특정 자원에 대해 수행 하는 행동의 종류를 명시함
  • HTTP Method를 사용하면 단일 URI로 다양한 행동을 정의하는 것이 가능 
  • 주로 사용되는 HTTP 메소드는 아래와 같고 DB의 기본 4동작과 유사함 (CRUD)
    • GET - 자원 조회
    • POST - 자원 생성
    • PUT - 자원 수정
    • DELETE - 자원 삭제

 

DB 동작 행동 HTTP method
C - Create 데이터 저장 POST
R - Read 데이터 조회 GET
U - Update 데이터 수정 PUT, PATCH
D - Delete 데이터 삭제 DELETE

 

  • HTTP Method를 사용하면 단일 URI로 다양한 행동을 정의하는 REST API를  설계하는 것이 가능하다. 

&amp;nbsp; HTTP method

  • HTTP Method는 규약이지 규칙이 아니다.
    • 에러는 발생하지 않지만 Best Practice에 맞게 설계한 것은 아님 

 

 

 

HTTP Method의 구현 

 

  • @RequestMapping의 요소로 Method를 명시할 수 있음
    • default는 GET method 
  • 요청 된 HTTP Method에 따라 해당 Controller의 Java 메소드가 호출된다.
  • 각 Java 메소드에서 HTTP 메소드에 해당하는 처리를 수행하도록 설계하는 것이 권장된다.

 

HTTP 메소드 예시

 

HTTP Method를 위해 간소화 된 Annotation도 존재한다.

@RequestMapping ( method = GET ) @GetMapping
@RequestMapping ( method = POST ) @PostMapping
@RequestMapping ( method = PUT ) @PutMapping
@RequestMapping ( method = DELETE ) @DeleteMapping

>> 즉 URI의 변화 없이 HTTP 메서드를 통해서 웹의 동작 방식을 변화할 수 있음 .

 

 

 

 

API 문서 

  • API는 정보를 주고 받기 위한 방법/약속이다.
  • API를 사용하기 위해서 사용 방법을 알아야 한다.
  • API 문서는 API를 사용하는 방법을 명세한 문서이다.
  • 예) 무엇을 리턴하고, 파라미터는 무엇이고, 어떻게 동작하는 지 등 문서로 설명함. 

 

REST API 문서화

  • 프론트엔드에서 호출 하기 위한 REST API의 정보가 명세 된 문서
    • 프론트엔드 개발자는 약속 된 REST API 문서에 의존하여 프론트엔드를 개발함
  • 프론트엔드 등 Client를 호출하고 활용하는 데 어려움이 없도록 상세하게 작성 되어야 함
  • 잘 작성된 REST API 문서가 잘 작성 될 수록 Communication 비용이 줄어 든다.

 

 

REST API 문서가 담고 있어야 하는 정보

  1. REST API 설명
  2. URI
  3. HTTP Method
  4. Request 파라미터 ( 필수 파라미터 and 선택 파라미터 ) 
  5. Response 데이터 ( 필수 응답 and 선택 응답 ) 
  6. 가능한 에러 코드 및 대응 방법
  7. 호출 예시  .. 등

 

 

 

 



- 코드프레소  Java  웹  개발  체험단  활동  중    
- 코드프레소  웹개발 트랙의 "처음 시작하는 SQL 프로그래밍" 내용입니다.
- 코드프레소  URL: https://www.codepresso.kr/ 

반응형