전체 글
-
[Spring AOP] 프록시와 내부 호출 문제Backend/Spring 2022. 5. 14. 16:20
오늘은 Spring AOP를 적용할 때 "이게 왜 적용 안되지?" 하며 의문이 들 때 한번 살펴볼 문제에 대해 알아보겠다. 우선 스프링 AOP가 사용하는 프록시 방식을 이해해야 한다. 스프링 AOP가 프록시방식을 이용하기 때문에 항상 프록시를 거쳐서 Target을 호출해야 한다. 프록시에서 어드바이스를 호출하고 대상 객체를 호출하는 식으로 적용하기 때문이다. 그러면 어떤 경우에 문제가 발생하는지 살펴보자. 위와 같이 Service와 Aspect를 만들어주었다. Aspect를 보면 aop 패키지 하위에 모든 클래스의 모든 메서드를 포인트 컷으로 지정해주었다. 그리고 다음과 같이 테스트 코드를 작성하였다. Aspect를 정상적으로 적용하였으니 내부호출(), 외부호출() 메서드가 호출되기 전에 로그가 출력돼야..
-
[Spring AOP] Spring AOP 용어 정리Backend/Spring 2022. 5. 3. 01:34
스프링 AOP에서 사용하는 용어를 정리해보려고 한다. AOP ( Aspect Oriented Programming ) 를 간단히 알아보자. 우선 해석해보면 관점 지향 프로그래밍이다. 말 그대로 애플리케이션을 바라보는 관점을 핵심적인 관점과 부가적인 관점으로 나누어보고 분리하여 각각 모듈화 하려는 취지를 갖고 있다. Aspect를 이용해서 횡단 관심사 ( "부가적인 기능이 필요하다." 라는 관점, 쉽게 이해하자면 핵심 로직이 아닌 부가적인 로직으로 코드상에 중복되는 것들 ) 를 해결할 수 있다. 또한 반복, 중복, 수정 등에 대한 많은 문제를 해결함으로써 OOP를 보조해준다. Spring AOP는 AspectJ의 일부 기능만을 제공, AspectJ의 문법을 차용하는 것이고 직접 사용하는 것은 아니다. 또한..
-
[CI / CD] Nginx를 이용한 무중단 배포DevOps 2022. 4. 22. 10:31
이전까지 Travis CI를 이용해서 배포 자동화 환경을 구축해 보았는데, 배포하는 동안 ( 새로운 Jar가 실행되기 전까지 ) 서비스가 중단된다는 문제점이 있다. 그래서 이번에는 Nginx를 이용한 무중단 배포를 해보려고 한다. Nginx를 이용해서 무중단 배포를 하게되면 다음과 같은 시스템 구성이 될 것이다. Nginx 1대와 스프링 부트 Jar를 2대 두고 서비스하는 포트와 배포를 하는 포트를 나누어 사용하고 배포후에 바꾸어 주는 방식으로 무중단 배포를 환경을 구축할 수 있다. 1. 엔진엑스 설치와 스프링 부트 연동 가장 먼저 EC2에 엔진엑스를 설치하자. 아래와 같이 명령어를 입력해준다. amazon-linux-extras list | grep nginx // 설치할 엔진엑스 확인 sudo ama..
-
[AWS] AWS 서버 구축 및 배포 5. AWS EC2에 프로젝트 배포DevOps/AWS 2022. 4. 21. 01:42
저번 포스팅까지 따라왔다면 이제 실제로 배포를 해볼 차례이다. 바로 시작해보자. 1. EC2에 프로젝트 Clone 받기 일단 EC2로 접속해서 밑의 명령어로 git을 설치해주자. sudo yum install git // 깃 설치 git --version // 설치가 완료된 후 설치 상태 확인 git이 설치되었다면 이제 git clone으로 프로젝트를 저장할 디렉토리를 생성하고 생성한 디렉토리로 이동하자. mkdir ~/app && mkdir ~/app/step1 cd ~/app/step1 git repository의 https 주소를 복사해서 클론을 받아온다. git clone 레포지토리 주소 git clone이 끝났으면 프로젝트 디렉토리로 이동해서 파일들이 잘 복사되었는지 확인하고 코드들이 잘 수행되..
-
[AWS] AWS 서버 구축 및 배포 4. AWS RDS 접속 및 확인DevOps/AWS 2022. 4. 15. 04:12
저번 포스팅에서 RDS 인스턴스 생성하는 것까지 마쳤다. 이번에는 내 로컬 PC에서 RDS에 접속해보고, EC2에서도 접속해서 확인해보겠다. 1. 내 PC에서 RDS에 접속해보기 먼저 접근을 위해서 RDS의 보안 그룹에 본인 PC의 IP를 추가하자. RDS의 세부정보 페이지에서 보안 그룹 항목을 클릭하자. 들어가서 인바운드 규칙을 수정할 건데, EC2에 사용된 보안 그룹의 ID를 복사해서 와야 한다. 복사한 보안 그룹 ID와 본인의 IP를 RDS 보안 그룹의 인바운드로 추가하고 규칙 저장을 눌러준다. 여기까지 했다면 RDS와 로컬 PC, EC2 간의 접근이 가능해진다. 이제 실제 접속해보자. 나는 인텔리제이를 사용할 것이다. 유료버전이라 있는지는 모르겠지만 맨 오른쪽 탭에 Database라고 있다. 없다..
-
[CI / CD] Travis CI 를 이용한 배포 자동화 (5)DevOps 2022. 4. 11. 03:59
https://yanglet.tistory.com/18 [CI / CD] Travis CI 를 이용한 배포 자동화 (4) 이제 지금까지 한 것들을 다 연동해보자. 1. Travis CI, S3, CodeDeploy 연동 먼저 S3에서 넘겨줄 zip 파일을 저장할 디렉토리를 하나 생성하자. EC2 서버에 접속해서 다음과 같이 디렉토리를 생성하자. mkdi yanglet.tistory.com 바로 전 포스팅에서 해결이 되면 포스팅한다고 하고나서, 좀 더 찾아보다가 이거만 해보고 눕자 했는데 해결이 되어버려서 마저 써야겠다. s3 와 같이 맨 밑에 두 줄을 추가했더니 됐다. 이제 연동까지 구현하였고, 이것을 기반으로 실제로 Jar를 배포하여 실행까지 해보자. 1. 배포 자동화 구성 deploy.sh 파일 추가..
-
[CI / CD] Travis CI 를 이용한 배포 자동화 (4)DevOps 2022. 4. 11. 02:31
이제 지금까지 한 것들을 다 연동해보자. 1. Travis CI, S3, CodeDeploy 연동 먼저 S3에서 넘겨줄 zip 파일을 저장할 디렉토리를 하나 생성하자. EC2 서버에 접속해서 다음과 같이 디렉토리를 생성하자. mkdir ~/app/step2 && mkdir ~/app/step2/zip Travis CI의 Build 가 끝나면 S3에 zip 파일이 전송되고, 이 zip 파일은 /home/ec2-user/app/step2/zip 로 복사되어 압축을 풀 예정이다. AWS CodeDeploy의 설정을 위해 appspec.yml 을 만들고 다음과 같이 작성하자. .travis.yml 와 같은 위치에 만들면 된다. Travis CI의 설정을 위해 .travis.yml 에 다음과 같이 추가해주자. S..