1️⃣ 스프링 프로젝트, 데이터베이스와 JPA에 대해 학습합니다.
https://github.com/LEEJaeHyeok97/dcInsideClone3
사용자가 특정 페이지 번호를 클릭했을 때 그 페이지에 해당하는 데이터만 사용자에게 보여준다
페이징 처리(/board/paging)
게시글 14개
BoardController.class
// /board/paging?page=1
@GetMapping("/paging")
public String paging(@PageableDefault(page = 1)Pageable pageable, Model model) {
//스프링의 Pageable 인터페이스를 사용한다
// pageable.getPageNumber();
Page<BoardDTO> boardList = boardService.paging(pageable);
}
BoardService.class
public Page<BoardDTO> paging(Pageable pageable) {
int page = pageable.getPageNumber() - 1;
int pageLimit = 3; // 한 페이지에 보여줄 글 갯수
//한 페이지당 3개씩 글을 보여주고 정렬 기준은 id 기준으로 내림차순 정렬한다는 의미
// page 위치에 있는 값은 0부터 시작
//페이징 처리된 객체를 가져오는것이다.
Page<BoardEntity> boardEntities =
boardRepository.findAll(PageRequest.of(page, pageLimit, Sort.by(Sort.Direction.DESC, "id")));
}
단위테스트란?
스프링의 대표적인 단위 테스트 툴은 JUnit4이 있다
테스트하고 싶은 모듈이 있다면 그 파일의 패키지 이름과 똑같이 테스트 폴더에 생성한다
@Test: 독립적으로 테스트를 수행할 메소드를 지정한다
작성한 테스트는 JUnit Test로 실행한다
정상 작동하였다면 초록색이, 오류가 발생했다면 빨간색 프로그래스 바가 뜨게 된다.
단위테스트를 위한 인텔리제이 단축키
단위 테스트 코드를 생성할 클래스명 선택, Alt + Enter
단위 테스트 코드를 생성할 클래스명에 커서를 두고, Alt + Enter를 입력합니다. 목록이 나타나면, Create Test를 선택합니다.


테스트 성공 시 초록색 체크표시가 나타난다.

Gradle Task를 이용한 빌드
build/libs 디렉토리에 Jar 파일 생성됨애플리케이션 실행
cd desktop/projects/be-template-build/build/libsjava -jar Jar 파일명.jar 명령 입력하여 애플리케이션을 서버 환경에서 실행 !java -jar section3-week3-template-build-0.0.1-SNAPSHOT.jarscp와 같은 표준 유닉스 툴을 이용해서 서버로 간단히 전송하는 것이다. 서버로 전송된 jar 파일은 JVM이 설치된 환경이라면 어디서든 손쉽게 실행할 수 있다.jar 파일은 클라우드 환경에서도 손쉽게 배포할 수 있다.
- PaaS(Platform as a Service)
- • 대표적인 PaaS 제공 회사인 Cloud Foundry에서 제공하는
cf command line 툴을 사용하면 jar 파일을 손쉽게 배포할 수 있다.- IaaS(Infrastructure as a Service)
- jar 파일은
AWS Code Deploy,AWS Elastic Beanstalk,AWS Container Registry같은 서비스를 이용해서 손쉽게 배포가 가능하다.- 또한, Microsoft의 클라우드 서비스인 Azure와 Google Cloud 역시 여러가지 Executable Jar 파일 배포 기능을 제공한다.

매번 새로운 커밋이 발생할 때마다 서버에 새로운 버전으로 업로드하고, 기존에 실행 중이던 프로세스를 종료한 후, 새로 업로드한 프로젝트를 실행하는 일련의 과정은 상당히 번거로운 작업이다.
CI/CD는 지속적 통합(Continuous Integration)과 지속적 배포(Continuous Deployment)의 약자로서, 소프트웨어 개발 프로세스를 혁신적으로 개선하는데 중요한 역할을 수행합니다. CI/CD를 통해 코드 변경 사항을 자동으로 빌드, 테스트 및 배포함으로써 개발 속도를 높이고 안정성을 확보할 수 있습니다. 이러한 자동화 방법론은 개발자가 수동으로 빌드와 배포 과정을 반복하지 않아도 되게 하여 많은 시간을 절약할 수 있습니다.
목표는 main 브랜치에 push가 발생하는 경우 자동으로 서버에 배포되도록 하는 파이프라인을 구축하는 것이다.
git add .
git commit -m "Commit message"
커밋 후에는 새로운 저장소를 생성 해준다.

생성이 완료되면 push 해준다.
#git remote add origin 저장소주소
git remote add origin git@github.com:ShanePark/ci-cd-example.git
git branch -M main
git push -u origin main
git remote add cicd https://github.com/LEEJaeHyeok97/ci-cd-example.git
git branch -M main
git push -u cicd main
푸쉬가 완료 되면 Github 저장소에서 코드 확인이 가능하다.

확인해보면, 따로 수정할 필요 없이 바로 사용 가능한 스크립트가 작성되어 있다.
바로 우측의 Commit changes.. 를 클릭해 저장.

main에 커밋
커밋과 동시에 CI 작업이 이루어진다. Actions에 들어가서 확인 해 보면 Status가 In Progress로 변경되어 있다.

나는 실패로 나와 있었다
다음과 같이 수정하니 In progress가 잘 떴다

그래도 오류가 나서
[에러노트] Execution failed for task ':test'. > There were failing tests.
build.gradle을 수정했더니
그래도 오류가 나서 검색을 해보니, mysql을 위한 세팅을 따로 더 해줘야 하는데
세팅이 더 필요하므로 잠시 중단하기로 한다.
결과적으로는 정상진행이 되면
커밋 할 때 마다 파이프라인이 자동으로 진행된다.
1~2초 간 서비스가 잠시 다운되는데 이를 피하기 위해서는 무중단 배포를 적용해주어야 한다.



좋은 글 잘 읽었습니다, 감사합니다.