목록전체 글 (531)
개발놀이터
Q. OOP가 뭐죠? A. 데이터를 객체로 취급하여 프로그램에 반영하고, 순차적으로 프로그램이 동작하는 것과는 다르게 객체의 상호작용을 통해 프로그램이 동작하는 것을 말합니다. 객체를 연결시켜 프로그래밍하면, 상속, 캡슐화, 다형성을 이용해 코드 재사용을 증가시키고, 유지보수를 감소시켜주는 장점이 있습니다.
Q. 스프링 AOP에 대해 설명해주세요 A. AOP는 관점지향 프로그래밍의 약자입니다. 기존 OOP에서 기능별로 클래스를 분리했음에도 불구하고 로깅, 트랜잭션, 자원해재와 같은 중복코드들이 발생하는 단점이 생겼습니다. 이를 해결하기 위해 개발자는 비즈니스 로직에 집중하고 비즈니스 로직과 공통관심사를 분리하여 중복코드를 제거할 수 있는 방식이 바로 AOP방식입니다.
Q. 스프링에서 트랜잭션을 왜 추상화 했나요? A. 트랜잭션을 이루는 코드들이 데이터 접근 기술에 따라 달라지는 현상이 있었습니다. 때문에 JDBC를 사용하던 애플리케이션이 JPA로 바꾸기 위해 트랜잭션을 이루는 모든 코드를 고쳐야 하는 상황이 발생했습니다. 이를 해결하고자 스프링에서는 PlatformTransactionManager라는 인터페이스로 트랜잭션을 추상화 했습니다. 이를 통해 개발자는 서비스 계층에서 특정 기술에 종속적인 트랜잭션 코드를 사용하지 않아도 됩니다. Q. @Transactional에 대해 설명해주세요 A. 스프링이 데코레이터 패턴을 이용해 만든 스프링 AOP중 하나입니다. @Transactional 어노테이션이 붙어있는 메서드에 한해서 트랜잭션 시작, 정상 로직일 때 커밋, 예외..
*트랜잭션 트랜잭션은 더 이상 쪼갤 수 없는 작업의 최소 단위를 의미한다. 즉 여러 작업을 진행하다가 문제가 생겼을 경우 롤백하기 위해 트랜잭션을 다누이로서 사용할 수 있다. 트랜잭션에는 commit, rollback 두 가지 경우가 존재한다. 모두 성공하여 commit되거나 하나라도 실패하면 rollback되는 것이다. Spring에서 제공하는 Transaction 기능 1. 트랜잭션 동기화 2. 트랜잭션 추상화 3. 트랜잭션 분리 1. 트랜잭션 동기화 개발자들이 JDBC의 모든 커넥션을 하나의 트랜잭션으로 관리하기 위한 작업을 직접 수행한다면 매우 번거로울 것이다. Spring에서는 이러한 문제를 해결하고자 트랜잭션 동기화 기술을 지원한다. 즉, 트랜잭션을 시작하기 위한 자원을 특별한 저장소에 보관해..
*커넥션 풀 커넥션을 하는데 많은 소스가 들어간다. 1. 애플리케이션 로직이 디비 드라이버에 커넥션을 조회한다. 2. TCP/IP 커넥션 연결 3. ID, PW 부가정보 전달 4. DB내부 인증 + DB 세션 생성 5. 커넥션 생성 완료 6. 애플리케이션 로직에 커넥션 반환 근데 데이터베이스에 접근할 때마다 커넥션 객체를 만들면 메모리 누수, 시간 낭비 심함 그래서 대안이 커넥션 객체를 여러개 만들어 둔다. -애플리케이션 로직이 디비에 커넥션 객체를 요청할 때 디비 드라이버가 커넥션을 만드는것이 아니라 이미 만들어진 커넥션 풀에서 꺼내 쓰게 된다. 근데 커넥션 객체를 여러개 만들기 위해서 커넥션 풀이란걸 만들게 되는데 각각의 커넥션 풀을 구현해놓은 것들 마다 사용법이 조금씩 다른 현상이 생겼다. 그래서 ..
이 포스팅은 인프런 김영한 님의 실전! Querydsl 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 프로젝션과 결과 반환 - 기본 프로젝션이란 뭘까? 그냥 간단하게 select 대상으로 지정된 것을 말한다. 크게 봤을 때 프로젝션이 한개일 때와 여러개일 때로 나눠볼 수 있다. 프로젝션 대상이 하나일 때 @Test public void simpleProjection() { List result = queryFactory .select(member.username) .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); } } select문에 member.username하나만 있는 상황이다. 이럴..
이 포스팅은 인프런 김영한 님의 실전! Querydsl 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 QueryDSL 시작하기 먼저 QueryDSL을 시작하기 위해선 gradle에서 설정을 해줘야한다. //querydsl 추가 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'org.springframework.boot' version '2.6.3' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'war' //querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } g..
ElementType.ㅇ어노테이션을 만들 때 사용하는 어노테이션들이다. 어노테이션을 이용한 포인트컷을 구현할 때 등장했으며 궁금하기때문에 포스팅으로 남긴다. 구글링해보니 그렇게 어려운 내용은 아니었다. @Target @Target은 자신이 만든 어노테이션이 사용되게 될 자바 요소를 지정할 수 있다. Target의 속성으로는 ElementType.ANNOTATION_TYPE ElementType.CONSTRUCTOR ElementType.FIELD ElementType.LOCAL_VARIABLE ElementType..METHOD ElementType.PACKAGE ElementType.PARAMETER ElementType.TYPE 이렇게 여덟가지이다. 내가 주로 사용하게될 타겟은 메서드로 보인다. 메서..
이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 고급 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 지금까지 학습한 내용을 활용해서 유용한 스프링 AOP를 만들어보자 1. @Trace 어노테이션으로 로그 출력하기 2. @Retry 어노테이션으로 예외 발생시 재시도 하기 cf) 어? 예외 발생시 재시도 하는 로직이 왜 필요하지? 예를 들어서 API통신을 하는데 조회를 해야한다고 가정해보자 특정 시간대 혹은 특정 횟수에 한번꼴로 예외가 터지는 경우라고 생각했을 때 조회라면 예외를 무시하고 다시 재시도 하면 되는 경우가 많다. 때문에 예외 로그가 찍히는 상황을 방지하고자 조회로직에 한해서 예외 발생시 재시도 하는 로직을 만드는 것이다. 먼저 어노테이션을 만들어야한다. Trace.java ..
이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 고급 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 지금부터 포인트컷 표현식을 포함한 포인트컷에 대해서 알아보자 스프링AOP에서 제공하는 포인트컷은 꽤 많다. 1. execution 2. within 3. args 4. this 5. target 6. @target 7. @within 8. @annotation 9. @args 10. bean 우리는 이중에서 자주 사용되는 1. execution, 8. @annotation에 대해서 알아볼 것이다. execution 먼저 execution의 문법을 살펴보자 execution은 메서드 실행 조인 포인트를 매칭하기 때문에 메서드의 정보를 적어준다. execution(접근제어자? 반환타입 선..