개발 기록

Spring Boot 웹 개발 입문 본문

코드프레소

Spring Boot 웹 개발 입문

수염차 2022. 2. 15. 14:20

코드프레소 Java 웹 개발 체험단 활동 중

Spring Boot 웹 개발 입문 강좌를 기반으로 작성하였습니다.

코드프레소 URL: https://www.codepresso.kr/


Spring Framework

  • Rod Johnson에 의해 개발 되었고 2004년에 1.0 버전이 출시됨
  • 2017년에 Spring Framework 5.0이 출시
  • 2014년에 Spring Boot 1.0이 출시, 2020 기준 Spring Boot 2.x

활용

  • 주로 웹 애플리케이션 개발을 위해 활용 됨

장점

  • 경량화 된 Java Framework
  • POJO의 사용으로 재사용가능한 코드 개발 가능
  • DI와 AOP의 적용
  • Transaction 관리의 편의성
  • MVC 아키텍처의 지원
  • 테스트가 용이
  • 높은 보안성

1. 방대한 프로젝트

  • 22개 카테고리의 수 백개의 프로젝트를 보유
  • 대규모의 웹 애플리케이션 개발,운영을 위한 거의 모든 기술을 제공

2. 끊임 없는 개선

  • 변화하는 기술에 빠르게 대응하여 꾸준히 새로운 프로젝트를 출시함
    • Spring Cloud 프로젝트, Spring Native 등

단점

1. 높은 러닝 커브

  • 엔터프라이즈 급 대규모 서비스 개발을 위한 목적으로 개발 되었기 때문에 SW의 유연한 확장성을 위해 다양한 기술들이 내포되어 있음 - 다양한 개념 이해 필요

2. 복잡한 설정

  • 간단한 웹 애플리케이션 개발을 위해서도 상당한 수준의 설정이 필요
  • Spring Boot가 출시 되며 단번에 문제가 해결 됨
    • 자동화 된 설정, 간편화 된 의존성 관리 등

Spring Boot

  • Spring Framework를 보다 손쉽게 활용할 수 있게 지원하는 기술

주요 기능

  • 설정 간편화를 위한 Auto Configuration
  • 의존성 관리를 위한 Starter Project
  • 배포 프로세스 간소화를 위한 Embedded WAS
  • 애플리케이션 모니터링을 위한 Actuator

웹 서비스 개발과 Web Framework의 이해

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

  • 퍼블리싱 / 마크업 개발
    • 사용자에게 노출 되는 웹 화면 개발
    • 디자인을 HTML/CSS 코드로 옮기는 과정
  • 프론트엔드 개발
    • 사용자 화면과 백엔드와의 중간 커뮤니케이션 역할
    • 사용자의 입력/이벤트를 받아 백엔드로 전송, 백엔드의 데이터를 받아 화면에 노출
  • 백엔드 개발
    • 웹 서비스의 비즈니스 로직을 처리하는 부분
    • 브라우저에서의 사용자 요청을 받아 적절하게 처리
  • DB 설계/ 운영
    • 웹 서비스의 데이터가 저장될 DB 설계하고  DBMS를 운영 관리
  • 시스템 엔지니어링, 인프라 엔지니어링
    • 웹 서비스가 운영 될 기간 인프라를 설계하고 운영
    • 서버, 네트워킹, 스토리지, 보안 등 설계, 구축, 운영

SW Framework

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

 

 


Web과 HTTP의 이해

Web(World Wide Web)

  • 인터넷 상에서 정보를 공유하는 기술 중 하나
  • Web에서의 정보는 기본적으로 Hyper Text 문서로 작성되고 공유 됨

Hyper Text

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

HTML(Hyper Text Markup Language)

  • hyper text(웹 페이지)를 작성하기 위한 언어
  • 웹 페이지의 구조를 결정하고 각 요소들의 의미를 부여

HTTP(Hyper Text Transfer Protocol)

  • 웹 페이지를 컴퓨터가 주고 받기 위한 규약
  • 데이터를 주고 받기 위해서는 명확한 약속을 필요
  • 모든 브라우저에 웹 서버 등은 HTTP 표준에 따라 개발 되고 통신 함


IP와 Port의 개념

IP 주소

  • 인터넷에 연결 된 기기가 가질 수 있는 네트워크 상의 주소
  • ip 주소 정보로 원격에 있는 자원을 요청 가능

공인 IP 주소와 사설 IP 주소

  • 공인 IP
    • 인터넷 상에 고유한 IP 주소
    • IP 주소를 관리하는 기관으로부터 할당 받아 사용 가능
    • 누구나 접속 가능해야 하는 웹 서버 등은 공인 IP 주소가 필요
  • 사설 IP
    • 특정 조직 내부에의 사설 네트워크 안에서만 통신 가능한 IP 주소
    • 외부에서는 사설 IP로 기기에 접근이 불가능
    • 사설 네트워크 간에는 사설 IP가 중복되어도 무방함 ( 회사 내부에서만 사용하기 때문 )

