[TIL] Day16_Spring boot with Intellij

오진선·2024년 2월 20일
0

TIL

목록 보기
9/29
post-thumbnail

Today I Learned

1. Spring Roadmap

2. Intellij로 Spring boot 시작하기

1) 기본 설치 목록

(1) java 설치 (Mac)

  • Homebrew 설치

    https://brew.sh/

  • Terminal을 열어 Homebrew 실행 후 아래 명령어 입력해 JDK가 설치될 저장소 등록
brew tap homebrew/cask-versions
  • 아래 명령어를 입력해 JDK 설치
brew install --cask temurin17
  • 설치 완료 후 아래 명령어 입력해 java 설치가 제대로 되었는지 확인
java -version

(2) intellij 설치

(3) git 설치

  • Homebrew에 아래 명령어 입력
brew install git
  • Terminal에 아래 명령어 입력해 git config 설정
git config --global user.name "유저이름"
git config --global user.email "등록한 이메일"

(4) Postman 설치

  • Postman : API 개발을 빠르고 쉽게 구현할 수 있도록 도와주는 소프트웨어 플랫폼
  • 아래 링크를 통해 Postman 설치

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

  • 사용 방법
    1️⃣ Workspaces 에서 워크 스페이스를 만들고 ‘New’를 클릭

    2️⃣ Http 클릭
    3️⃣ GET 방식 선택 -> 주소 입력 -> Send 클릭 -> 결과값 출력

(5) MySQL 설치

2) Intellij 설정

(1) 프로젝트 생성

1️⃣ Intellij 실행

2️⃣ New Project 클릭

3️⃣ 왼쪽의 "Spring Initializr" 클릭

4️⃣ 아래 사항 확인

Name: spring-prepare
Language: Java
Build system: Gradle - Groovy
Group: com.sparta
JDK: 17
프로젝트 경로(Location)

5️⃣ Next 클릭

6️⃣ Dependencies를 아래 사진과 같이 추가해주고 Create를 클릭합니다.

(2) 편의 기능 설정

macOS: command + ,

  • Auto import
  • Editor Zoom : Mouse Wheel

(3) Git 연동

  • 메뉴에서 VCS 선택 (프로젝트 생성할 때 Create Git Repository 체크하면 git으로 뜸)
  • Create Git Repository 클릭
  • commit 하는 방법

(4) Gradle build

  • gradle : 빌드 자동화 시스템, Java 코드를 설정에 맞게 자동으로 Build
  • 우측 코끼리 버튼 클릭후 build
  • build.gradle
    Gradle 기반의 빌드 스크립트
    소스 코드 빌드와 라이브러리들의 의존성 관리에 유용
    groovy, Kotlin 언어로 작성
    외부 라이브러리들을 dependencies 부분에 작성하면 Gradle이 해당 라이브러리들을 Maven Repository 와 같은 외부 저장소에서 자동으로 다운로드, 다른 라이브러리들과의 의존성 관리
    SpringBoot의 버전을 변경하고 싶다면 ‘3.1.0’ 부분을 원하는 버전으로 수정
    필요로하는 라이브러리를 추가시 코끼리 모양의 버튼 생성
    해당 버튼을 클릭하면 추가된 라이브러리를 다운로드
    External Libraries에서 Gradle이 다운로드해온 라이브러리들을 확인

3. 시작하기 전 알아야 할 것들

1) 서버란?

(1) 네트워크 : Net + Work

그물(Net)+일(Work), 그물처럼 서로 긴밀하게 연결되어 있는 것.
여러대의 컴퓨터 또는 장비가 서로 연결되어서 정보를 주고 받을 수 있게 도와주는 기술.

(2) 클라이언트와 서버

  • 사용자가 브라우저를 이용해 서버에 요청을 하면 서버가 응답을 하는 형태
  • 사용자의 요청이 서버에 도달하기 위해서는 해당 서버의 정보가 필요
  • IP 주소 : 해당 서버에 정확하게 도달할 수 있게 제공되는 정보, 거대한 네트워크망에서 여러분의 컴퓨터를 식별하기 위한 위치 주소
  • IP -> 주소 / Port -> 받는 사람

