개발하는 무민

[코드프레소] Java 웹개발 트랙 체험단 - Spring Boot 웹 개발 입문 본문

Project/[코드프레소] JAVA웹개발트랙

[코드프레소] Java 웹개발 트랙 체험단 - Spring Boot 웹 개발 입문

무민_ 2022. 2. 1. 22:05

01강. Spring Framework 소개

Spring Framework 소개

스프링 프레임 워크는 웹개발만을 위한건 아니지만 주로 웹 앱에서 활용된다.

작은 게시판 ~넷플릭스 까지 적용 가능함.

 

스프링 부트란 무엇인가 ?

빠르고 편하게 웹개발을 도와주는 프레임워크

스프링 프레임워크보다 쉽게 지원해줌.

 

웹 서비스 개발의 기본 구조

앞단 - 사용자와 상호작용 하는 프론트엔드

백엔드 - 프론트엔드와 통신

백엔드는 데이터베이스와 연결되어있다.

 

퍼블리싱 / 마크업 개발

사용자에게 노출되는 웹 화면을 개발한다.

디자인을 html, css 코드로 옮기는 과정이다.

html, css를 주로 사용하고, 자바 스크립트를 일부 사용한다.

화면의 정보와 구조 : html

화면의 스타일 꾸미기 : css

사용자 이벤트 처리 : 자바스크립트

 

프론트엔드 개발

사용자 화면과 백엔드와 중간 커뮤니케이션 역할.

사용자의 입력과 이벤트를 받아 백엔드로 전송해준다.

백엔드의 데이터를 받아 화면에 노출시킨다.

자바스크립트, 제이쿼리등이 전통적으로 많이 사용된다.

최근에는 VueJS, ReactJS, AngularJS등의 프론트엔드를 위한 프레임워크가 많이 사용됨

 

백엔드 개발

실제 웹 서비스의 비즈니스 로직을 처리한다.

브라우저에서의 사용자 요청을 받아 적절히 처리함 (로직 처리, DB 연동, 외부 시스템 연동 등)

스프링, Django, Flask, NodeJS등의 웹 프레임워크 활용해서 개발

 

DB 설계 , 운영

웹 서비스의 데이터가 저장될 DB를 설꼐하고 DBMS를 운영, 관리한다.

데이터는 웹 서비스의 가장 중요 요소 중 하나이다.

DB 분석 설계와 DBMS 운영은 다른 역할이다.

RDMBS로는 오라클, MySQL, PostgreSQL, MSSQL 등 주로 사용.

NoSQL 로는 MongoDB, Cassandra, DynamoDB, Elasticsearch 등 주로 사용.

 

시스템 엔지니어링, 인프라 엔지니어링

웹 서비스가 운영될 기간 인프라를 설계하고 운영한다.

서버, 네트워킹, 스토리지, 보안 등 설계, 구축 운영을 한다.

기존에는 온 프레미스 기반의 시스템을 운영.

최근에는 클라우드 및 컨테이너 기반의 시스템 운영으로 전환중이다.

AWS, Azure, GCP, NCP / Docker, Kubernetes 등..

 

Web Framework의 종류

 

SW Framework

SW개발을 효율적으로 하기 위한 반제품이다.

특정 분야의 SW 개발에 필요한 공통 기능 제공함.

사용자는 프레임워크에 필요한 기능을 추가해서 전체 애플리케이션을 완성한다.

 

Web Framework

웹 개발을 위한 SW 반제품이다.

 

 


 

 

02강. 실습 환경 구성

 

JDK 설치하기

https://www.oracle.com/kr/java/technologies/javase/jdk11-archive-downloads.html

 

intellij 설치

기 설치 완료건

 

Postman 설치

REST API를 통합 관리하기 위한 SW

스프링부트로 구현하는 API를 테스트하기 위한 용도로 사용한다.

https://www.postman.com/downloads/

 

Download Postman | Get Started for Free

Try Postman for free! Join 17 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.

www.postman.com

 

 

나의 첫 Spring Boot Application

스프링부트 애플리케이션 개발 및 실행 순서

spring initializr를 활용한 스프링부트 프로젝트 생성 및 다운로드

다운로드한 스프링 부트 프로젝트를 인텔리제이에서 import

추가 코드 개발

스프링부트 애플리케이션 실행

