본문 바로가기

전체 글

(36)
[Spring] Redis 캐시를 통해 조회 성능 개선하기 디프만 동아리에서 진행 중인 프로젝트 Bibbi(https://github.com/depromeet/14th-team5-BE)에서는 조회 기능이 많이 사용됩니다. 특히 사용자마다 여러 번 조회하는 API들이 존재하는데 아직은 크게 문제가 없지만 사용자 수가 늘어나 매번 DB까지 도달해 읽어오게 되면 성능적인 이슈가 발생할 수 밖에 없습니다. 저는 이런 기능의 성능을 개선하기 위해 Redis 캐싱 기능을 이용하기로 했습니다. Bibbi에서는 조회는 빈번히 발생하지만 수정은 거의 발생하지 않는 값을 캐시로 적용했습니다. 1. 프로젝트 내에서 Redis 설정하기 본 내용은 Redis가 구축되어 있다는 전제 하에 진행됩니다. (Redis 구축하기) 1) RedisConfig build.gradle depende..
[Test] 단위 테스트 vs 통합 테스트 vs 인수 테스트 이전부터 진행해온 [모카콩]에서는 단위 테스트와 인수 테스트를 작성하고 최근에 시작한 [Bibbi]에서는 단위 테스트와 통합 테스트를 작성하고 있습니다. 테스트 코드를 작성하면서 이 세 가지 유형의 테스트들이 필요한 이유, 목적을 정확히 파악하는 것이 중요하다 생각하여 해당 글에서 정리하겠습니다. 1. 단위 테스트 단위 테스트는 시스템에서 논리적으로 분리될 수 있는 가장 작은 코드인 단위를 테스트하는 방법이다. 소프트웨어 테스트는 코드 품질을 보장하는 데 도움이 되며 개발의 필수 요소라 할 수 있습니다. 소프트웨어를 작은 기능적 단위로 작성한 다음 코드 단위별 단위 테스트를 작성하는 것이 소프트웨어 개발 모범 사례입니다. 먼저 단위 테스트를 코드로 작성한 다음, 코드를 변경할 때마다 테스트 코드를 자동으..
[Review] Green Developers 프로젝트 후기 - Bibbi 1. Bibbi 프로젝트 디프만 14기를 통해 Bibbi라는 가족 일상 공유 앱 프로젝트를 진행중입니다. Bibbi는 바쁜 일상 속에서 하루 한 번, 자신의 일상을 담은 사진을 찍어 공유합니다. 그리고 다른 가족이 공유한 일상 피드에 사용자의 이미지로 생성된 리얼 이모지나 댓글을 남기면서 가족과의 소통을 보다 쉽게 활성화할 수 있도록 돕는 앱입니다. 프로젝트 진행 과정은 아래 깃허브에서 볼 수 있으며 현재 iOS는 1차 MVP 기능까지 완료하여 앱스토어에 출시한 상태입니다. 🎉 Bibbi BackEnd GitHub: https://github.com/depromeet/14th-team5-BE Bibbi iOS GitHub: https://github.com/depromeet/14th-team5-iOS B..
[NCP] NCP Cloud DB for Redis 구축하기 디프만 동아리에서 진행하는 Bibbi 프로젝트에서 백엔드 팀원끼리 각자 도입하고 싶은 기술이 있다면 도입하자라고 의견을 나눴고 저는 다양한 새로운 기술 중 Redis를 도입하기로 결정했습니다. Redis를 도입하고자 한 이유는 여러가지가 있었지만 가장 큰 이유는 역시나 조회 API 성능을 높이고자 하기 때문이었습니다. 감사하게도 NCP에서 디프만 동아리에 무료 크레딧을 후원하기 때문에 NCP에 서버 환경을 구축하고 있는데 이번 레디스 또한 NCP에서 구축하고자 합니다. 1. Cloud DB for Redis (VPC/Simple) 생성하기 NCP에서는 VPC와 Classic 두가지 환경에서 서비스를 제공합니다. Bibbi 서버는 이미 VPC에 구축되어 있기때문에 저도 무난하게 Redis 또한, VPC로 ..
[JPA] 프록시와 연관관계 관리 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. ⭐️ 1. 프록시 1) 프록시 em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 DB에 쿼리가 안나가는데 객체가 조회됨 hibernate가 가짜 객체를 줌 특징 실제 클래스를 상속 받아서 만들어짐 (형태가 같음) 프록시 객체는 실제 객체의 참조(target)를 보관 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 2) 프록시 객체의 초기화 Member member = em.getReference(Member.class, “id1”); member.getName(); 프록시 객체는 처음 사용할 ..
[JPA] 연관관계 매핑 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. 단방향 연관관계 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; private int age; //@Column(name = "TEAM_ID") //private Long teamId; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ... → 현재 상황에서 Team에서 member 접근은 불가 2. 양방향 매핑 테이블의 연관관계는 바뀌지 않은 채 양방향 객체 연관관계를 만든다. @Entity ..
[Spring] 코드 정적 분석을 위한 SonarCloud 도입기 현재 진행 중인 사이드 프로젝트 모카콩(https://github.com/mocacong/Mocacong-Backend)에는 아직 코드 정적 분석을 위한 도구가 따로 없었습니다. 사실상 MVP 기능들은 다 개발이 되었고 현재는 리팩터링 위주로 진행중인데 현재 프로젝트의 테스트 코드가 꼼꼼히 잘 작성되었는지, 코드에 취약점이 있는지 파악하고 싶어 SonarCloud를 도입하게 되었습니다. 1. SonarCloud란 코드 정적분석기로 이미 SonarQube가 유명합니다. SonarQube는 이미 널리 알려진 문제가 발생하는 코드나 일반적으로 사용되는 규칙을 통해 버그나 취약점을 파악할 수 있고 테스트 코드의 커버리지를 파악해주어 개발자가 소스코드의 품질을 유지할 수 있게 돕습니다. 하지만 SonarQube는..
[Spring/AWS] Pre-Signed Url을 이용하여 S3로 파일 업로드하기 (feat. NCP) 디프만 동아리에서 진행 중인 프로젝트 Bibbi(https://github.com/depromeet/14th-team5-BE)에서는 사용자 프로필이미지/피드 이미지를 업로드할 수 있는 수단이 필요했고 저희 프로젝트에서는 Pre-Signed Url 방식을 채택했습니다. NCP에서 지원한 크레딧으로 ObjectStorage를 생성하여 Pre-Signed Url을 구현했지만 로직은 AWS에 생성한 S3 버킷을 이용해 구현하는 방식과 같습니다. 1. Pre-Signed Url이란 1) 정의 AWS의 공식 문서에 의하면 Pre-Sigend Url(미리 서명된 URL)은 다른 사람이 AWS 보안 자격 증명이나 권한이 없어도 Amazon S3 버킷에 객체를 업로드하도록 허용할 수 있도록 하는 URL입니다. 즉 S3의..