본문 바로가기

Refactoring/Moonkey6

[Git|졸업작품] spring boot로 작업한 뭉키를 다시 돌아보며 (6) - .gitignore을 통해 application 파일 숨기기 6. gitignore을 통해 application.yml 파일에 노출되어 있는 database 계정 정보를 제외시켜야 한다. 개요 spring 프로젝트를 배포할 때 Application 파일이 깃허브와 같이 외부에 유출이 되면 aws 클라우드 서비스 계정과 같은 중요한 정보가 같이 유출되어 과다한 요금이 청구될 수 있다. 이와같은 불상사를 방지하기 위해 gitignore을 통해 Git 버전 관리에서 반드시 제외해야 한다. 설정방법 .gitignore 파일에 깃허브에 올리고싶지 않은 파일명을 작성해준다. 작성자는 application 파일을 yml 형식으로 작성하고 있으므로 yml 확장자로 작성하였다. 이후 git에 commit & push를 진행해주면 된다. * .gitignore를 수정하고 커밋 & .. 2023. 3. 27.
[졸업작품] spring boot로 작업한 뭉키를 다시 돌아보며 (5) - Entity의 1:N 매핑의 성능 하락 5. Entity에서 1:N 매핑을 사용하여 이는 연관관계 관리를 위해 추가로 UPDATE SQL이 실행되어 성능 하락을 야기 부제: JPA (1) N+1 문제 N+1문제란 1:N관계에서 1번의 쿼리를 날렸는데 추가로 N번의 쿼리가 더 발생하는 상황이다. 예를들어, 고객 한명(1)이 여러 개의 계좌(N)을 가졌을 때를 가정한다. 이때, 고객의 정보를 조회하면 연관 관계를 갖고있는 여러 개의 계좌정보들까지 N번 조회되는 경우가 발생한다. * 또한, 1:N매핑을 사용하면 DB에 대한 쿼리가 복잡해진다. 매핑된 엔티티들을 로딩하기 위해선 join을 사용해야 하는데 join은 성능 저하의 주요 원인이 된다. N+1문제는 N:1, 1:N 관계에서 발생한다. (2) 1:N매핑에서의 UPDATE SQL 문제 1:N .. 2023. 3. 26.
[졸업작품] spring boot로 작업한 뭉키를 다시 돌아보며 (4) - Entity의 무분별한 Setter 사용의 문제점 3. Entity에서 Setter를 사용하게 되면 객체의 일관성을 보장하기 어려움 (1) 데이터 무결성, 일관성 저해 Entity 클래스는 데이터를 나타내는 클래스로 사용된다. 이 클래스에는 데이터베이스 테이블 열과 대응되는 필드들이 포함된다. 이러한 필드들은 private로 선언되어 외부에서 직접적으로 접근이 불가능하도록 하였으나 public으로 선언된 getter와 setter 메서드를 통해 이 필드에 접근할 수 있게 한다. 그러나, setter를 무분별하게 사용하게 된다면 데이터의 무결성이 깨질 수 있다. 예를 들어, Entity의 필드 중 하나가 null일 수 있다면 setter를 이용해 해당 필드에 null 값을 할당하면 데이터 무결성이 깨진다. (데이터 무결성 중 개체 무결성) Entity 필.. 2023. 3. 22.
[졸업작품] spring boot로 작업한 뭉키를 다시 돌아보며 (3) - 트랜잭션의 readonly 옵션 2. Service에서 데이터를 가져오는 트랜잭션인 경우 readonly = true 옵션을 붙여야 영속성 컨텍스트가 변경 감지를 하지 않아 성능 향상 (1) Spring에서의 트랜잭션 처리 스프링 부트에서는 @Transactional 어노테이션을 사용하여 트랜잭션 처리를 할 수 있다. @Transactional이 적용되어 있을 경우, 해당 클래스에 트랜잭션 기능이 적용된 프록시 객체가 생성된다. 이 프록시 객체는 @Transactioanl이 포함된 메소드가 호출 될 경우 PlatformTransactionManager를 사용하여 트랜잭션을 시작하고 정상 여부에 따라 Commit 또는 Rollback 한다. 정상 여부는 RuntimeException 발생 유무 기준으로 결정되며 RuntimeExcepti.. 2023. 3. 1.
[졸업작품] spring boot로 작업한 뭉키를 다시 돌아보며 (2) - REST API 설계 규칙 1. Rest API 설계 규칙을 지키지 않은 점. Rest API 설계 규칙을 다시 돌아보자 Rest란 Representational State Transfer의 약어로 클라이언트와 서버가 데이터를 주고 받는 방식에 대한 아키텍처 스타일이다. Rest에는 여섯 가지 기본 원칙이 있고 이 가이드를 준수한 인터페이스는 Restful하다고 표현한다. Stateless (무상태성) 서버는 Response cache-control 헤더에 해당 요청의 캐싱 가능 여부를 제공해야 한다. 이를 제공한다면 클라이언트는 Response를 캐싱하여 서버와 클라이언트 간의 상호작용을 줄이고 성능과 서버 가용성을 늘릴 수 있다. Uniform interface (일관된 인터페이스) 보편적인 소프트웨어 엔지니어링 원칙을 com.. 2023. 2. 10.
[졸업작품] spring boot로 작업한 뭉키를 다시 돌아보며 (1) 선배가 작성한 pull request 받은 부분을 다시 확인하며 내가 프로젝트 과정에서 놓친 부분들을 다시 돌아보기로 하였다. 1. Iterator를 사용하여 비효율적으로 반복하는 부분을 stream으로 개선 일단 stream이란 java 8부터 추가된 컬렉션, 배열의 저장 요소를 하나씩 참조하여 람다식(함수 스타일)으로 처리할 수 있도록 도와주는 반복자이다. java 7까지는 Iterator 반복자를 통해 컬렉션 요소를 순차적으로 처리하였다. stream을 통해 컬렉션 요소를 순차적으로 처리함으로써 람다식으로 요소 처리 코드를 제공, 내부 반복자를 사용함에따라 병렬 처리가 쉬움, 중간처리와 최종처리의 파이프라인 작업을 수행한다는 장점을 얻을 수 있다. Stream API의 특징 - 원본 데이터를 변경X.. 2023. 2. 2.