본문 바로가기

전체 글81

PLANIT 리팩토링 - CI/CD 구축하기 PLANIT, ' 관광정보 공공데이터를 사용한 여행 정보 제공 서비스'를 만들었다. 그 중 내가 대표적으로 담당한 기능은 hotplace 게시글 기능이었다. 다녀온 관광지에 대한 후기를 작성할 수 있고, 그 후기를 지역 별로 모아보는 기능이었는데, 전체 조회 페이지에서 후기글에 담겨져 있는 사진을 모두 보여주다보니 고화질 사진을 업로드 하지 못하고 업로드 할 수 있는 사진 크기를 제한해야만 했다. 그래서 파일 업로드 기능을 AWS S3 + Lambda를 사용해 개선하기로 마음 먹었고, 그 김에 미루어두었던 CI/CD 공부를 함께 하며 AWS를 사용한 배포 환경을 더 완벽하게 구축해두고, 이후에 리팩토링을 진행해보기로 했다! S3 + Lambda를 제외하고 전체적으로 생각한 Build flow는 다음과 같.. 2024. 1. 3.
데이터베이스 튜닝(Database Tuning) 데이터베이스 튜닝 일반적으로 시스템 성능 저하 문제는 잘못된 APP 및 DB 설계에 의해 발생하기 때문에, 데이터베이스 튜닝을 통해 성능 저하 최소화가 가능하다. 데이터베이스 튜닝이란 데이터베이스 응용, 데이터베이스 자체, 운영체제의 조정 등을 통하여 최적의 자원으로 최적의 성능(응답속도)을 얻을 수 있도록 개선하는 작업을 말한다. 데이터베이스 튜닝의 3단계 데이터베이스 튜닝 영역 별 세부 기법 튜닝의 순서인 DB 설계 → DBMS → SQL 튜닝 순으로 효율성이 줄어듦에 따라 우선 처리 필요 SW 처리가 불가능 하거나 효율적이지 않는 경우 HW 방식의 시스템 데이터베이스 튜닝 필요 출처 더보기 http://blog.skby.net/데이터베이스-튜닝-db-tuning/ 2023. 6. 19.
데이터베이스 락(Lock) DataBase는 데이터를 영속적으로 저장하고 있는 시스템이다. 이런 시스템은 같은 자원(데이터)에 대해서 동시에 접근하는 경우가 생길 수 밖에 없다. 예를 들어 수강신청 시스템에서 1명만이 정원으로 남게 되었을 때, 두 사람이 거의 동시에 버튼을 누를 수 있다. 그렇지만 성공은 1명만 되어야 한다. 이런 상황에서 DBMS(DataBase Management System)가 사용하는 공통적인 방법이 Lock이다. 데이터베이스 락(Lock) 데이터베이스는 여러 사용자들이 같은 데이터를 동시에 접근하는 상황에서, 데이터의 무결성과 일관성을 지키기 위해 락을 사용한다. 락을 통해 트랜잭션 처리의 순차성을 보장하기 위한 방법이다. 데이터베이스 락(Lock) 의 종류 공유락(LS, Shared Lock) Read.. 2023. 6. 18.
Cookie vs Session vs JWT 쿠키와 세션을 사용하는 이유 http 프로토콜의 경우 Connectless, Stateless 한 특성을 가진다. 그렇기 때문에 서버는 클라이언트가 누구인지 매번 확인해야 한다. 이러한 특성을 보완하기 위해 쿠키와 세션이 등장하게 된다. Connenctionless 클라이언트와 서버가 요청과 응답을 한 번 주고받으면 연결을 끊어버리는 특징을 말한다. 클라이언트가 request를 서버로 보내면 서버는 클라이언트가 보낸 request에 맞게 response를 보내고 연결을 끊는다. Stateless 위처럼 요청과 응답으로 인해 통신이 끝난다면 상태 정보를 유지하지 않는 특징이다. 예를들어 메인페이지에서 로그인을 하고 다른 페이지로 넘어가면 다시 로그인을 해야된다. Cookie 쿠키는 서버가 사용자의 웹 브라.. 2023. 6. 18.
Spring Filter 예외처리 vs Interceptor 예외처리 Spring 기본 예외처리 방식 - BasicErrorController 서비스를 이용하던 도중 예외가 발생했다면 우리는 접속한 환경에 따라 다른 에러 처리를 받게 될 것이다. 만약 우리가 웹페이지로 접속했다면 다음과 같은 whiltelabel 에러 페이지를 반환받는다. Spring은 만들어질 때(1.0)부터 에러 처리를 위한 BasicErrorController를 구현해두었고, 스프링 부트는 예외가 발생하면 기본적으로 /error로 에러 요청을 다시 전달하도록 WAS 설정을 해두었다. 그래서 별도의 설정이 없다면 예외 발생 시에 BasicErrorController로 에러 처리 요청이 전달된다. 참고로 이는 스프링 부트의 WebMvcAutoConfiguration를 통해 자동 설정이 되는 WAS의 설정.. 2023. 5. 2.
빌더 패턴 (Builder Pattern) 빌더 패턴(Builder pattern)이란? 객체를 정의하고 그 객체를 생성할 때 보통 생성자를 통해 생성하는 것을 생각한다. Bag bag = new Bag("name", 1000, "memo"); 하지만 생성자를 통해 객체를 생성하는데 몇 가지 단점이 있어 객체를 생성하는 별도 builder를 두는 방법이 있다. 이를 빌더 패턴이라고 한다. Bag bag = Bag.builder() .name("name") .money(1000) .memo("memo") .build(); 객체를 생성할 수 있는 빌더를 builder() 함수를 통해 얻고 거기에 셋팅하고자 하는 값을 셋팅하고 마지막에 build()를 통해 빌더를 작동 시켜 객체를 생성한다. 빌더 패턴(Builder pattern)을 사용하는 이유 생.. 2023. 5. 2.