본문 바로가기

Spring/Spring-detail47

유효성 검사(Validation) 유효성 검사 / 데이터 검증 (Validation) - 서비스의 비즈니스 로직이 옳바르게 동작하기 위해 사용되는 데이터에 대한 사점 검증하는 작업 - 데이터의 검증은 여러 계층에서 발생 - 데이터에 대해 의도한 형식의 값이 제대로 들어오는지에 대해 체크하는 과정 일반적인 Validation 은 문제가 많았다. 어플리에킹션 전체적으로 분산이 되어있었고, 코드의 중복이 심하고, 비즈니스 로직에 섞여 추적이 어려웠다. 이런 문제를 해결하기 위해 Bean Validation 프레임워크가 제공되었다. 어노테이션을 통해 다양한 데이터를 검증할 수 있다. 어노테이션 설명 @Size 문자의 길이 조건 @NotNull null 값 불가 @NotEmpty @NotNull + "" 값 불가 @NotBlank @NotEmpt.. 2022. 9. 21.
Logback 설정 + 테스트 - 로그에 특정 레벨을 설정할 수 있다. 1. Trace 2. Debug 3. Info 4. Warn 5. Error 로깅을 하는 이유? - 실운영과 테스트 상황에서 각각 다른 출력 레벨을 설정하여 로그를 확인 가능 - 출력 방식에 대해 설정가능 - 설정 파일을 일정 시간마다 스캔하여 어플리케이션 중단 없이 설정 변경 가능 - 별도의 프로그램없이 자체적으로 로그 압축 지원 - 로그 보관 기간 설정 가능 설정방법 ( xml 파일 ) - logback-spring.xml 파일 참조하는 것이 일반적 appender : Log의 형태 및 어디에 출력할지 설정하기 위한 영역 - ConsoleAppender : 콘솔에 로그를 출력 - FileAppender : 파일에 로그를 저장 - RollingFileAppend.. 2022. 9. 21.
테스트 코드의 개념에 대해 알아보자 (JUnit, TDD) TDD(Test Driven Development) 에 대한 간단 정리 - 테스트 주도 개발이라는 의미 - 테스트를 먼저 설계 및 구축 후 테스트를 톤과할 수 있는 코드를 짜는 것 - 애자일 개발 방식 중 하나. ** 코드 설계시 원하는 단계적 목표에 대해 설정하여 진행하고자 하는 것에 대한 결정 방향의 갭을 줄이고자 함. ** 최초 목표에 맞춘 테스트를 구축하여 그에 맞게 코드를 설계 -> 적은 의견 충돌을 기대할 수 있다. 목적 - 코드의 안정성을 높일 수 있다 - 기능을 추가하거나 변경하는 과정에서 발생할 수 있는 사이드이펙트를 줄일 수 있다. - 해당 코드가 작성된 목적을 명확하게 표현할 수 있다 JUnit 이란? - 단위 테스트(Unit Test)를 위한 도구를 제공 단위테스트 : 코드의 특정 .. 2022. 9. 15.
ORM 이란 무엇일까? ORM ( Object Relational Mapping ) - 어플리케이션의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 의미 ORM 의 장점 1. ORM을 사용하면서 데이터베이스 쿼리를 객체지향적으로 조작할 수 있다. - 쿼리문을 작성하는 양이 줄어들어 개발 비용이 줄어든다 - 객체지향적으로 데이터베이스에 접근할 수 있어 코드의 가독성을 높인다. 2. 재사용 및 유지보수가 편리하다 - ORM 을 통해 매핑된 객체는 모두 독립적으로 작성되어 재사용이 용이하다 - 각 클래스로 나뉘어져 있어 유지보수에 편리하다. 3. 데이터베이스에 대한 종속성이 줄어든다 ORM 의 단점 1. ORM 만으로는 온전한 서비스를 구현하기에 한계가 있다. - 복잡한 서비스는 직접 쿼리를 구성해야 한다. - 설계.. 2022. 9. 15.
Lombok 알고 사용하자! Lombok - 반복되는 메서드를 어노테이션을 사용하여 자동으로 작성해주는 라이브러리 - 일반적으로 VO, DTO, Model, Entity 등의 데이터 클래스에서 자주 사용한다 대표적으로 사용하는 어노테이션은 아래와 같다. 종류 의도 @Getter get 메서드를 자동으로 생성 @Setter set 메서드를 자동으로 생성 @NoArgConstructor 파라미터가 없는 생성자를 생성 @AllArgConstructor 모든 필드값을 파라미터로 갖는 생성자를 생성 @RequiredArgsConstructor 필드값 중 final 인 값을 갖는 생성자를 생성 @ToString toString 메서드를 자동으로 생성 @EqualsAndHashCode equals , hashCode 메서드를 자동으로 생성 - .. 2022. 9. 15.
API를 작성하는 다양한 방법 @RestController - @Controller + @ResponseBody 가 결합된 어노테이션 - 컨트롤러 클래스 하위 메서드에 @ResponseBody 어노테이션을 붙이지 않아도 문자열과 JSON 등을 전송 가능 - View를 거치치 않고 HTTP ResponseBody에 직접 Return 값을 담아서 보낸다. @RequestMapping - MVC의 핸들러 매핑을 위해서 사용한다. - 클래스와 메소드의 RequestMapping 을 통해URL을 매핑하여 경로를 설정 및 해당 메서드 처리가능 method : GET, POST , DELETE , PUT, PATCH 스프링 4.3 부터 메소드를 지정하는 방식을 간단하게 사용가능하다. - @GetMapping - @PostMapping - @Del.. 2022. 9. 15.
디자인 패턴 간략히 알아보기 디자인 패턴이란, 특정 문맥에서 공통적으로 발생하는 문제에 대해 쓰이는 재사용 가능한 해결책 목적으로 일정한 패턴을 나타낸 것. 대표적으로 GoF 에서 제시한 23개의 패턴이 있다. 프로젝트를 설계 및 구현 시 필요한 디자인패턴이 있다면 검색 후 사용하도록 하자. 생성패턴 - 객체의 생성과 관련 - 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 최소화 할 수 있도록 유연성 제공 생성패턴 의도 추상 팩토리(Abstarct Factory) 구체적인 클래스를 지정하지 않고 인터페이스를 통해 연관되는 객체를 묶음 빌더(Builder) 객체의 생성과 표현을 분리하여 객체를 생성 팩토리 메소드(Factory Method) 객체 생성을 서브클래스로 분리하여 위임(캡슐화) 프로토타입(Prototype) 원본.. 2022. 9. 14.
빌드 관리 도구 ( Gradle / Maven ) 프로젝트에서 필요한 xml, proerties, jar 파일들을 자동으로 인식하여 빌드해주는 도구이다. 소스 코드를 컴파일, 테스트 등을 하여 실행가능한 앱으로 빌드한다. 프로젝트 정보 관리, 테스트 빌드, 배포 등의 작업을 진행한다. 외부 라이브러리를 참조하여 자동으로 다운로드 및 업데이트의 관리를 해준다. 자바의 대표적인 빌드 도구로는 Maven, Gradle 이 있다. Gradle VS Maven Gradle 에 비해 Maven 이 점유율은 높지만, 점차 역전하고 있다.Gradle에 비해 Maven 의 성능이 떨어진다. Maven에 비해 Gradle이 대규모 프로젝트에서의 성능이 좋다 -> 간결하다. Maven : pom.xml / Gradle : build.gradle 메이븐 , 그레이들 모두 각.. 2022. 9. 14.
좋은 객체 지향 설계의 5가지 원칙(SOLID) SRP : 단일 책임 원칙 ( Single Responsibility Principle) OCP : 개방-폐쇄 원칙 ( Open/Closed Principle) LSP : 리스코프 치환 원칙 ( Liskov Substitution Principle ) ISP : 인터페이스 분리원칙 ( Interface Segregation Principle ) DIP : 의존관계 역전 원칙 ( Dependency inversion priciple ) SOLID 란 객체 지향 프로그램을 하면서 지켜야하는 5대 원칙이다. 해당 원칙을 지키면 시간이 지나도 변경이 용이하고, 유지보수와 확장이 쉬운 소프트웨어를 개발하는데 도움이 된다. SRP 단일 책임 원칙 - 한 클래스는 하나의 책임(기능)만 가져야 한다. - 클래스를 변경.. 2022. 9. 14.