Java/Springboot

[Springboot] Basic

dev_jiwon 2024. 1. 12.

 

Spring Framework

- 대규모 서비스 개발, 방대한 프로젝트가 가능, 끊임없는 변화 가능

- 러닝 커브가 높고 설정이 복잡함

- Spring Boot: spring 프레임워크를 기반으로 하되 사용을 하기 간편하게 만든 것. 강의에서 사용될 것

 

* 웹 서비스 개발의 기본 구조

프론트엔드(클라) - 서버 - 데이터베이스

 

web과 http의 이해

Hyper Text

- Hyper Text는 일종의 문서로, 링크를 포함하고 있어 다른 문서들과 연결 될 수 있음

  •    우리가 일상적으로 사용하는 웹 페이지

- 모든 문서는 고융의 주소를 갖고 있음

hyper text의 설명. link를 통해 다른 문서들과 연결될 수 있음 (출처: 코드프레소)

 

Point

- Web(WWW)은 인터넷 상에서 정보를 공유하는 기술 중 하나

- Web 상에서의 정보는 Hyper Text로 작성 및 공유 됨

  • Web 상의 Hyper Text들은 각자 공유한 주소가 있음
  • Hyper Text 내에서 다른 Hyper Text로 연결이 되어 있음

- Hyper Text를 작성하는 언어가 HTML

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

  • Hyper Text는 주로 웹 브라우저와 Server 간의 전송이 이루어짐

 

IP와 PORT의 개념

Client와 Server

클라이언트와 서버의 상호작용(출처: 코드프레소)

클라이언트가 서버의 ip 주소와 port 주소로 request하면 서버에서 response하여 화면에 보여지게 된다.

 

IP 주소

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

- IP 주소 정보로 원격에 있는 자원(웹 페이지, 이미지 등)을 요청 가능

- IPv4 vs IPv6

  • IPv4는 전 세계적으로 2³²개의 IP 주소가 가능, 기기의 증가로 고갈 예정
    - IPv4예시: 30.129.75.143
  • IPv6는 2¹²⁸ (약 3.4*10³⁸)개의 IP 주소가 가능
    - IPv6 예시: 2606:2800:0220:0001:0248:1893:25C8:1946

Port 주소

- IP 주소가 특정 호스트(기기)까지의 주소라면, Port는 호스트 내부의 프로세스의 네트워크 주소

 

port 주소의 개념(출처: 코드프레소)

- IP 주소가 특정 호스트(기기)까지의 주소라면, Port는 호스트 내부의 프로세스의 네트워크 주소

- Port 주소는 호스트에서 0 ~ 65,535까지 사용 가능

  • 잘 알려진 포트는 정해져 있음
  • SSH는 22, HTTP는 80, HTTPS 443 등

- 호스트 내부에서 Port 주소는 유일해야 함

 

HTML

마크업 language, 부가정보인 Tag라는 개념을 사용함

HTML의 기본 구조

- HTML 문서는 계층형 구조

  • html tag: 최상위 태그
    - header tag: 문서의 부가 정보를 담는 태그
    - body tag: 문서의 컨텐츠를 담는 태그

HTML의 기본 구조(출처: 코드프레소)

 

계층형 아키텍처의 이해

소프트웨어 아키텍처

소프트웨어의 구조를 정의한 것으로, 소프트웨어를 구성하는 주요 요소들과의 관계를 정의한 것 => 건물의 설계도

 

소프트웨어 아키텍처 / 디자인패턴

- 패턴: 되풀이되는 사건이나 물체의 형태로, 예측 가능한 방식으로 되풀이 됨

  • 위키피디아

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

- 특정 상황의 문제를 해결하기 위한 일반화 된 솔루션

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

- 웹서비스 개발에는 주로 계층형 아키텍쳐 패턴이 사용됨

* 게임개발에는 싱글톤, 유한상태머신(fsm)등의 디자인 패턴이 있음

 

- sw의 서로 다른 역할을 하는 3~4개 계층(layer로 구분)

1) presentation layer

2) application layer

3) business layer

4) data access layer

 

- 계층 간에 호출을 하고 데이터를 주고받으며 협력하며 전체 웹 서비스를 구성

 

계층형 아키텍처 패턴

계층형 아키텍쳐의 패턴(출처: 코드프레스)

 