웹 브라우저 또는 Postman을 활용하여 테스트!

→ 이 순서로 개발이 진행된다.

 

spring initializr

스프링부트 프로젝트를 쉽게 구성할 수 있게 지원해주는 사이트.

https://start.spring.io/

설정을 입력하고 디펜던시를 스프링 웹으로 설정하면 제너레이트로 다운로드 가능.

다운로드받은 프로젝트는 인텔리제이에서 열 수 있다.

 

 


 

03강. Web의 기초 개념과 HTML의 기초 활용

Web과 HTTP의 개념

Web(World Wide Web, www)

인터넷 상에서 정보를 공유하는 기술 중 하나.

웹에서의 정보는 기본적으로 하이퍼 텍스트 문서로 작성되고 공유된다.

(Hyper Text를 작성하는 언어가 HTML이다.)

웹 브라우저는 원격에 있는 하이퍼텍스트 문서를 읽어서 사람이 보기좋게 만들어주는 프로그램이다.

 

Hyper Text

하이퍼텍스트는 일종의 문서로, 링크를 포함하고 있어 다른 문서들과 연결될 수 있다. (우리가 일상적으로 사용하는 웹 페이지 이다.)

모든 문서는 고유의 주소를 갖고 있다.

 

HTML (Hyper Text Markup Language)

하이퍼 텍스트(웹 페이지)를 작성하기 위한 언어이다.

웹페이지의 구조를 결정하고 각 요소들에 의미를 부여하는 역할을 한다.

구조 : 각 요소들의 순서 등.

요소 : 제목인지, 본문인지, 이미지 인지 등 ...

 

HTTP(Hyper Text Transfer Protocol)

하이퍼텍스트(웹페이지)를 컴퓨터가 주고 받기 위한 규약이다.

커뮾터간 데이터를 주고받기 위해서는 명확한 약속이 필요하다.

IETF, W3C등의 국제 표준 단체에서 HTTP에 대한 표준을 정해서 배포한다.

모든 브라우저에 웹 서버 등은 HTTP 표준에 따라 개발되고 통신한다.

클라이언트가 서버로 요청을 하고, 서버는 응답을 해주는 형태인데

이 과정에서는 체계화된 프로토콜 규칙을 바탕으로 실행된다.

 

Point

웹은 인터넷 상에서 정보를 공유하는 기술 중 하나이다.

웹 상에서의 정보는 하이퍼 텍스트로 작성 및 공유된다.

(웹 상의 하이퍼 텍스트들은 각자 고유한 주소가 있고, 하이퍼 텍스트 내에서 다른 하이퍼텍스트로 연결이 되어있다.)

하이퍼 텍스트를 작성하는 언어가 HTML이다.

HTTP는 컴퓨터간의 Hyper Text를 주고 받는 표준 규약이다.

(하이퍼 텍스트는 주로 웹 브라우저와 서버 간의 전송이 이루어진다)

 

 

IP와 Port의 이해

Client와 Server

IP를 통해 요청할 대상의 주소를 알 수 있다.

 

IP 주소

인터넷에 연결된 기기가 가질 수 있는 네트워크 상의 주소이다.

IP 주소 정보로 원격에 있는 자원 (웹페이지, 이미지 등)을 요청할 수 있다.

 

IPv4 vs IPv6

IPv4 는 전 세계적으로 2^32개의 IP 주소 가능, 최근에는 기기의 증가로 고갈 될 예정이다.

IPv6는 2^128개의 IP 주소를 할당할 수 있다.

 

공인 IP 주소와 사설 IP 주소 (퍼블릭과 프라이빗)

  • 공인 IP : 인터넷 상 고유한 IP 주소.

공인 IP주소는 IP 주소를 관리하는 기관으로부터 할당받아 사용이 가능하다.

대륙별, 국가별로 할당받은 공인 IP 주소가 존재한다.

누구나 접속 가능해야하는 웹 서버등에는 공인 IP 주소가 필요하다.

  • 사설 IP : 특정 조직 내부의 사설 네트워크 안에서만 통신 가능한 IP 주소. (기관, 회사, 가정 등)

사설 네트워크의 내부에서는 사설 IP로 통신이 가능하나, 외부에서는 사설 IP로 기기에 접근할 수 없다.

