다양한 디자인 패턴 정리글
·
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 토큰 방식에 대한 단점과 보완점
·
보안
세션 방식 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..
[내일배움캠프] CH 3 일정 관리 앱 Develop 리팩토링
·
TIL/스파르타 TIL
[내일배움캠프] CH 3 일정 관리 앱 Develop 리팩토링이번 글에서는 Spring Comment Calendar 프로젝트를 통해 RESTful 애플리케이션의 개발 및 리팩토링 과정을 공유하고자 합니다. 이 프로젝트는 Spring Boot와 JWT 기반 인증을 활용하여 사용자별 일정과 댓글을 관리하는 애플리케이션입니다. 특히 JWT 토큰을 쿠키에 저장해 보안성과 접근성을 높였으며, 각 기능을 모듈화하여 유지 보수성을 강화했습니다.주요 기능회원가입 및 로그인 기능 - 사용자 가입 후 JWT 인증을 통해 로그인 및 일정 관리를 가능하게 합니다.JWT 기반 인증 및 권한 관리 - 인증 토큰을 쿠키에 저장하고 사용자의 역할(Role)에 따라 일정 및 댓글 접근 권한을 부여합니다.일정 및 댓글 관리 - 사용자..
[내일배움캠프] 본캠프 코드카타 19번 문제
·
TIL/스파르타 코드카타
알고리즘 문제: 어떤 양의 정수가 제곱수인지 확인하기이번 문제는 임의의 양의 정수 n이 양의 정수 x의 제곱인지 확인하는 것입니다. n이 양의 정수 x의 제곱이라면 (x + 1)^2을 반환하고, 그렇지 않다면 -1을 반환해야 합니다.문제 분석n이 어떤 양의 정수 x의 제곱이라면, n은 x * x 형태로 표현됩니다. 예를 들어, n = 121이라면, 이는 11 * 11 형태이므로 x = 11입니다.n이 x * x 형태가 아니면 -1을 반환합니다.접근 방법주어진 수 n에 대해 Math.sqrt(n)을 사용하여 n의 제곱근을 구합니다.제곱근이 정수라면, (제곱근 + 1)의 제곱을 반환하고, 정수가 아니라면 -1을 반환합니다.제약 사항n은 1 이상, 50조 이하의 양의 정수입니다. 따라서 이 범위에서 효율적으로..
스파르타코딩 Spring 기초 프로젝트 회고록
·
프로젝트
SNS 백엔드 프로젝트 마무리 회고 GitHub - 5trillion500million/newsfeedContribute to 5trillion500million/newsfeed development by creating an account on GitHub.github.com 이번 SNS 백엔드 프로젝트에서는 스프링 시큐리티와 JWT를 사용한 인증 절차, 외부 API를 이용한 국가 정보 관리, Soft Delete 전략, 그리고 깃 브랜치 전략을 중심으로 개발을 진행했습니다. 이번 글에서는 각각의 주요 기능에 대한 개발 배경과 경험을 공유하고자 합니다.1. 인증 절차스프링 시큐리티를 기반으로 JWT 인증을 추가해 HTTP의 비연결성과 무상태성을 활용했습니다. 기존의 세션 방식을 비활성화하고 JWT를 사..
[내일배움캠프] CH 3 일정 관리 앱 Develop
·
TIL/스파르타 TIL
요번에 주어진 프로젝트에 대해 분석해보았습니다, 요번 개인 프로젝트는 일정 관리 시스템을 개발하는 것입니다. 주요 요구사항과 기능은 크게 API 명세서 작성, ERD 설계, 일정 및 댓글 CRUD, 유저 관리, 페이징 처리, JWT 인증/인가 및 예외처리로 나눌 수 있습니다. 각 기능에 대한 세부 분석은 다음과 같습니다.1. 공통 조건3 Layer Architecture: 프로젝트는 Presentation, Service, Persistence의 세 레이어로 나눠서 개발해야 합니다. 즉, 각 레이어에 맞는 역할을 수행하도록 코드를 분리해야 합니다.JPA 사용: 데이터베이스와의 통신을 JPA로 처리합니다. 모든 CRUD 기능에서 JPA를 통해 데이터를 처리해야 하며, 연관관계는 양방향으로 설정합니다.JWT..