분류 전체보기 120

Junit In Action - TDD를 위한 테스트 원칙, 도구 및 활용 Review - 소프트웨어 테스트 원칙과 테스트 품질 ( 1/2 )

단위테스트를 하는 이유단위 테스트의 핵심 목표는 애플리케이션이 예상대로 작동하는지 확인하고 사전에 버그를 찾아내는 것이다.단위 테스트가 가지는 장점은 다음과 같다. 장점 기능 테스트만 수행했을 때보다 테스트 커버리지를 높일 수 있다 → 기능 테스트로는 수행하기 어렵거나 불가능한 오류 조건에 대해서도 쉽게 테스트할 수 있다. 팀 생산성이 향상된다 → 다른 컴포넌트가 준비될 때까지 기다리지 않고도 질적으로 우수한 코드를 전달할 수 있다. 기능 테스트는 어느 정도 준비가 되어야 실행 가능한 것과 대비된다 소스를 리팩터링 하거나 변경할 때 개발자에게 확신을 준다 → 어디에 문제가 생기는지 쉽게 알 수 있고 애플리케이션을 일일이 디버깅하지 않아도 된다애플리케이션 기능 구현에 도움을 준다 → 단위 테스트가 너무 길..

Dev/TDD 2024.07.01

Junit In Action - TDD를 위한 테스트 원칙, 도구 및 활용 Review - Junit4와 Junit5 비교

