분류 전체보기 138

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 data JDBC - pagination 실습

오늘은 Spring data JDBC를 활용해 pagination을 구현해보았다. 페이지네이션(Pagination)이란? 예를 들어, 데이터 베이스에 회원 정보가 100건이 저장되어 있는데 클라이언트 쪽에서 100건의 데이터를 모두 요청하는 것이 아니라 한 페이지에 일정 개수 만큼만 나누어서 달라고 요청하는 것을 페이지네이션(Pagination)이라고 함. 즉 page 번호가 1이고, 페이지에 포함되는 데이터의 개수가 10건일 경우, 데이터베이스의 테이블에서는 1 row부터 10 row까지만 조회되어야 함. 만약 page 번호가 2이고, 페이지에 포함되는 데이터의 개수가 10건일 경우, 데이터베이스의 테이블에서는 11 row부터 20 row까지만 조회되어야 함. 그런데 이렇게 조회를 하면 보통 가장 오래..

코딩 스터디 2023.02.22