- nginx
- ORM
- PYTHON
- 자바
- 문자열
- AWS
- 데이터베이스
- join
- 프로그래머스
- spring security 6
- SSL
- mysql
- CloudWatch
- 스프링부트
- ci/cd
- 스프링
- hibernate
- springboot
- spring boot
- sql
- java
- spring
- Django
- select
- jpa
- @transactional
- string
- Docker
- 1차원 배열
- spring mvc
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
목록분류 전체보기 (198)
개발하는 자몽
지난 글에서는 AWS가 기본적으로 여러 네임스페이스와 지표를 제공하는 것을 확인했었다. 기본 제공 데이터 외에도 사용자가 커스텀 지표를 생성하여 이 지표가 속하는 네임스페이스를 생성할 수도 있다.커스텀 지표 수집커스텀 지표를 생성하는 이유는 AWS에서 기본 제공하는 지표로는 확인할 수 없는 항목들이 있기 때문이다. EC2 메모리 및 디스크와 관련된 지표들은 AWS에서 기본 제공하지 않고, EC2 인스턴스에 CloudWatch agent를 설치하여 커스텀 지표를 수집하도록 설정해야 한다. 진행하는 환경은 EC2 - Ubuntu 24.04 LTS이다. 🔗기본 제공하지 않고 OS에 설치해야 하는 이유 Agent 설치IAM 역할 생성EC2에게 부여할 IAM 역할부터 생성하자. 이 역할은 EC2가 지표를 수집하..
목적Amazon CloudWatch는 AWS, 온프레미스 및 기타 클라우드에서 리소스 및 애플리케이션을 관측하고 모니터링할 수 있는 서비스이다. 이를 이용하여 성능 변화에 대응하고 리소스 사용을 최적화하고, 운영 상태에 대한 인사이트를 얻을 수 있다. CloudWatch는 로그(수집, 보관 등) 및 수집하는 커스텀 지표 등이 적을 때는 비용이 크게 청구되지 않지만, 잘 모르고 사용하면 예상하지 못한 금액을 보게 되는 서비스라고 생각한다. 비용에 관한 자세한 내용은 공식 문서를 참고하자. 나도 많이 아는 건 아니지만, 알아두면 좋은 내용들을 기록 및 공유를 위해 작성하려고 한다. 다음 내용을 다룰 예정이며, 이 포스팅에서는 우선 용어 소개만 다루려고 한다. 알아두면 좋은 CloudWatch 용어 소개사..
목표GitHub Actions Self-hosted runner 기능을 사용하여 AWS EC2 인스턴스에 배포되고 있는 FastAPI 애플리케이션에 대해 CI/CD를 적용하자. 또한 환경 변수(.env) 적용 및 간단하고 편리한 빌드를 위해 Docker를 함께 사용할 것이다. 보통 GitHub Actions를 사용하여 구축하는 CI/CD의 빌드는 깃허브에서 진행하게 된다(GitHub-hosted runner). Self-hosted runner는 깃허브가 아닌 사용자가 지정하는 컴퓨팅 자원에서 빌드를 진행하도록 하는 시스템이다. 이 글에서는 EC2에서 빌드를 진행하도록 할 것이다. 이 과정에서는 다음의 기능들을 사용하여 CI/CD를 구축한다. GitHub Actions Self-hosted runn..
꽤... 늦었는데, 지난번에 구축한 CI/CD에 블루-그린 무중단 배포를 적용해 보자.📌지난 글: 2025.07.28 - [Architecture & Tool/AWS] - CI/CD 구축하기: GitHub Actions (OIDC) + Amazon S3 + Amazon CodeDeploy 보안 그룹ALB 보안 그룹 생성ALB를 생성하기 전에 보안 그룹을 만들자. EC2 > 보안 그룹으로 이동하여 보안 그룹 생성을 클릭한다.아웃바운드 규칙은 건들지 않고 인바운드 규칙만 편집한다. 유형: HTTP소스 유형: 사용자 지정소스: 0.0.0.0/0EC2 보안 그룹 수정 애플리케이션에 대한 요청을 ALB를 통해서만 받을 수 있도록 이전 포스트에서 생성했던 EC2 보안그룹을 수정해야 한다. 이전 포스트에서 두 개..
📌공유도 있지만, 기록이 더 큰 목적... Windows 11, Gradle/SpringBoot.AWS에서 "아.. Fargate 좋은데... 안쓰나... 진짜 좋은데..." 라고 계속 홍보하는 것 같아서 이번 프로젝트에서는 도대체 얼마나 좋길래? 하고 사용해봤다. 후기! EC2 보다 비용이 좀(꽤) 나가지만, 서버 설정이 편리하다. 서버 설정 자체는 신경을 안쓰게 되긴하는데 인프라는 건들게 너무... 많다... 자세히는, 퍼블릭 서브넷에 배포한다면 정말 금방 끝낼 수 있다. 하지만 프라이빗 서브넷에 배포한다면 많은 설정들이 기다리고 있다. (이때 배포하는 과정에서 Private Link 관련으로 삽집을 많이해서 기록용으로 작성하게 됐다) 불편한 점이 꽤 있다. EC2로 배포하면 당연했던 것들이 서..
AWS EC2 인스턴스(Ubuntu 24.04) 한 대에 배포되고 있는 Gradle/SpringBoot 서버에 대해서 OIDC를 이용해서 CI/CD를 구축해 보는 글입니다. EC2 인스턴스 생성은 다루지 않습니다. ⏭️다음 글: CI/CD에 블루-그린 무중단 배포 적용하기: AWS ELB, AWS Auto Scaling Groups(ASG) ⭐항상 AWS 리소스를 다룰 땐 참고하고 있는 글이 최신 버전인지 확인하기⭐ 작성 계기GitHub Actions를 CI 툴로 사용하는 대부분의 소개글은 GitHub Actions에서 AWS로 접근하기 위해 IAM 액세스 키를 많이 사용한다. 이때 여러 가지를 고려했을 때 IAM 액세스 키보다는 OpenID Connect(OIDC) 사용을 더 권장한다고 한다...
SQLite를 로컬 DB로 사용하고 있는 프로젝트에서 잊을만하면 마주치는 에러가 있어서 정리한다. 프로젝트에서는 Hibernate 버전 6을 사용하고 있다. 상황로그인 API 이후 사용자 정보 수정 API를 시도했을 때 아래와 같은 예외가 발생했다. org.sqlite.SQLiteException: [SQLITE_BUSY] The database file is locked (database is locked) `application.yml`에서 `datasource` 설정은 아래와 같다. spring.datasource: url: jdbc:sqlite:project.db?busy_timeout=5000 driver-class-name: org.sqlite.JDBC 추가적으로 알아야 할 정..
Notice 이 글은 개인적으로 읽기 편하라고 개인 노션에 막 정리한 글을 공유한 것입니다. 스스로가 정리한 것을 까먹지 않기 위함... 배경 Hexagonal Architecture인지 포트 어댑터 패턴인지... 여러 개념들이 등장해서 어딘가 적어두면서 생각하지 않으면 이해하기가 너무 어렵다.그래서 라인에서 작성한 글을 메인으로 잡고 잘 모르는 개념을 검색하며 노션에 막! 정리했다. https://www.notion.so/Hexagonal-Port-Adapter-22ee4ff26d86807497cbe5ddd763765d?source=copy_link 후기살짝 프로젝트 적용해 보면서 느낀 점은 우선... 다 좋은데 코드 작성량이 정말 많이 많아진다. 필요한 무언가가 있으면 이걸 위해서 작성해야 하는 코드..
스프링 시큐리티는 `@AuthenticationPrincipal` 애노테이션을 제공한다. 이는 `Authenticaiton.getPrincipal()`를 메서드 인자로 가져오는 데 사용되며, 보통은 `UserDetails` 타입이나 해당 타입의 커스텀 구현체로 가져오게 된다. `Authentication.getPrincipal()`에는 username, password(AuthenticationManager 구현에 따라 없을 수 있음), role과 같은 사용자 정보가 담겨있다. 간단하게 해당 애노테이션을 그대로 사용해도 되지만, 더 편리하게 사용할 수 있다. 이는 공식문서에서도 안내하고 있다. 실제로 구현해 보자. 여기서는 커스텀 애노테이션 이름을 `@CurrentUser`로 설정했다.import ..
📌 Spring Security 6.5.0 기준 작성 로그인을 구현할 때 보통 JWT를 많이 사용하는데, 이번에는 세션 기반으로 구현했다. 일단... JWT를 사용하여 로그인과 로그아웃을 구현하면 신경 쓸 것이 꽤 많다. 특히 로그아웃이 복잡한 것 같다. 사용자 인증을 위한 액세스 토큰(Access Token) 및 액세스 토큰 재발급을 위한 리프레시 토큰(Refresh Token) 생성요청 시 사용된 토큰이 유효한지 검증(만료, 변조 여부 등)로그아웃을 해도 액세스 토큰의 만료기간이 남아있다면 재사용 가능 → 이를 막기 위해 로그아웃 시 해당 액세스 토큰을 블랙리스트(저장소)에 저장 블랙리스트 저장소에 대한 액세스 속도를 높이기 위해 보통 Redis와 같은 인메모리 DB를 사용한다.한 번은 블랙..