목록개발Article (143)
밤빵's 개발일지
개발 중 공통적인 기능들을 제공하기 위해 유틸리티 클래스를 사용하는 것은 흔한 일이다. 하지만, "유틸리티 클래스는 악이다"라는 주장을 보게되고, 유틸리티 클래스가 가진 단점과 객체지향적인 접근 방식의 차이를 구체적으로 이해할 필요성을 느꼈다.▶ 유틸리티 클래스유틸리티 클래스는 여러 클래스에서 공통적으로 사용할 수 있는 메서드들을 정적(static)으로 구현한 클래스를 의미한다. 자바의 Math 클래스나 Collections 클래스가 대표적인 예이다. 유틸리티 클래스는 인스턴스를 생성하지 않고도 메서드를 호출할 수 있고, 상태를 가지지 않는다.▷유틸리티 클래스public class MathUtil { public static int add(int a, int b) { return a +..
▶ 문제 상황 PUBG 프로젝트에서 매치 데이터를 가져와서 roster 데이터를 정리하는 과정에서 문제를 겪었다. 초기 로스터 응답은 원하는 형태와 다르게 나왔다. 응답 데이터에서 로스터의 attributes에는 참가자의 세부 정보가 중복되어 포함되어 있어서 로스터의 데이터 구조가 복잡하고 불필요한 정보가 많고, pubg데이터와 너무나도 다른 구조의 데이터가 나왔다. 초기 응답 형식은 이랬다. { "type": "roster", "id": "e73c7460-eba1-489c-a834-8d393c0499b5", "attributes": { "stats": { "rank": 11, // 있어야하는 데이터 "teamId": 9, // 있어야하는 데이터 "assists..
생각없이 보던 화면에 코드가 보여서 살펴보다가, 멀티스레드 환경에서 동기화 문제를 해결하기 위한 synchronized 키워드를 사용해 본 적은 없었기 때문에, 이 기회에 학습 겸 개발일지를 작성하기로 했다. 코드 예시를 통해 synchronized 키워드가 실제로 어떻게 사용되는지, 어떤 문제를 해결할 수 있는지, 그리고 이 키워드를 사용할 때 주의해야 할 점 까지 정리를 해보기로했다. ▶ synchronized 키워드멀티스레드 환경에서 여러 스레드가 하나의 공유 리소스에 동시에 접근하려 할 때, Race Condition과 같은 문제가 발생할 수 있다. synchronized 키워드는 이러한 문제를 방지하기 위해 사용되고, 공유 리소스에 대한 접근을 하나의 스레드로 제한한다.특징synchronized..
.@JsonInclude는 JSON 직렬화 과정에서 필드의 포함 여부를 결정하는 역할을 한다. 프로젝트에서 처음 이 어노테이션을 접하게 된 계기로 @JsonInclude의 개념, 옵션, 적용 방법, 장단점 등을 학습하며 개발일지에 정리하기로 했다. ▶@JsonInclude란?@JsonInclude는 Jackson 라이브러리에서 제공하는 어노테이션으로, JSON 직렬화 과정에서 특정 필드를 직렬화할지 말지를 결정하는 역할을 한다. 예를 들어, 객체의 특정 필드가 null이거나 기본값일 때 그 필드를 JSON에 포함할지 여부를 설정할 수 있다. 이 기능은 직렬화된 JSON 데이터를 보다 간결하고 효율적으로 만들 수 있으며, API 통신 시 불필요한 데이터를 줄이는 데 큰 도움이 된다.기본적으로 @JsonI..
FACADE 패턴은 시스템의 복잡한 부분을 감추고, 단순화된 인터페이스를 제공함으로써 사용자가 쉽게 사용할 수 있도록 돕는 디자인 패턴이다. 이번 개발일지를 통해 FACADE 패턴의 개념을 학습하고 이를 실제 코드에 어떻게 적용할 수 있는지 이해해보려고 한다. ▶FACADE 패턴?FACADE 패턴은 복잡한 서브 시스템이나 여러 클래스들로 구성된 코드를 단순화하기 위해 사용하는 디자인 패턴이다. 이 패턴은 여러 개의 클래스들이 서로 복잡하게 상호작용하는 시스템을 단순하게 사용할 수 있는 단일 인터페이스를 제공한다. 복잡한 내부 구조를 숨기고 외부에서는 단순한 메서드 호출만으로도 다양한 기능을 사용할 수 있게 만들어 준다.이 패턴의 목적은 코드의 복잡성을 줄이고 유지보수성을 높이는 것이다. 개발자가 직접 여..
Spring Security를 사용하면서, 한 유저에게 부여된 권한에 따라 접근 가능한 URL을 나누고자 한다. 예를 들어, guest, user, admin과 같은 권한을 나눠서, user 권한이 있는 사람만 접근할 수 있는 URL에 guest 이용자가 접근하지 못하게 제한하고 싶다. 이 문제를 해결하기 위한 방법으로 몰랐던 방식을 알게됐고, 그 방법에 대한 의견을 정리하면서 이 개발일지를 작성하게되었다. SecurityConfig에서 경로별 접근 제한 설정@PreAuthorize 어노테이션을 사용한 메서드 단위 접근 제한▶첫 번째 방법: SecurityConfig 파일에서 경로 제한 설정첫 번째 방법은 SecurityConfig 파일에서 URL 경로별로 접근 권한을 설정하는 것이다. 스프링 시큐리티에..
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): 추상 클래스는 일부 구현된 메서드와 일부 추상 메서드를 포함할 수 있는 클래스이다. 추상 클래스는 공통된..