2024/08 21

JWT란?

JWT(Json Web Token)는 JSON 객체를 사용하여 두 개체 간에 정보를 안전하게 전송하기 위한 웹 표준(RFC 7519)이다. 주로 인증(authentication)과 권한 부여(authorization)에 사용되며, 클라이언트와 서버 간의 안전한 데이터 교환을 위해 설계되었다. JWT는 세션을 서버에 저장하지 않고도 상태를 유지할 수 있게 해주는 토큰 기반 인증 방식으로, RESTful API와 같은 무상태(stateless) 통신에서 널리 활용되고 있다.JWT의 구조JWT는 Header, Payload, Signature의 세 부분으로 구성된 문자열이다. 이 세 부분은 각각 Base64Url로 인코딩되어 마침내 .으로 구분된 하나의 문자열로 결합된다. 이 구조 덕분에 JWT는 가볍고, 웹..

SPRING&BOOT/JPA 2024.08.30

캡슐화(Encapsulation)

캡슐화(Encapsulation)는 객체지향 프로그래밍의 핵심 원칙 중 하나로, 객체의 데이터(필드)와 행위(메서드)를 결합하여 객체 내부에 감추고, 외부에는 필요한 부분만 노출하는 방식을 말한다. 이 포스트에서는 캡슐화가 무엇인지, 왜 중요한지, 그리고 실제 코드 예제를 통해 캡슐화를 어떻게 구현할 수 있는지 상세하게 살펴본다.캡슐화의 정의와 중요성캡슐화는 객체의 상세한 구현 내용을 숨기는 것을 목적으로 한다. 이를 통해 객체의 내부 데이터를 보호하고, 외부의 잘못된 사용으로부터 객체를 보호할 수 있다. 또한, 객체의 사용 방법만을 외부에 노출시키므로, 사용자는 객체가 '무엇'을 할 수 있는지만 알면 되고, 객체가 '어떻게' 그 일을 하는지는 알 필요가 없다. 이런 특성 때문에 캡슐화는 객체지향 설계의..

SPRING&BOOT 2024.08.28

관계형 데이터베이스에서 중간 테이블의 중요성과 활용 방법

관계형 데이터베이스 설계에서 중요한 개념 중 하나는 다대다(Many-to-Many) 관계를 관리하는 방법입니다. 다대다 관계는 중간 테이블(또는 교차 테이블)을 통해 표현되며, 이를 올바르게 구현하지 않으면 데이터 관리가 어렵고 비효율적이 됩니다. 이번 포스트에서는 중간 테이블의 필요성과 구현 방법을 코드와 함께 설명하겠습니다.1. 중간 테이블을 사용하는 이유관계형 데이터베이스에서 다대다 관계를 직접적으로 표현할 수 없다. 예를 들어, 학생(Student)과 강의(Course) 간의 관계를 생각해보자. 한 학생이 여러 강의를 들을 수 있고, 한 강의에도 여러 학생이 참여할 수 있다. 이 경우, 다대다 관계를 제대로 관리하기 위해서는 Student와 Course 테이블 사이에 중간 테이블이 필요하다.중간 ..

SPRING&BOOT/JPA 2024.08.27

JPA 지연 로딩(Lazy Loading)

JPA 지연 로딩(Lazy Loading)은 데이터베이스에서 필요한 시점까지 관련 엔티티를 로드하지 않는 전략이다. 즉, 연관된 엔티티를 처음부터 전부 가져오는 것이 아니라, 실제로 해당 엔티티에 접근할 때 데이터를 가져오는 방식이다. 이는 성능 최적화와 메모리 효율성을 높이기 위해 사용된다.1. 기본 개념JPA에서 엔티티는 서로 연관 관계를 가질 수 있다. 예를 들어, 회원과 주문이라는 두 엔티티가 있다고 가정하면, 한 회원이 여러 개의 주문을 가질 수 있다. 이 경우, 회원을 조회할 때 관련된 주문 데이터까지 모두 가져오는 것은 비효율적일 수 있다. 지연 로딩은 이런 상황에서 회원 엔티티만 먼저 로드하고, 주문 데이터는 실제로 필요할 때 로드하는 방식이다.2. 지연 로딩 설정지연 로딩은 JPA에서 기..

SPRING&BOOT/JPA 2024.08.27

JPA Entity 연관 관계

JPA(Java Persistence API)는 자바 애플리케이션에서 데이터베이스와 객체 간의 매핑을 관리하는 강력한 도구다. 엔티티(Entity) 간의 연관 관계를 제대로 이해하고 설정하는 것은 JPA를 효율적으로 사용하는 데 필수적이다. 이 글에서는 JPA에서 엔티티 연관 관계를 어떻게 매핑하는지, 그리고 그 관계들이 애플리케이션 설계에서 어떤 역할을 하는지 알아보겠다.1. 엔티티 연관 관계의 기본 개념엔티티(Entity)는 데이터베이스의 테이블과 매핑되는 자바 클래스다. 실제 데이터베이스 구조를 객체 모델로 표현할 때, 엔티티 간의 연관 관계를 정의하는 것이 중요한데, 이를 통해 데이터베이스의 관계형 데이터를 객체 지향적으로 다룰 수 있다.JPA에서 지원하는 주요 연관 관계는 다음과 같다:1대1 관..

