왜 MapStruct와 같은 주석 매핑을 사용하는 가? 1. 직접 하나하나 매핑하는 것은 굉장히 귀찮은 일이다. 2. 비즈니스 로직에 매핑 코드가 끼어있으면 코드 가독성이 떨어질 수 있다. 3. 개발자가 직접 매핑을 하다보면 실수가 발생할 수 있다. 4. 변경사항이 발생했을 경우 Source나 Target 코드만 변경하면 된다. 사전 설정 이 글은 MapStruct 1.5.5.Final Reference Guide를 기준으로 작성되었습니다. MapStruct는 Java9 이상의 버전에서만 사용할 수 있습니다. (@Generated의 사용이 필요함) MapStruct 종속성 설정 1. Maven 프로젝트 ... 1.5.5.Final ... org.mapstruct mapstruct ${org.mapstru..
문제 상황 Elastic Beanstalk을 활용해 웹 서비스를 배포하고 있었는데, 환경 속성을 통해 API key값을 관리하고자 했습니다. 그러나 모종의 이유로 환경변수를 등록해도 환경변수가 적용이 되지 않아 어려움을 겪었습니다. 그렇다고 공개된 코드에 API key값을 노출시킬 수는 없는 노릇이고, 어떻게 해야할 지 고민하던 중 AWS Systems Manager내의 Parameter Store를 알게 되어 적용해보기로 했습니다. ParameterStore 내에서 파라미터 생성 AWS 콘솔에 로그인을 한 이후, AWS Systems Manager 내의 Parameter Store에 접근하여 파라미터 생성을 클릭합니다. 계층 구조로 파라미터 이름을 설정해줍니다. 유형은 보안 문자열을 선택해주고, 암호화..
Spotless란? Spotless는 코드 포맷팅을 자동화하여 프로젝트의 코드 스타일을 일관성 있게 유지하는 데 도움을 주는 Gradle 및 Maven 플러그인입니다. Spotless는 다양한 프로그래밍 언어와 파일 형식을 지원하며, Google Java Format, ktlint, Prettier 등과 같은 외부 코드 포맷터와 통합할 수 있습니다. 이러한 도구를 사용하여 코드의 일관성을 유지하고, 리뷰 프로세스를 간소화하며, 코드 품질을 향상시킬 수 있습니다. Spotless는 특히 여러 사람들이 함께하는 프로젝트에서 굉장한 위력을 발휘할 수 있습니다. Spotless 적용법 Spotless를 프로젝트에 적용하려면 먼저 `build.gradle` 파일에 Spotless 플러그인을 추가해야 합니다. id..
소프트웨어 개발을 할 때, 신규 기능을 추가하거나 코드를 변경하는 과정에서 오류를 발생시키는 것을 두려워하는 개발자들이 많습니다. TDD, 즉 테스트 주도 개발은 이러한 두려움을 해결해주는 도구이자 철학 중 하나입니다. 이 글에서는 TDD가 무엇인지, 그리고 어떻게 TDD를 사용해야할 지 알아보겠습니다! TDD란 무엇일까 TDD는 소프트웨어 개발 방법론 중 하나로, 테스트를 먼저 작성한 다음 그 테스트가 통과되도록 코드를 작성하는 방법입니다. 즉, TDD는 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스입니다. TDD의 기본적인 원리는 '빨간색 - 초록색 - 리팩토링' 순서로 진행됩니다. 빨간색은 작은 테스트를 작성하는 것입니다. 설령 컴파일에도 실패할지라도 구색만 갖춘 테스트를 먼저 작성합니..
사용자 인증 인증은 웹 애플리케이션에서 가장 중요한 구성 요소 중 하나입니다. 인증 과정에서 사용자의 신원을 확인하고, 해당 사용자에게 적절한 권한을 부여하는 것이 주 목표입니다. 이번 글에서는 웹에서 널리 사용되는 인증 방법들에 대해 알아보겠습니다! 인증 방법 쿠키 쿠키란 무엇인가? 쿠키는 브라우저에 저장되는 작은 단위의 문자열 파일들입니다. 이름, 값, 속성값을 저장하고 있습니다. 보통 아래와 같은 형식으로 응답 헤더에 담아 서버에서 클라이언트로 전송됩니다. { Set-Cookie: user_id=12345; HttpOnly; SameSite=Lax; } 인증 과정 사용자가 로그인 요청을 보냅니다. 서버는 사용자의 신원을 확인하고, 유효한 사용자일 경우 `Set-Cookie` 헤더를 사용하여 응답에 ..
@ResponseStatus `@ResponseStatus`는 스프링에서 제공하는 어노테이션으로, HTTP 상태 코드와 예외 클래스를 연결시켜 줍니다. 이 어노테이션을 이용하면 예외 발생 시 원하는 HTTP 상태 코드와 메시지를 클라이언트에게 반환할 수 있습니다. @ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "Resource Not Found") public class ResourceNotFoundException extends RuntimeException { public ResourceNotFoundException(String message) { super(message); } } 위 예제에서 `ResourceNotFoundException` 은..
HTML 코드를 작성하다보면 대표적으로 부분과 같이 공통적으로 작성하게 되는 코드가 발생합니다. 그렇기에 웹 개발에서 HTML 코드의 중복을 최소화하는 것은 개발의 효율성과 유지보수의 용이성을 높이는 중요한 작업입니다. 이번 포스트에서는 타임리프를 사용하여 템플릿 상속을 통한 코드 리팩토링을 어떻게 진행했는지에 대해 다루어보겠습니다. 타임리프란 무엇인가? 우선 간단하게 타임리프가 무엇인지 짚고 넘어가겠습니다. 타임리프(Thymeleaf)는 자바 기반의 서버 사이드 템플릿 엔진입니다. 스프링부트와의 연동이 간편하며, HTML과 XML 문서를 자바 객체로 처리할 수 있게 해줍니다. 즉, 타임리프를 통해 DB에서 가져와 여러가지 가공을 한 데이터(자바 객체)를 정적인 HTML문서에 넣어 동적인 뷰를 보여줄 수..
서비스란? - 레포지토리와 컨트롤러 사이에서 세부적인 비즈니스 로직을 처리하는 계층을 서비스 계층이라고 합니다. - 컨트롤러에서 레포지토리를 호출하여 모든 로직을 처리할 수 있지만, 그러한 코드는 단일 책임 원칙을 위반하게 됩니다. 코드의 유지 보수를 위해서라도 코드는 단일 책임 원칙에 따르는 것이 좋습니다. 서비스층을 만들어 DB접근, DTO생성등을 행하게 만든다면 컨트롤러는 URL맵핑에 집중 할 수 있습니다. 서비스의 필요성 모듈화 - 서비스는 DB에 접근하여 데이터를 다루는 어떠한 기능인데, 만약 이를 서비스 파일에 저장해놓는다면 필요할 때 서비스를 호출하여 실행하면 될 것입니다. 하지만 만약 서비스 파일을 생성하지 않는다면 그 기능이 필요한 모든 컨트롤러마다 똑같은 로직을 반복하게 될 것입니다. ..