Team project 38

[Refactoring] 인덱스 최적화를 통한 코딩존 예약 시스템 성능 개선

문제 상황사용자들은 서비스 시작 직후에 학기 초반에 코딩존 예약 시스템을 사용하면서 만족스러운 반응을 보였으나, 학기 말에 실시한 설문 조사를 통해 예약 시스템의 반응 속도 저하를 지적하였다. 구체적으로, 코딩존 메인 페이지에서 예약할 수업들이 렌더링 되는 시간이 약간 느려져 사용자 경험이 저하되는 문제가 발생했다.mysql> select COUNT(*) from codingzoneclass;+----------+| COUNT(*) |+----------+| 129 |+----------+1 row in set (0.02 sec)현재 사용 중인 codingzoneclass 테이블은 컬럼이 9개 있으며, 학기 동안 매주 약 10개의 행이 추가되고 있다. 학기 종료 후 측정해본 결과로 총 행 수는 ..

[Refactoring] 패키지 구조 리팩토링: 레이어별 → 도메인별

"AdvICE" 웹서비스 백엔드 코드가 기존에는 레이어별(layer-based) 패키지 구조로 설계되어 관리와 유지보수가 어려웠다. 이에 도메인별 패키지 구조로 리팩토링을 진행했다. 이번 글에서는 기존 패키지 구조의 단점과 새로 도입한 패키지 구조의 장점, 그리고 구체적인 변경 사항과 그 이유를 공유한다. Spring MVC 패키지 구조스프링(Spring) 프레임워크는 다양한 방식으로 애플리케이션의 패키지를 설계할 수 있다. 그중에서도 기능별(feature-based) 패키지 구조와 레이어별(layer-based) 패키지 구조가 자주 사용된다. 각각의kanado2000.tistory.com 1. 기존 레이어별 패키지 구조의 단점기존 레이어별 패키지 구조├── common├── config├── contr..

[AdvICE] 유지보수중 클라이언트 서버에서 비밀번호가 평문으로 보내지고 있다는 피드백

서비스 운영 중 한 사용자가 회원가입 또는 로그인 과정에서 클라이언트에서 서버로 비밀번호가 암호화되지 않고 평문으로 전송된다는 피드백을 받았다. HTTPS를 사용하여 데이터 전송 과정에서 보안을 강화할 수 있지만, 클라이언트 측에서 여전히 개인정보나 비밀번호가 노출될 수 있다는 점을 간과할 수 없다. 특히 같은 네트워크 환경에서 예를 들어 공용 와이파이를 사용하는 경우 악의적인 공격자가 쉽게 접근할 위험이 있다.1. 초기 대응 계획처음에는 이 문제를 해결하기 위해 클라이언트 측에서 SHA-256 해시 알고리즘을 사용하여 비밀번호를 암호화한 후 서버로 전송하는 방법을 빠르게 도입하려고 했고, 이 방식은 사용자가 입력한 비밀번호가 네트워크를 통해 전송되는 동안 노출되는 위험을 줄일 수 있을 것으로 보였다.하..

[AdvICE] AWS CloudFront와 EC2 간 HTTPS 통신 설정 및 Nginx로 Mixed Content 오류 해결

목차1. Nginx 프록시 설정2. Mixed Content 오류3. React 애플리케이션에서 API 요청을 CloudFront 도메인으로 변경4. CloudFront 설정에서 경로 프록시 구성 변경5. Nginx 서버에서 HTTPS 설정 추가 AWS CloudFront로 프론트 정적 웹 사이트(React)를 배포 완료했고, 이제는 EC2로 배포한 백 서버(SpringBoot)의 API를 연동해줘야한다.  HTTP와 HTTPS의 차이점과 그 중요성인터넷을 이용하면서 웹사이트 주소 앞에 http://나 https://를 본 적이 있을 것이다. 이 두 프로토콜은 모두 웹에서 정보를 주고받는 방식이지만, 그 사이에는 중요한 차이점이 존재한다. 이번 글에kanado2000.tistory.com 우선, AWS ..

[AdvICE] AWS EC2 인스턴스를 통해 (SpringBoot 프로젝트를 위한) 서버 구축

목차1. Region을 서울로 변경2. 보안 그룹 설정3. EC2 인스턴스 생성3.1 키 페어 및 PEM 파일 설정3.2 네트워크 설정: 보안 그룹 지정4. 인스턴스 접속 1. Region을 서울로 변경AWS에서 리전(Region)은 지리적으로 서로 다른 위치에 있는 데이터 센터 그룹을 의미한다. 리전에 따라 인스턴스의 관리 설정 및 비용이 달라지므로 주의해야 한다. 이번 가이드에서는 서울 리전을 기준으로 인스턴스 생성을 진행하겠다.참고: AWS는 전 세계 여러 위치에 리전을 배치하여 최적의 성능과 가용성 제공2. 보안 그룹 설정보안 그룹 구성은 쉽게 방화벽을 설정하는 단계라고 생각하면 된다. 네트워크를 통해 해당 인스턴스에 어떤 접속방식을 어디까지 허용할지 설정해준다.AWS 콘솔의 좌측 메뉴에서 보안 ..

[AdvICE] AWS S3와 AWS CloudFront로 정적 (React)웹 사이트 배포 및 GitHub를 이용한 자동 배포 설정

