spring

스프링

Spring Transaction

트랜잭션?https://anythingis.tistory.com/171 [DB] 트랜잭션, 애플리케이션의 트랜잭션 제어트랜잭션이란 데이터를 저장할 때 단순히 파일에 저장해도 되지만, 데이터베이스에 저장하는 가장 큰 이유입니다. 트랜잭션은 그대로 번역하면 거래인데, 데이터베이스에선 하나의 거래를 안anythingis.tistory.com주로 DB에서 활용되는 개념이지만, 애플리케이션에서 데이터를 다루고 DB에 저장하기에, DB에서 커밋이 되거나 롤백 된 후 비즈니스 로직까지 연계된 로직을 처리하기 위해 스프링도 트랜잭션 기능을 제공합니다. 스프링 트랜잭션스프링은 다양한 DB 접근 기술과 같이 활용할 수 있습니다.JDBCpublic void accountTransfer(String fromId, String..

회고

Java(Spring)를 익힌 이유

최근 SSAFY에서 프로젝트 회고를 하며 Jenkins, Nginx 등 특정 기술을 사용한 이유를 정리할 기회가 있었습니다. 그러다 MySQL, Spring을 거슬러 웹 개발을 위한 언어로 JAVA를 선택한 이유를 떠올려봤습니다. 졸업프로젝트를 하며 비즈니스 로직 설계하는 백엔드에 흥미를 느꼈지만, 처음 접한 자바스크립트 + Express.js보다는 Java + Spring을 택했습니다. 전공자로서 자바 프로그래밍, 네트워크 프로그래밍 등의 수업에서 자연스럽게 노출되었고 대한민국 백엔드풀은 자바가 압도적이라 선택했습니다만 시장에서 이런 점유율을 차지할 수 있던 이유는 개발자가 서비스 자체에 집중해줄 수 있게 해줘서 인것 같습니다. 1. Write once, run anywhere를 위한 JVM으로 운영체..

스프링

[Spring] 자바 통신 인터페이스와 비동기 프로그래밍(feat: MVC, WebFlux)

백엔드개발자로 주로 클라이언트 요청을 받아 비즈니스 로직을 처리해 응답하는 부분을 처리하지만, 서버에서도 외부 API를 사용하는 등 Http 요청을 통해 정보를 얻는 경우도 필요합니다. 지금까지 진행한 프로젝트에서는 이 부분을 깊게 공부할 시간이 없어 모두 Spring이 제공하는 RestTemplate을 사용했지만 기반이 되는 부분을 조금 더 공부한 내용을 정리하기 위한 글입니다. RestTemplate Spring3.0부터 간편하게 동기식 Rest API 호출을 할 수 있게 해주는 클래스(Spring MVC 기반)입니다. JSON, XML, String 응답을 처리할 수 있고 Header와 Contetn-Type을 지정할 수 있습니다. Header, Content-Type 지정은 exchange()의 ..

개발로그

[Mybatis] JPA 고수인 내가 Mybatis 세계에선 뉴비?

사실 JPA 고수 아닙니다.   자바 백엔드 시작을 김영한님의 강의를 보고 시작한만큼 DB접근 기술을 JPA밖에 몰랐었고, 올해 초에 프로그래머스에서 진행한 단순 CRUD 구현을 그만 ! 스터디를 들으면서 JDBC Template를 써보긴했지만 스터디 커리큘럼을 따라가면서도 테이블 정의하는 것과 PrepareStatment로 쿼리짜는 게 귀찮아 DBA의 튜닝 쿼리를 빠르게 적용할 수 있겠다는 장점만 기억하는 것과 JPA를 쓰고 싶다는 생각만 했었던 것 같습니다. JPA를 한번 더 추상화한 스프링 데이터 JPA를 사용하면서 얼마나 많은 부분이 추상화된지 이론적으로 공부는 했지만 마이바티스를 다뤄보면서 직접 테이블 생성과 쿼리를 짜며 프로젝트를 진행하며 사용한 후기를 정리합니다. Mybatis-Spring ..

스프링

[Spring] Spring without Spring Boot

스프링부트로 스프링을 접해서 몰랐는데 레거시 스프링을 접하게 되면서 정말 스프링부트는 미쳤다는 걸 체감하고 있다. 서블렛 컨테이너 등록 VS 내장 서블렛 컨테이너 레거시는 별도의 서블렛 컨테이너(웹 애플리케이션 서버)를 미리 준비하고 그 위에 스프링 프로젝트를 올린다. 이후 빌드할 때도 war파일을 서블렛 컨테이너에 올려야 한다. 스프링부트는 기본적으로 서블렛 컨테이너가 내장되어 있어 별도의 서버 설치 없이 실행할 수 있다. 빌드시에도 jar 파일만으로 배포할 수 있다. web.xml spring legacy 프로젝트 생성시 자동으로 생성되긴 하지만 web.xml에 ContextLoaderListener를 통해 Dispatcher Servlet을 서블렛 컨테이너(톰캣)에 올리는 것을 명시한다. POST ..

스프링

[Spring]Spring AOP? AspectJ를 사용하는 이유

AOP( Aspect-Oriented Programming) 객체지향 프로그래밍은 클래스가 단일 책임원칙을 가지도록 설계해 응집도를 높이고 결합도는 낮춘다. 하지만 클래스의 비즈니스 로직을 제외한 로깅, 트랜잭션과 같은 부가기능 여러 클래스에 중복적으로 필요한 기능이 존재한다. 이런 경우 AOP를 통해 코드의 중복성을 낮추고, 부가기능의 응집도를 높혀 관리할 수 있다. AOP 적용할만한 것들 메소드 성능검사 DB와 엮인 대량의 데이터의 조회 쿼리 시간을 측정하는 등의 비즈니스 로직 호출의 앞뒤로 시간을 체크해 성능검사에 AOP를 적용할 수 있다. 트랜잭션 처리 성능검사와 마찬가지로 비즈니스 로직의 전후에 설정되는 번거로운 try catch 대신 AOP를 적용할 수 있다. Spring AOP Target ..

스프링

[Spring] 의존성 주입의 종류

Spring IoC Container가 Bean을 관리할 때는 객체관리 뿐아니라 객체 내에 필요한 객체를 의존성 주입으로 해결한다. 의존성 주입은 필요한 객체를 생성하는 것이 아닌 외부로 부터 객체를 받아 사용하는 것이다. 관련 작성 포스팅 의존성 주입은 왜 필요한가? 스프링은 @Autowired 어노테이션을 이용한 다양한 의존성 주입 방법을 제공하는데 종류는 생성자, 수정자, 필드로 나뉜다. 필드주입 1. 코드가 간결하다. 2. 외부에서 변경이 불가능해 테스트시 모킹이 필요하다 3. 스프링 컨테이너 없이 의존성 주입이 힘들다 4. 객체가 생성된 이후에 주입하므로 final 키워드를 사용할 수 없어 해당 객체의 불변을 보장하지 못한다 @Service public class ProductService { ..

개발로그

[개발로그] Srping Event, Async

Spring에서 Event가 왜 필요한가 ?Spring Event는 Spring의 3대요소 중 하나인 관점을 분리하기 위한 하나의 방법이다.예를 들어 유저가 회원가입을 할 때 인증을 위한 이메일을 보내는 로직이 어디에 존재해야할까 고민해볼 수 있다. @Service@RequiredArgsConstructor@Transactionalpublic class AccountService implements UserDetailsService { private final AccountRepository accountRepository; private final EmailService emailService; public Account signUp(SignUpForm signUpForm) { ..

비오베베
'spring' 태그의 글 목록