(3) 웹 서버

  • HTTP 또는 HTTPS를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)을 전송해주는 서비스 프로그램
  • 기본 동작 원리 : 브라우저를 통해 HTTP Request로 웹사이트를 웹서버에 요청 -> 웹서버가 요청을 승인 -> HTTP Request로 웹사이트를 웹서버에 요청 -> 웹서버가 요청 승인 -> HTTP Reponse를 통해 데이터를 브라우저에 전송 -> 서버에서 받아온 데이터를 이용해 웹사이트를 브라우저에 그려냄
  • 브라우저가 웹서버에 요청을 할때는 항상 GET method로 요청
  • 웹 서버의 역할 : 정적인 콘텐츠(이미 완성이 되어있는 HTML과 같은 문서)를 브라우저로 전달(ex. Apache), 브라우저로부터 동적인 요청이 들어왔을 때 해당 요청을 WAS에 전달(ex. Tomcat)

(4) API(application programming interface)

  • 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙
  • 인터페이스(interface) : 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면, 기기를 쉽게 동작시키는데 도움을 주는 시스템
  • RESTful API : Representational State Transfer, API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처

(5) Apache Tomcat

  • Web Application Server(WAS) : HTTP 기반으로 동작, 로그인,회원가입을 처리하거나 게시물을 조회하거나 정렬하는 등의 다양한 로직들을 수행하는 프로그램 동작을 가능하게 함
  • Apache Tomcat : Apache와 Tomcat이 합쳐진 형태로 정적인 데이터 처리와 동적인 데이터 처리의 효율을 높여줌

(6) Spring boot와 Spring

  • Spring의 핵심 기능들을 사용하기 위해서는 너무나도 많은 xml 설정들이 필요
  • 이 점을 개선하기 위해 2014년 SpringBoot가 등장
  • 기존의 xml 설정 대신 Java의 애노테이션 기반의 설정을 적극적으로 사용(기본적으로 개발에 필요한 설정 정보들을 일반적으로 많이 사용하는 설정 값을 default로 하여 자동으로 설정)
  • 외부 라이브러리나 하위 프레임워크들의 의존성 관리가 쉬워짐 -> 각각의 버전 호환성을 직접 확인할 필요 ❌
  • 내장 Apache Tomcat으로 개발 편의성⬆️⬆️

2) HTTP란?

(1) HTTP(HyperText Transfer Protocol)

  • 데이터를 주고 받는 양식을 정의한 "통신 규약"
  • 하이퍼텍스트 링크를 사용하여 웹 페이지를 로드하는 데 사용
  • 네트워크 장치 간에 정보를 전송하도록 설계된 애플리케이션 계층 프로토콜

(2) HTTP 작동 원리

  • 브라우저는 서버에게 자신이 원하는 페이지(URL 등의 정보)를 요구(Request)
  • 서버는 브라우저가 원하는 페이지가 있는지 확인
  • 있다면 해당 페이지에 대한 데이터를 실어 응답(Response)
  • 없다면 없는 페이지에 대한 데이터를 반환
  • 브라우저는 서버에게 전달 받은 데이터를 기반으로 브라우저에 그림

(3) HTTP 동작 확인하기

  • 개발자 도구 열기
  • Network 클릭
  • 서버가 받아온 데이터 목록에서 name 목록 아래의 요청 클릭

