개발 기록
Spring Boot 웹 개발 입문 본문
코드프레소 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
HTML Table Tag
- <caption>태그를 추가하여 표 설명 가능
HTML List Tag
- unordered list는 <ul> </ul> 태그로, ordered list는 <ol> </ol>태그로 정의
- 각 list내의 아이템은 <li> </li> 태그로 나열하여 정의함
- 중첩 list도 가능
HTML Form Tag
- 로그인, 회원가입, 댓글남기기 등 입력 페이지 구성
- 입력받고자 하는 정보에 따라서 input 태그의 type을 지정해야 함
CSS 기초 개념
HTML의 한계
- 디자인을 위한 태그가 추가되면서 코드의 복잡도가 증가하고, 정보로서의 웹의 가치가 떨어짐
- 수정용이성, 가독성, 코드 중복으로 인한 코드의 비용 효율성이 떨어짐
CSS의 등장
- HTML 태그의 한계를 극복하기 위한 기술
- HTML 문서를 시각적으로 꾸미는 기능에 집중하는 기술 ( 정보와 디자인을 분리 가능 )
- <style> </style> 태그 내에 css 코드 삽입
CSS 기본 문법 - 적용 대상 지정
- 특정 태그에만 효과를 지정하고자 할 때, 태그에 id 또는 class 값 지정하여 이용
- 1개의 HTML 페이지 내에서 id는 중복될 수 없음
- class는 여러 Tag에 중복되어 지정 가능 ( 원하는 부분을 그룹화 가능 )
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 네이밍 규약
- 소문자 사용
- 요청하는 자원에 대한 명사 형태로 작성
- 두 단어 이상 연결 될 경우 -를 사용
- 의미 있는 일므으로 일관성 있게 작성
HTTP API의 개념
- API(Application Programmig Interface)
- 인터페이스랑 두 개체 간의 정보를 공유하기 위한 방법(규약)
HTTP API vs REST API
- HTTP API - HTTP(S)를 활용하여 원격의 데이터를 공유하기 위한 API
- REST API
- Roy Fielding이 저술한 논문에 소개 된 개념
- 웹 상에서 효율적으로 데이터 공유를 하기 위한 아키텍처 스타일
- 다양한 조건이 만족되어야 하며 실무에서 모든 조건을 만족하여 구현하기 어려움
Request 파라미터의 이해
- 클라이언트가 서버에 요청을 할때 추가적으로 전송하는 데이터
- 2가지 유형
- Query String / Path Parameter
Query String
- @RequestParam 요소들
- name : key와 변수명이 같을 경우 생략 가능
- required : 필수 여부
- defaultValue : 데이터가 없을 경우 기본 값
Path Parameter
- 선택적 데이터의 경우에는 잘 사용하지 않음 ( 데이터가 없을 경우 uri가 망가지기 때문 )
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 |
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 객체
의존성 주입을 위한 단계
- Spring에 의해 객체가 생성 되게끔 어노테이션 설정
- 컴포넌트 스캔 단계에서 특정 어노테이션이 붙은 클래스들을 직접 객체로 생성을 해준다, 즉 스프링 빈으로 생성을 하여 관리를 해줌
- 사용할 객체를 멤버 변수와 생성자에 추가
- 객체를 사용한다
'코드프레소' 카테고리의 다른 글
처음 시작하는 SQL 프로그래밍 -2 (0) | 2022.03.19 |
---|---|
Spring Boot를 활용한 웹 개발 초급 (0) | 2022.03.14 |
클라우드 컴퓨팅 첫 걸음 (0) | 2022.03.14 |
처음 시작하는 SQL 프로그래밍 (0) | 2022.02.22 |
SW 유지보수성 향상을 위한 Clean Code (0) | 2022.02.15 |
Comments