728x90
전체 글
514

[AWS] EC2(Public Subnet)와 RDS(Private Subnet) 설정

일반적으로 Amazon EC2에 Application을 배포하고 EC2를 통해 RDS에 접근한다. 이때 RDS는 Public이 아니라 Private으로 설정하여 외부에서 접근할 수 없도록 해줄 것이다. 그러기 위해서는 먼저 VPC를 생성하고 Public Subnet과 Private Subnet을 생성해야한다. 그리고 Public Subnet은 IGW(Internet Gateway)를 통해 외부와의 통신을 하기 때문에 Router Table에 IGW로부터 들어오는 요청에 대한 접근을 허용해주도록 설정한다. 반면 Private Subnet은 IGW가 아닌 EC2가 속해있는 Public Subnet에 대한 요청에 대한 접근을 허용해주도록 설정해준다. VPC (Virtual Private Cloud) 생성 VP..

Temp 2024.03.27

게시글의 좋아요를 업데이트할 때 발생할 수 있는 동시성 이슈

위는 ERD의 일부만 캡처한 이미지로 article에는 좋아요 수를 나타내는 like_count 속성이 있고 각 좋아요의 정보를 담는 article_like 테이블이 있다. 게시글의 좋아요를 업데이트하는 경우는 추가할 때, 혹은 삭제할 때 뿐이다. 당연히 기본 값은 0이 되어야할 것이다. 좋아요 추가 좋아요를 추가할 때를 기준으로 테스트를 해볼 것이기 때문에 추가하는 코드를 살펴보자. 편의를 위해 추가적인 메소드 코드와 엔티티 코드는 생략한다. @Transactional public void addArticleLike(Long articleId, Long userAccountId) { // 좋아요 추가 articleLikeRepository.save(ArticleLike.of(userAccountId, ..

Java & Spring 2024.03.20

[Spring Mail] 존재하지 않는 메일은 어떻게 확인하지?

이메일의 형식은 spring validation 등을 사용하여 확인할 수 있다. 다음과 같이 말이다. @NotBlank @Email String email 그렇다면 만약 존재하지 않는 메일일 경우 전송에 실패하게 될 것인데 서버에서는 어떻게 이 사실을 알아 낼 수 있을까? 메일 전송 먼저 메일 전송을 수행해보기위해 spring mail을 사용해볼 것이다. Dependency implementation 'org.springframework.boot:spring-boot-starter-mail' spring mail는 jakarta.mail에 의존한다. Properties application.yml 에도 다음과 같이 속성 값을 설정해준다. spring: mail: host: smtp.gmail.com po..

Java & Spring 2024.03.19

[Spring Security] @EnableWebSecurity 무엇을 해주는 걸까?

Spring Security는 첫 번째로 Configuration을 추가해주어야한다. Configuration은 springSecurityFilterChain라 불리는 모든 security에 대한 Servlet Filter를 생성한다. 아래 예시 코드는 Spring Security의 가장 간단한 Configuration이다. import org.springframework.context.annotation.*; import org.springframework.security.config.annotation.authentication.builders.*; import org.springframework.security.config.annotation.web.configuration.*; @Configura..

Java & Spring 2024.03.04

[Spring Boot 2] Spring Security - 간단 인증 구현과 내부 구조

Spring Security를 사용한 로그인(인증) 기능을 구현한다. 간단한 예시로 먼저 구현해볼 것이기 때문에 DB는 사용하지 않는다. Dependency dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' t..

Java & Spring 2024.03.03

SseEmitter를 사용하여 특정 대상에게 메시지(알람) 전송

Dependency 추가 Spring Boot 2 기준으로 다음과 같이 Dependency를 추가해준다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-web' ... testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' } Security 설정 Spring Security 설정 부분은 이전에 ..

Java & Spring 2024.03.02

AOP를 적용하여 BindingResult 처리

Spring validation을 사용할 경우 다음과 같이 bindingResult를 받아 처리할 수 있다. @PostMapping public ResponseEntity testMethod( @Valid FormRequest formRequest, BindingResult bindingResult) { ... } 그리고 validation을 수행해야하는 api 요청이 하나 둘씩 추가되면 추가된만큼 bindingResult를 처리하는 코드 또한 추가로 작성될 것이다. 이처럼 boilerplate 코드가 발생하게되면서 비효율적인 코드가 되는 것이다. AOP annotation 정의 annotation을 추가한 method만 bindingResult를 처리할 수 있게 annotation을 정의한다. @Tar..

Java & Spring 2024.03.02

Spring RabbitMQ - publish/subscribe

Docker 먼저 Docker를 설정하여 컨테이너를 생성한다. Dockerfile FROM rabbitmq:latest docker-compose version: '1' services: rabbitmq: container_name: rabbitmq-test build: dockerfile: Dockerfile image: rabbitmq ports: - "15672:15672" - "5672:5672" Dependency spring boot 2 기준으로 dependency를 다음과 같이 추가해준다. implementation 'org.springframework.boot:spring-boot-starter-amqp' implementation 'org.springframework.boot:spring..

Java & Spring 2024.02.28

Spring WebSocket을 사용하여 특정 대상에게 메시지(알람) 전송

Dependency 추가 spring boot 2를 기준으로 다음과 같이 Dependency를 추가해준다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-websocket' implementation 'org.springframework.boot:spring-boot-starter-security' ... } Security 설정 특정 대상에게 메시지를 전송하려면 그 대상의 ID 또는 unique한 값을 알아야한다. 현재 예시는 authentication을 수행하여 유저의 ID를 사용한다. Princ..

Java & Spring 2024.02.26
728x90