Programming 82

[SpringBoot] @Transactional로 트랜잭션이 적용되는 원리

💡궁금하게 된 계기 하나의 클래스 안에서, @Transactional이 없는 메서드에서 있는 메서드를 호출할 때 트랜잭션이 적용되지 않는다는 것을 알았다. 이 문제로 부터, 궁금한 것을 이어가다보니 트랜잭션 어노테이션의 동작 방식에 대해 조사하게 되었다. ✅ 필요한 사전 지식 2023.03.21 - [CS/디자인패턴] - Proxy Pattern | 프록시 패턴 2023.03.22 - [Programming/Spring] - [SpringBoot] 관점 지향 프로그래밍 AOP의 개념과 사용법 @Transactional이 적용되는 과정 간단하게 보기 Spring Boot의 @Transactional은 AOP와 Proxy를 기반으로 동작한다. 정확히는, @Transactional은 AOP를 이용하고, AOP..

Programming/Spring 2023.05.06

[SpringBoot] 관점 지향 프로그래밍 AOP의 개념과 사용법

🐣 AOP란? AOP(Aspect Oriented Programming)는 관점 지향 프로그래밍이라는 의미이다. 이때 말하는 관점은 아래와 같이 두 분류로 나눌 수 있다. 1. 여러 메서드에 공통으로 사용하는 기능 : 주로 로깅이나 성능 측정과 같은 부가적인 로직이 이에 해당한다. 2. 특정 메소드에서만 사용하는 핵심 기능 : 어플이 제공하는 핵심 비즈니스 로직 그렇다면, "AOP를 사용했을 때 어떤 이점"이 있을까 여러 메서드에 공통적으로 사용하는 코드를 분리함으로써 코드 중복을 줄일 수 있다. 또한, 이 코드에서 수정 사항이 생기면 모든 파일을 살펴볼 필요 없이 분리된 코드만 수정하면 되기 때문에, OOP원칙에 더 맞는 코드가 된다. 또한, 비즈니스 로직에는 부가적인 코드가 섞여있지 않으므로 가독성이..

Programming/Spring 2023.03.22

[Spring] Spring Security Filter와 JWT 동작 과정

JWT란? Json Web Token의 약자로, 토큰을 통해 접근 권한을 확인 할 수 있기 때문에 디지털 서명이라고 볼 수 있다. 이전에는 서버의 session에 로그인한 회원을 저장하고, client에서 session id를 쿠키로 가지고 있어야 했다. 이 방식은 서버 프로그램이 여러 개일 때, 일관성을 유지하기 힘들다는 문제점이 있다. 따라서 따로 어디 저장할 필요 없이 로그인했다는 것을 확인할 수 있는 JWT가 탄생했다. JWT의 구조 1. Header : Signature를 암호화한 알고리즘 정보 & 토큰 타입 정보 2. Payload : Claim 1) 등록된 Claim(필수X) : iss(발행자), exp(만료 시간), sub(제목), aud(청중) 등이 있다. 2) 개인 Claim 정보를 공..

Programming/Spring 2023.02.20

[Server] Jenkins & Github webhook 설정하기

*Jenkins는 미리 설치한 상태로 진행했습니다. 1. Github Credential Github에서 Personal access token을 생성한다. jenkins에서 github로 접근할 때, 사용자 access token으로 인증 받고 접근할 수 있다. - github에서 내 프로필 > settings > Developer settings - Personal access tokens > Tokens(classic) - [Generate new token] 클릭 토큰 생성 완료가 되었고, 다시 못보니까 잘 보관해두어야 한다. 2. Github webhook 설정 webhook을 설정할 프로젝트 repository > Settings > Webhooks > [Add webhook] webhook은..

Programming/Server 2022.12.10

[Server] AWS EC2 스왑 활용해서 메모리 확장하기

