
Filter, Interceptor, AOP를 사용하는 이유 웹 개발을 하면은 로그인 처리, 권한 체크, XSS 방어, 모바일과 PC 웹의 분기 처리, 로그 기록, 페이지 인코딩 변환 등과 같이 공통적으로 처리해야 할 업무들이 많이 있다. 이러한 공통 업무는 모든 페이지마다 중복된 코드를 작성해야 한다면 코드 중복이 많아지게 되고, 프로젝트가 커질수록 서버 부하가 커질 수 있으며 소스 관리도 어려워진다. 코드의 재사용성과 모듈화를 가능하게 함으로써 중복 코드를 줄이고 개발 효율성을 향상시킨다. 공통 부분과 핵심 로직을 분리하여 코드의 모듈화와 관심사 분리를 지원하며, 유연한 확장성을 제공한다. 관심사 처리를 가능하게 하여 보안, 로깅, 트랜잭션 관리와 같은 공통된 업무를 효과적으로 처리할 수 있다. Fi..

Inversion of Control (IoC) 프로그램 흐름이 더 이상 개발자에 의해 제어되지 않고, 대신 프레임워크나 컨테이너가 객체의 생성부터 생명주기 관리까지 전체적인 제어권을 가지는 디자인 원칙입니다. Dependency Injection (DI) 의존성 주입은 객체에 다른 객체를 주입하는 것을 의미합니다. 일반적으로 객체 간의 관계에서 하나의 객체가 다른 객체를 사용하거나 의존하는 경우입니다. 예를 들어, 클래스 A가 클래스 B를 사용하고자 할 때, A는 B에 대한 의존성을 가집니다. 이때 의존성 주입을 통해 클래스 A에 클래스 B의 인스턴스를 주입하면, A는 B 객체의 기능을 사용할 수 있게 됩니다. 필요한 의존성을 클래스 내에서 직접 생성하거나 찾는 대신, 외부에서 주입받아 사용하는 기법입..

개발환경과 배포환경이 다르다 보니 필요한 정보들이 서로서로 다르다. 그리고 아직 CICD를 진행하지 않아서 수동으로 배포를 하는 상황이다 보니 개발환경과 배포환경이 통일이 되어있지 않다. 앱을 실행할 때 로컬의 MySql과 서버의 RDS를 상황에 맞는 부분을 주석을 해제 하고 실행한다. 계속 수동으로 개발과 배포를 하다보니 너무 비효율적이다. 그래서 찾아보다가 application.properties에서 application.yaml이라는 포멧으로 바꾸어서 원하는 프로파일을 선택해서 스프링 부트를 실행한다. https://yjh5369.tistory.com/entry/Spring-boot-profile-%ED%99%98%EA%B2%BD%EB%B3%84%EB%A1%9C-%EC%84%A4%EC%A0%95%E..

지금 까지 구현된 기능별로 테스트 코드를 작성해서 코드의 신뢰성을 향상시키고, 코드의 품질을 높일 것이다. 나는 공연 정보에 대한 조회를 테스트 코드로 작성을 할 것이다. 먼저 새로운 가상의 데이터를 여러개 생성하고 내가 생성한 데이터 수와 조회된 개수와 동일한지 확인할 것이고 페이징되어서 조회되는 개수도 체크 할것이다. 테스트 코드를 처음 해보는 거라서 많이 부족하지만 열심히 작성해서 오류와 품질을 최대한 높여보겠다. EventService // 메인페이지 조회 @Transactional(readOnly = true) public Page getEvents(int page) { // ticketInfo의 isAvailable이 true인 Event를 ticketInfo의 date가 가장 빠른 순서대로 ..

