[CI/CD] SonarQube 사용하기 (AWS EC2 + K3s)
·
DevOps/CICD
이번 프로젝트에서 코드 품질을 자동으로 검증해 주는 SonarQube를 도입하게 되었다.사실 SonarQube를 처음 들어봐서 많이 우왕좌왕 했다.나 같은 사람들을 위해 연동 과정을 글로 남겨보려고 한다. SonarQube란?한마디로 프로그램 소스 코드의 품질과 보안을 자동으로 진단해 주는 오픈 소스 정적 코드 분석 플랫폼이다. 소프트웨어가 실행되기 전 단계에서 코드를 분석해 버그, 보안 취약점, 중복 코드, 유지보수가 어려운 코드를 탐지하고 시각화해 주는 역할을 한다. 이 SonarQube를 클라우드 환경에서 별도 서버 설치 없이 바로 사용할 수 있도록 SaaS 형태로 제공하는 것이 바로 SonarCloud다. GitHub, GitLab 등과 손쉽게 연동되어 CI/CD 파이프라인에 정적 분석 단계를 자..
[K3s + Docker] K3s 기반 서버 배포 (2)
·
DevOps/Cloud Native
지난 포스트에 이어 이번 포스트에서는 K3s 기반 서버 배포 내용을 다뤄보겠다. Redis 배포Redis는 K3s 클러스터 내부에서 ClusterIP 서비스로 배포한다. 외부에 노출하지 않고 NestJS 애플리케이션과 동일한 클러스터 내부에서만 접근 가능하도록 구성할 것이다. apiVersion: apps/v1kind: Deploymentmetadata: name: redis-deploymentspec: replicas: 1 selector: matchLabels: app: redis template: metadata: labels: app: redis spec: containers: - name: redis im..
[K3s + Docker] K3s 기반 서버 배포 (1)
·
DevOps/Cloud Native
이번 포스트에서는 K3s 클러스터 위에 앱 서버를 배포하는 첫 번째 과정을 작성해 보겠다.사실 K3s로 서버를 배포하는 게 과제였는데.. 처음이라 K3s에 대해 공부하고 배포 과정을 거쳤다.나 같은 초보들을 위해 K3s에 대해 짤막하게 소개해보겠다.!!K3s란?K3s는 Rancher Labs(현 SUSE)가 만든 경량화된 쿠버네티스 배포판이다. K3s도 K8s(Kubernetes)보다 절반 정도 가볍다는 의미에서 붙여진 이름이다.IoT, 에지 컴퓨팅, 개발/테스트 환경, 소규모 서버처럼 리소스가 제한된 환경에서 쿠버네티스를 쉽고 가볍게 돌리기 위해 설계되었다. 단일 바이너리( 항목 K8s K3s 목적대규모 프로덕션경량/소규모 환경설치 난이도복잡한 줄 명령어최소 메모리~2GB~512MB기본 DBetc..
[AWS] EC2 인스턴스 구축하기
·
DevOps/Cloud Platform
이번 포스트에서는 EC2 인스턴스를 구축하고 ssh로 접속하는 방법을 작성해보겠다. 인스턴스 생성 인스턴스 시작에 들어가 인스턴스를 생성해보자. 인스턴스 이름을 설정하고, OS와 인스턴스 유형을 선택해준다. 필자는 Ubuntu와 t3.small을 선택했다. 키 페어 생성키 페어를 새로 생성하거나 기존에 있던 키 페어를 선택한다. 키 페어 생성 후 다운로드 되는 .pem 파일은 ssh 접속 시 사용되기 때문에 가지고 있어야한다. 또한 기존에 있던 키 페어를 사용하더라도 .pem 파일을 가지고 있어야 ssh 접속이 가능하다. 보안 그룹 설정기존 보안 그룹을 선택하거나 보안 그룹을 생성해준다. 편집을 누르면 더 많은 보안 그룹 규칙을 설정할 수 있다. 포트프로토콜소스용도22TCP내 IPSSH 접속- EC2 인..
[NestJS] 네이버 뉴스 카테고리 지정하기 (3)
·
Development/Back-end
마지막 시리즈가 될 것 같다.이번 포스트에서는 Redis를 사용한 캐싱을 정리해볼 것이다. 전체 코드@Injectable()export class NewsCacheService { private readonly logger = new Logger(NewsCacheService.name); constructor( @Inject(CACHE_MANAGER) private readonly cacheManager: Cache, private readonly newsCrawlingService: NewsCrawlingService, ) {} private getCacheKey(category: Category): string { return `${CACHE_KEY_PREFIX}:${categ..
[NestJS] 네이버 뉴스 카테고리 지정하기 (2)
·
Development/Back-end
지난 포스트에서 네이버 뉴스에 카테고리를 지정하는 메서드를 구현했었다.이번 포스트에서는 네이버 뉴스에 카테고리를 지정 후 요청 파라미터와 일치하는 카테고리를 가진 뉴스를 반환하는 로직을 구현해보자. 전체 코드async fetchByCategory(category: Category): Promise { try { const query = CATEGORY_QUERY_MAP[category] ?? '뉴스'; const result: NewsItem[] = []; let start = 1; const FETCH_SIZE = 10; const TOTAL_ITEMS = 100; const MAX_START = 1000; while (result.l..
[NestJS] 네이버 뉴스 카테고리 지정하기 (1)
·
Development/Back-end
네이버 API 를 사용해 뉴스를 크롤링하고 반환 데이터를 보니 카테고리가 포함되지 않았다.뉴스를 카테고리별로 조회하는 기능을 구현하기 위해 우선 뉴스를 카테고리별로 분류해야 했다.이번 포스트에서는 Groq API로 뉴스에 카테고리를 지정하는 기능을 구현하는 과정을 작성해보겠다. 사실 처음은 Gemini 였다처음엔 Gemini API 무료 티어를 사용했었다.const response = await fetch( `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${apiKey}`, { method: 'POST', headers: { 'Content-Type': 'applicat..
[NestJS] Pipe 사용하기
·
Development/Back-end
인프런(Inflearn) - 따라 하며 배우는 NestJS 강의를 참고한 글입니다.https://www.inflearn.com/course/%EB%94%B0%EB%9D%BC%ED%95%98%EB%8A%94-%EB%84%A4%EC%8A%A4%ED%8A%B8-%EC%A0%9C%EC%9D%B4%EC%97%90%EC%8A%A4/dashboard?cid=327527 Pipe란?@Injectable() 데코레이터로 주석이 달린 클래스이다.데이터 변환 또는 데이터 유효성 검사 등의 작업을 수행하는 데 사용된다. 데이터 변환(Data Transformation)입력 데이터 형식을 원하는 형식으로 변환하는 것을 말한다.데이터 유효성 검사(Data validation)입력 데이터를 평가하고 유효하지 않은 데이터가 수신되면..
[회고] 2025년도 3분기 회고
·
회고/2025
내 열여덟이 이렇게 금방 사라질줄 몰랐다..좀 더 열심히 할걸 후회되기도 하고, 어떻게 보면 배운 점도 많았던 한해였다.이번에도 역시 지난 4개월을 돌아보며 회고를 작성할 예정이다.다들 새해 복 많이 받으세요 (/≧▽≦)/ SEP 홍보부장으로서 학생자치회의 임원이 되어 일하기 시작했던 게 9월이었다.이때는 정말 열정 넘치고 어떤 행사든 다 잘 마무리하고자 했었다. 당시 임원들이 선정되고 나서 전교생 앞에서 인사했던 날 저녁에 올린 게시글 같다.갤러리 뒤져보다가 발견했는데 은근 추억이다. OCT 두 번째 대구 ICT 방문이었다. 저번에는 여기저기 둘러보지 못해 아쉬움이 남아서, 이번에는 친구들이랑 여기저기 둘러봤다. 같은 마이스터고 부스도 가봤는데 재밌는 게 많았다. 평소에 관심 있던 기업도 ..
[Spring Boot] 어댑터 패턴 구현하기(with. JPA, Redis)
·
Development/Back-end
최근 프로젝트에 JWT를 통한 인증/인가와 로그아웃 처리를 위해 Redis를 사용하여 회원 관리 기능을 구현했다.그러다 선생님의 조언으로 어댑터 패을 알게 되었고, 바로 도입을 시도했다. 어댑터 패턴이란?클래스가 어댑터로 사용되는 패턴을 말한다. 어댑터는 서로 호환되지 않는 단자를 호환시켜 작동하게끔 한다. 객체 지향 프로그래밍 관점에서 본다면, 호환성이 없는 인터페이스들로도 동작할 수 있게 변환해주는 것이 어댑터 클래스이다. FlowService → RefreshTokenRepository (인터페이스) ↑ | ┌───────────┴───────────┐ | | JpaAdapter ..