부트캠프 57

Spring MVC - API 문서화

1.API 문서화(Documentation) -클라이언트가 REST API 백엔드 애플리케이션에 요청을 전송하기 위해서 알아야 되는 요청 정보(요청 URL(또는 URI), request body, query parameter 등)를 문서로 정리하는 것 -API 문서 생성의 자동화 ● API 문서를 수기로 직접 작성하는 것은 비효율적임(수기로 작성시 필요한 내용을 빠뜨릴 수 있음) -Swagger 방식 ● 애터네이션 기반의 API 문서화 방식 ○ 장점 : API 요청 툴로써의 기능을 사용할 수 있음 ○ 단점 : 가독성 및 유지보수성이 떨어짐(@ApiOperation, @ApiResponses 같은 애너테이션을 클래스에 일일이 추가해야함) -Spring Rest Docs 방식 ● 테스트 코드 기반의 API ..

부트캠프 2023.03.12

TDD(Test Driven Development)

1.TDD(Test Driven Development) -테스트가 개발을 주도하는 방식 -테스트 코드를 먼저 작성하고, 그 다음에 기능을 구현함 1-1.TDD의 특징 모든 조건에 만족하는 테스트를 먼저 진행한 뒤에, 조건에 만족하지 않는 테스트를 단계적으로 진행하면서 실패하는 테스트를 점진적으로 성공시킴 테스트가 "passed" 될 만큼의 코드만 우선적으로 작성함 ‘실패하는 테스트 → 실패하는 테스트를 성공할 만큼의 기능 구현 → 성공하는 테스트 → 리팩토링 → 실패하는 테스트와 성공하는 테스트 확인’ 이라는 흐름을 반복함 1-2.TDD의 장점과 단점 -장점 테스트를 통과 할 만큼의 기능을 구현하므로 한번에 너무 많은 기능을 구현할 필요가 없음 리팩토링의 비용이 상대적으로 적어짐(테스트가 성공할 때 바로..

부트캠프 2023.03.12

Spring MVC - Testing part 3

4.슬라이스 테스트(Slice Test) -단위 테스트 만으로는 애플리케이션의 모든 기능이 정상적으로 동작한다고 보장되지 않음 -하나의 애플리케이션은 계층별로 역할이 있고, 계층별로 서로 연동되기 때문에 각각의 계층별로 잘 동작하는지 테스트한 후에 마지막으로 통합 테스트를 통해서 계층 간의 연동에 문제가 없는지 확인해야 테스트 작업이 마무리됨 -이 처럼 개발자가 각 계층에 구현해 놓은 기능들이 잘 동작하는지 특정 계층만 잘라서(Slice) 테스트하는 것을 슬라이스 테스트라고 함 +스모크 테스트(Smoke Test) : QA 부서에서 본격적으로 전체적인 기능 테스트를 진행하기 전에 애플리케이션의 특정 수정 사항으로 인해 영향을 받을 수 있는 범위에 제한해서 진행하는 테스트 4-1.API 계층 테스트 -AP..

부트캠프 2023.03.09

Spring MVC - Testing part 2

3.Hamcrest를 사용한 Assertion -Hamcrest는 JUnit 기반의 단위 테스트에서 사용할 수 있는 Assertion Framework -아래와 같은 이유로 JUnit에서 지원하는 Assertion 메서드보다 더 많이 사용됨 (1)Assertion을 위한 매쳐(Matcher)가 자연스러운 문장으로 이어지므로 가독성이 향상됨 (2)테스트 실패 메시지를 이해하기 쉬움 (3)다양한 Matcher를 제공함 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest...

부트캠프 2023.03.08

Spring MVC - Testing part 1

1.단위 테스트(Unit Test) -일반적인 테스트의 의미 ● 테스트는 어떤 대상에 대한 일정 기준을 정해놓고, 그 대상이 정해진 기준에 부합하는지 부합하지 못하는지를 검증하는 과정 ● 테스트를 제대로 잘 거쳐서 테스트 대상이 검증 과정에 잘 통과하게 만들어 최대한 더 나은 결과를 얻기 위해 테스트를 진행함 -단위 테스트(Unit Test) ● 기능 테스트 ○ 주로 애플리케이션을 사용하는 사용자 입장에서 애플리케이션이 제공하는 기능이 올바르게 동작하는지를 테스트함 ○ 우리가 개발한 애플리케이션과 연관된 대상(API툴, DB 등)이 많기 때문에 흔히 이야기하는 단위 테스트로 부르기는 힘듦 ● 통합 테스트 ○ 클라이언트 측 툴 없이 개발자가 짜 놓은 테스트 코드를 실행시켜서 이루어지는 경우가 많음 ○ 통합..

부트캠프 2023.03.06

Spring MVC - 트랜잭션

1.트랜잭션(Transaction) -여러 개의 작업들을 하나의 그룹으로 묶어서 처리하는 처리 단위 -All or Nothing(트랜잭션의 처리방식) ● 물리적으로는 여러 개의 작업이지만 논리적으로는 마치 하나의 작업으로 인식해서 전부 성공하든가 전부 실패하든가(All or Nothing)의 둘 중 하나로만 처리되어야 트랜잭션의 의미를 가짐 ● 애플리케이션에서 사용하는 데이터의 무결성을 보장하는 핵심적인 역할 1-1.ACID 원칙 -트랜잭션의 특징 4가지 ACID ● 원자성(Atomicity) ○ 작업을 더 이상 쪼갤 수 없음을 의미 ○ 논리적으로 하나의 작업으로 인식해서 둘 다 성공하든가 둘 다 실패하든가(All or Nothing) 중에서 하나로만 처리되는 것이 보장되어야 함 ● 일관성(Consist..

부트캠프 2023.03.03

Spring MVC - JPA 기반 데이터 액세스 계층 part 2

2.JPA 엔티티(Entity) 매핑과 연관 관계 매핑 -데이터베이스의 테이블과 엔티티 클래스 간의 매핑 작업은 JPA를 이용해 데이터베이스의 테이블과 상호 작용(데이터 저장, 수정, 조회, 삭제 등) 하기 위해 제일 먼저 해야되는 작업임 -엔티티 매핑 작업은 크게 객체와 테이블 간의 매핑, 기본키 매핑, 필드(멤버 변수)와 컬럼 간의 매핑, 엔티티 간의 연관 관계 매핑 등으로 나눌 수 있음 2-1.엔티티와 테이블 간의 매핑 -@Entity 애너테이션 ● 클래스 레벨에 @Entity 애너테이션을 붙이면 JPA 관리 대상 엔티티로 지정 ● name 애트리뷰트를 통해 엔티티 이름을 설정할 수 있음(미설정시 기본값으로 클래스 이름을 엔티티 이름으로 사용) -@Table 애너테이션 ● name 애트리뷰트를 통해..

부트캠프 2023.03.01

HTTP 헤더(Header)

1.HTTP 헤더(Header) -HTTP 메시지(Messages)의 구성 요소 중 하나 -클라이언트의 요청이나 서버의 응답에 포함되어 부가적인 정보를 HTTP 메시지에 포함할 수 있도록 함 -HTTP 헤더의 사용 목적(HTTP 헤더에 포함되어 있는 부가적인 정보를 어디에 사용할지) [1]클라이언트와 서버 관점에서의 대표적인 HTTP 헤더 예시 ● 클라이언트와 서버의 관점에서 내부적으로 가장 많이 사용되는 헤더 정보로 'Content-Type'이 있음 ● 'Content-Type' 헤더 정보는 클라이언트와 서버가 주고 받는 HTTP message body의 데이터 형식을 알려주는 역할 ● 클라이언트와 서버는 'Content-Type'이 명시된 데이터 형식에 맞는 데이터들을 주고 받음 [2]개발자들이 직접..

부트캠프 2023.02.24

Spring MVC - JPA 기반 데이터 액세스 계층 part 1

1.JPA(Java/Jakarta Persistence API) -Java진영에서 사용하는 ORM(Object-Relational Mapping) 기술의 표준 사양(Specification) -JPA 표준 사양을 구현한 구현체로는 Hibernate ORM, EclipseLink, DataNucleus 등이 있음 1-1.데이터 액세스 계층에서의 JPA 위치 -데이터 액세스 계층에서 JPA는 위의 그림과 같이 데이터 액세스 계층의 상단에 위치함 -데이터 저장, 조회 등의 작업은 JPA를 거쳐 JPA의 구현체인 Hibernate ORM을 통해서 이루어짐 -Hibernate ORM은 내부적으로 JDBC API를 이용해서 데이터베이스에 접근하게 됨 1-2.JPA에서 Persistence의 의미 -Persisten..

부트캠프 2023.02.23

Spring MVC - JDBC 기반 데이터 액세스 계층

1.Spring Data JDBC 1-1.JDBC(Java Database Connectivity) -JDBC는 Java 애플리케이션에서 데이터베이스에 액세스하기 위해 Java 초창기(JDK 1.1) 버전부터 제공되는 표준 사양(Specification) -Java개발자는 JDBC API를 사용해서 다양한 벤더(Oracle, MS SQL, MySQL 등)의 데이터베이스와 연동할 수 있음 -JDBC의 동작 흐름 ● Java 애플리케이션에서 JDBC API를 이용해 적절한 데이터베이스 드라이버를 로딩 한 후, 데이터베이스와 인터랙션 *JDBC 드라이버(JDBC Driver) : 데이터베이스와의 통신을 담당하는 인터페이스로 Oracle이나 MS SQL, MySQL 같은 다양한 벤더에서는 해당 벤더에 맞는 JD..

부트캠프 2023.02.20