목차1. S3 버킷 생성2. S3 버킷 정책 업데이트3. CloudFront 배포 생성4. 사용자 생성(S3, CloudFront 권한 키 발급)5. 정적 사이트(React) 업도르 및 GitHub 자동 배포6. 배포된 URL 확인7. 403 Forbidden 오류 (새로고침 오류)1. S3 버킷 생성 효율적인 클라우드 스토리지 AWS S3의 개념AWS S3(Simple Storage Service)는 아마존 웹 서비스(AWS)에서 제공하는 확장 가능하고 안전한 객체 스토리지 서비스이다. AWS S3는 파일, 이미지, 비디오, 문서와 같은 데이터를 저장하고 관리하는 데 최적kanado2000.tistory.com1) 우선 AWS 검색창에서 S3를 검색하고, 버킷 만들기 버튼을 누룬다.2) "버킷 만들기"..

[AdvICE] Spring Data JPA의 @Query 어노테이션 사용 방법과 메소드 이름을 이용한 쿼리 자동 생성 방법 차이점

1. @Query 어노테이션 사용 방법정의: @Query 어노테이션은 Spring Data JPA에서 제공하는 기능으로, 직접 SQL이나 JPQL 쿼리를 메소드 위에 선언할 수 있게 해준다. 이를 통해 JPA 메소드 이름 규칙에 맞지 않는 복잡하거나 특수한 쿼리도 구현할 수 있다.장점:1. 복잡한 쿼리를 자유롭게 작성할 수 있어, 데이터베이스의 모든 기능을 최대한 활용할 수 있다.2. 특정 데이터베이스 함수 사용, 고급 조인 조건 등 JPA에서 지원하지 않는 기능을 사용할 수 있다.단점:1. SQL 문법 오류가 런타임에서만 발견되기 때문에 개발 과정에서 오류를 사전에 발견하기 어렵다.2. 쿼리가 복잡해질수록 코드의 가독성이 떨어지고 유지보수가 어려워질 수 있다. 2. @Query 사용 중 발생한 오류와 ..

[AdvICE] React 프레임워크로 "수업 등록 페이지" 구현

1. 구현 페이지  소개"AdvICE"의 두 번째 서비스인 코딩존 예약/관리 시스템의 수업 등록 페이지를 개발하게 되었다. 갑작스럽게 프론트엔드 작업을 맡게 된 이유는 아직 구현해야 할 페이지들이 남아있는 상황에서 "AdvICE" 서비스를 개강(9월) 전에 배포하고 학과 사람들에게 소개하기 위해서입니다.  수업 등록 페이지는 과 사무실 조교가 사용할 페이지로, 세 가지 주요 컴포넌트로 구성되어 있다. 이 세 컴포넌트는 각각 다음과 같은 기능을 제공한다:수업 등록 컴포넌트기능 설명: 이 컴포넌트는 조교가 매주 학생들이 예약할 수 있는 수업들을 등록할 수 있게 한다. 각 수업의 요일, 시간,날짜, 조교 이름, 과목명, 학년, 인원과 같은 필요한 정보를 입력하여 수업을 새롭게 생성한다.조 정보 등록 컴포넌트기..

[AdvICE] "코딩존 예약 및 괸리 시스템" 설계

'AdvICE' 웹 서비스의 두 번째 기능인 "코딩존 예약 및 괸리 시스템" 구현 시작."코딩존 예약 및 괸리 시스템"에 대해 설명드리면, 이는 학기마다 진행되는 필수 보충 수업인 "코딩존"을 예약하고 출/결을 관리할 수 있는 시스템이다. 학생들은 "코딩존"을 일주일 전에 미리 예약하고, 수업 시간 동안 선배에게 코딩 관련 질문을 하거나 선배가 진행하는 수업을 듣게 된다. 나는 1,2 학년 때는 코딩존 수강생으로써, 3학년 때는 조교로써 양쪽 경험을 해봤고 양쪽에서 코딩존 시스템은 많은 불편함이 있다는 것을 깨달았고 언젠가는 꼭 해결하고 싶다는 생각을 해왔다. 현재 코딩존 예약은 외부 사이트를 통해 이루어지고 있으며, 여러 가지 문제점이 있다.코딩존 조교 입장에서의 불편한 점들:예약 가능 요일은 목요일부..

[AdvICE] 민감한 데이터의 노출 및 예외 처리

1. 민감한 데이터 노출 처리자격 증명 데이터, 개인 키와 같은 값들을 스프링 프로젝트의 application.properties 또는 application.yml 파일 등의 구성 파일에서 설정하면 소스 코드를 볼 수 있는 모든 사람이 이러한 개인 값에 접근할 수 있다.한가지 더 중요한 것은 로그를 통해서 민감한 데이터가 노출되서는 안 된다.다음음 로그에 기록해서는 안 될 정보를 포함하는 메시지 예다.[오류] 요청 서명이 잘 못 되었습니다. 사용할 올바른 키는 xxx입니다.[경고] 사용자 이름과 암호가 틀렸습니다. 사용자의 이름 x의 암호는 z입니다.[정보] 사용자 x의 올바른 암호 y를 이용하여 로그인 성공했습니다. 2. 예외 처리웹/앱 어플리케이션에서 어떤 기능을 올바르게 구현하는 것도 중요하지만 그..