TIL 2023/11/01 SpringBoot Gradle Server

YEONGDO·2023년 11월 1일

자바 강의를 마치고 스프링 입문 챕터가 시작됐다! 아직 자바에 대해 헷갈리는 것도 많고 모르는 부분이 많아서 스프링에 대해 잘 헤쳐나갈 수 있을 지 의문이다.. 그래도 열심히 강의 듣자!

1. 그레이들(Gradle)

  • 빌드 자동화 시스템
  • 우리가 작성한 Java 코드를 설정에 맞게 자동으로 Build 해준다.
  • Gradle을 사용하면 간편하게 Java 소스 코드를 실행 가능한 jar 파일로 만들어준다.

1) build.gradle

  • build.gradle은 Gradle 기반의 빌드 스크립트
  • 이 스크립트를 작성하면 소스 코드를 빌드하고 라이브러리들의 의존성을 쉽게 관리할 수 있다.
  • groovy 혹은 kotlin 언어로 스크립트를 작성할 수 있다.

  • 우리가 개발을 하면서 필요로 하는 외부 라이브러리들을 dependencies 부분에 작성하면 Gradle이 해당 라이브러리들을 Maven Repository 와 같은 외부 저장소에서 자동으로 다운로드
  • 또한 다른 라이브러리들과의 의존성을 자동으로 관리해 주기 때문에 라이브러리들간의 충돌 걱정없이 개발에만 집중할 수 있다.

2. 서버

1) 네트워크

  • 네트워크는 여러대의 컴퓨터 또는 장비가 서로 연결되어서 정보를 주고 받을 수 있게 도와주는 기술
  • 컴퓨터, 라우터, 스위치, 허브 등의 장비들이 각각의 역할을 수행하여 정보를 주고 받는다.
  • 서로 정보를 주고 받기 위해서는 IP 주소, 서브넷 마스크, 게이트웨이등의 정보를 설정하고 네트워크 프로토콜을 이용하여 통신을 하게 됨

@ 왜 알아야 할까?

  • 우리는 사용자가 요청을 했을 때 해당 요청에 대한 응답을 수행하는 프로그램 즉, 서버를 개발하게 되는데 그렇다면 사용자의 요청에서 시작하여 우리가 만든 서버에 도착하고 다시 사용자에게 까지 되돌아가는 흐름을 잘 파악하고 있다면 서버 개발에 큰 도움이 될 것이다.

2) Client 와 Server

  • Client 즉, 브라우저에서 서버에 정보를 요청하는 과정을 간략하게 표현한 부분
  • 사용자는 브라우저를 이용하여 서버에 정보를 요청하고 응답을 받는다.
  • 이 때 사용자의 요청이 서버에 도달하기 위해서는 해당 서버의 정보가 필요하다.
  • 이 때 사용자의 요청이 해당 서버에 정확하게 도달할 수 있게 제공되는 정보가 IP 주소이다.

<IP주소>

  • 거대한 네트워크망에서 여러분의 컴퓨터를 식별하기 위한 위치 주소
  • 네트워크상에서의 데이터 송/수신은 이 주소를 기준으로 이루어지고 있다.

3) 웹 서버

  • 웹 서버는 인터넷을 통해 HTTP를 이용하여 웹상의 클라이언트의 요청을 응답해주는 통신을 하는 일종의 컴퓨터
  • 오늘날 우리가 자주 사용하는 이메일이나 SNS 등 대부분의 서비스는 웹 서버를 통해 우리가 사용할 수 있게 되었다.

  1. 브라우저를 통해 HTTP Request로 웹사이트를 웹서버에 요청
  2. 이후 웹서버는 요청을 승인하고 HTTP Response를 통해 웹사이트 데이터를 브라우저에 전송
  3. 마지막으로 브라우저는 서버에서 받아온 데이터를 이용해 웹사이트를 브라우저에 그려내는 일을 한다.
  • 기본적으로 브라우저가 웹서버에 요청을 할때는 항상 GET method로 요청하게 된다.

4) API
API(application programming interface)는 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의. 개발자는 다른 애플리케이션이 프로그래밍 방식으로 애플리케이션과 통신할 수 있도록 API를 표시하거나 생성한다.

인터페이스(interface)는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면을 의미. 즉, 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미한다.

API = 하나의 약속

5) Restful API
Representational State Transfer(REST)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처. REST는 처음에 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌다. REST 아키텍처 스타일을 따르는 API를 REST API라고 한다. REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스라고 한다.

6) Apache Tomcat

1) Web Server 와 Web Application Server(WAS)

  • 브라우저에서 URL을 입력하여 어떠한 페이지를 요청했을 때 HTTP의 요청을 받아들여 HTML 문서와 같은 정적인 콘텐츠를 사용자에게 전달해주는 역할을 하는 것이 Web Server
  • WAS는 웹 서버와 똑같이 HTTP 기반으로 동작
  • 웹 서버에서 할 수 있는 기능 대부분을 WAS에서도 처리할 수 있다.
  • WAS를 사용하면 로그인,회원가입을 처리하거나 게시물을 조회하거나 정렬하는 등의 다양한 로직들을 수행하는 프로그램을 동작시킬 수 있다.

