버그 bug
소프트웨어가 예상하지 못한 결과를 내는 것
개발 코드 배포 전, 버그를 찾아내는 법
- 블랙박스 테스팅
소프트웨어 내부 구조나 동작원리를 모르는 블랙박스와 같은 상태에서, 즉 웹 서비스의 사용자 입장에서 동작을 검사하는 방법
장점: 누구나 테스트 가능
단점: 기능이 증가될 수록 테스트의 범위가 증가, 테스트 하는 사람에 따라 테스트 퀄리티가 다를 수 있음- 개발자 테스트
개발자 직접 본인이 작성한 코드를 검증하기 위해 테스트 코드를 작성함
장점: 빠르고 정확한 테스트 가능, 테스트 자동화 가능, 리팩토링이나 기능 추가 할 때 편리
단점: 개발 시간이 오래 걸림, 테스트 코드 유지보수 비용 발생
JUnit
자바 프로그래밍 언어 용 단위 테스트 프레임워크
이미 build.gradle에 추가돼있음 -> JUnit을 사용할 준비가 완료된 상태
Java는 반드시 main() 메서드로 시작해 main() 메서드로 끝난다고 배웠지만,Lombok
자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메서드/생성자 등을 자동 생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리
@Getter, @Setter
Memo 자바 클래스 생성 |
직접 입력하지 않은 getUsername(), getContents() 메서드가
@Getter 어노테이션을 통해 자동으로 만들어져있는 것을 확인할 수 있음
(@Setter 또한 마찬가지)
|
@AllArgsConstructor, @NoArgsConstructor
기본 생성자와 모든 필드를 파라미터로 가진 오버로딩된 생성자를 만들어 줌
@AllArgsConstructor로 오버로딩된 생성자를 만들게 되면@NoArgsConstructor를 통해 기본 생성자를 만들어 줌application.properties
Spring과 관련된 설정을 할 때 사용하는 파일
- src > main > resources > application.properties
- SpringBoot를 통해 자동으로 설정되고 있는 설정 값을 쉽게 수정할 수 있음
- DB 연결 시 DB의 정보를 제공해야하는데, 이러한 경우에도 이 파일 이용해 쉽게 값 전달 가
터미널
cd /usr/local/mysql/bin 위치 이동./mysql -u root -p MySQL 접속 -> 비밀번호 입력MVC (Model-View-Controller)
소프트웨어 디자인 패턴 중 하나
- MVC 패턴: 소프트웨어를 구성하는 요소들을 Model, View, Controller로 구분하여 각각의 역할을 분리함
- 소프트웨어를 구성하는 요소들을 분리함으로써 코드의 재사용성과 유지보수성을 높이고, 개발자들 간의 협업을 용이하게 함
- Model
- 데이터와 비즈니스 로직을 담당함
- 데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업을 수행함
- View
- 사용자 인터페이스를 담당함
- 사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현함
- Controller
- Model과 View 사이의 상호작용을 조정하고 제어함
- 사용자의 입력을 받아 Model에 전달하고, Model의 결과를 바탕으로 View를 업데이트함
Spring MVC (Spring Web MVC)
Servlet API를 기반으로 구축된 독창적인 웹 프레임워크
- 처음부터 Spring Framework에 포함되어 있음
- DispatcherServlet이 중앙에서 HTTP 요청을 처리해주는데 이는 Front Controller 패턴으로 설계되어있음
-> Spring에서 MVC 패턴을 적용해 HTTP 요청을 효율적으로 처리하고 있음
Servlet: 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양
사용자가 (HTTP) API 요청했을 때 서버의 서블릿이 어떻게 동작되고 있는지 알아보자
|
Front Controller
- 모든 API 요청을 앞서 살펴본 서블릿의 동작 방식에 맞춰 코드를 구현한다면, 무수히 많은 Servlet 클래스를 구현해야함
-> 따라서, Spring은 DispatcherServlet을 사용해 Front Controller 패턴 방식으로 API 요청을 효율적으로 처리함
Front Controller 패턴의 동작과정
|
@GetMapping("/api/hello")GET /api/hello → HelloController 의 hello() 함수
GET /user/login → UserController 의 login() 함수
GET /user/signup → UserController 의 signup() 함수
POST /user/signup → UserController 의 registerUser() 함수
-> 직접 Servlet을 구현하지 않아도 DispatcherServlet에 의해 간편하게 HTTP 요청을 처리할 수 있게됨