taehee-kim-dev.log
로그인
taehee-kim-dev.log
로그인
우아한테크코스 3기 백엔드 Lv4 모의면접 대상 Lv3 학습로그 모음
김태희
·
2021년 8월 18일
팔로우
0
면접
우아한테크코스
학습로그
0
[QueryDSL] 동적 쿼리 작성
내용
QueryDSL을 사용해 동적인 조건에 따라 SQL 쿼리문을 생성하는 동적 쿼리를 작성했다.
하나의 쿼리문으로 여러 조건의 쿼리를 생성할 수 있었다.
객체의 함수를 참조하는 QueryDSL의 사용 방식이 가독성, 생산성, 유지보수성을 향상시켰다.
링크
https://github.com/woowacourse-teams/2021-cvi/blob/develop/backend/src/main/java/com/backjoongwon/cvi/post/domain/PostRepositoryImpl.java
태그
SQL, QueryDSL
[Log] Logging
내용
LogBack의 Log Appender를 사용해 애플리케이션의 로그를 남겼다.
로그 출력 조건 및 형식 설정과 파일 분리, 백업 조건을 세밀하게 설정할 수 있었다.
AWS CloudWatch 대시보드에 연동해, 터미널을 통한 EC2 인스턴스 접속 없이 대시보드에서 로그 파일들의 내용을 확인할 수 있게 했다.
링크
https://github.com/woowacourse-teams/2021-cvi/tree/develop/backend/src/main/resources
https://ap-northeast-2.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-2#dashboards:name=DASHBOARD-cvi-korea
태그
Log, LogBack
[Git] Submodule
내용
DB 계정, JWT secret key 등 보안이 필요한 파일들을 git submodule로 관리했다.
로컬, 테스트 서버, 서비스 서버 각각에 적용되는 보안 파일들의 관리 포인트가 많았다.
Submodule로 관리 포인트를 줄일 수 있었다.
링크
https://github.com/woowacourse-teams/2021-cvi/blob/develop/.gitmodules
태그
Git, 보안
[배포] 무중단 배포
내용
Jenkins와 shell script로 Blue-green 배포 방식을 적용해 서비스 서버와 테스트 서버를 무중단으로 배포했다.
서비스 사용자들은 중단 없이 업데이트된 서비스를, 프론트엔드 크루들은 중단 없이 업데이트된 테스트 서버의 API를 사용할 수 있었다.
링크
https://github.com/woowacourse-teams/2021-cvi/tree/develop/backend/deploy
태그
배포
[JPA] 일급 컬렉션 적용
내용
JPA Entity에 Entity에 관한 비즈니스 로직 함수가 너무 많아졌다.
Entity 컬렉션을 JPA의 @Embedded, @Embeddable 어노테이션을 사용해 일급 컬렉션화 시켰다.
관련된 비즈니스 로직들을 일급 컬렉션 내부로 숨겨 캡슐화 시킬 수 있었다.
링크
https://github.com/woowacourse-teams/2021-cvi/blob/develop/backend/src/main/java/com/backjoongwon/cvi/post/domain/Comments.java
태그
JPA, OOP
[DB] 마이그레이션
내용
로컬 개발 환경에서 이루어진 DB 업데이트를 테스트 서버, 서비스 서버에 모두 반영할 때 관리포인트가 많아 실수의 여지가 있었다.
DB 마이그레이션 툴 Flyway를 사용해 관리 포인트를 줄였다.
링크
https://github.com/woowacourse-teams/2021-cvi/tree/develop/backend/src/main/resources/db/migration
태그
DB
[Cache] Ehcache, Scheduling 적용
내용
국가 공공 데이터 포털 API로부터 전국 백신 접종 관련 대용량 데이터를 받아왔다.
데이터 양이 많아 API 호출 비용이 컸고, 이 데이터는 매일 아침 10시마다 업데이트 됐다. 또한 클라이언트 쪽에서는 이 데이터를 단순히 읽기만 했다.
Ehcache를 사용해 해당 데이터를 캐싱했다. 아침 10시마다 데이터가 업데이트되므로 Spring의 Scheduling을 사용해 캐싱 데이터를 업데이트했다. 클라이언트 측에서 API 요청을 했을 때의 지연 시간을 934ms 에서 24.44ms로 40배 이상 줄였다.
링크
https://github.com/woowacourse-teams/2021-cvi/blob/develop/backend/src/main/resources/ehcache.xml
https://github.com/woowacourse-teams/2021-cvi/tree/develop/backend/cache/data
https://github.com/woowacourse-teams/2021-cvi/blob/develop/backend/src/main/java/com/backjoongwon/cvi/publicdata/service/PublicDataService.java
태그
Cache
[SQL] 쿼리 최적화
내용
쿼리 최적화를 위해 fetch join, default_batch_fetch_size 설정을 사용했다.
Lazy loading으로 발생할 수 있는 N+1 select 등 여러 개의 쿼리 발생 문제를 fetch join으로 최적화했다.
JPA 엔티티의 필드에 두 개 이상의 엔티티 컬렉션이 있을 경우 default_batch_fetch_size 설정으로 쿼리를 최적화했다.
링크
https://github.com/woowacourse-teams/2021-cvi/blob/develop/backend/src/main/java/com/backjoongwon/cvi/post/domain/PostRepositoryImpl.java
https://github.com/woowacourse-teams/2021-cvi/blob/develop/backend/src/main/resources/application.yml
태그
SQL, JPA, QueryDSL
김태희
Web Back-End (Spring, JPA, AWS)
팔로우
이전 포스트
[OAuth]Spring Security 없이 카카오 로그인 구현하기
0개의 댓글
댓글 작성