회사에서 다양한 패턴에 대해 공부하는 시간이 있어시간을 들여 정리해 보았습니다. 템플릿 메서드 패턴틀은 내가 정해줄게! 너는 세부만 채워~! 상위 클래스(추상 클래스) 에 알고리즘의 전체 구조를 정의해 놓고, 세부 단계는 하위 클래스가 구현하도록 하는 패턴입니다.예시1. 게임 로딩2. 로그인3. 캐릭터 생성 or 불러오기 ← 이것만 다름!4. 게임 시작 // 추상 클래스 (틀)abstract class GameTemplate { public final void startGame() { load(); login(); characterSelect(); // 전략 패턴전략(방법)은 바꿔 쓸 수 있어!! 알고리즘을 인터페이스로 분리해서, 필요에 따라 런타임에 서로 다..
Transaction Proxy, Exception 에 대해 공부하면서 정리합니다. 실무에서 @Transactional 을 붙인 메서드를 실행했는데 정상적으로 동작하지 않아 원인을 찾고 공부한 내용을 정리했습니다.트랜잭션 프록시를 만드는 이유왜 굳이 프록시를 만들어서 트랜잭션을 처리해야 할까요?@Transactional 이 붙은 메서드가 호출될 때 자동으로 트랜잭션을 시작하고, 정상 종료되면 commit, 예외가 나면 rollback 을 해주기 위해서입니다. 구체적으로 왜 프록시가 필요한지 코드를 보면 트랜잭션을 처리하려면 메서드 실행 전후로 아래와 같은 코드가 필요합니다.beginTransaction(); // 트랜잭션 시작try { targetMethod(); // 실제 로직 실행 ..
@Transactional , Spring Data JPA 를 공부하다 같이 사용할 때왜 이렇게 동작하는거지? 라는 부분에 대하여 정리합니다. 개발을 하다보면 Spring Data JPA 는 기본적으로 트랜잭션을 자동으로 처리해 줍니다.하지만 @Transactional, Spring Data JPA 를 같이 쓰고 있을 때 @Transactional 이 언제 필요한지, 언제 생략 가능한지에 대해서 세부적으로 알아야 할 것 같아서 정리했습니다. 기본적으로 적용되는 트랜잭션Spring Data JPA 에서 제공하는 기본적인 메서드들은 아래와 같습니다. 1. save()2. findById()3. delete()4. findAll() 이러한 메서드들은 자동으로 트랜잭션이 적용되어 있습니다.이건 Spring 내..
간단한 설명Spring Bean 은 다음과 같은 생명 주기를 갖습니다.스프링 컨테이너 생성 => 스프링 밴 생성 => 의존관계 주입( DI ) => 초기화 콜백 => 사용 => 소멸전 콜백 => 스프링 종료 위 생명 주기를 보면 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 후에야 필요한 데이터를 사용할 수 있는 준비가 완료됩니다.즉, 생성자가 호출되었을 때 스프링 빈은 초기화 전이고 DI 가 이루어지고 나서야 스프링 빈이 초기화 됩니다. 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출하게 되는데, 개발자가 의존관계 주입이 완료된 시점이 언제인지 알 수 있는 방법이 없습니다. 그래서 Spring 은 다음과 같은 빈 생명주기 콜백을 지원합니다.1. 인터페이스( InitializingB..
메세지화면에서 공통으로 사용되는 다양한 메세지를 한 곳에서 관리하도록 하는 기능을 메세지 기능이라고 합니다.메세지 기능을 사용하지 않을 경우 우리는 모든 메세지를 각각 하드코딩으로 입력해야 합니다. 상품 ID 상품명 가격 수량 아이템 상세를 보여주는 위 HTML 태그들에는 각각 하드코딩으로 상품ID, 상품명, 가격, 수량이 적혀있습니다.또한 해당 명칭들은 나머지 다른 많은 페이지에서 공통으로 쓰이고 있다고 할 대 기획 변경으로 상품명을 제품명으로 바꿔야 한다면 어떻게 할까요? 메세지 기능을 사용하지 않았다면 모든 소스파일에서 하나하나 상품명이라 적혀있는 곳을 찾아 제품명이라 바꿔주어야 합니다. 하지만 메세지 기능을 사용했다면 다음과 같이 메세지를 변수화 ..
📌@Valid, @Validated우리가 웹사이트에서 회원가입을 할 때, 이런 걸 검사해야 합니다.✔ 이름을 입력했는지?✔ 나이가 너무 어리진 않은지?✔ 이메일 형식이 맞는지? 이런 검사를 백엔드(Spring) 에서 자동으로 해주는 게 @Valid랑 @Validated입니다.@Valid 사용법 (기본 검사)예를 들어 회원가입할 때, 이름이 비어있으면 안 되고, 나이는 18살 이상이어야 한다는 조건을 붙인다고 생각합시다.UserDTO (데이터 저장하는 클래스)import jakarta.validation.constraints.Min;import jakarta.validation.constraints.NotBlank;import jakarta.validation.constraints.NotNull;publ..
설명Spring Boot 에서 @Scheduled 어노테이션을 사용하면 일정한 시간 간격으로, 혹은 특정 시간에 코드가 실행되도록 설정할 수 있습니다.주기적으로 실행해야 하는 작업이 있을 대 적용해 쉽게 사용할 수 있습니다.사용법@Scheduled 어노테이션을 사용하기 위해 다음과 같이 Application Class 에서 @EnableScheduling 을 추가해야 합니다.@EnableScheduling@SpringBootApplicationpublic class SchedulerApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); ..
Spring Framework는 Java 애플리케이션 개발에서 핵심적인 역할을 하며, 특히 웹 애플리케이션에서는 사용자의 요청을 처리하고 적절한 응답을 반환하기 위해 다양한 애노테이션을 제공합니다. 그중 @Controller와 @RestController는 자주 혼동되는 두 가지 애노테이션입니다. @Controller@Controller는 Spring MVC에서 컨트롤러 역할을 하는 클래스에 사용되는 애노테이션입니다. 주로 뷰(View)를 반환하는 데 사용되며, HTML 페이지와 같은 템플릿 엔진과 함께 사용됩니다. @Controller 는 반환 값이 뷰 이름으로 해석됩니다. Spring 은 해당 이름을 기반으로 HTML, JSP 와 같은 뷰 파일을 렌더링 해줍니다. 또한 일반적으로 HTTP 응답 자체를..