즉, 회사의 동일한 공유기에 연결된 컴퓨터 간에는 사설 IP로 통신이 가능하지만, 외부에서는 그 회사의 컴퓨터에 사설 IP로 통신할 수 없다.

사설 네트워크 간에는 사설 IP가 중복되어도 무방하다.

회사 A의 사설 IP와 B의 사설 IP는 서로 내부에서만 사용하기 때문에 중복되어도 된다.

즉, 공인 IP는 전세계에서 유니크 해야하고, 사설 IP는 중복되어도 상관없다는 것이다.

 

호스트명 (Hostname)

긴 숫자 형태의 IP 주소는 외워서 활용하기 어렵다.

이런 어려운 IP 대신 읽고 외우기 쉬운 형태의 주소 필요.

  • 호스트명.
  • 호스트는 인터넷 상에 IP 주소를 가진 기기를 의미한다.

(blog.naver.com / news.google.com ...)

호스트명으로 기기의 IP 주소를 찾을 수 있다.

 

localhost 로컬호스트

현재 작업을 수행중인 기기 (Pc 등)을 지칭하는 특수한 호스트명이다.

IP 주소로는 127.0.0.1로 표현한다.

웹 서버를 원격이 아닌 내 컴퓨터에서 실행한 경우, localhost 또는 127.0.0.1로 연결한다.

 

Port 주소

IP주소가 특정 호스트까지의 주소라면 ,Port는 호스트 내부의 프로세스의 네트워크 주소이다.

호스트(기기) 안에 여러 서버가 있을텐데, 그 안에서 어디로 가야하는지의 정보를 갖고있다.

Port 주소는 호스트에서 0 ~65535 까지 사용 가능.

잘 알려진 포트는 정해져 있다. (SSH → 20, HTTP → 80 등)

호스트 내부에서 Port 주소는 유일해야 한다.

 

Point!

IP 주소는 인터넷에 연결된 기기가 가질 수 있는 주소이다.

클라이언트는 IP 주소 정보로 서버에 자원을 요청할 수 있다.

호스트명은 IP 주소 대신 사용하는 사람이 이해하기 쉬운 형태의 주소이다.

호스트명으로 IP 주소를 찾는것이 가능하다.

Port는 특정 호스트 내부의 프로세스의 네트워크 주소이다.

 

HTML의 이해

Hyper Text Markup Language

링크를 통해 모든 문서가 연결.

비 순차적 접근법이다.

 

Markup : 텍스트를 구조적으로 표현하는 방식.

정형화되지 않은 텍스트를 정형화로 만들어준다.

 

하이퍼텍스트 : 서로 연결될 수 있고

마크업 : 정보를 구조적으로 표현하는

랭귀지 : 프로그래밍 언어

 

HTML은 정보를 구조적으로 표현하기 위해 Tag라는 개념을 사용한다.

<html></html> ...

 

첫번째 HTML 실습

https://www.w3schools.com/html/tryit.asp?filename=tryhtml_default

 

W3Schools online HTML editor

The W3Schools online code editor allows you to edit code and view the result in your browser

www.w3schools.com

웹 기반 HTML, CSS 실습 에디터

 

HTML의 기본 구조

계층형 구조로 되어있다.

html tag : 최상위 태그

head tag : 문서의 부가 정보를 담는 태그

body tag : 문서의 컨텐츠를 담는 태그.

 

HTML tag

HTML 문서의 컨텐츠는 Tag로 둘러 쌓인다.

<tagname> 실제 컨텐츠 내용.. </tagname>

브라우저는 태그와 태그 내의 컨텐츠를 읽어서 사용자에게 보여준다.

그는 해당 컨텐츠를 사용자에게 어떻게 보여줄지에 대한 정보를 담고 있는다.

 

 

HTML 의 기초 Tag

Heading

제목 또는 부제목 표시에 사용.

h1 ~ h6 이 존재하고, 숫자가 작을수록 폰트 크기가 크다.

자동으로 줄 바꿈이 적용된다.

 

 

Paragraph

문단 사용시 사용.

이름을 따서 p로 사용한다.

<p></p>

문단의 첫 줄 위에 줄바꿈이 적용된다.

 

Line Break

HTML은 줄 바꿈이 적용되지 않는다

문장 사이에 줄 바꿈을 적용하기 위해서는 라인 브레이커 적용이 필요하다.

