JPA와 영속성 컨텍스트, 그리고 Bean의 관계
·
Spring
JPA와 영속성 컨텍스트, 그리고 Bean의 관계Java 개발 환경에서 JPA(Java Persistence API)는 객체와 관계형 데이터베이스를 매핑해주는 ORM(Object Relational Mapping) 기술로, 데이터 접근과 관리를 효율적으로 할 수 있게 합니다. JPA의 핵심 개념인 영속성 컨텍스트와 Spring에서 의존성 주입과 관리에 중요한 역할을 하는 Bean에 대해 알아보겠습니다.1. JPA란 무엇인가?JPA(Java Persistence API)는 자바의 ORM 기술 표준으로, 데이터베이스와 객체 간의 변환을 자동으로 관리해주는 기능을 제공합니다. JPA는 직접 데이터베이스와 통신하지 않고, 하이버네이트(Hibernate)와 같은 구현체를 사용하여 JPA 인터페이스에 대한 실제 동..
파일 디렉터리 구조 형성 방법들
·
Spring
파일 디렉터리 구조 형성 방식들: 다양한 방식과 그 특징파일 시스템의 디렉터리 구조는 데이터를 효율적으로 저장하고 관리하기 위한 기본적인 구조로, 컴퓨터와 서버, 다양한 애플리케이션에서 사용됩니다. 디렉터리 구조 형성 방식은 크게 트리 구조, 그래프 구조, 평면 구조, 가상 파일 시스템 구조 등으로 나뉩니다. 이 글에서는 각 방식의 특징과 장단점을 알아보겠습니다.1. 트리 구조 (Tree Structure)트리 구조는 계층적(hierarchical) 디렉터리 구조로, 루트 디렉터리를 최상위에 두고 아래로 여러 디렉터리가 이어지는 구조입니다. 대부분의 현대적인 운영체제(Linux, macOS, Windows 등)가 사용하는 방식이며, 디렉터리와 서브디렉터리가 자식 노드처럼 확장되는 형태입니다.특징최상위에 ..
IoC와 DI: Java 개발에서 꼭 알아야 할 개념
·
Spring
IoC와 DI: Java 개발에서 꼭 알아야 할 개념Java와 Spring Framework로 개발을 하다 보면 많이 접하게 되는 개념이 바로 IoC(Inversion of Control)와 DI(Dependency Injection)입니다. 이 글에서는 IoC와 DI가 무엇인지, 왜 중요한지, 어떻게 활용할 수 있는지 쉽게 설명해보겠습니다.1. IoC (Inversion of Control)란 무엇인가?IoC는 제어의 역전이라는 의미로, 애플리케이션의 제어 흐름을 개발자가 아닌 컨테이너(Spring, Spring Boot 등)가 관리하는 구조를 의미합니다.전통적인 객체 생성 방식에서는 개발자가 필요한 객체를 직접 생성하고 관리합니다. 예를 들어 new 키워드를 사용해 클래스의 인스턴스를 생성하고, 인스..
SQL, JPQL, 쿼리 메소드 비교 및 정리글
·
Spring
SQL, JPQL, 쿼리 메소드 비교먼저, SQL, JPQL, 쿼리 메소드의 차이점을 표로 정리해보겠습니다.특징SQLJPQL쿼리 메소드정의데이터베이스와 직접 통신하는 쿼리 언어엔티티 객체를 대상으로 한 Java Persistence 쿼리 언어JPA에서 메서드 이름으로 쿼리 생성대상테이블 및 컬럼엔티티 및 속성엔티티 및 속성구문SELECT * FROM usersSELECT u FROM User ufindByName데이터베이스 종속성특정 DB SQL 문법에 의존데이터베이스에 독립적데이터베이스에 독립적사용 용도데이터베이스 직접 질의JPA를 통한 간접 질의메서드 이름으로 간단한 질의복잡한 쿼리 처리복잡한 쿼리 가능복잡한 쿼리 작성 가능복잡한 쿼리에는 적합하지 않음학습 곡선쉬움 (SQL 언어만 학습)JPA 엔티티..
다양한 디자인 패턴 정리글
·
Spring
Java 개발자를 위한 MVC 패턴과 주요 디자인 패턴 정리Java 개발을 하면서 가장 많이 접하게 되는 디자인 패턴은 MVC 패턴을 비롯한 다양한 구조적, 행위적 패턴입니다. 이 글에서는 MVC 패턴을 중심으로 다른 주요 디자인 패턴들을 함께 살펴보겠습니다.1. MVC 패턴 (Model-View-Controller)MVC 패턴은 애플리케이션을 Model(모델), View(뷰), Controller(컨트롤러) 세 가지로 나누어 개발하는 아키텍처 패턴입니다. 특히 웹 애플리케이션 개발에 많이 사용됩니다.Model (모델)데이터와 비즈니스 로직을 처리하는 부분View와 Controller에 독립적으로 동작하며 데이터의 상태를 변경하고 유지View (뷰)사용자에게 보여지는 UI 부분Model로부터 데이터를 받..
Lombok,Gradle,Jackson에 대하여
·
Spring
Java 개발자를 위한 Lombok, Gradle, Jackson 소개1. Lombok: 코드 간소화를 위한 강력한 어노테이션Lombok은 반복적인 코드 작성을 줄이기 위한 라이브러리입니다. 주로 @Getter, @Setter, @ToString, @EqualsAndHashCode 같은 어노테이션을 제공해 불필요한 코드 중복을 제거합니다.주요 어노테이션@Getter / @Setter: 필드의 getter, setter 메서드를 자동으로 생성@ToString: 객체의 필드를 포함한 toString 메서드 자동 생성@EqualsAndHashCode: equals 및 hashCode 메서드 자동 생성@Builder: 빌더 패턴을 자동으로 생성해 객체 생성 시 가독성을 높임@Data: 모든 메서드와 기본 생성자..
스파르타코딩 Spring 심화 프로젝트 회고록
·
프로젝트/스파르타코딩
토마토 배달 앱 심화 프로젝트 회고이번 심화 프로젝트에서는 ‘토마토 배달 앱’을 개발하여, 사용자와 상점 간의 효율적인 소통과 배달 주문 환경을 구축했습니다. 이 프로젝트는 특히 JWT 인증과 OAuth2.0을 통한 외부 인증 기능을 포함하며, 사용자별 권한에 따른 접근 제어와 리프레시 토큰을 통한 사용자 편의성을 높이는 데 중점을 두었습니다. 이번 회고에서는 프로젝트의 주요 기능과 기술적 접근, 그리고 개발 과정에서의 배운 점을 정리해보겠습니다.프로젝트 개요 및 목표토마토 배달 앱은 다양한 상점과 메뉴 등록을 허용하며, 사용자들이 로그인하여 가게에서 메뉴를 주문하고 리뷰를 작성할 수 있는 구조입니다. 상점주(OWNER)와 일반 사용자(USER)로 권한을 구분하여 역할에 따른 기능 사용을 제한하고, 인증..
DIP란 무엇인가?
·
Spring
DIP는 Dependency Inversion Principle의 약자로, 객체 지향 설계 원칙 중 하나입니다. 이 원칙은 의존성 역전 원칙이라고도 하며, SOLID 원칙 중 마지막에 해당합니다. DIP의 핵심은 상위 모듈(추상화된 모듈)이 하위 모듈(구체화된 모듈)에 의존하지 않도록 하여, 모듈 간의 결합도를 낮추고 코드의 유연성을 높이는 것입니다.DIP의 기본 개념DIP는 다음 두 가지 규칙으로 정의됩니다:상위 모듈은 하위 모듈에 의존해서는 안 된다. 둘 다 추상화에 의존해야 한다.추상화는 구체적인 사항에 의존하지 않는다. 구체적인 사항이 추상화에 의존해야 한다.이 원칙에 따라 구체적인 구현이 아닌 추상화(인터페이스나 추상 클래스)에 의존하게 만들어야 합니다. 이렇게 하면, 구현을 바꾸더라도 상위 모..
JWT 토큰 방식에 대한 단점과 보완점
·
Spring
세션 방식 vs JWT 방식: 인증 시스템의 이해현대의 웹 애플리케이션에서는 사용자 인증을 위해 세션 방식과 JWT(JSON Web Token) 방식을 주로 사용합니다. 두 방식은 각기 다른 장단점을 가지고 있으며, 애플리케이션의 요구 사항에 따라 선택해야 합니다. 이번 포스트에서는 각 방식의 차이점, JWT의 단점 및 이를 보완하는 방법 중 하나인 "Refresh Token Rotation"에 대해 알아보겠습니다.1. 세션 방식(Session-Based Authentication)세션 방식은 서버에 사용자 정보를 저장하고 이를 바탕으로 인증을 유지하는 전통적인 방식입니다. 사용자가 로그인할 때 서버는 고유한 세션 ID를 생성하여 클라이언트에게 전달하고, 서버에 해당 세션 ID와 사용자 정보를 저장합니다..
[내일배움캠프] 본캠프 코드카타 20번 문제
·
TIL/코딩테스트 연습문제
알고리즘 문제: 자릿수를 큰 순서대로 정렬하기이번 문제는 정수 n의 각 자릿수를 큰 순서부터 작은 순서대로 정렬하여 새로운 정수를 만드는 것입니다.문제 분석n을 문자열로 변환해 각 자릿수를 분리합니다.분리된 숫자들을 내림차순으로 정렬합니다.정렬된 문자열을 다시 숫자로 변환하여 반환합니다.제약 사항n은 1 이상 8,000,000,000 이하의 자연수입니다.코드 구현 (Java)import java.util.Arrays;import java.util.Collections;public class DigitSorter { public long solution(long n) { // 1. 숫자를 문자열로 변환하고 문자 배열로 만듦 String[] digits = String.valu..