[Spring] 테스트 / JUnit / Mockito / 스프링의 계층별 단위테스트(Controller, Service, Repository)
·
Spring
이번에 컨트롤러 테스트 코드를 작성해보면서 정리한 것들! 1. 테스트테스트 : 프로그램을 실행했을 때 요구사항에 맞춰 동작하는지 검증하는 행위범위에 따른 분류단위 테스트 (Unit Test)통합 테스트 (Integration Test)E2E 테스트 (End-to-End Test) 1.1. 단위 테스트하나의 클래스와 메서드 단위로 비즈니스 로직 검증외부 의존성 없이, 하나의 기능/메서드가 정상 동작하는지 확인TDD에서의 테스트케이스는 주로 단위 테스트 작성을 의미자동화되어 사용 (CI; Continuous Integration)Java에서는 주로 JUnit5를 사용하여 작성모듈이 의존성을 가지는 경우, 의존 모듈을 Mock이라는 가짜 객체로 만들어 행동 및 결과값이 나오도록 정의한 후 테스트 가능@Te..
[Spring] 스프링의 기본적인 예외처리 / 예외처리 방법
·
Spring
1. Spring의 기본적인 예외 처리 방식Spring은 기본적으로 에러 처리를 위한 BasicErrorController가 구현되어 있다별도의 설정 없다면, /error로 에러 요청 다시 전달하도록 WAS 설정되어 있다.BasicErrorController로 에러 처리 요청을 전달WAS(tomcat) -> 필터 -> 서블릿(디스패처 서블릿) -> 인터셉터 -> 컨트롤러-> 컨트롤러(예외발생)-> 인터셉터 -> 서블릿(디스패처 서블릿) -> 필터 -> WAS(tomcat)-> WAS(tomcat) -> 필터 -> 서블릿(디스패처 서블릿) -> 인터셉터 -> 컨트롤러(BaicErrorController) 1.1. BasicErrorController@RequestMapping("${server.error...
[Spring] 스프링의 디렉토리 구조 : 계층형 / 도메인형
·
Spring
1. 스프링 디렉토리 구조스프링 디렉토리 구조를 설계하는 방식은 크게 계층형 / 도메인형 2가지가 있다 1.1. 계층형src/main/java/com/example/project/├── controller├── service├── repository├── dto├── entityMVC를 기반으로 각 계층을 대표하는 directory구조가 직관적이라 이해가 쉬움모든 도메인이 같은 디렉토리에 섞여 있음하나의 디렉토리에 많은 class 파일이 모여 모듈 단위 분리가 어려움 1.2. 도메인형src/main/java/com/example/project/├── DemoApplication.java├── domain│ │ ├── coupon│ │ │ ├── controller│ │ │ ├..
[Spring] Thread와 Java / Spring에서의 Multi-Thread 구현
·
Spring
0. 동기 / 비동기 & 블로킹 / 논블록킹동기 / 비동기 : 요청한 작업에 대해 완료 여부를 신경 써서 작업을 순차적으로 수행할지 아닌지 관점블로킹 / 논블록킹 : 현재 작업이 block(차단, 대기) 되느냐 아니냐에 따라 다른 작업을 수행할 수 있는지 관점 0.1. 동기(Synchronous) vs 비동기(Asynchronous)요청한 작업에 대해 완료 여부를 신경 써서 작업을 순차적으로 수행할지 아닌지전체적인 작업에 대한 순차적인 흐름 유무동기 : 요청한 작업에 대해 완료 여부를 따져 순차대로 처리하는 것요청한 작업에 대해 순서가 지켜진다비동기 : 요청한 작업에 대해 완료 여부를 따지지 않기 때문에 자신의 다음 작업을 그대로 수행요청한 작업에 대해 순서가 지켜지지 않을 수 있다느린 작업(like I..
[Git] Git 브랜치 전략 : Git-Flow, Github-Flow, Gitlab-Flow
·
Git
0. PR (Pull Request) 과정git clone : github의 저장소 복제브랜치 생성 및 이동소스코드 작성 및 변경git add : 작업 내용을 스테이징 영역에 저장git commit : 변경 사항 저장git push : 원격 저장소에 소스코드 올림Pull Request : fork한 기존 저장소에 소스코드 반영 1. Git Flow1.1. Branchmaster : 기준이 되어 제품을 배포하는 브랜치develop : 개발 브랜치개발자들이 이 브랜치로 각자 작업한 기능을 Mergefeature : 단위 기능을 개발하는 브랜치기능 개발이 완료되면 develop 브랜치에 Mergerelease : 배포를 위해 master로 보내기 전, 먼저 QA(품질검사)를 하기 위한 브랜치hotfix :..
[Web] REST API란?
·
Web
1. REST💡 REpresentational State Transfer등장 배경 : 복잡한 네트워크 통신(ex. 인터넷)과 멀티 플랫폼(ex. 다양한 브라우저와 모바일 디바이스 등)의 등장에 따라 이를 관리하기 위한 지침으로 만들어졌다 1.1. REST 란?소프트웨어 프로그램 아키텍처의 한 형식HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)를 명시하고HTTP Method (POST, GET, PUT, DELETE, PATCH 등)을 통해해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미Create : 데이터 생성 (POST)Read : 데이터 조회 (GET)Update : 데이터 수정 (PUT, PATCH)Delete : 데이터..
[DB] Redis란?
·
DB
1. Redis란?💡 REmote DIctionary Server 빠른 읽기 및 쓰기 성능을 제공하는 메모리 기반 오픈 소스 데이터베이스특징Key-Value 데이터 구조 기반다양한 데이터 구조 지원 (문자열, 리스트, 해시, 집합, 정렬된 집합 등)인메모리 데이터 저장소 ****: 메모리에 데이터를 저장NoSQL 데이터베이스 중 하나영속성싱글 스레드로 동작명령어를 이벤트 루프(Event Loop) 방식으로 처리명령어를 Event Queue에 적재하고 싱글 스레드로 하나씩 처리메모리를 사용하기 때문에 싱글 스레드로도 빠른 처리 가능멀티 스레드의 동시성 문제 피하기 가능 : Context Switch, Deadlock 발생 X여러 대의 서버 구성 가능 (Master - Slave)단점데이터 영속성복잡한 쿼..
[DevOps] 오픈시프트(OpenShift)와 쿠버네티스(Kubernetes)
·
DevOps
1. Kubernetes (k8s)1.1. 쿠버네티스란?❓ 컨테이너를 쉽고 빠르게 배포 및 확장하고, 관리를 자동화해주는 오픈소스 플랫폼컨테이너 오케스트레이션 툴오케스트레이션 : 배포, 관리, 확장, 네트워킹을 자동화컨테이너 수가 많아지면 관리 / 운영이 어려움 → 다수의 컨테이너를 관리 / 조율하는 시스템 필요컨테이너의 생성, 소멸, 시작 및 중단 시점 제어, 스케줄링, 로드 밸런싱, 클러스터링 등 모든 과정 관리특징컨테이너화된 애플리케이션 배포컨테이너로 패키징된 애플리케이션을 여러 대의 컴퓨터 / 클라우드 인프라에 쉽게 배포 가능자동 스케일링 (Auto Scaling)애플리케이션 부하에 따라 자동으로 서버를 늘리거나 줄이기 가능트래픽 증가에 대처 용이고가용성 (High Availability)애플리케..
[DevOps] 컨테이너(Container)와 도커(Docker)
·
DevOps
1. Container1.1. 컨테이너란?❓ 실행 환경에 독립적으로 애플리케이션을 실행하는 기술운영체계 수준의 격리 기술애플리케이션 구동에 필요한 라이브러리, 종속 항목을 패키징장점가벼움 : VM과 달리 Guest OS가 없어 크기가 작음탄력성 : 리눅스, 윈도우, 가상머신 등 어느 환경에서나 구동 가능유지 관리 효율: 운영 체제 커널이 하나 → OS 수준 업데이트 / 패치를 한 번만 수행하여 모든 컨테이너에 적용 가능 1.2. 컨테이너와 가상머신(VM)의 차이컨테이너 (Container)하나의 Host OS그 위에서 각각의 독립적인 프로그램처럼 관리 및 실행확장성이 좋고 빠름불필요한 OS 만들기 및 인프라 독립적으로 나눌 필요 없음가상머신 (Virtual Machine)각 VM에 독립적인 Guest O..
[DevOps] Jenkins란?
·
DevOps
0. 젠킨스 (Jenkins)오픈 소스 CI / CD (지속적 통합 / 지속적 배포) 도구소프트웨어 개발 프로세스의 빌드, 테스트, 배포 등을 자동화 및 관리다양한 플러그인과 함께 여러언어와 프레임워크 지원 1. 젠킨스의 특징마스터 / 슬래이브 구조Master (Controller) : slave를 관리하고, 작업 스케줄링, slave 모니터링을 포함한 다양한 작업 관리Slave (Agent) : 실제 파이프라인(빌드, 테스트 등) 작업을 수행다양한 환경에서 작동작업을 분산시켜 부하를 감소시키는 역할로컬 / 클라우드 컴퓨터를 통해 Master에 연결될 수 있어 다양한 유연성 제공파이프라인 스크립트Jenkinsfile : Grooby 언어로 작성된 스크립트 파일소스코드와 함께 버전관리 시스템에 저장각 단..