Spring controller의 이해

Spring Controller

- 계층형 아키텍쳐의 Presentation Layer에 해당

- Client(웹 브라우저, 모바일 앱)의 요청을 받고

- Application Layer에 요청에 대한 처리를 위임하며

- Client에 최종 응답을 하는 역할

  • view: Client가 요청에 대한 응답의 결과로 보게 되는 웹 페이지
  • data: Client가 요청에 대한 응답으로 받는 데이터

Annotation 이란

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

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

- 3가지 유형의 Annotation

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

Contoller 코드

controller종류 예시(출처: 코드프레소)

 

요점

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

- @Controller, @RestController, @RequestMapping이 기본 Annotation으로 사용 됨

- Annotation은 SW 코드에 추가적인 정보를 제공하는 방시기며, Spring Framework은 약속 된 Annotation을 인식하여 특정 작업을 수행

- @Controller은 HTML 파일과 같은 view를 @RestController는 문자열, JSON 등의 데이터를 응답 함

 

Request Mapping과 URI

- @RequestMapping이 붙은 메소드는 clinet의 특정 요청이 왔을 때 Spring Framework에 의해 호출 됨

 

uri

= uniform Resource Identifuter

- url과 비슷핝 개념, 특정 자원에 접근하기 위한 이름 또는 주소를 말한다.

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

 

URI와 Spring Reqeust Mapping

request mapping 작동 방식(출처: 코드프레소)

URI의 활용

- URI는 요청하는 자원의 종류에 따라 이름을 정함

  •  www.aaaa.com/user
  • www.aaaa.com/posts
  • www.aaaa.com/reply

- URI는 계층 관계로 표현 가능, '/'로 계층을 구분

  • www.aaaa.com/user/paid
  • www.aaaa.com/user/enterprise
  • www.aaaa.com/user/enterprise/google

요점

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

- '기본 도메인/'에 이어지는 URI Path 정보를 기반으로 Client의 요청을 특정 메소드에 전달

- @RequestMapping는 Controller 클래스와 Controller 클래스 내부의 메소드에 명시 가능

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

 

HTTP API의 개념

API란?

Application Programming Interface

컴퓨터 간의 정보를 공유하기 위한 방법

함수나 메소드를 호출하는 형식의 api, http 등의 기술로 네트워크를 통해 원격자원을 호출하는 api도 있음

 

REST API: 웹 상에서 효율적으로 쓰기 위한 것

 

HTTP API vs REST API

- HTTP(S)를 활용하여 원격의 데이터를 공유하기 위한 API

  • HTTP API

- REST API

  • Roy Fielding이 저술한 논문의 소개 된 개념(REpresentational State Transfer)
  • 웹 상에서 효율적으로 데이터 공유하기 위한 아키텍처 스타일
  • 다양한 조건이 만족되어야 하며, 실무에서 모든 조건을 만족하여 구현하기 어려움

- HTTP API와 REST API는 실무에서 혼용하여 사용

  • 주로 REST API 명칭이 사용 됨
  • 엄밀하게는 서로 다른 개념

- @RestController Annotation은 REST API, HTTP API를 위한 클래스를 명시하는 것

- @RestController 클래스 내의 @RequestMapping이 붙은 개별 메소드들이 하나의 REST API, HTTP API

rest, http api 사용예시(출처: 코드프레소)
@RequestMapping을 사용하여  value 값을 지정해주면 각각에 맞는 함수가 호출 됨.

localhost:8080/user/paid --> I'm a paid user

localhost:8080/user/enterpirse --> I'm a enterprise user

 

request parameter의 예

- 서버에 요청할 때 추가적인 data가 필요하고, 이를 request parameter라고 한다.

- query string, path parameter의 두 종류 파라미터가 있고 spring framework는 request 파라미터를 메소드 파라미터로 저장

 

1) query string

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

uri에 이어지는 key=value 형식으로 사용

 

request parameter-query string 사용 예시(출처: 코드프레소)

- @Request Param의 요소들

  • name: query string의 key, key와 변수명이 같을 경우 생략 가능
  • required: 필수 여부
  • defaultValue: 데이터가 없을 경우 기본 값

queryString의 활용(출처: 코드프레소)

2) Path Parameter

