☃️❄️개발일지, 트러블슈팅❄️☃️ 9

[트러블 슈팅] 배포 후 webp 확장자 변환 에러 (GLIBC_2.29 'not found')

문제 상황이전에 올렸던 webp 확장자 변환 코드https://2junbeom.tistory.com/162 [개발일지] webp 확장자를 통한 이미지 제공 최적화 작업공식 홈페이지 개발 중 프론트엔드에서 이미지를 띄우는 데 시간이 너무 오래 걸린다는 문제점을 확인했다. 이미지의 해상도가 너무 높아, 이미지의 크기가 큰 것이 문제였다.이렇게 큰 크기의2junbeom.tistory.com로컬에서는 잘 돌아 갔는데 서버에서는 에러가 발생하는 문제가 발견되었다 로그 탐색우선 로그를 살펴봤지만, WARN c.t.t.g.e.GlobalExceptionHandler - webp 확장자로 이미지 변환에 실패했습니다.내가 작성한 기본 에러 메세지만 글로벌 핸들러에 잡히고 추가적인 로그는 발견하지 못했다. 좀 더 자세한..

[개발일지] Fetch join을 통한 N+1 문제 해결

부트캠프를 하고 있는데 학습 자료를 블로그에 올리면 안 된다는 공지 때문에 공부 내용을 못 올리고 있습니다 ㅠ  따로 진행 중에 있는 프로젝트에서 fetch join을 쓸 상황이 생겼고,쓸 것도 없겠다 아직 블로그에서 한 번도 다뤄보지 않은 fetch join을 통한 N+1 문제 해결을 정리해보겠습니다 ~ 문제 상황위는 쿼리가 두 번 나가는 문제 상황입니다. 현재 엔티티에는 끔찍하게 연관관계가 걸려있는데요 Fetch Type을 Lazy로 설정해두었기 때문에 resume 엔티티를 조회했을 때, ManyToOne 관계를 제외한OneToMany 관계에 있는 것들은 전부 프록시에 담기고 실질적인 데이터가 담기지 않습니다. 이 프록시 객체에 접근할 때 실제 쿼리가 나가게 되는 것인데요 이 때문에 resume 엔티..

[개발일지] 시스템 아키텍처 설계

1차 배포를 위해 시스템 아키텍처를 설계하고 구현해봤다.  레디스는 외부 서버를 사용하기 때문에 Region 바깥에 두었다. 추가로 고려해야할 점NAT 게이트웨이는 비용이 꽤나 발생한다.비용 절감을 위해 S3에 연결할 때는 VPC 엔드포인트를 사용CloudWatch에 연결할 때는 ENI를 사용이를 통해 비용 절감을 얻을 수 있다. AWS 자격증을 빠르게 취득하고 시스템 아키텍처를 더 보완해야겠다!

[개발일지] Auto Scaling Group 적용과 무중단 배포(Rolling Update) 및 CI/CD 파이프라인 설정

ASG 적용 배경우선 우리 프로젝트는 지난 데이터가 부족하기 때문에 트래픽의 예측이 불가능하다.이러한 상황에서 단순하게 서버를 수직 스케일링 하는 것은 자원의 낭비일 뿐이다. 좀 더 유연하게 트래픽에 대처하고, 서버 가용성을 높여 24시간 서버의 다운 없이 서비스를 제공하기 위해우리는 Auto Scaling Group을 적용하기로 하였다. User Data 적용시작 템플릿에서 유저 데이터를 정의해줘야 한다.유저 데이터란 인스턴스를 처음 시작할 때 실행되는 스크립트를 의미한다.이 스크립트를 통해 우리는 인스턴스를 우리가 원하는 대로 초기화 할 수 있다.https://2junbeom.tistory.com/116 [AWS] aws 강의 섹션 5 (EC2 심층 분석 - EC2 유형, 접속 방법, 구성 옵션, 보..

[개발일지] webp 확장자를 통한 이미지 제공 최적화 작업

공식 홈페이지 개발 중 프론트엔드에서 이미지를 띄우는 데 시간이 너무 오래 걸린다는 문제점을 확인했다. 이미지의 해상도가 너무 높아, 이미지의 크기가 큰 것이 문제였다.이렇게 큰 크기의 이미지가 동시에 8개가 제공되니, UX가 낮아질 것이 분명했고 대책을 찾고자 했다. 이를 해결하기 위해 처음엔 해상도를 낮추는 방식을 생각했었다. 여러 가지 해결책을 찾아보던 중 webp라는 확장자를 알게 되었고, 이를 프로젝트에 적용한 내용을 정리해보려 한다. Webp 확장자란?WebP는 구글에서 개발한 이미지 파일 형식으로, JPEG, PNG, GIF와 같은 기존 이미지 형식에 비해 더 높은 압축률을 제공한다.WebP는 두 가지의 압축 방식을 대표적으로 제공한다.손실 압축 (Lossy Compression): JPEG..