호스트명(hostname)

  • 어려운 IP 대신 사람이 읽고 외우기 쉬운 형태의 주소가 필요
    • 호스트는 인터넷 상에 IP 주소를 가진 기기를 의미
    • blog.naver.com
    • 호스트명으로 기기의 IP주소를 찾을 수 있음

localhost

  • 현재 작업을 수행 중인 기기를 지칭 하는 특수한 호스트명
  • IP 주소로는 '127.0.0.1'로 표현

Port 주소

  • 호스트 내부의 프로세스의 네트워크 주소

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

HTML의 이해

  • Hypertext : 링크를 통해 모든 문서가 연결되어 있는 구조
  • Markup : 텍스트를 구조적으로 표현하는 방식
  • html은 정보를 구조적으로 표현하기 위해 Tag라는 개념을 사용

HTML의 기본 구조

  • HTML 문서는 계층형 구조

 

HTML의 기초 Tag 

자동으로 줄 바꿈 적용
문단 표현 시 <p></p> 사용 , <br>
글자 강조 &amp;amp;amp;amp;amp;lt;b&amp;amp;amp;amp;amp;gt; 단순 볼드 처리 &amp;amp;amp;amp;amp;amp; &amp;amp;amp;amp;amp;lt;strong&amp;amp;amp;amp;amp;gt; 중요한 text 표시
이미지 삽입 - attribute 존재 ( src : 이미지 주소, alt : 이미지 표시 불가능시 사용되는 대체 텍스트)
문서 간 연결을 생성

HTML Table Tag

  • <caption>태그를 추가하여 표 설명 가능

HTML List Tag

  • unordered list는 <ul> </ul> 태그로, ordered list는 <ol> </ol>태그로 정의
  • 각 list내의 아이템은 <li> </li> 태그로 나열하여 정의함

  • 중첩 list도 가능

&amp;amp;amp;amp;lt;ol&amp;amp;amp;amp;gt; 태그 내에 type attribute을 활용하여 다양한 효과 지정 가능
&amp;amp;amp;amp;lt;ul&amp;amp;amp;amp;gt; 태그 내에 style attribute을 활용하여 다양한 효과 지정 가능

HTML Form Tag

  • 로그인, 회원가입, 댓글남기기 등 입력 페이지 구성
  • 입력받고자 하는 정보에 따라서 input 태그의 type을 지정해야 함


CSS 기초 개념

HTML의 한계

  • 디자인을 위한 태그가 추가되면서 코드의 복잡도가 증가하고, 정보로서의 웹의 가치가 떨어짐
  • 수정용이성, 가독성, 코드 중복으로 인한 코드의 비용 효율성이 떨어짐

CSS의 등장

  • HTML 태그의 한계를 극복하기 위한 기술
  • HTML 문서를 시각적으로 꾸미는 기능에 집중하는 기술 ( 정보와 디자인을 분리 가능 )
  • <style> </style> 태그 내에 css 코드 삽입

여러 효과 지정 가능

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

  • 특정 태그에만 효과를 지정하고자 할 때, 태그에 id 또는 class 값 지정하여 이용
    • 1개의 HTML 페이지 내에서 id는 중복될 수 없음
    • class는 여러 Tag에 중복되어 지정 가능 ( 원하는 부분을 그룹화 가능 )

id를 활용한 css 적용
class를 활용한 css 적용


Spring Boot 컨트롤러와 REST API

 

계층형 아키텍처의 이해

  • 건축처럼 SW도 실제 코드 개발 전에 최종 SW가 되어야 할 모습을 설계함
  • SW 아키텍처랑, SW의 구조를 정의한 것으로 SW를 구성하는 주요 요소들과 요소들의 관계를 정의한 것

계층형 아키텍처 패턴

  • SW를 서로 다른 역할을 하는 3-4개의 계층으로 구분
    • Presentation Layer
    • Application Layer
    • Business Layer
    • Data Access Layer
  • 계층 간에 호출을 하고 데이터를 주고 받으며 협력하며 전체 웹 서비스를 구성

Spring Controller

  • 클라이언트의 요청을 받고 Application Layer에 요청에 대한 처리를 위임하며 클라이언트에 최종 응답을 하는 역할
  • Annotation
    • Java 소스코드에 추가적인 정보를 제공하는 방법
    • 3가지 유형
      • 자바 컴파일러에게 정보를 제공 ( 에러 등을 찾아내기 위해 )
      • SW 툴에 의해 사용되어 코드 생성이나 추가 작업을 진행
      • run-time 시 특정 동작을 추가적으로 실행

  • 어노테이션이 부착된 코드들은 spring framework에 의해 관리 되며, 특정 한 목적으로 사용 됨
  • @Controller vs @RestController
    • 응답하는 형태가 다름 ( view-htm파일 등 vs data-문자열,json,xml 등 )

RequestMapping과 URI

  • URI(Uniform Resource Identifier)
    • 특정한 자원에 접근하기 위한 이름 또는 주소
    • 요청하는 자원의 종류에 따라 이름을 정함
    • 계층 관계로 표현 가능, /로 계층을 구분 (www.codepresso.com/user/paid)