- uri의 일부로 파라미터의 값을 사용하는 방식

- @RequestMapping value URI에 {}로 Path Param임을 표시

- 메소드 파라미터에 @PathVariable Annotation 사용

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

path parameter 사용 예시(출처: 코드프레소)

- request mapping 파라미터와 메소드 파라미터 구분 잘하기

- 들어올 수도 있고 안들어올 수도 있는 선택적 데이터에는 query string을 주로 사용

path parameter 사용 예시(출처:코드프레소)

 

Query String vs Path Parameter

- 일반적인 추천 사항

  • 특정 자원을 요청 하는 경우는 Path Param을, 정렬이나 추가 필터링을 위한 데이터는 Query String을 사용
  • https://codepresso.kr/courses/spring?order=latest

- 필수 데이터는 Path Param으로 선택적 데이터는 Query String 사용

  • Path Param이 포함 된 URI는 Client가 영향을 받기 때문에 변경 비용 높음
  • Query String은 상대적으로 편하게 확장 가능

- 조직(회사 또는 팀)마다 표준이 존재하고, 표준에 따라 개발

 

Response 데이터와 JSON 포맷의 이해

Client와 Server

- Client가 Server에 요청을 하면

- Server는 요청에 대한 처리를 한 후 결과를 응답함

  • 단순 문자열, 이미지, 영상, HTML 페이지, JSON 등

Response 데이터 = request(요청)을 받았을 때 서버에서 응답받는 문자열, 이미지, 영상, json 등의 데이터

 

@controller annotation이 붙은 클래스에서는 html 파일을 response하고,

@restConroller annotation이 붙은 클래스에서는 클래스 안의 값 자체가 응답 됨

--> 클래스 안의 문자열 뿐만 아니라 get 메소드에서 더 복잡한 객체를 return 하는 경우도 있음

 

RestConroller의 응답 - 객체

- 신규 클래스 생성

  • con.codepresso.controllertest.dto.UserDto
  • 모든 멤버 변수 초기화 하는 생성자 추가
  • 모든 멤버 변수에 대한 getter 매소드 추가

객체를  restconroller로 반환한 결과가 json데이터임

 

JSON 응답 데이터

- 웹 개발 시 가장 일반적으로 사용하는 응답 데이터 포맷

- 프론트엔드에서는 JSON 형식의 데이터를 응답 받아 화면을 구성

- 각 REST API 별로 어떤 JSON 데이터를 응답할 것인지 사전에 정함

  • 프론트엔드와 백엔드 모두 정해진 JSON 데이터에 맞게 구현

- json = JavaScript Object Notation

- 데이터를 교환하는데 기존의 방법(xml)보다 가볍고 사람이 이해하기 쉬움

- json 문법은 객체가 가장 기본 단위로, "key":value 데이터를 가진다.

 

JSON 문법

- JSON 객체(Object)가 가장 기본 단위로 "key":value 데이터를 포함

  • JSON 객체의 시자과 끝은 중괄호({})를 사용
  • key는 큰따옴표("")로 묶음
  • .value에는 다양한 형태의 데이터 타입 가능
  • 다수의 "key":value은 쉼표(,)로 구분

객체의 value에 문자열, 숫자, boolean, null, 또 다른 json 객체가 올 수도 있고, json array로 올수도 있음

- json 배열은 순서가 있는 데이터의 나열이며 다양한 데이터 타입을 포함할 수 있다.

 

JSON 응답 예제

 

요점

- Client/Server 구조에서 Server는 Client의 요청에 따라 적절한 처리를 한 후에 결과를 응답

- Server는 단순 문자열, HTML, 이미지, JSON 등 다양한 형태의 데이터를 응답할 수 있음

- 최신 웹 개발 시 가장 많이 사용되는 응답 포맷은 JSON 데이터

- Spring Boot에서는 객체를 반환하면 적절한 JSON 형식으로 변환하여 Client로 최종 응답 함

- JSON은 Key/Value 형식이며, 객체와 배열 등의 표현도 가능

 

HTTP 메소드의 이해

HTTP 메소드란 HTTP 규약 중 하나로, 특정 자원에 대해 수행하는 행동의 종류를 명시함

=> 자원의 생성, 조회, 수정, 삭제, 일부 수정 등