*메모리 상태 확인 명령어 free 왜 메모리를 확장해야하는가? EC2 프리티어용 t2.micro 램은 1GB밖에 안된다. Spring boot를 gradle build하는 순간 서버가 폭발해버릴 것이다. 스왑파일을 만들어 메모리영역을 늘려보자 Swap이란? 디스크의 일부를 메모리처럼 사용하는 것! 즉, RAM이 부족하기 때문에, HDD의 일부를 RAM처럼 사용하는 것이다. 스왑 크기 계산 물리적 RAM의 양 권장 스왑 공간 RAM 2GB 이하 RAM 용량의 2배(최소 32MB) RAM 2GB 초과, 32GB 미만 4GB + (RAM - 2GB) RAM 32GB 이상 RAM 용량의 1배 스왑 공간은 절대 32MB 미만이 되지 않아야 한다. EC2의 free tier에서는 RAM 1GB이므로, 스왑은 RA..

Programming/Server 2022.12.01

[Server] MariaDB Docker Container 생성하고 실행하기

1. 제공되는 MariaDB image pull docker pull mariadb:[버전명] - 버전명 미기입 시, 최신 버전으로 다운로드 된다. +) 생성된 이미지 확인 docker image ls 2. Docker run docker run --name mariadb-container -v $(pwd)/[db정보_저장할_폴더명]:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=비밀번호 -e MYSQL_DATABASE=DB이름 -d -p [외부포트]:3306 [이미지명] --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci //예시 docker run --name mariadb-container -v $(pwd)..

Programming/Server 2022.11.27

[SpringBoot] ResponseEntity의 개념과 구조

1. ResponseEntity란? *HttpEntity를 상속 받아서, response용으로 만든 클래스 결과 데이터와 HTTP 상태 코드를 이 클래스에 담아 보내면, HTTP 아키텍처 형식에 맞추어 보낸다. @ResponseEntity : 객체와 status를 함께 보내줄 수 있다. @ResponseBody : 객체를 넣으면, 알맞은 header, body, status를 만들어준다. @ResponseStatus(HttpStatus.OK) : 직접 상태를 만들어 줄 수 있다. *HttpEntity HTTP요청 또는 응답을 모두 처리하는 클래스 HttpHeader와 HttpBody를 포함하고 있다. HttpEntity클래스를 상속 받아 구현한 클래스가 RequestEntity, ResponseEntit..

Programming/Spring 2022.11.23

SpringBoot(2) - MyBatis 사용하기

*프로젝트 시작할 때, MyBatis 담아놓고 시작 1. Database 설정하기 application.properties 파일에 작성 #DataBase Setting spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?serverTimezone=UTC&useUniCode=yes&characterEncoding=UTF-8 spring.datasource.username=myid spring.datasource.password=mypw 2. Mapper 생성하기 1. src/main/java내에 Mapper 클래스 생성 package com.test..

Programming/Spring 2022.06.10

SpringBoot(1) - SpringBoot 시작하기

1. SpringBoot 프로젝트 생성하기 1. New > Spring Starter Project 2. 프로젝트 설정 Pacakge는 three depth (__.__.__)형식으로 적는 걸 권장한다. Next를 누르면 오른쪽 화면이 나오며, 여기서 사용할 라이브러리는 추가하면 된다. 2. View 실행시켜보기 1. html 실행 static 폴더에 .html파일을 생성해서 실행하면 된다. 2. JSP 실행 보통 Spring을 Rest 즉, 데이터 주고 받는 용으로만 쓰고 Front는 다른 Framework를 쓰기 때문에 아래와 같은 설정은 default로 되어있지 않다. 1) pom.xml에 JSP 관련 라이브러리 추가 javax.servlet jstl org.apache.tomcat.embed to..

Programming/Spring 2022.06.10

Spring(12) - REST API3: Status Code 사용하기

STATUS CODE에는 1XX ~ 5XX까지 다양하게 있다. 이때, 발생되는 error에 따라 다른 작업을 처리하도록 할 수 있다. 주로, error 종류에 따라 다른 페이지를 띄우기 위해 사용된다. 1. 응답에 따라 처리할 로직 구현 아래 예시에서는 500 Error일 경우, 받아온 메시지를 띄우고, 404 Error인 경우 페이지가 없다는 알림을 띄우도록 했다. $.ajax({ url:'${root}/user/list', type: 'GET', contentType:'application/json;charset=utf-8', dataType:'json', success: function(data){ makeList(data); }, error: function(xhr, status, error){ ..

Programming/Spring 2022.06.09