@Transactional과 AOP 트랜잭션의 차이점

@Transactional 특별한 설정 없이 쉽게 사용 가능 원하는 곳에만 트랜잭션을 설정해 성능에 대한 영향을 최소화 할 수 있다. Annotation이 누락되거나 여러 메소드에 걸쳐 사용될 경우 트랜잭션이 누락될 수 있다. 외부 라이브러리에 대해서는 사용이 불가능하다. AOP 트랜잭션 공통으로 트랜잭션이 적용되기 때문에 트랜잭션이 누락될 일이 없다. 외부 라이브러리에 적용 가능하다. 트랜잭션이 필요없는 곳까지 적용된다. → 필터를 잘 …
@Transactional과 AOP 트랜잭션의 차이점 더보기

Reflection; 훑어보기

리플렉션(Reflection)이란? 자바에서 제공하는 리플렉션(Reflection)은 C, C++과 같은 언어를 비롯한 다른 언어에서는 볼 수 없는 기능입니다. 이미 로딩이 완료된 클래스에서 또 다른 클래스를 동적으로 로딩(Dynamic Loading)하여 생성자(Constructor), 멤버 필드(Member Variables) 그리고 멤버 메서드(Member Method) 등을 사용할 수 있도록 합니다. 그러니까, 컴파일 시간(Compile Time)이 아니라 실행 시간(Run Time)에 동적으로 특정 클래스의 정보를 객체화를 통해 분석 및 추출해낼 …
Reflection; 훑어보기 더보기

Spring Web; MVC

MVC패턴 Model : 어플리케이션의 정보, 데이터를 의미한다. View : 사용자 인터페이스, 사용자가 보고 사용하는 화면을 의미한다. Controller : 모델과 뷰의 중계 역할. 사용자의 요청을 파악하고 그에 맞는 결과를 응답한다. 스프링 웹 MVC의 구조 요청당 컨트롤러에 매핑되는 서블릿이 각각 존재했다. 중복코드를 방지하고 일관된 관리를 위해 프론트 컨트롤러가 생겼다. Front controller : 프론트 컨트롤러는 컨트롤러 앞에 존재하는 …
Spring Web; MVC 더보기

스프링 부트; 훑어보기#5 – Spring Data JPA

스프링 데이터 JPA 구현체 없이 인터페이스만으로 리포지토리에 커밋이 가능한 코드를 만들 수 있다. 반복적으로 개발한 CRUD 기능도 스프링 데이터 JPA가 모두 제공한다. RDB에서 스프링 데이터 JPA는 아주 좋은 기능이다. 스프링 데이터 JPA 인터페이스 이외의 인터페이스 선언이나 구현체는 필요없다. 인터페이스 이름에 규칙이 있다. (JPQL) 예를들어 findByNameAndId 라고 하면 & 연산자를 넣을 수 있다. 간단한 요구사항은 인터페이스 …
스프링 부트; 훑어보기#5 – Spring Data JPA 더보기

스프링 부트; 훑어보기#4 – JPA

JPA (Java Persistent API) JPA → 인터페이스 (자바 표준) hibernate → 구현체 (여러 벤더들이 있음) 쿼리도 JPA가 직접 만들어서 실행해준다. 객체를 메모리에 넣듯 DB에 넣을 수 있게 해준다. SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있다. build.gradle application.properties spring.jpa.show-sql: JPA가 날리는 쿼리를 볼 수 있다. spring.jpa.hibernate.ddl-auto: 테이블을 자동으로 만들어주는 기능이다. (none/create) ORM; …
스프링 부트; 훑어보기#4 – JPA 더보기

스프링 부트; 훑어보기#3 – JDBCTemplate

Spring 데이터 억세스 H2 데이터베이스 순수 JDBC 스프링 JdbcTemplate : JDBC 중복을 제거해서 만든 템플릿 JPA : 객체를 쿼리 없이 DB에 저장하는 방법 스프링 데이터 JPA : JPA를 간단하게 쓰기 위한 스프링의 Wrapping H2 데이터베이스 official site bin/h2.sh 실행 JDBC URL : jdbc:h2:tcp://localhost/~/h2/test 파일로 직접 접근하지 말고 TCP로 접속. build.gradle 추가 JDBC 간단한 정리 Connection …
스프링 부트; 훑어보기#3 – JDBCTemplate 더보기

스프링 부트; 훑어보기#2 – GetMapping, PostMapping

@GetMapping, @PostMapping 사용법 URI를 매핑하고 템플릿으로 반환한다. (String) 접근을 변수에 바로 하더라도 getter로 접근하여 (propperties방식) 반환받는다. @GetMapping 우선순위 Controller를 먼저 찾고 없으면 static 파일을 찾는다.

테스트 코드의 작성법 assert

테스트코드 개발된 코드가 예상된 결과값을 내놓는가에 대한 시험 TDD 테스트를 먼저 만들고 구현체를 개발하는 방법 테스트 주도 개발 관례 src 아래 test라는 폴더 아래로 프로젝트와 같은 패키지 구조를 가짐. 테스트하고자 하는 클래스의 끝에 Test라고 붙이는 것이 관례 메소드를 명시하고 @Test 어노테이션을 붙임. junit Assertions사용법 (예시) 결과값 result가 기대값 member를 만족하면 테스트 코드를 통과한다. assertj Assertions …
테스트 코드의 작성법 assert 더보기

스프링 부트; 훑어보기#1

시작하기 전에 사족 나의 스프링 역사는 작년 이맘때쯤 시작됐다. (2020년 2월) 백엔드 개발자가 되기 위해 호기롭게 한권의 책으로 시작했으나 당시 나한텐 자바 언어를 떠나서 OOP에 대한 지식이 없었다. 세상에 프로그래밍을 위한 책이 모두 완벽하면 좋겠으나 다른 분야의 책들도 정오표를 내는 마당에 사전 지식없이 오류에 부딪히기엔 너무 버거웠다. 책 앞부분 부터 예제의 오류로 대부분의 시간을 보내다가 …
스프링 부트; 훑어보기#1 더보기

스프링5; AOP의 실제 #2

이전 글 execution 패턴 표현식 execution(public void set*(..)) : 반환형이 void이고, 메소드 이름의 set으로 시작하고 인자가 0개 이상인 메소드를 호출한다. executation(* dto.*.*()) : dto 패키지 탕비에 속한 인자가 없는 모든 메소드를 호출한다. executation(* dto..*.*(..)) : dto 패키지 및 하위 패키지에 있고 인자가 0개 이상인 메소드를 호출한다. execution(Long dto.StudentRepository.getAge(..)) : 반환형이 Long인 StudentRepository 타입의 getAge() 메소드를 …
스프링5; AOP의 실제 #2 더보기