(4) Headers

  • General : 브라우저에서 서버로 보낸 Request 데이터

    HTTP 상태 코드(Status Code)

    1xx (Informational)
    - 1xx 상태 코드는 요청이 수신 되었으며 처리가 계속되고 있음을 나타냅니다.
    - 주로 웹 브라우저와 같은 클라이언트가 서버와의 연결 상태를 확인하기 위해 사용됩니다.
    2xx (Successful)
    - 2xx 상태 코드는 클라이언트의 요청이 성공적으로 처리 되었음을 나타냅니다.
    - 가장 많이 사용되는 상태 코드는 200입니다.
    - 이는 요청이 성공적으로 처리 되었으며 클라이언트가 요청한 데이터가 서버에서 제공됨을 의미합니다.
    3xx (Redirection)
    - 3xx 상태 코드는 클라이언트가 추가적인 조치를 취해야 함을 나타냅니다.
    - 이 상태 코드는 주로 페이지 이동, 리다이렉션 등에 사용됩니다.
    4xx (Client Error)
    - 4xx 상태 코드는 클라이언트에 오류가 있음을 나타냅니다.
    - 이 상태 코드는 주로 클라이언트의 잘못된 요청, 인증 오류 등에 사용됩니다.
    - 가장 많이 사용되는 상태 코드는 404입니다. 이는 클라이언트가 요청한 페이지나 리소스를 서버에서 찾을 수 없음을 의미합니다.
    5xx (Server Error)
    - 5xx 상태 코드는 서버에 오류가 발생했음을 나타냅니다.
    - 이 상태 코드는 주로 서버의 오류, 서버 과부하 등에 사용됩니다.
    - 가장 많이 사용되는 상태 코드는 500입니다. 이는 서버 내부 오류가 발생함을 의미합니다.

  • Request Header : 브라우저에서 서버로 보낸 Request 데이터

  • Response Headers : 서버가 웹 페이지 데이터와 함께 보낸 추가 데이터

(5) Response

  • Response : 서버에서 브라우저로 반환해준 웹 페이지를 그려주기 위한 데이터

(6) Method/Header/Payload

  • Method (호출/요청 방식) : GET(리소스를 얻을 때 사용), POST(웹 서버에 데이터를 게시할 때 사용) 등
  • Header (추가 데이터, 메타 데이터) : 다양한 의사 표현을 위한 데이터(ex. method)를 모두 Header 필드에 넣고 주고 받음
  • Payload (데이터. 실제 데이터) : Body에 넣은 메시지 본문, GET method를 제외하곤 모두 Payload를 보낼 수 있음(GET method에는 Body가 ❌)

3) 테스트 코드

(1) 테스트 종류

  • 블랙박스 테스트 : 소프트웨어 내부 구조나 동작원리를 모르는 블랙박스와 같은 상태에서, 즉 웹 서비스의 사용자 입장에서 동작을 검사
  • 개발자 테스트 : 개발자가 직접 "본인이 작성한 코드"를 검증하기 위해 "테스트 코드"를 작성

(2) JUnit

  • JUnit : 자바 프로그래밍 언어용 단위 테스트 프레임워크

    <테스트 파일 생성하기>

    1️⃣ 마우스 오른쪽 버튼 클릭 > "Generate..." 클릭

    2️⃣ Test... 클릭

    3️⃣ 기본 세팅 그대로 OK (단축키 : ⌘ + shift + t)

    4️⃣ test 경로에 자동으로 파일 생성

4) Lombok

(1) Lombok

  • 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메서드/생성자 등을 자동 생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리

(2) 설치

  • command + , 로 환경설정 Preferences 열기
  • 검색창에 Annotaion Processors 검색한 뒤 Enable~ 체크 후 Apply
  • Shift 두 번 누르고 plugins 입력 후 엔터
  • Lombok install

(3) Annotaion 종류

  • @Getter : get…() 메서드 만들어줌
  • @Setter : set…() 메서드 만들어줌
  • @AllArgsConstructor : 클래스 내부에 선언된 모든 field마다 하나의 parameter를 가진 생성자를 생성
  • @NoArgsConstructor : 파라미터가 없는 기본 생성자를 만들어줌
  • @RequiredArgsConstructor : 특별한 처리가 필요한 각 field마다 하나의 parameter를 갖는 생성자를 생성, 모든 final fields와 선언될 때 초기화되지 않은 @NonNull로 표시된 field까지 parameter를 가짐

5) application.properties

(1) application.properties

  • 스프링부트가 애플리케이션을 구동할 때 자동으로 로딩하는 파일
  • Spring과 관련된 설정을 할 때 사용

(2) 특징

  • 자동으로 설정되고 있는 설정 값을 쉽게 수정 가능
  • key - value 형식으로 값을 정의하면 애플리케이션에서 참조하여 사용
  • DB 연결 시 DB의 정보 쉽게 전달 가능
  • server.port=8081라고 입력하면 서버의 port 번호를 ‘8080’에서 ‘8081’로 바꿔서 실행
profile
₍ ᐢ. ̫ .ᐢ ₎

0개의 댓글