Spring Boot 14

Repository 테스트 코드

테스트 코드 사용 이유 어플리케이션 개발을 하면서 기능이 올바르게 동작하는지 확인하려고 할 때 전체 어플리케이션을 동작시키는 것은 비효율적이고, 오류가 난다면 DB에 변화가 발생할 수 있습니다.위와 같은 이유로 테스트 코드로 확인을 하면서 개발을 해야합니다. 테스트 코드에도 어플리케이션의 전체 구조를 테스트하는 통합 테스트와 일부 구조를 테스트하는 단위 테스트 2개의 종류가 있습니다.예를 들어 Spring Boot로 어플리케이션을 개발할 때 Repository의 쿼리문이 제대로 동작하는지 확인하고 싶을 때는 통합 테스트가 아닌 단위 테스트로 기능을 확인해합니다. 단위 테스트 단위 테스트는 어플리케이션의 전체가 아닌 구조를 분리해 각각 테스트하는 방법입니다.Controller,Service,Reposito..

Spring Boot 2024.06.20

Swagger

Swagger가 필요한 이유 swagger는 api를 사용하는 사람들에게 제공하는 설명서입니다. 프론트 개발자는 api를 호출하고 데이터를 불러오는 일을 할 때 백엔드 개발자에게 요청을 어떻게 보내야하는지 응답의 종류는 무엇이 있는지를 매번 물어본다면 능률이 떨어질 것입니다. 다른 예로는 OpenAPI를 사용하는데 어떻게 사용하는지 나와있지 않다면 누구도 이용할 수 없을 것입니다. 위와같은 이유로 API 명세서를 만든다고 한다면 개발자는 요청변수와 응답값에 대한 설명을 작성하는 것도 반복적인 작업이 많아지기 때문에 Swagger를 사용하는 것으로 소스코드에서 명세서를 같이 작성해 반복적인 작업을 줄일 수 있습니다. Swagger는 API의 사용법과 Test할 수 있는 기능을 제공함으로써 API의 사용을 ..

Spring Boot 2024.03.14

Transaction

Transaction이란 Transaction이란 여러 Query를 하나의 작업으로 묶어주는 기능을 합니다. 예를 들어 비밀번호의 수정은 SELET, UPDATE 2개의 Query문이 모두 정상적으로 동작되야 하고 결제 서비스의 경우는 본인 계좌가 있는 DB에서 SELECT,UPDATE 와 상대방 계좌의 SELECT,UPDATE Query문이 모두 정상적으로 실행되어야 결제 서비스가 완료됩니다. Transacton은 여러 Query문을 하나의 작업으로 묶어서 실행 중 하나의 Query문이라도 동작되지 않는다면 서비스 전체의 문제가 발생하는 것을 해결하는 방법입니다. Transaction와 영속성 컨텍스트 Transaction의 원리를 이해하기 위해서는 JPA의 영속성 컨텍스트에대해 알아야합니다. 이전에 ..

Spring Boot 2024.02.14

Test 코드

Test 코드 사용 이유 제가 개발 공부를 시작한 시점에 Test코드를 작성하면서 개발하라는 말을 들었을 때 그냥 Application을 실행해서 확인하면 되는데 굳이? 라는 생각으로 Test Code를 작성하지 않고 개발을 했었습니다. 처음엔 Application이 단순하기 때문에 상관없지만 사용하는 기술 Stack이 늘어나고 MSA구조의 Application을 개발하면서 APplication 서버를 한번 실행할 때 다른 서버들도 실행되야하고 특정 API 사용 전에 준비해야하는 메서드들도 실행 해야하는 등의 자원소모가 많아지면서 Test 코드가 중요한 이유를 알게되었습니다. Test Code란 Test Code란 실제 Applicationd을 실행하기 전에 비즈니스 로직이 제대로 작동되는지를 확인하기 ..

Spring Boot 2024.01.27

ObjectMapper

ObjectMapper가 필요한 이유 Data를 받고 주는 형식은 정말 다양합니다. Json으로 받고 Java의 객체로 줄 때도 있고 반대인 경우도 있습니다. 이 때 Json형식의 Data를 Java의 객체로 매핑시키거나 Java객체의 Data를 Json으로 매핑시켜야합니다. 일반적으로 가장 많이 사용하는 매핑 방식은 Controller layer에서 @RequestBody를 사용해서 Json Data를 Java의 객체 형태로 매핑시키는 것입니다. 이 외에도 매핑 방식으로는 JsonArray & JsonObject를 사용해서 Json Data의 Key, Value값을 객체에 직접 매핑시키는 방식도 있습니다 이 글에서 소개해드릴 방법은 Jackson 라이브러리에 있는 ObjectMapper를 사용하는 방법..