지난주 부터 코드에 개선점이 있을 때 마다 Jmeter로 부하 테스트를 했었다. 10000명의 가상사용자가 예매하기를 동시 했을때 8000석만 예매되고 남은 2000석은 예매 되지 않고 오류를 일으켰다. org.apache.http.conn.HttpHostConnectException: Connect to 0.0.0.0:8080 [/0.0.0.0] failed: Connection timed out: connect 위에 있는 표를 보면 일정한 패턴으로 오류를 일이키는 모습을 볼수 있다. 그리고 오늘 Spring Boot 공식 문서를 보다가 서버가 주어진 시간에 수락하고 처리하는 최대 연결 수입니다. 제한에 도달하면 운영 체제는 "acceptCount" 속성을 기반으로 연결을 계속 수락할 수 있습니다. (..
오늘 H2 DB에서 RDS Mysql로 교체를 했는데 오류율이 70%이상 나타나고 LockAcquisitionException 오류가 나온다. 밑에 있는 코드는 예매하기 버튼을 누르면 사용자 정보와 예매정보가 데이터 베이스에 저장된다. 저장하기 전에는 해당되는 공연이 있는지 조회하고 없으면 예외처리가 된다. 그리고 해당하는 공연이 있으면 좌석수를 +1하고 정보를 저장한다. 여기서 문제가 되는것은 ticketInfo에서 조회가 되는 순간에 ticketInfo에 있는 좌석수 정보가 수정이 되어버려서 충돌이나고 롤백이 되는 상황인것으로 판단이 된다. @Transactional public Long makeReservations(ReservationRequestDto dto, User user) { Ticket..
지금 현재 챌린지 실전 프로젝트를 진행중이다. 이제 시작한지 4일차이다. 챌린지는 프론트가 없기 때문에 백이 모든 것을 다해야 한다. 그러다 보니 지금 까지 하지않았던 html을 만지니까 거부감이 많이 들었다. html과 css 코드를 작성하면서 삽질을 많이 했다. 그 중에서 login부분에서 삽질을 오래했다. function login() { let useremail = $('#login_email').val(); let password = $('#login_password').val(); if (useremail == '') { alert('ID를 입력해주세요'); return; } else if (password == '') { alert('비밀번호를 입력해주세요'); return; } $.ajax..

이미지 업로드 기능을 사용하면서 포스트맨에서 body에 있는 form-data를 이용했다. 여기서 form-data가 뭔지 어제 사용했던 consumes와 produces의 차이점을 정리해볼려고 한다. form-data form-data는 HTTP 요청에서 멀티파트(multipart) 형식으로 데이터를 전송하는 데 사용되는 인코딩 방식 중 하나라고한다. form-data는 일반적으로 HTML 요소를 통해 전송되는 파일 업로드 및 폼 데이터와 함께 사용된다. form-data는 다음과 같은 특징을 가진다고 한다. multipart/form-data는 일반적으로 POST 요청과 함께 사용됨. form-data 요청 본문은 각각의 파트(part)로 구성됩니다. 각 파트는 이름과 값(key-value) 쌍을 가..
프로젝트 시작 초기에 로그인, 회원가입을 구현 후 배포를 시작하고 처음으로 프론트분들과 접속을 시도했을때 CORS때문에 접속이 안되는 현상을 처음으로 경험했다. 우선 CSR, SSR이 뭔지 알아야 한다. 웹 애플리케이션을 렌더링하는 방식에 대한 차이가 있다. CSR이란? Client Side Rendering의 약자이다. CSR은 클라이언트 측에서 웹 페이지를 렌더링하는 방식입니다. 초기 페이지 로드 시 서버로부터 HTML, CSS, JavaScript 등의 리소스를 다운로드하고, 이후에 클라이언트 측에서 JavaScript를 사용하여 동적으로 웹 페이지를 렌더링합니다. 즉, 서버는 단순히 정적인 리소스를 제공하고, 클라이언트가 자바스크립트를 실행하여 동적으로 페이지를 구성합니다. CSR의 장점은 초기 ..
SQL은 Structured Query Language (구조적 질의 언어)의 줄임말이다. 관계형 데이터베이스 시스템(RDBMS)에서 자료를 관리 및 처리하기 위해 설계된 언어입니다. SQL 문법은 3가지로 나누어져있다. DDL (Data Definition Language 데이터 정의 언어) 테이블이나 관계의 구조를 생성하는데 사용하며 CREATE, ALTER, DROP,TRUNCATE 문 등이 있다. CREATE - 새로운 데이터베이스 관계 (테이블) View, 인덱스 , 저장 프로시저 만들기. DROP - 이미 존재하는 데이터베이스 관계 ( 테이블 ) , 뷰 , 인덱스 , 저장 프로시저를 삭제한다. ALTER - 이미 존재하는 데이터베이스 개체에 대한 변경 , RENAME의 역할을 한다. TRUNC..
- Total
- Today
- Yesterday
- Load Balancer
- 인스턴스
- flask
- CICD
- 오토 스케일링
- 시작 템플릿
- githubactions
- CodeDeploy
- java
- HTML
- Auto Scaling
- 로드밸런서
- script
- JWT
- aws
- 로드 밸런서
- EC2
- 위치의 중요성
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |