목록IT/Spring (10)
잡동사니
안녕하세요. yeTi입니다.오늘은 스프링 프레임워크에서 트랜젝션을 관리하는 방법을 간략하게 언급하고 트랜젝션을 사용하지 않는 상황과 읽기 전용 트랜젝션을 사용할 때의 장단점을 말해보고자 합니다.스프링프레임워크는 무엇일까요?스프링 프레임워크는 엔터프라이즈 애플리케이션 개발을 간편하게 하기 위해 만들어진 강력한 프레임워크로 다양한 모듈과 기능을 제공합니다. 다음은 스프링 프레임워크의 주요 특징과 구성 요소입니다.주요 특징경량성: 스프링은 경량 프레임워크로 필요한 기능만 선택하여 사용할 수 있습니다. 만들어진 때에는 경량이었지만 요즘에는 경량이라고 말하기는 부적절한 면이 있습니다.의존성 주입(Dependency Injection): 스프링은 객체 간의 의존성을 설정 파일이나 어노테이션을 통해 관리합니다.AOP..
안녕하세요. yeTi입니다. 오늘은 종종 헷갈리는 서비스 레이어의 테스트를 바라보는 관점에 대해 말해보고자 합니다. 발단 Spring 으로 서버 어플리케이션의 구조를 정의하면 많은 경우 Controller - Service - Repository(DAO) 형식의 layered architecture 를 보게 됩니다. 이러한 구조에서 테스트 환경을 구성하게 되면 테스트 효율성을 높이기 위해 slice test 를 하게 됩니다. 여기서 개발자들의 의문이 생깁니다. Service 테스트를 하려고 하는데요. 데이터가 잘 저장되는지는 어떻게 확인하면 될까요? 이 질문은 테스트를 위한 두 가지 관점이 혼재해서 만들어졌다고 생각합니다. 사용자 관점 우리가 흔하게 정의하는 API만 사용자라는 대상이 있는게 아니라 클래..
안녕하세요. yeTi입니다. 오늘은 Spring Framework으로 http request를 처리할때 request string을 enum으로 바인딩하는 방법을 보면서 Spring에서 제공하는 바인딩 서비스들을 확인해보겠습니다. 이전에 작성한 스프링 추전 강좌, 스프링 프레임워크 핵심 기술 내용 정리 및 후기 에도 관련 내용이 있습니다. Converter 활용 Spring 에서는 모델을 바인딩하기 위해 Converter interface를 제공합니다. 그리고 http request가 들어오면 각 컨트롤러들은 BindingInitializer에 등록된 converter 들을 가지고 string 을 모델로 변환해줍니다. 이를 활용하여 http get 요청시 Path variable와 Request para..
안녕하세요. yeTi입니다. 오늘은 Mybatis를 사용하면서 결괏값을 받은 Object의 값이 상이하게 맵핑되는 현상을 해결한 내용을 공유하고자 합니다. 현상 MyBatis에서 sqlMapper를 활용하여 결괏값의 Object 맵핑 시 object의 필드에 예상과는 다른 값으로 맵핑되는 현상이 발견되었습니다. Mapper.xml TestEntity.java @Getter @Setter @Builder public class TestEntity { private Integer id; private String name; private String nickname; ... }Result -- SQL 결과 id = 10 nickname = yeti name = null -- Instance 값 TestEnt..
안녕하세요. yeTi입니다. 오늘은 백기선님의 스프링 강좌중 하나인 예제로 배우는 스프링 입문 의 완주 후기를 공유하려고 합니다. 강의 수강 계기 백기선님의 유튜브 동영상을 보다가 스프링을 제대로 공부했는지 5분안에 확인하는 방법 을 봤는데요. 문제가 이거였습니다. 외부 라이브러리를 사용하는 코드가 포함된 함수를 테스트하려면 어떻게 해야하는가? 단, Mock framework을 사용하지 않는다. 그래서 전 외부 라이브러리를 상속받은 mock 클래스를 구현하여 테스트 코드에 활용하는 것을 생각했습니다. (@SpyBean @MockBean 의도적으로 사용하지 않기 - 기억보단 기록을 참고) 하지만 백기선님의 해결책은 스프링에서 제공하는 IoC와 PSA를 활용해서 다음과 같이 제시합니다. 외부 클래스를 랩핑할..
안녕하세요. yeTi입니다. 오늘은 Spring Framework에 대해 알아보겠습니다. Spring Framework Overview에 따르면 스프링은 자바 엔터프라이즈 어플리케이션을 가장 쉽게 만들 수 있도록 해준다고 합니다. 즉, 많은 사용자와 많은 데이터, 많은 비즈니스 로직을 처리하는 기업용 어플리케이션을 개발함에 있어서 보다 쉽게 개발할 수 있도록 제공해다는 것입니다. 이를 위해서 스프링 프레임워크는 Core Technologies, Testing, Data Access, Web frameworks(Web on Servlet, Web on Reactive), Integration, Language Support를 제공합니다. 스프링 프레임워크하면 가장 많이들 언급하는 의존성 주입이나 AOP 등..
인프런의 스프링 부트 개념과 활용 - 백기선을 수강하면서 내용을 정리하고 간단한 후기를 남깁니다. 스프링 부트 시작하기 Spring Boot Reference Documentation의 Introducing Spring Boot에 따르면 스프링 부트는 스프링기반 독립적인 어플리케이션을 쉽게 만들 수 있도록 지원한다. 스프링이나 3th 파티 라이브러리들을 최소한의 노력으로 사용할 수 있다. 스프링 부트의 목적은 다음과 같다. 스프링 개발자가 빠르고 폭넒게 개발할 수 있도록 제공한다. 기본적으로 제공하는 설정을 빠르게 수정할 수 있다. Embedded 서버나 보안, 메트릭 등과 같은 비기능적 요소들을 폭넒게 제공한다. 더 이상 XML 설정이나 코드 generation을 하지 않는다. 스프링 부트 원리 의존성..
안녕하세요. yeTi입니다. 오늘은 Maven과 Gradle을 비교해보려고 합니다. Gradle vs Maven Comparison - Gradle을 기반으로 이해해보고자 합니다. 유연성 구글은 안드로이드의 공식 빌드툴로 Gradle을 선택했습니다. 왜 구글은 Gradle을 선택했을까요? 빌드 스크립트가 코드라서? 아닙니다. Gradle이 쉽게 확장할 수 있도록 설계됐기 때문입니다. Gradle과 Maven 모두 configuration을 할 수 있도록 제공합니다. Maven은 커스터마이징하기 좀더 까다롭고 불가능한것도 있습니다. 반면에 Gradle은 어떤 요구사항이든 받아들일 수 있을만큼 유연하게 구성할 수 있습니다. Performance 큰 프로젝트나 많은 디펜던시를 가지고 있는 프로젝트에 대한 빌드..
안녕하세요. yeTi입니다. 오늘은 Spring Framework에서 Transaction을 관리하는 방법에 대해 알아보겠습니다. Spring Framework Reference와 Spring Javadoc을 참고해서 작성했습니다. 스프링 프레임워크에 대한 전체적인 개념을 알고 싶으시면 Spring Framework 개념 이해하기를 확인해보세요. 개요 스프링 프레임워크는 트랜젝션 관리에 다음과 같은 장점을 가지고 있습니다. Java Transaction API (JTA), JDBC, Hibernate, and the Java Persistence API (JPA)와 같은 다양한 형태의 트랜젝션 API를 지원합니다. 선언적 트랜젝션 관리를 지원합니다. JTA처럼 복잡하지 않은 프로그래밍 방식의 트랜젝션 관..
인프런의 스프링 프레임워크 핵심 기술 - 백기선을 수강하면서 내용을 정리하고 간단한 후기를 남깁니다. 스프링 프레임워크에 대한 전체적인 개념을 알고 싶으시면 Spring Framework 개념 이해하기를 확인해보세요. IoC 컨테이너와 빈 IoC란 Inversion of Control의 약어로 의존 관계 주입(Dependency Injection) 이라고도 하며 어떤 객체를 사용할 때 직접 만들어서 사용하는 것이 아니라 주입받아 사용하는 것을 말한다. 직접 사용의 예 BookRepository repository = new BookRepository(); BookService service = new BookService(repository); IoC의 예 @Autowired BookRepository ..