본문 바로가기

개발 일지/TIL

[ #20 ] TIL

✏️ 0513      


주특기 Spring 입문 발제

팀 재편성

Spring 입문 1주차 강의

수준별 학습: 베이직반 OT


 

Spring 입문_1주차

아니 총 강의 시간 10시간 실환가??

이걸 이번주 안에 듣고 개인과제도 제출이요...? ㄴㅖ..???

 

 

 

강의 들으면서 따라하려고 하는데 잘 가다가 본격적으로 시작하자마자 넘어졌다


강의에서 Spring Initializr 로 선택해서 New Project 를 생성하라고 해서 봤는데

Spring Boot 밖에 없고 Spring Initializr 는 안 보이길래 바로 구글링 들어갔다

 

https://start.spring.io/

위의 웹 사이트를 이용해서 프로젝트를 미리 생성 후 파일을 열어서 사용하는 방법

내용 밖에 없길래 이건가 하고 따라 해보긴 했다

 

 

 

강의에서 요구하는 버전들을 전부 맞춰주고 GENERATE 를 눌러주면 압축폴더가 다운로드 되는데

그걸 풀어서 Open 으로 열면 끝인데...

 

 

 

그런데 다른 수강생 분들이 많이 질문하러 찾아갔는지 시간이 어느정도 지난 후에

그저 인텔리제이에서 버전이 업그레이드 되면서 이름이 변경되었으니 그냥 쓰면 된다고 알려주셨다

20분정도 삽질했네... 어쩐지 아이콘이 똑같드라

 

New Project 만들 때와 다르게 웹 사이트에서 미리 프로젝트를 생성해서 열면

미리 추가하지 못한 dependencies 은 build.gradle 파일에서 추가 가능 ~

프로젝트 생성 후에 필요한 패키지가 있으면 여기서 추가하면 된다

 

 

저기 스프링(잎) 아이콘이 붙어있는 [ Edit Starters... ] 를 누르면

처음 프로젝트 생성할 때 나오는 Dependencies 검색창이 나오고 체크해서 OK 누르면 자동으로 넣어진다

넣은 후에는 꼭 오른쪽 상단 위에 나오는 새로고침이 달린 스프링 아이콘 눌러주기

 

만약 프로젝트 생성시 JDK 버전을 잘못 선택했더라도
프로젝트 실행 후 에러가 뜨면서 다시 설정하라고 알려준다

 

 

서버


사용자가 요청을 했을 때 해당 요청에 대한 응답을 수행하는 프로그램
=> 즉, 서버를 개발한다

 

 

사용자는 브라우저를 이용하여 서버에 정보를 요청하고 응답 받는다

이때 사용자의 요청이 서버에 도달하기 위해서는 해당 서버의 정보가 필요한데

 

사용자의 요청이 해당 서버에 정확하게 도달할 수 있게 제공되는 정보가 IP주소다

IP주소는 컴퓨터를 식별하기 위한 위치 주소인데 집 문 주소라고 생각하면 된다
사용자의 요청은 택배이고, IP주소는 도착주소 !

택배 받을 때는 기분이 좋죠 그런데 이건..?

 

 

API
API ( Application Programming Interface )
다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙 정의

 

 

 

다른 애플리케이션이 프로그래밍 방식으로 애플리케이션과 통신할 수 있도록 API 를 표시하거나 생성한다

분명 한글인데 한국어인데...

 

API 는 하나의 약속

서로 다른 애플리케이션이 약속한 방식의 API 요청을 수행하면 정해진 결과물을 반환한다

주문을 받으면 해당 주문의 음식을 가져다 주는 식당의 점원이라고 생각하면 된다고 한다!

 

 

 

Representational State Transfer(REST)
 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처



REST 아키텍처 스타일을 따르는 API를 REST API  
REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스

 

 

API 테이블

 

이전 팀 과제에서도 발표하기 위해 잠시 작성해봤던 API

API 들을 한눈에 확인하고 협업하는 개발자들과 소통하기 위해 작성하는 일종의 표

Name Method URL 설명
인사 GET /api/hello Hello World! 출력

 

 

 

HTTP


데이터를 주고 받는 양식을 정의한 "통신 규약"중 하나가 HTTP

 

개발자 도구의 네트워크 탭을 이용해
해당 서버에서 받아온 목록들과 각 목록들에 대한 상태코드, request method 확인이 가능

개인적으로 4xx도 싫지만 5xx코드가 더 시름..

 

이전에 웹보안 에서 정리했던 내용 가져와봤다

 

HTTP Method

  • 주요 Method
    • GET : 리소스 조회 -> URI(주소) 부분에 전달 내용이 포함
    • POST : 요청 데이터 처리, 주로 등록에 사용
    • PUT : 리소스 대체(덮어쓰기), 해당 리소스가 없으면 생성
    • PATCH : 리소스 부분 변경(일부 변경)
    • DELETE : 리소스 삭제
  • 기타 Method
    • HEAD : 상태줄과 헤더 부분만 반환(GET과 유사)
    • OPTIONS : 통신 가능 옵션을 설명
    • CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
    • TRACE : 대상 리소스에 대한 경로를 추적하여 루프백 테스트를 진행

 

HTTP State Code

  • 1XX: Informational(정보 제공)
    클라이언트까지 응답완료 했다는 확인
    • 100(계속진행),
    • 101(프로토콜 전환),
    • 102(처리)
  • 2XX: Success(성공)
    클라이언트의 요청이 서버에서 성공적으로 처리
    • 200(성공)
    • 201(작성됨-요청은 성공했고 새 리소스를 작성했다)
    • 202(허용됨-서버가 요청을 접수했지만 아직 처리하지 않았다)
    • 203(신뢰할 수 없는 정보)
    • 204(콘첸츠 없음-서버가 요청을 접수했지만 콘텐츠를 제공하지 않는다)
    • 205(콘텐츠 재설정)
  • 3XX: Redirection(리다이렉션)
    완전한 처리를 위해서 추가 동작이 필요한 경우
    • 300(여러 선택항목 - 서버가 요청에 따라 여러 조치를 선택할 수 있다),
    • 301(영구 이동 - 요청한 웹페이지를 새 위치로 영구적으로 이동했다),
    • 302(기타 위치보기 - 현재 서버에서 다른 서버로 검색? 넘기거나 현재 서버에서 리소서 검색중인 상태)
  • 4XX: Client Error(클라이언트 에러)
    클라이언트의 요청이 잘못된 경우를 의미
    • 400(잘못된 요청 - 서버가 구문을 인식하지 못했다.)
    • 401(권한 없음 - 요청에는 권한이 필요하다)
    • 402(결제 필요 - 요청에는 결제가 필요하다)
    • 403(금지됨 - 서버가 요청을 거부하고 있다)
    • 404(찾을수없음 - 서버가 요청한 페이지를 찾을 수 없다)
  • 5XX: Server Error(서버 에러)
    서버 처리에 문제가 발생한 경우 ( 서버 부하, DB 처리 과정 오류, 익셉션 )
    • 500(내부 서버 오류 - 서버에 오류가 발생하여 요청을 수행할 수 없다)
    • 504(게이트웨이 시간 초과 - 게이트웨이 통과의 일반적인 시간을 초과했다)

 

테스트코드

 

 

프로젝트 하면서 많이 봤을 폴더

 

 

개발자 테스트
=> 개발자가 본인이 작성한 코드를 검증

  • 장점
    • 빠르고 정확한 테스트 가능 (예상 동작 VS 실제 동작)
    • 테스트 자동화 가능
    • 배포 절차 시 테스트 코드가 수행되어 동작 검증
    •  리팩토링이나 기능 추가를 할 때 더욱 편리
  • 단점
    • 개발 시간이 오래 걸린다
    • 테스트 코드를 유지보수하는 비용


블랙박스 테스팅
=> 내부 구조나 동작원리를 모르는 블랙박스 같은 상태
=> 사용자 입장에서 검사

  • 장점
    • 누구나 테스트가 가능
  • 단점
    • 기능이 증가될 수록 테스트의 범위가 증가
    • 시간이 갈수록 테스트하는 사람이 계속 늘어나야 한다
    • 테스트 하는 사람에 따라 테스트 퀄러티가 다를 수 있다 → QA 직군이 있는 이유

 

클래스를 누르고 Generate 클릭하면

test 코드에서 패키지 위치와 이름까지 동일하게 파일을 만들어준다

 

 

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

 

 

 

JUnit은 테스트 실행 환경을 가지고 있기 때문에 따로 main() 메서드를 실행하거나 서버를 실행시키지 않아도

각각의 메서드 혹은 기능별로 테스트 코드를 작성하여 실행시킬 수 있다

Assertions.assertEquals(개발자가 생각하는 값, 실제로 나온값);


테스트 코드에서 sout 을 사용해도 보기 편하지만
위의 코드를 사용해서 개발자가 나와야하는 값과 실제로 나온 값이 다르면 에러를 발생시켜주는 코드로 쉽게 볼 수 있다

 

 

Lombok과 application.properties

 

Lombok
필수적으로 필요한 메서드/생성자 등을 자동 생성해줌으로써
코드를 절약할 수 있도록 도와주는 라이브러리

 

 

 

세팅에 들어가서 Annotation Processors 에 Enable annotaion processing 체크

 


@Getter
@Setter
@AllArgsConstructor (모든 필드가 들어간 생성자)
@NoArgsConstructor (기본생성자 만드는것)
@RequiredArgsConstructor (요구되는 필드들을 가지는 생성자 => final 을 가지고 있는 필드만 있는 생성자)

예전에 배웠을 때 1~4번째 꺼 세트로 사용하는 걸 많이 해봤던 기억이 있다

Lombok 을 사용했는데 아래 코드에 또 추가하면 위의 사진처럼 빨간줄이 뜬다

중복이어서 그런거니 Lombok 코드를 지우던지 아래의 코드를 지우던지 하면 된다

 

 


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

 

 

Spring MVC

 

 

Spring MVC : 
Spring에서 MVC 디자인 패턴을 적용하여 HTTP 요청을 효율적으로 처리하고 있다

 

 

MVC란 Model-View-Controller의 약자로, 소프트웨어 디자인 패턴 중 하나
MVC 패턴은 소프트웨어를 구성하는 요소들을 Model, View, Controller로 구분하여 각각의 역할을 분리

 


Model
- 데이터와 비즈니스 로직을 담당
- 데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업을 수행

View
- 사용자 인터페이스를 담당
- 사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현

Controller
- Model과 View 사이의 상호작용을 조정하고 제어
- 사용자의 입력을 받아 Model에 전달하고, Model의 결과를 바탕으로 View를 업데이트

 


소프트웨어를 구성하는 요소들을 분리함으로써

코드의 재사용성과 유지보수성을 높이고, 개발자들 간의 협업을 용이하게 한다

따라서 소프트웨어를 개발할 때, MVC 패턴을 적용하여 구조를 잘 설계하는 것이 중요

 

 

회고

 

새로운 공부와 새로운 팀원과 새로운 과제

스파르타 이름값(?) 하는 과제 제출 기간

넘 정신없다 🫠

'개발 일지 > TIL' 카테고리의 다른 글

[ #22 ] TIL  (1) 2024.05.17
[ #21 ] TIL  (2) 2024.05.14
[ #19 ] TIL  (2) 2024.05.10
[ #18 ] TIL  (0) 2024.05.09
[ #17 ] TIL  (0) 2024.05.08