<br/> 을 사용하며, 혼자 사용되는 싱글 태그이다.

 

Bold

특정 문자를 진하게 강조한다.

2 종류의 태그 사용 가능.

<b></b> : 단순 볼드 처리 방법

<strong></strong> : 중요한 텍스트 표시(웹 접근성, 음성 강조 등)

 

b 태그와 strong 태그의 차이

html은 보이지 않는 사람도 사용할 수 있어야 한다.

b 태그는 소리에 대한 중요 처리를 하지 않는다, strong 태그는 음성도 처리함.

눈으로 볼 때는 동일하지만, 음성등으로 보면 strong이 더 강조의 역할을 한다.

 

italic

특정 문자를 이탤릭체로 변환한다.

2종류의 태그를 사용할 수 있다.

<i></i> : 단순 이텔릭 처리

<em></em> : 중요한 텍스트 표시 (강조함) 스트롱과 같은 역할.

 

Underline

특정 문자에 언더라인(밑줄) 표시.

<u></u> 사용

 

Image

HTML 문서에 이미지를 삽일할 수 있다.

<img></img> 태그 사용

attribute 존재함 (HTML 태그의 부가적인 정보를 제공해주어야 한다)

src : 이미지의 주소 정보

alt : 이미지를 표시할 수 없을 때 사용 되는 대체 텍스트

 

Link

하이퍼텍스트의 본질인 문서 간연결을 생성.

<a></a> 사용

href attribute : 링크의 주소

href : 하이퍼텍스트 레퍼런스

 

HTML Table Tag 의 이해와 활용

Table 만들기

table : 하나의 전체 표는 <table></table> 태그로 정의한다.

table row : 표 내부의 1개 행은 <tr> ... </tr> 태그로 정의한다.

실제 데이터는 table data에 들어간다.

table data : 표 내부의 1개 셀은 <td> ... </td> 태그로 정의한다.

 

Table 효과

Table Header : 표의 제목 셀은 <th> ... </th> 태그로 정의하면 볼드체로 처리된다.

<table> 태그의 border attribute를 통해 표의 테두리 두께를 지정할 수 있다.

<caption> 태그를 추가하여 표의 설명을 추가할 수 있다. (제목같은 느낌으로)

 

List

HTML의 List 종류 : unordered, ordered

unordered list(순서가 없는 리스트) : <ul> ... </ul>

ordered list(숫자가 붙어서 순서가 있는 리스트) : <ol> ... </ol> 로 정의한다.

각 list 내의 아이템 데이터는 <li> ... </li> 태그로 나열하여 정의한다.

 

중첩 List

리스트 안에 리스트를 넣어 중첩시킬 수 있다.

 

List 효과

<ol>태그 내에 type attribute를 활용해서 다양한 효과 지정 가능

<ul> 태그 내에 style attribute를 활용해서 다양한 효과 지정 가능

  • list-style-type 프로퍼티로 정의해야한다.

ex. <ul style = “list-style-type:square;”>

 

HTML Form Tag 의 이해와 활용

Form

로그인, 회원가입, 댓글 남기기 등의 입력 페이지를 구성할 때 사용한다.

전체 입력 페이지는 <form> ... </form>으로 구성한다.

사용자로부터 입력 받을 각각의 정보는 <input> 태그의 type 속성으로 지정한다.

크게 보면 form이 바깥에 있고, 그 안에 input으로 데이터를 넣는다고 생각하면 된다.

type을 패스워드로 지정하면 보이지 않게 표시된다.

입력받고자 하는 정보에 따라서 <input> 태그의 type을 지정해야 한다.

 

 

CSS 기초 개념

HTML의 한계

웹 초창기에는 HTML에 디자인을 위한 <font> 같은 태그가 추가되면서 코드의 복잡도가 증가하고 정보로서의 웹의 가치가 떨어졌다.

수정용이성, 가독성, 코드 중복으로 인한 코드의 비용 효율성이 떨어진다.

 

CSS의 등장

HTML 태그의 한계 극복 위한 기술.

HTML은 정보를 표현하는데 집중하고, CSS는 HTML문서를 시각적으로 꾸미는데 집중.

정보와 디자인을 분리할 수 있기 때문에 정보를 수정하지 않고 디자인만 변경할 수 있다.

CSS → Cascading Style Sheets.

 

CSS 시작하기

