| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 일감관리
- 스프링
- 데이터베이스
- AOP
- PM
- 백엔드
- 엘라스틱서치
- spring
- PreparedStatement
- 오라클
- spring aop
- It
- db
- 인덱스
- 프론트엔드
- 웹프론트
- elasticsearch
- 이슈관리
- 검색
- Database
- redmine
- 자바
- java
- 레드마인
- 비전공개발자
- kibana
- 프로젝트관리
- frontend
- 개발자
- Si
- Today
- Total
목록spring (13)
리타의 저장소
스프링 프로젝트 생성하고 ES랑 연동하기spring starter io에서 우선 프로젝트를 생성한다. 생성할때, Spring Data Elasticsearch를 추가. 그외 Lombok, JPA, PostgreSQL 등 기타 프로젝트에 필요한 설정도 추가해줬다. 자 그럼 users Document를 셋팅 해줘보자. (Spring -- Elasticsearch 연동)* 주의 : 처음에는 그냥 실험하는 거니까 라는 마인드로 편의상 @Data 어노테이션을 사용한 코드를 업로드 했었으나, 다들 알다시피 실무에선 지양하는게 좋다. 그래서 그냥 바꿨다... UserDocument package com.salary.backend;import lombok.AllArgsConstructor;import lombok.D..
우리 회사의 GC는 무엇일까?정확하게는, 내가 담당하는 시스템의 GC는 어떤걸 사용하고 있는지 궁금해서, 찾아본 내용들을 정리해보았다. 먼저, 내가 담당하는 시스템은 쇼핑몰 시스템이다. 그 중에서도 특히 제휴연동시스템을 맡고 있고, 이 제휴연동 부분과 연관된 BackOffice, 상담원시스템, 셀러시스템 이렇게를 맡고 있다.오늘 알아볼 것은 특히, 내가 담당하고있는 부분중 젤 큰 파이를 차지하는 ‘제휴연동시스템’의 GC(가비지컬렉션)은 어떤것인가에 대한 내용이다. 제휴 운영이 뭘까?잠깐, 여기서 제휴연동시스템이란 무엇인지 아주 짤막하게 설명하고 넘어가겠다.가끔 인터넷 쇼핑을 하다보면, 쿠팡과 네이버에 동일한 상품명을 가진 상품이 각기 다른 가격으로 판매되는 것을 볼 수 있다.예를 들어, 네이버 스마트스토..
Class 안에서 this.메서드() 호출하는 경우 AOP 작동할까?Q. 아래와 같은 코드에서, 과연 @Transactional이 제대로 동작할까?? @Component@RequiredArgsConstructorpublic class OrderApplication { private final OrderService orderService; private final OrderResultPublisher publisher; public void orderGenerateWithPublish(OrderVo orderVo) { OrderMessage message = this.generateOrder(orderVo); // 비동기 Queue 발..
CGLIB Proxy CGLIB Proxy는 JDK Dynamic Proxy와 다르게 바이트코드 조작(ASM 기반)으로 대상 클래스의 서브클래스를 만들어 프록시를 구현한다.JDK Proxy가 원본 객체가 구현한 Interface에 대한 Proxy를 만들어준다면, CGLIB Proxy는 직접 Class를 상속받아서 Override하는 방식으로 Proxy를 만들어주게 된다. 그래서 interface가 없는 클래스라도 Proxy를 생성할 수 있다.예를들어, ProxyService 라는 Interface를 구현한 ProxyServiceImpl이 있다면, CGLIB로 Proxy를 구현할 떄 ProxyService라는 interface가 아닌 구체 구현 클래스를 상속받는 식으로 구현된다. public class P..
JDK Dynamic ProxyJDK Dynamic Proxy는 Interface가 존재하는 경우에만 Proxy를 만들 수 있다. 객체 자체가 아닌 Interface와 Java Reflection API를 이용해서 Proxy 객체를 생성하는 것이다. Interface에 대한 검증 로직을 거친 후, ProxyFactory에 의해 실제 구현하려는 Interface와 InvocationHandler를 포함해 Proxy 객체를 생성한다.JDK Dynamic Proxy 의 경우,Proxy.newProxyInstance(...) API를 통해 프록시를 생성하고, 여기서 핵심은 InvocationHandler 그리고 Proxy이다. Java Platform SE 8 docs.oracle.com Java 공식문서에서..
JDK Dynamic Proxy & CGLIB Proxy Spring AOP는, 대상 객체가 ‘인터페이스’를 구현했는지 여부에 따라, JDK Dynamic Proxy / CGLIB Proxy 중 하나를 자동 선택하여 AOP를 적용하게 된다. 프록시 방식설명동작 조건사용 기술JDK Dynamic Proxy인터페이스 기반대상 클래스가 인터페이스를 구현하고 있을 때java.lang.reflect.ProxyCGLIB Proxy클래스 기반인터페이스가 없을 때 또는 강제로 사용 시net.sf.cglib (Spring 내부에 내장) 자동 선택한다는 것에 대한 내용을 조금 더 보완하자면, Spring AOP 자체적으로 프록시 생성과 방식 선택의 로직을 내장하고 있다. 즉, 개발자가 모든 걸 일일히 설정하지 않아도, ..
주요 개념Spring AOP에서 자주 사용되는 개념들에 대해 정리해보고자 한다. Spring AOP 주요 개념 요약AOP는 "공통 기능(Aspect)을 핵심 로직과 분리해서, 실행 지점(Join Point)에 조건(Pointcut)에 따라 동작(Advice)을 위빙(Weaving)하는 기법"이다.용어의미설명Aspect관점공통 기능을 모듈화한 것 (ex: 로깅, 트랜잭션 등)Join Point실행 지점Advice가 실행될 수 있는 위치 (ex: 메서드 호출, 예외 발생 등)Advice실질 로직언제, 어떤 공통 로직을 실행할지 정의Pointcut실행 조건어떤 Join Point에 Advice를 적용할지 정의Weaving삽입 행위Advice를 실제 코드에 적용하는 과정Target Object실제 객체AOP 적..
서비스 호출 전에 로깅, 꼭 AOP에서 해야만 하나? 웹 서비스를 만들다 보면, 모든 요청마다 공통적으로 & 반복해서 처리해야 하는 작업이 생기곤한다.예를들어,로그인 인증 (보안)Request logging (로깅)트랜잭션 관리위와 같은 상황들이 필요한 순간, 매 컨트롤러 마다 반복적으로 코드를 삽입해서 처리하게 되면, 코드 중복 + 유지보수 어려움 이슈가 발생한다. 때문에, 공통 관심사(횡단 관심사)를 분리 해서 처리하는 기술이 필요한데, 이때 등장하는 것이 바로, Filter, Interceptor, AOP 의 개념이다. Interceptor 와 Filter는 Servlet 단위에서 실행된다. 반면에 AOP는 메서드 앞에 Proxy 패턴의 형태로 실행된다. Filter가 가장 밖, 그 안에 Inter..
JVM (Java Virtual Machine)이란?Java Virtual Machine.자바 버츄얼 머신. 이름에서도 느낄 수 있듯, JVM은 자바 바이트코드를 운영체제에 맞게 해석하고 실행하는 가상 머신이다.JAVA는 OS에 종속되지 않다는 큰 특징을 갖고 있다. OS에 종속되지 않고 실행되기 위해 OS상에서 JAVA를 실행시키는 머신이 바로 JVM 이라고 생각하면 된다. JAVA로 코드를 짤때를 생각해보자. .java파일들이 생긴다. 이렇게 짜여진 .java 파일들은 컴퓨터가 곧바로 인식하기 어렵다. 그래서 서 컴퓨터가 인식할 수 있도록 '컴파일' 하는 과정을 거쳐줘야한다. 근데 앞서 말한 것 처럼 JAVA의 경우 OS에 종속되지 않는다. JVM을 한번 거치고 컴퓨터에 도달하기 때문에, JAVA는 ..
같이 스터디를 하는 스터디원들과 PreparedStatement에 대해서 이야기를 하다가, 실제 담당하고 있는 서비스에서 PreparedStatement를 사용하냐고 물었을 때 다들 사용하지 않는다고 했다. 대체로 JPA 혹은 Mybatis를 사용중이라 업무를 하면서 마주할일이 거의 없다는 것이었다. 근데, 또 여기서 궁금한게 생겼다. 과연 진짜 그들은 PreparedStatement를 사용하지 않는 것일까? 핵심부터 말하자면JPA, MyBatis 모두 실제 SQL 실행할 때 JDBC API를 쓰고, 그 안에서 PreparedStatement를 사용한다.즉, 직접 pstmt.setInt(1, xxx) 라고 쓰지 않아도 프레임워크가 내부에서 알아서 PreparedStatement를 만들고 파라미터를 바인..