-> HTTP 메소드를 사용하면 단일 URI로 다양한 행동을 정의 가능하다.

- 대표적 HTTP 메소드에는

GET(조회), POST(생성), PUT(수정), DELETE(삭제)가 있다.

스프링에서는 RequestMapping의 요소로 @GetMapping, @PostMapping 등으로 간소화된 annotation이 마련되어 있음

 

Request Body

- request를 할 때는 query, parameter의 방식이 있는 데 더 큰 것을 request 하기 위해서는 body가 필요

- 일반적으로 데이터를 저장 및 수정하는 post, put의 메소드에서 사용됨. get, delete는 query string, path param이 주로 사용됨

- request body에 다양한 포맷의 데이터 전송 가능 -> 주로 json 데이터 형식이 사용됨

- client에서는 json 데이터를 전송하고, spring에서는 json 데이터를 java 객체 파라미터로 저장

 

Request Body의 활용

request body annotation을 활용

 

REST API 문서의 활용

- API는 정보를 주고 받기 위한 약속으로, API를 사용하려면 사용방법을 알아야 하므로 API 문서를 통해 API를 사용하는 방법을 알아야 한다.

- 주로 프론트엔드 개발자가 약속된 REST API문서에 의존하여 프론트엔드를 개발한다.

- REST API의 설명, URI, HTTP Method, Request 파라미터(필수/선택), Response 데이터(필수/선택), 에러코드 및 대응방법, 호출 에시 등의 정보가 REST API에 담겨있어야 함.

 

REST API 문서 예시 - 카카오톡 API

 

Spirng 서비스 계층의 이해

- Service는 시스템의 핵심 비지니스 로직을 구현하는 계층

- view의 종류와 database 종류에 영향을 받지 않는 독립적인 계층

- 클래스에 @Service Annotation 사용

- 애플리케이션의 세부 영역별로 클래스를 새성하여 구현

 

Spring bean과 의존성 주입

의존성 주입(DI, Dependency Injection)

- 객체 생성을 외부에서 대신 수행

- 활용할 객체에 대한 의존성(참조) 설정을 외부에서 대신 해 줌

- 활용할 클래스(인터페이스)타입의 멤버 변수만 선언 후 생성자 구현

  • new 키워드로 객체 생성 직접 하지 않음

런타임시 외부에서 결정 됨

Spring Framework가 객체의 생성과 관리 역할 수행

Spring에 의해 객체가 생성되도록 @service, @bean 등의 annotation을 설정하고 사용할 객체를 멤버변수와 생성자에 추가한 후, 객체를 생성하는데, 이때 new 키워드를 사용하지 않는다. 스프링 프레임워크가 대신 객체를 생성해줄 것이기 때문.

 

 


출처

https://best-study-day.tistory.com/9

 

[Spring Boot 웹개발 입문]3주차: 웹개발(프론트엔드, 백엔드)의 전반적 이해

코드프레소 java 웹개발 체험단 3주차 [spring boot 웹개발 입문] 강의에서는 프론트엔드와 백엔드의 전반적인 이해, spring boot를 활용한 서버 개발을 배웠다. 저번 학기 인턴십에서 클라이언트 개발

best-study-day.tistory.com

 


2022.12.13 - [참고/네트워크] - 🔥 GET / POST

 

🔥 GET / POST

GET 방식과 POST 방식 HTTP 🔥 HTTP(Hypertext Transfer Protocol)란 하이퍼텍스트 전송 규약으로 Web-Client와 Web-server간 데이터를 전송하는 프로토콜이다. GET과 POST 메소드는 HTTP 프로토콜에서 데이터 전송을

jiwon-dev-daymoment.tistory.com

2022.12.13 - [데이터베이스/기본개념] - 👣CRUD

 

👣CRUD

CRUD 설명 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다. 사용자 인터페이스가 갖추어야 할 기능(정

jiwon-dev-daymoment.tistory.com

2022.12.13 - [참고/네트워크] - 👣REST API

 

👣REST API

{REST API} Representational State Transfer Application Programming Interface REST API란 Rest를 기반으로 만들어진 API를 의미한다. REST API를 알기 위해 REST부터 알아보자 REST란? REST(Representational State Transfer)의 약자로

jiwon-dev-daymoment.tistory.com

 

댓글