HTML 문서 안의 <style></style> 태그 생성으로 사용한다.

<style> 태그 내에 CSS 코드를 삽입하는 형태이다.

 

CSS를 활용해서 적용 대상을 지정하는 방법

  1. HTML 태그명 이용하기
  2. id 이용하기
  3. class 이용하기

 

CSS에서 효과는 속성(property)과 값(value)로 구성된다.

속성과 값은 콜론 : 으로 구분되고, 1개의 효과 끝에는 세미콜론 ; 을 표기해주어야 한다.

여러가지 효과를 동시에 지정할 수 있다.

 

body 부분은 전체 영역이기 때문에 body로 적용하면 전체가 노란색이 됨.

영역을 구분하여 지정할 수 있다.

 

CSS 기초 개념 - id 와 class 의 이해와 활용

CSS 기본 문법 - 적용 대상 지정

HTML 내에는 중복되는 여러개의 태그가 존재한다.

특정 태그에만 효과를 지정하고자 할 때, 태그에 id 또는 class 값을 지정하여 사용한다.

 

id 지정 실습

태그에 고유한 id 속성을 지정할 수 있다.

주로 css 효과 지정을 위해 특정 객체에 접근하는 기준이 id가 된다.

1개의 HTML 페이지 내에서 id는 중복될 수 없다!

 

CSS를 활용해서 적용 대상을 지정하는 방법

id 이용하기 : # 뒤에 id 명을 입력한다!!

태그와는 다르게 CSS에서는 #을 붙여서 id를 지정한다.

일반적인 태그는 그냥 적고, id는 id임을 알려주기 위해 #을 붙여주는 것이다.

 

class 지정 실습

동일한 효과를 여러 태그에 한번에 지정할 때, 별도의 class를 지정하여 활용할 수 있다.

id처럼 고유하게 지정이 가능하다.

다만, 클래스는 여러 태그에 중복해서 지정을 할 수 있다는 차별점이 있다.

 

클래스는 그룹같은 기능을 한다.

id와 태그 사이에 원하는 부분만 그룹화를 시키고 싶을 때 클래스를 사용한다.

태그에 id가 별로 없으면 크롤링이 어렵다.. 대부분은 id가 별로 없음

클래스만 알더라도 크롤링의 범위를 좁힐 수 있다.

 

CSS를 활용해서 적용 대상을 지정하는 방법

class 이용하기 : 닷 . 뒤에 class 명을 입력한다!!

.을 붙임으로 클래스임을 명시해주는 것이다.

 

 


 

04강. Spring Boot 컨트롤러와 REST API

계층형 아키텍처의 이해 (Layered Architecture)

SW 아키텍처

건축시 설계도를 그려서 건물이 어떻게 지어질지 구상한다.

SW도 실제 콛 ㅡ개발 전 최종 SW의 모습을 설계한다.

SW 아키텍처란, SW의 구조를 정의한 것으로 SW를 구성하는 주요 요소들과 요소들의 관계를 정의한 것이다.

 

SW 아키텍처/디자인 패턴

패턴 : 되풀이되는 사건이나 물체의 형태, 예측 가능한 방식으로 되풀이 된다 (위키피디아)

우리가 만드는 SW도 이전의 수많은 사람들이 만들고 고민했던 유형일 가능성이 높다.

즉.. 특정 문제를 해결하기 위한 해결책이 반복된다는 것이다.

패턴이란 특정 상황의 문제를 해결하기 위한 일반회된 솔루션이다.

ex. 카카오톡과 같은 메신저 서비스 개발을 위한 패턴, 웹 서비스 개발을 위한 패턴, 데이터 분석 시스템 개발을 위한 패턴 등. ..

 

계층형 아키텍처 패턴

웹 서비스 개발에 주로 사용되는 패턴이다.

SW를 서로 다른 역할을 하는 3~4개의 계층으로 구분한다.

  • Presentation Layer
  • Application Layer
  • Business Layer
  • Data Access Layer

역할별로 나누어 줌.

레이어로 나누는 것을 계층형 아키텍쳐라고 한다.

계층 간 호출을 하고 데이터를 주고받으면서 웹 서비스를 구성한다.

구조를 이름으로 구성하면 위와 같고, 사용되는 이름은 @ 뒤와 같다.

 

컨트롤러의 구현 문법

