본문 바로가기
내일배움캠프/내일배움캠프

[내일배움캠프] 2024. 09. 27. TIL

by TIP__ 2024. 9. 27.

안녕하세요.

2024. 09. 27. 금요일 TIL입니다.

오늘은 Spring입문 강의 1주차 강의를 한 번 듣기만 하는 방식으로 모두 듣고 다시 한 번 들어보면서 복습을 했습니다.

그와 더불어 과제를 시작해보려 준비를 시작했습니다.

데일리 코드카타

알고리즘

삼총사

 

[내일배움캠프] 알고리즘 Daily Routine 42. 삼총사

안녕하세요. 42회차 과제 "삼총사"입니다.문제 설명한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다.이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고

tip-blog-welcome.tistory.com

 

SQL

조건에 맞는 도서 리스트 출력하기

 

[내일배움캠프] SQL Daily Routine 41. 조건에 맞는 도서 리스트 출력하기

안녕하세요. 41회차 과제 "조건에 맞는 도서 리스트 출력하기"입니다.문제 설명다음은 어느 한 서점에서 판매중인 도서들의 도서 정보(BOOK) 테이블입니다.BOOK 테이블은 각 도서의 정보를 담은 테

tip-blog-welcome.tistory.com

평균 일일 대여 요금 구하기

 

[내일배움캠프] SQL Daily Routine 42. 평균 일일 대여 요금 구하기

안녕하세요. 42회차 과제 "평균 일일 대여 요금 구하기"입니다.문제 설명다음은 어느 자동차 대여 회사에서 대여중인 자동차들의 정보를 담은 CAR_RENTAL_COMPANY_CAR 테이블입니다. CAR_RENTAL_COMPANY_CAR

tip-blog-welcome.tistory.com

오늘 배운 것

# 학습 준비하기

## Gradle
### Gradle이란?
-. gradle은 빌드 자동화 시스템입니다.
-. 우리가 작성한 Java 코드를 설정에 맞게 자동으로 Build해줍니다.

 

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

 

 

## Server
### 네트워크
-. 네트워크는 여러대의 컴퓨터 또는 장비가 서로 연결되어 정보를 주고받을 수 있게 도와주는 기술

 

### Client 와 Server
-. Client는 브라우저를 이용하여 서버에 정보를 요청하고 응답을 받습니다.

 

### 웹 서버
-. 인터넷을 통해 HTTP를 이용하여 웹상의 클라이언트의 요청을 응답해주는 통신을 하는 일종의 컴퓨터

 

### API
-. 다른 소프트웨어 시스템과 통신하기 위해 따라햐 하는 규칙을 정의합니다.

 

### RESTful API
-. 서버의 api가 적절하게 http를 준수하며 잘 설계되어있을 경우 RESTful하게 설계되어있다고 합니다.

 

 

## HTTP
###HTTP
-. 데이터를 주고 받는 양식을 정의한 "통신 규약" 중 하나가 HTTP입니다.
-. HTTP에서는 언제나 Request, Response라는 개념이 존재합니다.
  * 브라우저는 서버에게 자신이 원하는 페이지(URL등의 정보)를 요구(Request)합니다.
  * 서버는 브라우저가 원하는 페이지가 있는지 확인하고, 있다면 해당 페이지에 대한 데이터를 실어 응답(Response)합니다.


-. HTTP에서는 크게 다음과 같은 구성 요소가 존재합니다.
  * Method(호출/요청 방식)
    * GET : 이름 그대로 어떤 리소스를 얻을 때 사용됩니다.
    * POST : 웹 서버에 데이터를 게시할 때 사용합니다.
    * 그 외 DELETE 등의 여러 요청 방식이 존재합니다.
 * Header(추가 데이터, 메타 데이터)
    * 브라우저가 어떤 페이지를 원하는지
    * 요청받은 페이지를 찾았는지
    * 요청받은 데이터를 성공적으로 찾았는지
    * 어떤 형식으로 데이터를 보낼지

  * Payload(데이터, 실제 데이터)

    * 서버가 응답을 보낼 때에는 항상 Payload를 보낼 수 있습니다.

 

 

