목록분류 전체보기 (198)
밤빵's 개발일지
Spring Security를 사용하면서, 한 유저에게 부여된 권한에 따라 접근 가능한 URL을 나누고자 한다. 예를 들어, guest, user, admin과 같은 권한을 나눠서, user 권한이 있는 사람만 접근할 수 있는 URL에 guest 이용자가 접근하지 못하게 제한하고 싶다. 이 문제를 해결하기 위한 방법으로 몰랐던 방식을 알게됐고, 그 방법에 대한 의견을 정리하면서 이 개발일지를 작성하게되었다. SecurityConfig에서 경로별 접근 제한 설정@PreAuthorize 어노테이션을 사용한 메서드 단위 접근 제한▶첫 번째 방법: SecurityConfig 파일에서 경로 제한 설정첫 번째 방법은 SecurityConfig 파일에서 URL 경로별로 접근 권한을 설정하는 것이다. 스프링 시큐리티에..
확장성과 오버엔지니어링.이 두 개념은 개발자로서 코드 설계를 고민할 때 자주 맞닥뜨리게 되는 문제이지만, 초입자인 내가 이해하기엔 어려운 주제였다. 이번 개발일지를 통해 확장성과 오버엔지니어링이 무엇인지 학습하고, 이 두 개념의 균형을 어떻게 잡아야 하는지 이해하려고 한다. ▶ 확장성(Scalability)이란?확장성(Scalability)이란 소프트웨어 시스템이나 코드가 성장하는 요구사항에 맞추어 쉽게 확장될 수 있는 능력을 의미한다. 여기서 확장성은 단순히 더 많은 기능을 추가하는 것뿐만 아니라, 현재의 코드 구조를 크게 변경하지 않고도 요구사항에 유연하게 대응할 수 있는 것을 말한다. 예를 들어, 특정 기능이 추가될 때 기존 코드를 크게 수정하지 않고 새로운 기능을 쉽게 추가할 수 있다면 그 코드의..
TDD라는 개념을 실제로 어떻게 적용하는지 그리고 그 목적과 장단점에 대해 깊이 이해해본 적은 없었다. 이번 개발일지를 통해 TDD의 개념과 목적, 그리고 이를 적용하면서 겪었던 어려움과 배운 점들을 정리해보고자 한다. 또한, 이를 통해 앞으로 TDD를 습관화하고, 더 나은 코드를 작성하기 위해 노력하려고 한다! ▶TDD란?TDD(Test-Driven Development)는 소프트웨어 개발 방법론 중 하나로, 이름 그대로 테스트를 먼저 작성하고, 그 테스트를 통과하기 위한 프로덕션 코드를 작성하는 방식이다. TDD의 핵심 과정은 Red-Green-Refactor로 나뉜다.Red 단계: 테스트를 작성하고, 처음에는 당연히 이 테스트가 실패하도록 만든다. 테스트할 프로덕션 코드가 아직 없기 때문에 테스트..
롬복은 자바에서 코드를 더 간결하고 효율적으로 작성할 수 있게 도와주는 도구로, 자주 사용되는 메서드들을 어노테이션 하나로 자동 생성해 주기 때문에 많은 개발자들이 사용하고 있다. 그중에서도 @Data 어노테이션은 요즘 내가 자주 사용하는 어노테이션 중 하나로,사용하는 것이 정말 괜찮은 것인지, 특히 엔티티(Entity)나 DTO(Data Transfer Object)에 사용해도 되는지에 대한 고민이 생겼다. 이번 개발일지를 통해 @Data 어노테이션에 대해 학습한 내용을 정리하고, 그에 대한 생각을 정리했다. ▶@Data 어노테이션이란?@Data 어노테이션은 롬복에서 제공하는 어노테이션으로, 클래스에 자동으로 getter, setter, toString, equals, hashCode 메서드를 생성해 ..
도메인이라는 개념은 여러 곳에서 설명이 다르게 표현되기도 하고, 초보자로서 처음 접할 때 조금 모호하게 느껴졌다. 그리고 여전히 도메인은 명확히 이해되지 않는 부분이 있다. 그래서 이번 기회를 통해 도메인의 의미를 명확히 정리하고, 도메인이 소프트웨어 개발에서 어떤 역할을 하는지 정리했다. ▶도메인이란?도메인은 프로그래밍 분야에서 자주 언급되는 용어로, 다양한 정의가 있다. 위키백과에서는 도메인을 "문제를 풀기 위해 설계된 소프트웨어 프로그램의 기능성을 정의하는 연구의 한 영역"이라고 설명하고 있고, 객체지향의 사실과 오해라는 책에서는 "사용자들이 관심을 가지고 있는 특정 분야나 주제"라고 정의하고 있다. 이 두 정의를 종합해보면, 도메인은 소프트웨어가 해결하고자 하는 문제나 그 문제와 관련된 특정 영역..
인터페이스와 추상 클래스가 무엇인지 기본적인 개념은 알지만, 이 두 가지가 실제로 어떤 상황에서 사용되는지, 각각의 용도가 어떻게 다른지 명확히 정리할 필요가 있었다. ▶인터페이스와 추상 클래스란?간단히 정리하자면,인터페이스 (Interface): 인터페이스는 기능의 명세(클래스가 구현해야 할 메서드의 선언만을 정의한 것으로, 구현은하지않는다.)를 정의하는 역할을 한다. 인터페이스 안에는 메서드의 시그니처(선언부)만 포함되어 있고, 그 구현은 인터페이스를 구현하는 클래스에서 담당한다. 자바에서는 인터페이스를 통해 여러 클래스에 동일한 기능을 제공할 수 있다.추상 클래스 (Abstract Class): 추상 클래스는 일부 구현된 메서드와 일부 추상 메서드를 포함할 수 있는 클래스이다. 추상 클래스는 공통된..
▶MYVM 디자인 패턴이란?MYVM은 'Model-View-ViewModel'의 약자로, 원래는 주로 프론트엔드 개발에서 UI와 비즈니스 로직을 분리하기 위해 사용하는 디자인 패턴이다. 이 패턴은 각 구성 요소가 자신의 역할을 명확히 가지며 서로의 결합도를 낮춰 코드의 유지보수성과 확장성을 높이는 것을 목표로 한다. 하지만 이 개념은 백엔드에서도 활용될 수 있다. 특히, 로직과 데이터의 분리를 강조하여 복잡한 백엔드 시스템에서 각 요소가 독립적으로 작동할 수 있도록 도움을 준다. 이 패턴은 Model, View, ViewModel로 나뉜다. Model: 시스템의 핵심 데이터와 비즈니스 로직을 담고 있는 부분이다. 데이터베이스와의 상호작용, 도메인 로직을 처리하는 것이 이 영역의 역할이다. 예를 들어, 엔..
오늘은 코드에서 자주 언급되는 'Depth'에 대해 개발일지를 작성해보려고 한다. Depth라는 개념을 잘 알지 못했지만, 이번 기회를 통해 학습하면서 더 나은 코드를 작성하기 위한 방법을 고민해보려고 한다. ▶DepthDepth는 흔히 '깊이'라는 의미로 사용되며, 코드에서는 호출 계층의 깊이를 의미한다. 예를 들어, 메서드 A가 메서드 B를 호출하고, 메서드 B가 메서드 C를 호출한다면 이 코드의 Depth는 3이 된다. 이렇게 여러 메서드가 연쇄적으로 호출되는 구조가 복잡해질수록 코드의 Depth는 깊어진다. Depth가 깊어지면 코드가 복잡하게 느껴지고 이해하기 어려워지기 때문에, Depth는 코드의 복잡도를 나타내는 중요한 요소 중 하나로 간주된다.▶Depth가 깊어질 때의 문제점Depth가 깊..
스파게티 코드는 주로 코드가 구조적이지 않고 뒤얽혀 있어 이해가기 어렵고 유지보수가 복잡해지는 경우를 말한다. 이전에 클린 코드와 코드 리팩토링의 중요성에 대해 다룬 적은 있지만, 실제로 이를 적용해 본 경험은 없었고, 스파게티 코드가 무엇인지도 본 적이 없었다🫨 ▶스파게티 코드란?스파게티 코드는 코드의 흐름이 엉망으로 뒤섞여 있어 이해하기 어렵고 유지보수가 힘든 코드를 말한다. 이러한 코드는 반복된 로직, 무분별한 의존성, 가독성이 떨어지는 구조 등으로 인해 복잡해진다. 일반적으로 스파게티 코드는 특정 기능을 추가하거나 변경할 때 예상치 못한 버그를 발생시키기 쉽고, 개발자 간의 협업을 어렵게 만든다.▶ 코드 분석내가 작성한 GamingSetupService 클래스의 코드로, 이 코드는 기본적으로 잘..
커링(Currying)은 여러 개의 매개변수를 갖는 함수를 단일 매개변수를 갖는 함수의 연속으로 변환하는 기법이다. 이를 통해 함수를 부분 적용하여 코드의 유연성을 높이고 재사용성을 강화할 수 있다 ▶ 커링(Currying) 커링은 함수형 프로그래밍의 중요한 개념 중 하나이다. 함수가 여러 개의 인자를 받을 때, 이를 부분 적용하여 하나의 인자만 받는 함수들을 연속적으로 반환할 수 있도록 변환하는 것을 의미한다. 예를 들어, 두 개의 매개변수를 갖는 함수 f(a, b)는 f(a)(b)의 형태로 변환될 수 있다. 이는 각 인자를 하나씩 받아 최종 결과를 반환하는 방식으로 동작한다.코틀린에서는 기본적으로 커링을 지원하지 않지만, 고차 함수를 사용하여 커링을 구현할 수 있다.▶커링 구현 방법코틀린에서 커링을 ..