Spring Controller

계층형 아키텍처의 Presentation Layer에 해당한다.

Client (웹브라우저, 모바일 앱)의 요청을 받고, Application Layer에 요청에 대한 처리를 위임하며, Client에 최종 응답을 하는 역할이다.

view : 클라이언트가 요청에 대한 응답의 결과로 보게 되는 웹 페이지.

data : 클라이언트가 요청에 대한 응답으로 받는 데이터

 

Controller 코드

스프링 컨트롤러를 구현하기 위해서는 3개의 기본 annotation이 사용된다.

  • @Controller와 @RestController : Controller 역할을 하는 클래스를 지정한다, 클래스 상단에 명시함.
  • @RequestMapping : 특정 리퀘스트를 처리하는 메소드를 지정한다. 클래스 또는 메소드 상단에 명시한다.

 

Annotation이란?

Java 소스코드에 추가적인 정보를 제공하는 방법.

@으로 시작하며 클래스, 메소드, 멤버변수, 파라미터 등에 부착 가능하다.

3가지 유형의 Annotation

  • 자바 컴파일러에게 정보를 제공함(에러 찾기)
  • SW 툴에 의해 사용되어 코드 생성이나 추가 작업을 진행함
  • run-time시 특정 동작을 추가적으로 실행한다.

스프링에서는 두번째, 세번째 유형이 주로 사용된다.

 

Controller 코드

클래스 위에 @를 사용하여 컨트롤러와 레스트 컨트롤러가 붙어있는 모습.

리퀘스트 매핑은 메소드 위에 붙어있는 모습이다.

Framework를 활용한다는 것은 규칙을 지키는 것이다.

약속된 어노테이션들을 스프링 프레임워크가 스캔하며 뭐가 적혀있는지 확인한다.

annotation이 부착된 코드들은 spring framework에 의해 관리되며, spring framework에 의해서 특정한 목적으로 사용된다.

 

@Controller와 @RestController

대부분의 동작은 유사핟. 요청을 받아서 처리하고 응답하는 과정을 거친다.

단, 응답하는 형태가 다르다

  • Controller : view를 응답 (html 파일 등)
  • RestController : data를 응답 (문자열, Json, xml 등)

RestController는 데이터가 반환하는 응답 자체를 확인하게 된다.

 

Controller는 hello.html이 응답됨을 확인할 수 있다.

일반 컨트롤러 사용시, “hello” 같은 문자열은 view(html 파일 등)의 이름을 확인하는 것이다.

문자열 자체가 응답되는게 아닌, 문자열이 의미하는 파일 등이 클라이언트로 응답되는 것이다.

 

Point!

Controller는 계층형 아키텍처에서 Presentation Layer의 요청과 응답 처리 역할을 담당한다.

@Controller, @RestController, @RequestMapping이 기본 Annotation으로 사용된다.

Annotation은 SW 코드에 추가적인 정보를 제공하는 방식이며, Spring Framework는 약속된 Annotation을 인식해서 특정 작업을 수행해준다.

@Controller는 HTML 파일과 같은 View를 응답하여 보여주고,

@RestController는 문자열, Json 등의 데이터를 응답하여 보여준다.

 

컨트롤러의 구현 실습

스프링 이니셜라이저를 사용하여 폼을 만든 뒤 실습한다.

package com.codepresso.controllerexercise.controller;

import org.springframework.web.bind.annotation.RequestMapping; //어노테이션 추가시 자동으로 불러와짐
import org.springframework.web.bind.annotation.RestController;

@RestController //클래스 위에 어노테이션 추가
public class HelloController {

    @RequestMapping(value = "/") //메소드 위에 어노테이션 추가
    public String hello(){ //테스트할 메소드를 만들어준다
        return "hello"; //hello 문자열을 반환해주는 역할
   }
}

 

package com.codepresso.controllerexercise.controller;

import org.springframework.web.bind.annotation.RequestMapping; //어노테이션 추가시 자동으로 불러와짐
import org.springframework.web.bind.annotation.RestController;

@RestController //클래스 위에 어노테이션 추가
public class HelloController {

    @RequestMapping(value = "/") //메소드 위에 어노테이션 추가
    public String hello(){ //테스트할 메소드를 만들어준다
        return "hello"; //hello 문자열을 반환해주는 역할
   }
}

 

