본문 바로가기

전체 글

(25)
[JPA] 엔티티 매핑 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다. 이 어노테이션이 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라 부른다. ## 주의사항 기본 생성자는 필수다 JPA가 엔티티 객체를 생성할 때 기본 생성자를 사용하기 때문 Final 클래스, enum, interface, inner 클래스에는 사용할 수 없다 저장할 필드에 final을 사용하면 안된다 2. @Table 엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용한다. 3. 데이터베이스 스키마 자동 생성 JPA는 데이터베이스 스키마를 자동으로 생성하는 기능을 지..
[JPA] 영속성 관리 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. 엔티티 매니저 팩토리와 엔티티 매니저 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 persistence.xml에 있는 정보를 바탕으로 EntityManagerFactory를 하나만 생성한다. 엔티티 매니저 팩토리는 엔티티 매니저를 만드는 공장인데 공장을 만드는 비용이 상당이 크다. 하지만 공장에서 엔티티 매니저를 생성하는 비용은 거의 들지 않는다. 엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하여 서로 다른 스레드 간에 공유해도 되지만, 엔티티 매니저는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하여 스레드 간에 절대 공유하면 안된다. 하나의 EntityManagerFactory..
[JPA] JPA 소개 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. SQL을 직접 다룰 때 발생하는 문제점 자바로 개발하는 애플리케이션은 대부분 관계형 데이터베이스를 데이터 저장소를 사용한다. 데이터베이스에 데이터를 관리하려면 SQL을 사용해야 한다. 특히 자바로 작성한 애플리케이션은 JDBC API를 사용해서 SQL를 데이터베이스에 전달해야 하므로 서버 개발자들은 능숙하게 SQL을 다룰 줄 알아야 한다. 1) 반복적인 작업 ① 반복, 반복 그리고 반복 데이터베이스는 기본적으로 객체 구조와는 다른 구조이므로 객체를 데이터베이스에 직접 저장하거나 조회할 수 없다. 그렇기에 개발자가 이를 위해서는 직접 SQL과 JDBC API를 사용해서 객체지향 애플리케이션과 데이터베이스 중간..
[HTTP 웹 기본 지식] HTTP 메서드 해당 글은 김영한님의 '모든 개발자를 위한 HTTP 웹 기본 지식' 강의를 수강하고 중요한 내용을 정리하고 보충한 글입니다. 1. HTTP API 만들기 HTTP API를 설계하는 것은 중요하면서도 기초적이고 필수적인 과정이다. 이번 글에서는 회원이라는 개념을 리소스로 간주하여 이를 URI에 매핑하고, 리소스와 행위를 분리하는 방법을 설명한다. 1) API URI 설계 - 리소스 식별 여기서는 회원이라는 개념 자체가 바로 리소스이다. 회원이라는 리소스만 식별 -> 회원 리소스를 URI에 매핑 회원 목록 조회: /members 회원 조회: /members/{id} 회원 등록: /members/{id} 회원 수정: /members/{id} 회원 삭제: /members/{id} 그런데 회원 조회/등록/수정/삭..
[HTTP 웹 기본 지식] Stateful, Stateless 해당 글은 김영한님의 '모든 개발자를 위한 HTTP 웹 기본 지식' 강의를 수강하고 중요한 내용을 정리하고 보충한 글입니다. 0. 개요 컴퓨터 시스템과 네트워크 프로토콜에서 Stateful와 Stateless라는 용어는 서버가 클라이언트와 상호작용하고 세션 정보를 관리하는 방식을 나타낸다. 1. Stateless (무상태 프로토콜) 무상태 프로토콜 혹은 시스템은 클라이언트와의 과거 상호작용에 대한 어떠한 정보도 저장하지 않는다. 즉, 서버가 클라이언트의 상태를 보존하지 않는다. 각각의 요청은 서버에 의해 독립적으로 처리되며 이전 요청과는 아무런 관련이 없다. 1) 특징 장점 서버가 클라이언트의 상태를 보존하지 않기 때문에, 서버의 확장성이 높아짐 무한한 수의 서버를 추가하여 시스템의 성능을 쉽게 향상시킬..
[JPA] 코멘트 신고 기능 도입 및 벌크 연산과 배치 작업을 통한 기간 정지 구현 현재 사이드 프로젝트로 진행중인 프로젝트 모카콩(https://github.com/mocacong/Mocacong-Backend)은 부적절한 코멘트에 대해 처리를 하는 신고 기능 로직이 없었습니다. 이후, 커뮤니티 기능도 도입할 예정이기 때문에 아래의 조건에 해당하는 회원에 한해 60일동안 모카콩 서비스에 접근할 수 없도록 기간 정지 기능을 구현했습니다. 5번 이상 신고당한 코멘트 -> 코멘트 내용 마스킹, 코멘트 작성자에게 경고 1회 부여 11번 이상 경고를 받은 유저 -> 60일간 모카콩 서비스 접근 금지 (member의 status가 ACTIVE->INACTIVE) 1. 코멘트 신고 기능 도입 이후 커뮤니티 기능을 확장시킬 예정이기 때문에 신고 기능을 따로 Report 클래스로 두어 구현했습니다. ..
[JPA] 인터셉터를 활용한 JWT Token 기반 로그인 구현 정리 (feat. AOP를 이용한 사용자 토큰 추출) 1. 인터셉터 1) 인터셉터란? 인터셉터(Interceptor)는 스프링 프레임워크에서 요청과 응답을 가로채서 처리하는 기능입니다. 컨트롤러가 호출되기 전에 요청을 가로채서 다양한 처리를 할 수 있습니다. ex) 로그인 체크, 권한 체크, 인코딩 설정, 로깅 등등... 이렇게 핸들러(컨트롤러)의 수정없이 핸들러 수행 전/후처리 동작을 추가해 중복되는 코드를 줄이고 코드의 유지보수성 또한 높일 수 있다 2) HandlerInterceptor 인터페이스 인터셉터는 HandlerInterceptor 인터페이스를 구현해 작성해야 합니다. HandlerInterceptor 인터페이스에는 다음 3가지 메서드가 정의됩니다. public interface HandlerInterceptor { default boolea..
[JPA] JPA 변경 감지를 이용하여 상태 변경을 반영 1. JPA의 변경감지 1) 정의 JPA 에서 변경 감지는 엔티티 객체의 상태를 추적하여, 변경된 Entity 를 데이터베이스에 자동으로 반영하는 메커니즘입니다. 2) 작동 원리 ① JPA 는 EntityManager 를 사용하여 엔티티를 관리한다. EntityManager 는 엔티티를 영속성 컨텍스트에 저장하며, 이후에 엔티티를 조회하거나 수정할 수 있다. ② 이때 영속성 컨텍스트는 EntityManager 가 관리하는 엔티티의 상태를 추적하고, 변경된 엔티티를 데이터베이스에 자동으로 반영하는 기능을 제공한다. EntityManager 에서 영속성 컨텍스트의 flush 메서드를 호출하면, 영속성 컨텍스트에서 변경된 엔티티를 데이터베이스에 반영 ③ 영속성 컨텍스트는 엔티티의 변경을 감지하기 위해 Dirt..