[트러블 슈팅] 로그인 방식과 보안에 대한 고찰 - 2 (jwt 토큰과 XSS, CSRF 공격, 액세스 토큰과 리프레시 토큰의 저장 위치)

https://2junbeom.tistory.com/142 [트러블 슈팅] 로그인 방식과 보안에 대한 고찰 - 1 (세션 로그인 방식과 jwt 토큰 발급 방식)실제로 운영할 서버를 만들면서, 보안에 대해서도 신경을 굉장히 많이 쓰게 되었다.XSS 공격과 CSRF 공격을 막기 위해 공부한 것들을 정리하겠다. 우선 세션 로그인 방식과 jwt 토큰 발급 방식에2junbeom.tistory.com지난 포스트에서 로그인 방식을 선정해보았다. 이제 선정한 jwt 토큰 기반 로그인 방식을 사용할 때 어떤 보안 조치를 해야하는지 살펴보도록 하겠다. 우선 XSS 공격이란 무엇일까? XSS 공격Cross Site Scripting의 약자로 게시판이나 웹 메일 등에 자바 스크립트와 같은 스크립트 코드를 삽입해전혀 다른 기능..

[트러블 슈팅] 로그인 방식과 보안에 대한 고찰 - 1 (세션 로그인 방식과 jwt 토큰 발급 방식)

실제로 운영할 서버를 만들면서, 보안에 대해서도 신경을 굉장히 많이 쓰게 되었다.XSS 공격과 CSRF 공격을 막기 위해 공부한 것들을 정리하겠다. 우선 세션 로그인 방식과 jwt 토큰 발급 방식에 대해 비교해 보도록 하겠다. 세션 로그인 방식과 jwt 토큰을 활용한 로그인 방식두 가지 중 우리는 프로젝트에 어떤 로그인 방식을 도입해야 할까? 우선 세션 로그인 방식이 뭔지부터 알아보도록 하자 세션 로그인 방식사용자가 로그인을 시도한다.데이터베이스에서 인증 정보를 확인한다.세션 id를 발급하고 해당 정보를 세션 저장소에 저장한다.세션 id를 쿠키로 설정해서 프론트엔드에 반환한다.세션 id가 쿠키에 설정된 이후 플로우사용자가 요청을 보낸다.쿠키에 세션 id 정보가 포함돼 있다.서버의 세션 저장소에서 세션 i..

[트러블 슈팅] 협업 간 데이터베이스 ddl 충돌 문제

이제 프로젝트를 진행하며 발생하는 문제 해결과정을 정리해보려고 한다.. 파이팅 ! 문제 없이 돌아가고 있던 우리의 개발 서버가 갑자기 작동하지 않게 되었다 작업이 끝난 브랜치를 머지하고 나서 ci/cd를 통해 다시 배포를 진행한 것인데,이 이후에 문제가 발생해서 당연히 새로 머지한 브랜치에 문제가 있다고 생각을 했다. 하지만 머지하기 전에 다 테스트를 진행하고 머지를 한 것이어서, 서버가 돌아가지 않을 이유가 없었고, 도대체 어디서 문제가 발생한 것인지 로그를 뒤적 거려보았다.  에러 로그 발견 ! alter table if exists study add column start_date timestamp(6) not null2024-11-29 15:51:18 [main] WARN o.h.t.s.i.Exc..

[개발일지] TAVE 공식 홈페이지 개발 1. (개발, 백엔드, 브랜칭 전략, 커밋 컨벤션, 로깅 규칙, PR 템플릿)

TAVE 동아리 운영진을 하던 중 운영진끼리 공식 홈페이지 개발을 하기로 했다. 메인 페이지와 관리자 페이지 서류 모집, 채점 등등 모든 것을 홈페이지에서 처리하기로 해서 살짝 규모가 큰 프로젝트가 될 거 같다. 여러 프로젝트를 해봤지만 앞으로 계속 운영할 사이트를 만드는 것은 처음이기 때문에실제 운영 환경을 생각하며 꼼꼼히 프로젝트를 진행해야겠다. 백엔드 파트장 역할을 맡아 살짝 부담이 되긴 하지만 열심히 해봐야지 ,, 각종 컨벤션 및 브랜칭 전략우선 본격적으로 개발에 들어가기 전에 각종 컨벤션과 브랜칭 전략을 먼저 정하기로 했다. 커밋 컨벤션PR 컨벤션 (템플릿)로깅 규칙브랜칭 전략이렇게 네 가지를 먼저 정했다. 커밋 컨벤션제목문장 보다는 구문ex 기능 구현했습니다 → 기능 구현마지막 온점 사용 X ..