SPRING&BOOT/JPA 2024.08.26

JPA 엔티티 어노테이션 가이드: 핵심 어노테이션과 예제 코드 정리

JPA(Java Persistence API)를 사용할 때 엔티티와 관련된 다양한 어노테이션들이 사용된다. 이 어노테이션들은 데이터베이스와의 매핑을 정의하고, 효율적인 데이터 관리를 가능하게 만들어 준다. 본 글에서는 JPA 엔티티에서 자주 사용되는 주요 어노테이션들을 설명하고, 각 어노테이션의 예시 코드와 함께 주요 속성들을 정리해봤다. 이를 통해 JPA 엔티티 설계 시 어노테이션을 더욱 효과적으로 사용할 수 있게 될 것이다.1. @Entityimport javax.persistence.*;// 이 클래스는 JPA에서 관리하는 엔티티임을 나타냅니다.// 해당 클래스는 데이터베이스의 테이블과 매핑됩니다.@Entitypublic class User { // 이 필드는 엔티티의 기본 키로 사용됩니다. ..

SPRING&BOOT/JPA 2024.08.22

JPA 영속성 컨텍스트 이해하기

JPA(Java Persistence API)에서 영속성 컨텍스트(Persistence Context)는 데이터베이스와 애플리케이션 간의 데이터를 관리하는 중요한 개념이다. 이를 이해하기 쉽게 설명하자면, 영속성 컨텍스트는 엔티티 객체들을 담아두는 "가상의 바구니"라고 할 수 있다. 예제 코드와 함께 알아보는 JPA의 핵심 개념1. Entity 저장 - 1차 캐시@Test@DisplayName("1차 캐시: Entity 저장")void test1() { EntityTransaction et = em.getTransaction(); // 트랜잭션 시작을 준비 et.begin(); // 트랜잭션 시작 try { Memo memo = new Memo(); // 새로운 Memo 엔티..

SPRING&BOOT/JPA 2024.08.20

Naming Convention(네이밍 컨벤션)이란

네이밍 컨벤션(Naming Convention)은 코드에서 변수, 함수, 클래스, 파일 등의 이름을 정하는 규칙과 방법을 의미한다. 이 규칙은 코드의 가독성을 높이고 유지보수를 용이하게 하며, 팀 내에서 코드의 일관성을 유지하도록 돕는다. 네이밍 컨벤션은 여러 가지 프로그래밍 언어와 프레임워크에 따라 다를 수 있지만, 기본적인 목표는 코드의 명확성과 일관성을 보장하는 것이다.네이밍 컨벤션의 중요성가독성 향상: 일관된 네이밍 규칙을 사용하면 코드를 읽기 쉽고 이해하기 쉬워진다. 변수나 함수의 이름만 보고도 그 역할을 추측할 수 있다.유지보수 용이: 코드의 일관성을 유지하면, 나중에 코드를 수정하거나 다른 사람이 코드를 이해할 때 유리하다.협업 효율성: 팀 내에서 동일한 네이밍 규칙을 따르면, 코드 리뷰나 ..

ETC 2024.08.19

API 명세서란? API 명세서 작성의 중요성과 방법

API(Application Programming Interface)는 소프트웨어 간에 데이터를 주고받거나 기능을 제공하기 위한 규칙과 도구들의 모음이다. 현대 애플리케이션들은 API를 통해 서로 소통하고, 복잡한 작업을 자동화한다. 이때 중요한 게 바로 API 명세서다. API 명세서란?API 명세서는 API를 이해하고 사용할 수 있도록 작성된 문서다. API의 기능, 엔드포인트, 요청과 응답 형식, 인증 방식, 오류 처리 방법 등을 담고 있다. 쉽게 말해, API를 사용하기 위한 모든 정보를 깔끔하게 정리한 청사진 같은 거다.API 명세서를 통해 개발자들은 API를 어떻게 설계하고 구현할지 가이드라인을 얻을 수 있고, 사용자들은 API를 어떻게 활용할지에 대한 명확한 설명을 받을 수 있다.API 명세..

SPRING&BOOT 2024.08.18

Path Variable과 Request Param

웹 개발에서 클라이언트가 서버에 데이터를 전달하는 방법에는 여러 가지가 있다. 그 중에서 Path Variable과 Request Param은 자주 사용하는 방법인데, 이 두 가지는 특정 데이터를 전달하고 처리하는 방식에서 차이가 있다. 이번 글에서는 Path Variable과 Request Param을 사용하는 이유, 사용 방법, 장단점, 그리고 이 둘의 차이점을 살펴보겠다.1. 왜 사용하는가?Path VariablePath Variable은 URL 경로의 일부로 데이터를 전달할 때 사용한다. 주로 리소스의 식별자(예: 사용자 ID, 상품 ID 등)를 전달하기 위해 사용된다.예시: http://example.com/users/123여기서 123이 Path Variable로, 이 값으로 특정 사용자 데이..

SPRING&BOOT 2024.08.15