본문 바로가기

전체 글

(25)
[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의..
[Spring] Redis를 통한 Refresh Token 도입기 (2) 본 글에서는 기본적인 Redis 설정이 되어있다는 전제 하에 코드 위주로 설명합니다. 전체적인 리프레시 토큰 로직에 대해 참고하고 싶다면 이전 글을 확인해주세요. 자세한 코드는 https://github.com/mocacong/Mocacong-Backend/pull/131 에서 확인할 수 있습니다. 1. Token 객체 @Getter @Builder @AllArgsConstructor @NoArgsConstructor public class Token { @Id private Long id; private String refreshToken; private String accessToken; @TimeToLive(unit = TimeUnit.MILLISECONDS) // 디폴트는 TimeUnit.SECO..
[Spring] Redis를 통한 Refresh Token 도입기 (1) 현재 진행 중인 사이드 프로젝트 모카콩(https://github.com/mocacong/Mocacong-Backend)에서는 기존엔 Access Token 하나만 가지고 로그인 처리를 진행했었습니다. 그러나 유효시간이 짧은 Access Token 특성 상, 빈번하게 로그인 요청을 수행해야 했으며 이는 불편함을 초래하였습니다. 이에 따라 보안적인 측면을 고려하며 로그인 유효시간을 늘릴 수 있는 Refresh Token을 도입하기로 결정했습니다. 1. Refresh Token의 필요성 일반적으로 서비스에서 회원 인증을 위해 많이 사용되는 JWT(Json Web Token) 방식을 모카콩 프로젝트에서도 도입했습니다. 하지만 사용자 인증을 위한 Access Token의 유효시간은 약 30분으로 설정되어 있었습..
[Spring] Code Coverage 측정을 위한 JaCoCo 적용하기 1. JaCoCo란 JaCoCo는 Java code coverage를 측정하는 오픈소스 라이브러리입니다. JaCoCo는 Line, Branch Coverage를 제공하며 테스트를 실행한 후, 결과를 html/csv/xml 파일을 통해 보기 좋게 시각화를 해줍니다. Code Coverage 소프트웨어의 테스트를 논할 때 얼마나 테스트가 충분한가를 나타내는 지표 2. JaCoCo 적용하기 * 해당 포스트에 대한 코드 내용은 여기서 확인할 수 있습니다. (https://github.com/depromeet/14th-team5-BE/pull/7) 개발 환경: SpringBoot 3.1.5, Java 17, Gradle server: 루트 프로젝트 ├── config: 프로젝트 설정 관리 │ ├── build │..
[Spring] 멀티 모듈 프로젝트 도입하기 1. 단일 모듈 프로젝트의 문제점 장기 프로젝트의 경우, 시간이 지날수록 기능이 추가되고 무거워집니다. 그러면서 하나로 운영하던 서비스가 클라이언트 서비스와 운영 시스템으로 나뉘는 등의 분리가 일어나는데 여기서 각각의 프로그램에 있는 도메인의 동일성이 깨질수 있다는 문제점이 생깁니다. 예를 들어 하나로 운영하던 프로젝트에서 클라이언트 api와 운영 api 두가지로 나뉘었을 때, 회원에 대한 도메인은 각각의 프로젝트에서 동일해야 합니다. 하지만 두 개의 프로젝트는 별개로 관리가 되고 어느 한 쪽에서 도메인을 수정하면 다른 쪽에서도 도메인을 수정해야 합니다. 이 과정에서 어느 한 쪽에서 수정이 되지 않으면 도메인이 달라지는 경우가 생길 수 있으며 결국 프로젝트가 개발자에 대한 의존성이 높아지게 됩니다. 2...