Spring Boot 2024.01.27

리액티브 프로그래밍

리액티브란 리액티브 프로그래밍은 비동기적인 데이터 처리를 통해 더 높은 성능과 효율성을 제공하는 프로그래밍입니다. 리액티브 프로그래밍의 특징으로는 1. 선언형 프로그래밍 2. 비동기적 3. 논 블로킹 동기 VS 비동기 동기란 순서가 보장되는 것을 의미합니다. 비동기는 반대로 순서가 보장되지 않는다는 것입니다. 에를 들어 Client들이 순차적으로 요청을 보냈을 때 Client중 첫번째로 요청을한 Client가 가장 빨리 응답을 받는 것이 동기이고, 요청 처리에 시간에따라 세번째, 네번째와 같은 순서로 응답이 오는 것이 비동기입니다. 블로킹 VS 논 블로킹 블로킹이란 하나의 작업이 끝나기 전까지 기다리는 것이고, 논 블로킹은 하나의 작업의 결과를 기다리지 않고 다른 작업을 하는것을 의미합니다. 예를 들어 ..

Spring Boot 2024.01.15

Validation

Validation이란 Validation 기능은 검증을 하는 기능입니다. 우선 사용자의 요청이 처리되는 순서를 알아야 합니다 Client Request(JSON) => Object Mapper => Object(request DTO) => Service Logic =>Object(response DTO) => Object Mapper => Response(JSON) Object Mapper를 통해 JSON 형태의 Request(요청이 POST라고 가정)가 Object로 변환됩니다. 하지만 이 때 Request가 잘못된 형식으로 온다면 Service Logic에서 잘못된 형식을 처리하는 부분을 만들어야 합니다. 그런데 Spring에서 각 Code에 한가지의 기능을 정의하고 부가적인 기능은 따로 정의하는 ..

Spring Boot 2024.01.09

RestController

Rest란 Rest란 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미합니다. 자원의 상태란 Data입니다. 즉, 자원의 이름으로 Data를 요청하고 응답하는 것을 말합니다. Controller vs RestController 지금까지 URI를 통해 자원을 이름으로 구분해 요청응답을 해왔는데 차이점이 무엇일까요 차이점은 응답형태에 있습니다. Controller 어노테이션을 사용하면 사용자에게 응답을 해주는 형태가 HTML파일의 형태입니다. 즉, 서버에서 응답을 해줄 때 서버에 저장되어있는 HTML파일을 사용자에게 꺼내주는 방식입니다. RestController는 응답의 형태가 Data뿐입니다. 즉, HTML파일이 아닌 사용자가 요청한 Data를 전달하는 것입니다. 하지만 @Contr..

Spring Boot 2024.01.07

Controller

Controller란 Controller란 Spring 어플리케이션의 구조중 개발자가 정의한 코드에서 사용자의 요청을 처음으로 받는 부분입니다. Controller의 역할은 간단하게 사용자의 요청을 구분하는 것입니다. 요청을 구분하는 방법은 URI를 통해 구분합니다. 사용자가 버튼을 누르면 HTML코드에 URI가 작성되어있습니다. 그런 뒤 해당 요청이 Controller에 전달되고 Controller에서 어떤 Service 클래스에 전송할지 결정합니다. Controller 구현 @Controller @Controller 어노테이션을 클래스에 선언하면 해당 클래스를 Controller로 사용하겠다는 것입니다. @Controller는 다수의 어노테이션을 묶어놓은 형태입니다. 그중 @Component가 포함되..

Spring Boot 2024.01.07

Spring MVC 패턴

MVC가 필요하 이유 MVC란 MVC 패턴이라는 디자인 패턴입니다. Application을 개발할 때 Model / View / Controller로 3가지로 분리해서 개발하는 것입니다. 먼저 MVC패턴이 필요한 이유를 설명하기 위해 Application의 동작과정을 살펴보겠습니다. 1. Client(User)의 요청(Request) Client는 웹/앱을 사용해 서비스를 제공 받을 때 항상 요청을 하고 요청 사항에 따라 사용자가 원하는 데이터를 보여주고 추가하는 것이 웹 서비스의 전부입니다. 예를 들어 사용자가 로그인 버튼을 누른다면 로그인 요청을 처리하기 위해 서버의 DB에서 해당 아이디와 비밀번호가 일치하는지 확인하는 작업을 수행한 뒤 사용자에게 로그인을 한 상태의 페이지를 제공합니다. 2. Cli..

Spring Boot 2024.01.05