RequestMapping과 URI

@RequestMapping

리퀘스트 매핑이 붙어있는 메소드는 클라이언트의 특정 요청이 왔을 때 Spring Framework에 의해 호출된다.

리퀘스트 매핑이 붙은 메소드가 여러개일 때는 어떤 메소드가 호출될까?

 

URI (Uniform Resource Identifier)

URL(Uniform Resource Locator)과 유사한 개념이다.

특정한 자원에 접근 하기 위한 이름 또는 주소이다.

웹 상의 모든 자원들은 URI를 갖고 있다 (웹 페이지, 이미지, 영상)

 

URI와 Spring RequestMapping

Spring Controller의 메소드들은 URI에 따라 호출이 결정된다.

기본 도메인에 이어지는 ‘/path’들에 의해 결정된다!

RequestMapping Annotation에 URI Path 정보를 명시하는 것이다.

  • @RequestMapping(value = “/user”)

스프링 프레임워크(나뭇잎)은 패스 정보를 보고 어떤 메소드가 처리되어야하는지를 확인해서 실행해준다.

 

URI의 활용

URI는 요청하는 자원의 종류에 따라 이름을 정한다.

URI는 계층 관계로 표현이 가능하며, ‘/’로 계층을 구분한다.

단일 웹 어플리케이션 내에서 URI는 중복될 수없다.

에러가발생함.

 

네이밍 규약

소문자를 사용한다.

요청하는 자원에 대한 명사 형태로 작성한다.

두 단어 이상 연결될 경우 ‘-’를 사용한다.

의미있는 이름으로 일관성 있게 작성한다.

Controller 클래스에 @RequestMapping 활용

특정 Controller 클래스 내부의 모든 메소드에 PAth를 적용할 수 있다.

  • /user/paid
  • /user/enterprise
  • /user/administrator

해당 클래스 내에 공통적인 패스를 마들고싶다면 클래스 위에 패스를 붙여주는 방법도 많이 사용되고 있다.

 

Point!

Spring Framework는 @RequestMapping Annotation을 인식하여 특정 요청을 처리할 메소드를 관리한다.

‘기본도메인/’에 이어지는 URI Path 정보를 기반으로 클라이언트의 요청을 특정 메소드에 전달한다.

@ReqeustMapping은 Controller 클래스와 Controller 클래스 내부의 메소드에 명시가 가능하다.

URI는 자원의 주소를 의미하며 계층으로 표현이 가능하다.

 

+) URI와 URL의 차이

  • URI는 특정 리소스를 식별하는 **통합 자원 식별자(Uniform Resource Identifier)**를 의미한다. 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스다.URL은 흔히 웹 주소라고도 하며, 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약이다. URI의 서브셋이다.URI는 식별하고, URL은 위치를 가르킨다.
  • 비록 URL은 URI의 서브셋이지만 URI와 URL의 가장 큰 차이점은 바로 아래와 같다.
  • URL Uniform Resource Locator
  • URI Uniform Resource Identifier

 

Request 파라미터의 이해

은행에서 계좌 거래 내역 조회

요청에 부가적인 데이터가 부족하면 직원이 물어봐야함

고객이 부가적인 정보를 얘끼하면 바로 이해함

이렇듯, 서버에 요청시에도 추가적인 데이터가 필요한 경우가 있다.

 

Server에 요청 시에도 추가적인 Data 필요

이런 정보들을 request 파라미터라고 한다.

 

Request 파라미터

클라이언트가 Server에 요청(리퀘스트)할 때 추가적으로 전송하는 데이터.

2가지 유형의 Request 파라미터가 있다

  • Query String
  • Path Parameter

스프링 프레임 워크는 리퀘스트 파라미터를 메소드의 파라미터에 저장한다.

 

Request 파라미터 - Query String

URI와 파라미터의 영역을 구분하여 사용한다.

  • URI에 이어지는 ‘?’ 뒤에 key1=value1&key2=value2&... 형태로 작성한다.

key가 파라미터 이름, value가 파리미터의 값이다.

key=value&key=value&key=value...

키와 벨류가 &로 묶여서 여러개가 연결되는 형태이다.

 

Request 파라미터 - Query String의 활용

메소드 파라미터에 @RequestParam Annotation을 사용해서 활용한다.

name 요소는 Query String에 key에 매핑된다.

 