@ 웹 서버의 역할

  • 정적인 콘텐츠 즉, 이미 완성이 되어있는 HTML과 같은 문서를 브라우저로 전달
  • 브라우저로부터 ‘로그인하여 MyPage를 요청’과 같은 동적인 요청이 들어왔을 때 웹 서버 자체적으로 처리하기 어렵기 때문에 해당 요청을 WAS에 전달

2) Apache Tomcat

기엽다.ㅋㅋ

  • Tomcat은 동적인 처리를 할 수 있는 웹 서버를 만들기 위한 웹 컨테이너

Apache Tomcat이란 Apache와 Tomcat이 합쳐진 형태로 정적인 데이터 처리와 동적인 데이터 처리를 효율적으로 해줄 수 있다.

3. SpringBoot와 Spring

Spring 프레임워크는 2004년에 1.0이 등장한 이후 20년가까이 사랑받으며 계속해서 업그레이드 해온 현재는 Spring 6.0이 등장한 아주 오래되고 강력한 프레임워크

  • 너무나도 많은 xml 설정들이 필요했기에 이러한 불편한 점을 개선하고자 2014년 SpringBoot가 등장

  • SpringBoot는 기존의 xml 설정 대신 Java의 애너테이션 기반의 설정을 적극적으로 사용하고 있기 때문에 무겁고 작성하기 힘들던 xml 대신에 애너테이션을 사용하여 아주 간편하게 설정할 수 있다. 또한 의존성 관리가 매우 쉬워졌다.

  • SpringBoot에서는 기본적으로 starter-web dependency를 설정하면 자동으로 내장형 Apache Tomcat을 제공

(옛날에 이클립스 환경에서 스프링을 잠깐 배웠었는데 그때 톰캣 연결하고 그러는 거 너무 어려웠는데 내장형 Tomcat이 제공이라니..good)

4. Postman

  • Postman이란 API 개발을 빠르고 쉽게 구현할 수 있도록 도와주는 소프트웨어 플렛폼
  • 우리가 API 즉, 약속에 맞춰서 HTTP 요청을 서버에 보내고 응답을 확인해봐야 우리가 만든 서버가 제대로 동작 하는지 확인할 수 있는데 이러한 확인 작업을 간편하게 할 수 있도록 도와주는 플렛폼 중 하나가 Postman

5. HTTP

  • 데이터를 주고 받는 양식을 정의한 "통신 규약"중 하나가 HTTP
  • 매우 범용적인 양식을 가지고 있어 전 세계에서 제일 널리 쓰이는 통신 규약
  • 여기서 말하는 통신 규약이란, 컴퓨터끼리 데이터를 주고 받을 때 정해둔 약속을 의미
  • 현재 이용되는 대부분의 웹 서버가 HTTP를 기반으로 정해준 규칙에 맞게 데이터를 주고 받는다.
  • 또한, 모든 브라우저는 HTTP 프로토콜을 기본으로 지원하기 때문에 우리는 매일 HTTP를 이용하는 셈이다!

1) HTTP로 데이터를 주고 받는 법

  • HTTP에서는 언제나 Request, Response라는 개념이 존재한다.
  • 서버와 브라우저의 관계로 가볍게 말해보면 아래와 같이 동작
  • 브라우저는 서버에게 자신이 원하는 페이지(URL 등의 정보)를 요구(Request)
  • 서버는 브라우저가 원하는 페이지가 있는지 확인하고, 있다면 해당 페이지에 대한 데이터를 실어 응답(Response) 없다면 없는 페이지에 대한 데이터를 반환
  • 브라우저는 서버에게 전달 받은 데이터를 기반으로 브라우저에 그려준다.

2) 브라우저에서 HTTP가 동작하는 것을 직접 확인해보기

  • 개발자 도구와 네트워크 탭 열어보기
  • 네트워크(NetWork) 탭 좌측 Name 목록 아래 요청 클릭하기
  • Headers 탭 살펴보기
  • Response 탭 살펴보기

3) 추가 데이터

6. 테스트 코드

소프트웨어가 예상하지 못한 결과를 내는 것
버그는 '소스 코드'나 '설계과정에서의 오류' 때문에 발생

Spring에서는 '테스트 코드' 작성을 잘 할 수 있는 환경을 제공

  • JUnit 을 통해 테스트 파일 생성 및 코드 작성 후 테스트하기

7. Lombok과 application.properties

1) Lombok

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

2) application.properties

  • Spring과 관련된 설정을 할 때 사용되는 파일
  • DB 연결 시 DB의 정보를 제공해야하는데 이러한 경우에도 이 파일을 이용하여 쉽게 값을 전달

8. MySQL 및 환경변수

(오라클만 써봤는데 MySQL이 더 좋은 거 같다..ㅋㅋ 인텔리제이랑 연동 및 환경변수 설정까지 완료!)

느낀점..

아직 프로그래밍 언어 Java는 미숙하지만 그래도 틈틈히 Java 공부도 계속 하면서 Spring 강의를 들어야겠다. 그래도 새롭게 시작하는 챕터이니 만큼 설레고 계속해서 내 머리 속에 지식들을 쌓고싶구나!! 새롭게 배우는 스프링부트와 JPA도 무사히 완주할 수 있기를~ 내일은 MVC 강의를 들어야겠다.

profile
개발 블로그

0개의 댓글