Junit4에서 Junit5로 전환하기Junit5는 새로운 아키텍처를 적용한 새로운 패러다임으로  Junit Vintage 테스트 엔진을 활용하여 Junit4에서 Junit5로 전환할 수 있다.Junit Jupiter와 관련한 모든 클래스와 애노테이션은 org.junit.jupiter패키지에서 확인할 수 있고, org.junit 패키지에 Junit4와 관련한 모든 클래스와 애노테이션이 있으므로 클래스 패스에 Junit 5 Jupiter와 Junit4가 모두 존재하더라도 충돌이 발생하지 않는다. ( 예를 들면, Junit4의 @Test 애노테이션은 org.junit.Test에 속해 있고 Junit5의 @Test 애노테이션은 org.junit.jupiter.api.Test에 속해 있어 충돌이 발생하지 않고 ..

Dev/TDD 2024.06.26

Exception - 에러와 예외, Unchecked 와 Checked

에러와 예외프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이러한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 표현한다. 컴파일 에러(compile error) : 컴파일할 때 발생하는 에러런타임 에러(runtime error) : 프로그램의 실행도중에 발생하는 에러논리적 에러(logical error) : 컴파일도 잘되고 실행도 잘 되지만 의도한 것과 다르게 동작하는 것소스 코드를 컴파일하면 컴파일러가 소스코드에 대해 오타나 잘못된 구문, 자료형 체크 등의 기본적인 검사를 수행하여 오류가 있는지를 알려 준다. 하지만 실행도중에 발생하는 런타임 에러는 언제나 발생할 수 있다.  런타임 에러를 방지하기 위해서는 프로그램의 실행도중 발생할 수 있는 모든 경우..

Dev/Java 2024.06.15

Junit In Action - TDD를 위한 테스트 원칙, 도구 및 활용 Review - Junit 5 아키텍처 개요 ( Junit4와 어떻게 달라졌을까? )

소프트웨어 아키텍처의 개념과 중요성 소프트웨어 아키텍처란 소프트웨어 시스템의 기본 구조를 말한다. Junit 5의 아키텍처 또한 Junit4의 단점을 극복하기 위해 만들어졌다. 아키텍처가 전체 시스템에 미치는 중대한 영향을 이해하기 위해 간단한 두 가지 이야기를 소개한다. ( 책 리뷰하면서 핵심만 추리는게 좋다고 생각했는데 찰떡인 비유라 글을 남겨 놓고 싶어서 포함하게 되었다. Junit5의 구조 내용은 하단에 기재했으니 참고 바란다. )  첫 번째 이야기 : 전화번호부전화번호부를 만들어 출간하는 두 회사가 있다.   A, B회사 모두 비슷한 규격과 가격을 가진 전화번호부를 출간했다. 고객들은 두 제품을 모두 같은 가격에 구매 해서 사용했기 때문에 어떤 전화번호부가 더 좋은지에 대해 알 수 없었다. 그러..

Dev/TDD 2024.06.14

Junit In Action - TDD를 위한 테스트 원칙, 도구 및 활용 Review - 핵심 애노테이션 ( 2/2 )

개발환경IDE :  intelliJ FrameWork : springboot 3.xLaunguage : java 17TestTool : Junit5   예제 소스 링크   HamcrestMatcher 사용하기Hamcrest 라이브러리는 테스트 프레임워크는 아니지만, 간명한 매치 규칙을 선언하는데 도움을 준다. 매치 규칙은 다양한 상황에 쓰일 수 있지만 특히 단위 테스트에서 유용하게 쓰일 수 있다. 매처(Matcher)는 제약(constraint) 혹은 술어(predicate)로 표현되는데 이것을 사용하여 테스트 메서드 안에 있는 복잡한 단언문을 간명하게 처리할 수 있다. 아래는 중복 조건을 검사하는 단언문을 assertThat을 통해 처리하는 예제이다. @Test @DisplayName("Ham..

Dev/TDD 2024.06.14

Junit In Action - TDD를 위한 테스트 원칙, 도구 및 활용 Review - 핵심 애노테이션 ( 1/2 )

개발환경IDE :  intelliJ FrameWork : springboot 3.xLaunguage : java 17TestTool : Junit5   예제 소스 링크   들어가기 전에  개발 방식을 TDD로 전환하면서 테스트 코드 작성 시 여러 난관에 부딪혔다. 공식 가이드를 보며 이것저것 시도해보기도하고, 구글링과 ChatGPT를 통해 예제 코드도 많이 봤고, Git에서 떠돌아다니는 오픈소스의 테스트코드들을 뜯어보며 어떻게 작성하는 게 좋을지에 대해 많은 고민을 했다.  처음에는 Mock이고 Stub이고 하는것들의 개념 없이 그냥 서비스 레이어의 메서드 단위로 테스트를 시작했다.  뭐가 뭔지도 잘 모르는 상태에서 단순히 그냥 '코드를 먼저 작성하는' 정도에 그쳤다.  특히 Controller 관련 코..

Dev/TDD 2024.06.14

JWT 부록, JWS/JWE/JWK

이전 포스팅은 여기로 2024.05.20 - [Dev/Etc] - JWT 란 무엇인가? - Session과 JWT 인증 방식의 비교 / 예제 코드 포함 ( feat. OAuth ) JWT 란 무엇인가 ? - Session과 JWT 인증 방식의 비교 / 예제 코드 포함 ( feat. OAuth )오늘 게시글은 인증 시 많이 사용하는 JWT의 기본 개념과 실제로 어떻게 구현하는지에 대한 내용을 정리해보고자 한다. 관련해서 OAuth 도 공유하면 좋을 것 같아서 함께 묶었다. 이전에 Swagger 사zigo-autumn.tistory.com   이전에 JWT를 정리하면서 궁금했던 점에 대해 따로 정리하는 게시글이다. 간단한 용어정리 정도니 자세한 JWT 내용은 위 게시글을 참고 바란다. JWT 관련 용어 JW..

Dev/Etc 2024.06.03

Record 로 DTO 생성하기

Record  란?Java14부터 도입된 클래스로 불변 데이터를 객체 간에 전달하는 작업을 간단하게 만들어주는 역할을 한다.Record를 사용하면 불필요한 코드를 제거할 수 있고, 적은 코드로도 명확한 의도를 표현할 수 있다.  Record의 특징 멤버변수는 private final로 선언한다.필드별 getter가 자동으로 생성된다.모든 멤버변수를 인자로 하는 public 생성자를 자동으로 생성한다.  (@AllAgrsConstructure과 유사하지만 생성자가 실행될 때 인스턴스 필드를 수행할 수 없다.)equals, hashcode, toString을 자동으로 생성한다.기본 생성자는 제공하지 않으므로 필요한 경우 직접 생성해야 한다.  Record로 바꿔보기 변경 전@Getter@NoArgsConst..

Dev/Java 2024.06.03

헥사고날 아키텍처(Hexagonal Architecture) 쉽게 알기

이전 MSA에 대해서 리뷰 했는데, 이번 게시글은 헥사고날 아키텍처다. 해당 아키텍처가 어떤 경우에 선택되어야 하는지 공유하면 좋을 것 같아서 글을 작성해 본다. 헥사고날에 대해 알기 전에, 전통적인 아키텍처에 대해 먼저 정리하고자 한다. 계층형 아키텍처(Layered Architecture) 가장 대중적으로 사용되는 전통적인 아키텍처로 비즈니스 로직, 데이터 액세스, 프레젠테이션 계층으로 구성된다. 일반적으로 많이 사용하는 repository(database, persistenece layer), service(domain layer), controller(presentation layer)를 생각하면 쉽다. 같은 목적의 코드들을 같은 계층으로 그룹화한 것으로, 역할과 관심사를 기준으로 계층을 분리한다..

Dev/Architecture 2024.05.29

왜 소프트웨어 프로그램 설계 시 MSA를 선택할까? - MSA : MicroService Architecture의 모든 것

오늘 포스팅할 주제는 MSA다.  요즘 IT회사에서 채용할 때 우대사항에 항상 들어가 있는 항목이기도 하다. 그렇다면 왜 MSA를 선택할까?마냥 MSA가 소프트웨어 설계관점에서 베스트일까?  MSA를 자세하기 알아보기 전에, 전통적으로 사용했던 모놀리식에 대해 알아보자. 모놀리식 아키텍처(MA:Monolithic Architecture)란?모놀리식 아키텍처는 애플리케이션 내의 모든 기능과 서비스가 함께 맞물려 단일 유닛으로 운영되는 것을 의미한다.  단일 유닛으로 운영된다는 것은 전체 애플리케이션이 단일 코드로 작성되어 단일 데이터베이스에 연결되는 것이다.이해하기 쉽게 쿠팡에서 사용했었던 모놀리식 아키텍처 구성도를 가져왔다. 초기 쿠팡의 서비스는 모놀리식 아키텍처로 구성되어 있었는데, 위 그림과 같이 하..

Dev/Architecture 2024.05.29