URI path 정보를 기반으로 클라이언트의 요청을 특정 메소드에 전달

  • URI 네이밍 규약
    • 소문자 사용
    • 요청하는 자원에 대한 명사 형태로 작성
    • 두 단어 이상 연결 될 경우 -를 사용
    • 의미 있는 일므으로 일관성 있게 작성

HTTP API의 개념

  • API(Application Programmig Interface)
    • 인터페이스랑 두 개체 간의 정보를 공유하기 위한 방법(규약)

HTTP API vs REST API

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

@RequestMapping이 붙은 개별 메소드들이 하나의 REST API, HTTP API 이다


Request 파라미터의 이해

  • 클라이언트가 서버에 요청을 할때 추가적으로 전송하는 데이터
  • 2가지 유형
    • Query String / Path Parameter

Query String

uri와 파라미터를 구분

 

Query String 의 활용

  • @RequestParam 요소들
    • name : key와 변수명이 같을 경우 생략 가능
    • required : 필수 여부
    • defaultValue : 데이터가 없을 경우 기본 값

Path Parameter

  • 선택적 데이터의 경우에는 잘 사용하지 않음 ( 데이터가 없을 경우 uri가 망가지기 때문 )

uri의 일부로 파라미터 값을 사용

 

Path Parameter 활용

 


Response 데이터와 JSON 포맷의 이해

RestController의 응답 - 객체

  • 객체를 반환하면 JSON 형식의 데이터가 응답 됨

JSON (JavaScript Object Natation)

  • 데이터를 교환하는데 사용
  • XML에 비해 상대적으로 사람이 읽고 이해하기가 쉬움
  • 가장 기본 단위로 "key" : value 데이터를 포함

다양한 형태의 데이터 타입 가능


HTTP Method의 이해

  • HTTP 규약 중 하나로, 특정 자원에 대해 수행하는 행동의 종류를 명시 ( 생성, 조회, 수정, 삭제 등 )
  • 단일 URI로 다양한 행동을 정의 가능

DB의 4가지 기본 동작 - CRUD

DB 동작 설명 대응되는 HTTP Method
Create 데이터를 저장 POST
Read 조회 GET
Update 수정 PUT,PATCH
Delete 삭제 DELETE

HTTP Method의 구현 -&gt; 간소화 된 어노테이션

 

RequestBody의 이해

  • 크기가 큰 데이터를 보내기 위해서는 query string, path parameter말고 다른 방식이 필요
    • 게시판 글, 작성된 form 데이터 등

 

REST API 문서의 활용

  • API 문서는 API를 사용하는 방법을 명세한 문서

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

  • REST API 설명
  • URI
  • HTTP Method
  • Request 파라미터 ( 필수 파라미터와 선택 파라미터 )
  • Response 데이터 ( 필수 응답 데이터와 선택 응답 데이터 )
  • 가능한 에러 코드 및 대응 방법
  • 호출 예시


Spring Bean의 개념과 의존성 주입

Spring 서비스 계층의 이해

  • 시스템의 핵심 비즈니스 로직을 구현하는 계층
    • ex) 정보 저장, 회원 관련 처리 등
  • view의 종류와 database 종류에 영향을 받지 않는 독립적인 계층
    • 영향을 받지 않도록 설계 해야 함
  • 클래스에 @Service 어노테이션 사용
  • 애플리케이션의 세부 영역 별로 클래스르 생성하여 구현

스프링 빈과 의존성 주입

  • 의존성
    • 하나의 모듈(클래스,패키지 등)이 다른 모듈을 사용하는 것

의존성 주입(DI)

  • 객체 생성을 외부에서 대신 수행
  • 활용할 객체에 대한 의존성(참조)설정을 외부에서 대신 해 줌
  • 활용할 클래스(인터페이스)타입의 멤버 변수만 선언 후 생성자 구현
    • new 키워드로 객체 생성 직접 하지 않음

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

  • 스프링 프레임워크가 특정 조건을 만나면 객체를 생ㅇ성
    • 클래스 상단의 어노테이션, @Configuration 클래스의 @Bean 어노테이션, XML 설정
  • 객체로 생성할 대상을 검색하는 과정 -> Component Scan
  • 조건에 따라 객체들의 의존성을 관리

Spring IoC 컨테이너와 Spring Bean

  • Spring IoC 컨테이너
    • Spring Framework에서 객체의 생성과 관리의 역할을 하는 컴포넌트
  • Spring Bean
    • Spring IoC 컨테이너에 의해서 생성되어 관리되는 Java 객체

의존성 주입을 위한 단계

  1. Spring에 의해 객체가 생성 되게끔 어노테이션 설정
    • 컴포넌트 스캔 단계에서 특정 어노테이션이 붙은 클래스들을 직접 객체로 생성을 해준다, 즉 스프링 빈으로 생성을 하여 관리를 해줌
  2. 사용할 객체를 멤버 변수와 생성자에 추가
  3. 객체를 사용한다

의존성 주입

 

Comments