## 테스트 코드

### 블랙박스 테스팅

-. 소프트웨어 내부 구조나 동작 원리를 모르는 블랙박스와 같은 상태에서, 즉 웹 서비스의 사용자 입장에서 동작을 검사하는 방법

  * 장점 : 누구나 테스트가 가능합니다.

  * 단점 : 기능이 증가될수록 테스트의 범위가 증가합니다.

테스트 하는 사람에 따라 테스트 퀄리티가 다를 수 있습니다.

 

### 개발자 테스트

-. 개발자가 직접 본인이 작성한 코드를 검증하기 위해 테스트 코드를 작성합니다.

  * 장점 : 빠르고 정확한 테스트가 가능

              테스트 자동화가 가능

              리팩토링이나 기능 추가를 할 때 더욱 편리합니다.

  * 단점 : 개발 시간이 오래 걸립니다.

               테스트 코드를 유지보수하는 비용이 생깁니다.

 

 

## Lombok, application.properties

### Lombok

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

 

### application.properties

-. Spring과 관련된 설정을 할 때 사용되는 파일입니다.

-. Spring와 SpringBoot의 차이에 대해 학습할 때 SpringBoot를 사용하면 개발에 필요한 설정 정보들이 자동으로 설정된다.

-. 이 파일을 사용하면 자동으로 설정되고 있는 설정 값을 쉽게 수정할 수 있습니다.

-. 뿐만 아니라 DB 연결 시 DB의 정보를 제공해야 하는데 이러한 경우에도 이 파일을 이용하여 쉽게 값을 전달할 수 있습니다.

 

 

# Spring MVC

## Spring MVC

### MVC 디자인 패턴

-. MVC란 Model-view-Controller의 약자로 소프트웨어 디자인 패턴 중 하나압니다.

-. MVC 패턴은 소프트웨어를 구성하는 요소들을 Model, View, Controller로 구분하여 각각의 역할을 분리합니다.

-. Model

  * 데이터와 비즈니스 로직을 담당

  * 데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업을 수행합니다.

-. View

  * 사용자 인터페이스를 담당

  * 사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현합니다.

-. Controller

  * Model과 View 사이의 상호작용을 조정하고 제어합니다.

  * 사용자의 입력을 받아 Model에게 전달하고, Model의 결과를 바탕으로 View를 업데이트합니다.

 

### Spring MVC

-. Servlet API를 기반으로 구축된 독창적인 웹 프레임워크로, 처음부터 Spring Framework에 포함되어왔으나, 정식 명칭인 "Spring Web MVC"는 소스 모듈(spring-webmvc)의 이름에서 따왔으나, "Spring MVC"로 더 일반적으로 알려져 있습니다.

-. Spring MVC는 중앙에 있는 DispatcherServlet이 요청을 처리하기 위한 공유 알고리즘을 제공하는 Front Controller 패턴을 중심으로 설계되어 있으며 이 모델은 유연하고 다양한 워크 플로우를 지원합니다.

 

### Front Controller

-. spring은 DispatcherServlet을 사용하여 FrontController 패턴 방식으로 API 요청을 효율적으로 처리하고 있습니다.

 

 

## Controller 이해하기

### Controller의 장점

-. API에 따라 많은 클래스를 작성해야 하는 것을 하나의 클래스로 처리가 가능합니다.

  * 그렇다고 하나의 Controller에 모든 API를 넣지는 않고 유사한 성격의 API를 묶어 하나의 Controller로 관리합니다.

 

### @GET, @POST, @PUT, @DELETE

-. 각각의 HTTP Method에 매핑되는 에너테이션입니다.

-. RequestMapping으로 중복되는 URL을 단축시켜줄 수 있습니다.

과제 진행도

오늘은 구현해야 하는 기능을 옮겨 적고 API명세서를 README.md 파일에 작성하는 작업을 해보고있습니다.

내일도 오늘보다는 조금 더 나은 제가 되도록 노력하겠습니다.

댓글