본문 바로가기

전체 글

(144)
Spring Proxy가 아닌 방법으로 AOP 구현 방법 먼저 AOP란 무엇인가 서비스에는 핵심 기능과 부가 기능이 존재한다. 회원 가입 로직이라면 DB에 새로운 회원 정보를 등록하는 것이 핵심 기능이고, 트랜잭션을 관리하고, 로그를 찍는 것은 부가 기능이다. 이러한 부가 기능은 다른 곳에서도 반복 사용되기 때문에, 따로 분리하여 관리하는 것이 유리하다. AOP는 핵심 기능과 부가 기능을 분리하는 역할을 한다. AOP은 Aspect Oriented Programing의 약자이고, Aspect를 사용한 프로그래밍이라는 의미다. Aspect는 부가 기능의 역할은 무엇이고, 핵심 기능 중 어디에 적용할 지 정한다. 스프링이 제공하는 @Aspect가 Aspect중 하나이다. Proxy가 아닌 방법으로 AOP 구현 방법 1. AspectJ 컴파일러 .java 소스 코드..
DB 접근을 줄이고 빠른 조회를 위한 Spring Redis 사용 관련 내용 해당프로젝트깃허브 커밋시점 [리눅스 인프라/Redis] - Gloabal Cache Redis에 대한 이해 개요 목적 DB에서 조회하는 데이터가 변경은 적고 자주 사용된다면, Redis에 저장하여, 캐시하는 것이 조회 시간을 단축하고, DB 부하를 줄이는 좋은 방법이다. Spring과 Redis를 연결해서 음식 목록을 빠르게 조회하는 방법에 대해서 알아보겠다. 원하는 상황 아래 그림처럼 주문 페이지로 이동하면, 분식집에서 팔고 있는 음식 목록들을 보여준다. 음식점 별 음식 목록을 DB가 아닌 Redis에서 빠르게 조회하는 것이 이번 글의 목표이다. 만약 Redis에서 음식 목록이 없다고 응답하면, 다시 DB에서 음식 목록을 요청한다. 개발 환경 SpringBoot(gradle) - 2.7.5 ..
OpenInView의미와 꺼야 하는 이유 OpenInView 의미와 꺼야 하는 이유 OpenInView는 하이버네이트에서는, Open Session In View이고, JPA에서는 Open EntityManager In View이다. OSIV가 켜져 있으면, DB 커넥션과 영속성 컨텍스트의 사용 범위를, API 응답이 끝날 때까지 유지한다. Controller에서 return을 하기 직전까지, 영속성 컨텍스트를 사용할 수 있는 것이다. 장점으로는 영속성 컨텍스트를 이용한 지연로딩을 Controller 영역에도 사용할 수 있다. 문제점은, 데이터베이스 커넥션을 너무 유지된다. 트래픽이 많은 서비스의 경우, 각 쓰레드마다, 커넥션을 늦게 반납하여, 커넥션 고갈 문제가 생긴다. 끄는 방법 spring: jpa: open-in-view: false 설..
자바의 스택과 큐 사용 이유 스택과 큐의 필요성 자료를 최대한 움직이지 않고, 그 안에 요소들을 저장하고 출력하기 위함이다. 값을 변경할 때마다, 그 안에 요소들이 많은 변화가 일어나면, 많은 컴퓨터 자원을 사용하여, 과부하 가능성이 있다. 보다 빠른 데이터 처리를 위해 스택과 큐를 이용한다. 스택 쌓이고 위에서 빼는 구조. Last In First Out push Stack에 객체를 저장한다. pop Stack의 맨 위에 저장된 객체를 꺼낸다. peek Stack의 맨 위에 저장된 객체를 반환한다. Stack에서 꺼내지는 않습니다. 비었을 때 null을 반환한다. empty Stack이 비어있는지 알려준다. 있으면 true, 없으면 false를 반환한다. search Stack에서 주어진 객체를 찾아서 그 위치를 반환한..
행렬의 덧셈과 뺄셈 곱셈 행렬의 덧셈과 뺄셈 성사 조건 두 행렬의 행과 열의 개수가 같아야 한다. 자바의 2차원 배열 행 가로(행과) row 열 세로 column int[][] arr = new int[2][3]; System.out.println(Arrays.deepToString(arr)); [[0, 0, 0], [0, 0, 0]] int[][] arr2 = {{1, 2}, {1, 2}, {1, 2}}; //3행 2열 System.out.println(Arrays.deepToString(arr2)); [[1, 2], [1, 2], [1, 2]] row 값으로 행렬의 덧셈 식 new int[4][5]가 주어졌을 때 어떤 모양이 되는 지 파악하는 것이 중요하다. 4행 5열 int[][] a = new int[2][3] [[0, ..
터미널이 종료해도 동작하는 스프링 서비스 만들기(PM2, Linux service) 관련 내용 [리눅스 인프라] - 스프링 부트 무중단 배포를 위한 NginX 적용하기 개요와 목적 리눅스 터미널에서 실행한, Spring 서버는 터미널이 종료되는 즉시 서버도 함께 종료된다. 이번 글에서는 PM2와 Linux service를 사용해서 터미널이 종료되어 동작하는 스프링 서버를 만들어보자. 위 관련 내용 글에서도 PM2를 사용해서, 터미널에 구애 받지 않고, API서버와 UI서버를 동시에 실행하였다. 개발 환경 SpringBoot(gradle) : 2.7.8 Ubuntu : 20.04 PM2 PM2는 Node.js 의 프로세스를 관리해주는 서비스이다. 이번 글에서는, Ubuntu에 PM2를 설치하고, 두 개의 스프링 서버를 올려서, 프로세스를 작동 시키는 방법에 대해서 알아보겠다. 설치 //N..
리눅스 gradle 파일 삭제와 gradlewapper로 Spring Boot 실행 gradle을 다운 받은 방법 gradle 7.2버전 다운 받기(관리자 권한으로 시작) https://codechacha.com/ko/installing-gradle/ sudo -i wget -P /tmp 압축 풀기 unzip -d /opt/gradle /tmp/gradle-7.2-bin.zip 링크 연결 ln -s /opt/gradle/gradle-7.2 /opt/gradle/latest 파일 열고 저장 vi /etc/profile.d/gradle.sh export GRADLE_HOME=/opt/gradle/latest export PATH=${GRADLE_HOME}/bin:${PATH} 권한 부여하기 chmod +x /etc/profile.d/gradle.sh 소스 명령어로 스크립트 로딩 source..
CORS 이해와 동작 원리 파악 개요 목적 Spring 백엔드 서버를 웹페이지에서 테스트할 때 CORS 정책 예외를 만난다. 이번 시간에는 해당 CORS 의미와 동작 과정을 파악한다. 마지막은 Spring에서 CORS 정책을 허용하는 방법을 알아본다. CORS란 Cross-Origin-Resource-Sharing은 브라우저가 Cross Origin 데이터 교환에 대한 HTTP 통신을 통제하는 것을 의미한다. 예시를 통해 Cross Origin의 HTTP 통신 상황에 대해서 알아보자. 브라우저를 사용하는 http://localhost:8080이라는 UI 서버에서, 화면에 작성할 데이터를 받아오기 위해, http://www.imagelist.com:5510 백엔드 서버에서 HTTP 요청을 한다. 이때 브라우저(크롬)는 두 서버의 프로토콜..

반응형