예시를 보면,

getPost라는 메소드 안에 @RequestParam이라는 어노테이션을 적어주고, 괄호 안에 name에 값을 부여해준다. 여기서 name에 전달하는 문자열 값이 key 값이 된다.

즉, category라는 쿼리 스트링의 키를 실제 category 파라미터에 저장하고,

id라는 쿼리 스트링의 키를 실제 id 파라미터에 저장하는 것이다.

http://localhost:8080/post : URI의 정보이고

→ ? 뒤의 category는 key 값이고, it라는 값을 category key에 전달하는 것이다.

마찬가지로, id key 값에는 10이라는 값을 전달한다.

이렇게 데이터를 전달해서 출력하면 아래와 같이 나온다.

 

@RequestParam의 요소들

name : query string의 key, key와 변수명이 같을 경우 생략이 가능하다.

(예제에서는 파라미터인 String categroy와 name = “category” 이부분이다. 여기선 따로 적어주긴 했지만 이름이 같다면 생략할 수 있고, 이름이 달라서 추가적인 정보를 줘야하는 경우에는 name = !@#!@# 이런식으로 값을 전달해주어야 하는 것이다)

required : 필수 여부

(false면 선택적으로 파라미터가 사용되는 것이고, true면 파라미터가 필수로 사용됨)

defaultValue : 데이터가 없을 경우 기본 값 (자동으로 세팅되는 값)

 

Request 파라미터 - Path Parameter

URI의 일부로 파라미터 값을 사용한다.

  • domain/user/1
  • domain/user/3/post/27

@RequestMapping value URI에 {}로 Path Param임을 표시한다.

메소드 파라미터에 @PathVariable Annotation을 사용한다.

선택적 데이터의 경우에는 Path Param을 잘 사용하지 않는다.

 

위의 예시에서는

{type}과 {id}부분이 패스 파라미터로 사용될 것이라고 명시해주는 것이다.

메소드 안의 파라미터 부분을 보면

@PathVariable 어노테이션을 사용했고, name = type은 {type} 부분에 들어오는 값을 String type에 저장하겠다는 것이고

name = id는 {id} 부분에 들어오는 값을 Integer id에 저장하겠다는 것이다.

선택적 데이터란, 들어올 수도 있고 안들어올 수도 있는 값이다.

선택적 데이터에서는 패스 파람을 잘 사용하지 않고 쿼리 스트링을 주로 사용한다.

예시 출력 결과는 아래와 같다.

 

Query String vs Path Parameter

일반적인 추천 사항

  • 특정 자원을 요청하는 경우 : Path Param
  • 정렬이나 추가 필터링을 위한 데이터 : Query String

spring과 관련된 자원을 요청하는 경우엔 패스 파라미터를 사용하고,

추가적으로 최신순 정렬이나 목록을 보여달라고 요청하는건 쿼리 스트링이다.

 

또한,

  • 필수적으로 반드시 보내야 하는 데이터 : Path Param
  • 선택적으로 보내도 되는 데이터 : Query String

Path Param이 포함된 URI는 클라이언트가 영향을 받기 때문에 변경하기 번거롭다. (패스 파라미터가 변경이 되면 호출할 때 영향을 받을 수 있다)

Query String은 상태적으로 편하게 확장이 가능하다.

일반적으론 이렇지만

조직마다 표준이 존재하므로, 표준에 따라 개발하면 된다.

 

Point!

Server에 데이터 요청시 추가적인 정보가 필요한 경우 있음

요청시 추가적으로 전송하는 데이터가 Request 파라미터이다.

Query String과 Path Parameter가 사용된다.

Spring Framework는 2가지 유형을 모두 지원한다 (@RequestParam, @PathVariable)

조직의 표준에 따라 적절히 활용해야한다.

 


https://www.codepresso.kr/

 

노션에 정리해놓은 이미지가 복사 붙여넣기가 잘 안되어서 블로그에는 텍스트 위주로 정리한다.

이미지가 추가된 자세한 내용은 노션에서 확인 가능!

https://rapid-run-744.notion.site/04-Spring-Boot-REST-API-63772bbbe300430f8780932a89c73058

 

04강. Spring Boot 컨트롤러와 REST API

계층형 아키텍처의 이해 (Layered Architecture)

rapid-run-744.notion.site