ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring 입문 강의 섹션 0 ~ 섹션 3
    BackEnd/Spring 2022. 7. 29. 12:19

    동아리에서 사실 이전에 스프링 프로젝트는 했었지만, 기본기 다질 겸 입문 강의부터 듣고 있는 중이다. 

    그래도 프로젝트 해보니까 강의 들으면서 이게 이런거였군~ 하고 깨달을 수 있는 것 같다. 간단하게 강의 들으면서 기록해둔 내용 복습겸 정리하는 포스팅. 

     

    ✅ Spring Boot Starter

    https://start.spring.io/

    필요한 프로젝트, 언어, java 버전, 옆에가 잘렸는데 라이브러리 등도 지정이 가능하다. 그리고 generate 누르면 필요한 프로젝트의 초기 설정들을 만들어주는 유용한 사이트. 저번에 프로젝트 할 때도 사용했었다. 

    Spring Boot 버전은 Snapshot은 아직 만들고 있는 것, M어쩌구는 정식 릴리즈가 아직 안 된 것이니 아무런 영어가 안붙은 버전으로 선택했다. 

     

    ✅ Maven vs Gradle 

    두 가지다 스프링에서 사용하는 빌드 관리 도구인데, Maven은 xml형태로, Gradle은 build.gradle이라는 파일에 필요한 라이브러리 명시해두고 이 라이프사이클까지 관리해준다. 

    Maven이 먼저 나왔고, Gradle이 나중에 나왔는데, 성능면에서 Gradle이 더 높아서 요즘은 거의 Gradle프로젝트를 하는 추세이다. 

     

    ✅ 라이브러리들

    spring-boot-starter-web : 이 안에 톰캣(웹 서버), webmvc 등이 존재

    spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진(view를 만들기 위한)

    spring-boot-starter-test : 테스트 프레임워크들(assertj, junit 등)

    그 외 입문 강의엔 안나왔는데 lombok 프레임워크도 거의 빠지지 않고 쓰인다. 

     

    +) tmi 웹 서버 vs WAS(Web Application Server

     

    웹 서버

    - HTTP 프로토콜을 기반으로 클라이언트의 요청을 서비스하는 기능을 담당, 정적인 컨텐츠를 WAS를 거치지 않고 바로 제공하거나, 요청을 WAS에 보내고 결과를 받아 클라이언트에 응답

    WAS

    - HTTP 요청을 통해 DB 조회와 같은 다양한 로직을 처리, 주로 DB서버와 같이 실행되며 동적인 컨텐츠 결과를 클라이언트에 응답

     

    ✅ 정적 컨텐츠 ? 템플릿 엔진 ? API ?

    정적인 컨텐츠는 말 그대로 이미 만들어져있는 파일 그대로 쏴준다. 정적인건 변화가 없다는 뜻이니 유저의 요청에 동적으로 바뀌거나 하는 게 아닌, 이미 만들어진 파일 그대로 쏴준다. 

     

    템플릿 엔진은 아까 언급한 thymeleaf등이 있다. 여기는 js의 백틱 같이 동적으로 변수를 받아서 띄우기 가능하다. thymeleaf말고도 머스테치 등 여러개가 있다. 

     

    API는 보통 응용프로그램, 소프트웨어 등에서 데이터 주고받기 위한 프로토콜을 의미한다. 뷰 말고 @ResponseBody 어노테이션을 통해 객체를 Json객체를 변환해서 반환한다. @RequestParam 어노테이션을 통해 API 경로로 들어오는 변수를 지정할 수 있다. 

     

    * json 객체는 javascript object notation을 의미하며 name-value형태의 쌍으로 이루어져 있다. 중괄호로 표현되고 쉼표로 각 프로퍼티를 구분한다. xml보다 간단하고 직관적이라 최근 클라이언트-서버 구조로 앱웹 개발시 json을 대부분 사용한다. 

    * 현재까지의 강의는 아직 GetMapping밖에 사용하지 않았는데 PostMapping의 경우 요청자가 정보를 보내기 때문에 RequestBody로 클라이언트가 보내야 할 객체 형식 등도 정해둘 수 있다. 가령 로그인, 회원가입 등에는 필요한 아이디, 닉네임, 비밀번호 등을 객체로 만들고 RequestBody형태를 붙여주면 해당 형식의 요청이 아니면 400 Bad Request로 처리 가능.

     

    ✅ MVC

    흔하게 사용되는 디자인 패턴 중에 하나로 Model - View - Controller 구조로 되어 있다. 

    컨트롤러와 모델은 주로 내부적인 로직을 처리하고, 뷰는 외부적인, 화면의 UI관련된 것들을 처리한다. 이들을 구분해놓는 이유는 유지보수를 용이하게 하기 위해서이다. 

    Model : 데이터와 비즈니스 로직 관리
    - 어플리케이션의 정보, 데이터를 나타냄
    - 뷰나 컨트롤러에 대한 정보를 몰라야 함
     
    View : 클라이언트와 상호작용이 일어나는 부분, 레이아웃과 화면 처리
    - 변경이 일어날 시 모델에게 변경 내용 전달
     
    Controller : 유저의 요청을 처리해서 응답하는 부분. 모델과 뷰 부분으로 라우팅
    - 모델과 뷰 사이를 이어주는 브릿지 역할
    - 모델이나 뷰의 변경을 모니터링, 변경 사항을 각 구성요소에 통지해야 함

    일반적으로 Controller, Service(핵심 비즈니스 로직), Domain(비즈니스 도메인 객체저장), Repository(DB에 저장하고 관리) 4가지 요소로 웹 어플리케이션 구조를 이룬다. 

    Service 쪽은 비즈니스 로직 처리쪽이라 naming이 비즈니스 용어 위주로 설계된다. 

     

    ✅ Test Case

    - TDD(Test Driven Develop)? 

    테스트가 주도하는 개발을 의미한다. 항상 실패하는 테스트 먼저 작성, 테스트가 통과하는 프로덕션 코드 작성, 테스트 통과 후 프로덕션 코드 리팩토링의 순서로 진행

    - 단위테스트 (Unit Test)는 기능 단위의 테스트 코드를 작성하는 것을 의미

    - 모든 테스트는 순서가 보장되지 않기 때문에, 순서에 의존적으로 테스트를 설계하지 말 것. 

     

    - @AfterEach : 테스트 끝나고 데이터 clean해주는 등 각 테스트 실행 후 종료될 때마다 해야할 행동을 지정할 수 있는 어노테이션

    - @BeforeEach : 각 테스트 실행 전에 호출, 테스트끼리 서로 영향이 없게끔 새로운 객체를 생성하거나 의존관계 등을 맺어준다. 

     

     

    ✅ DI(Dependency Injection) : 의존관계 주입

    - 실행 시점에 외부에서 실제 구현 객체를 생성하고 주입시켜 의존관계가 연결되는 것을 의미.
    - 객체 지향 언어의 특징 중 하나인 다형성을 활용하여 구현되는데, 인터페이스 생성하고, 인터페이스를 상속받는 객체들을 만든다. 그리고 외부에서 실 객체를 주입함으로써 클래스끼리의 결합을 줄이고 의존성을 낮춘다. 
     

    'BackEnd > Spring' 카테고리의 다른 글

    Spring 입문 4 ~ 6주차  (0) 2022.08.05
    Spring Container  (0) 2022.07.31
    Spring Study 3주차 8장  (0) 2022.05.01
    Spring Study 2주차 ~ 6장, 7장  (0) 2022.04.07
    Spring Study 2주차 ~ 5장  (0) 2022.04.06
Designed by Tistory.