회사에서 다양한 패턴에 대해 공부하는 시간이 있어시간을 들여 정리해 보았습니다. 템플릿 메서드 패턴틀은 내가 정해줄게! 너는 세부만 채워~! 상위 클래스(추상 클래스) 에 알고리즘의 전체 구조를 정의해 놓고, 세부 단계는 하위 클래스가 구현하도록 하는 패턴입니다.예시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..
CI / CD 개념 정리CI / CD 는 Continuous Integration( 지속적인 통합 ) 과 Continuous Delivery/Deployment( 지속적인 제공 / 배포 ) 를 의미하는 개발 프로세스 자동화 개념입니다. 이러한 자동화는 소프트웨어 개발의 효율성을 극대화하고, 오류를 최소화하며, 신속한 배포를 가능하게 합니다.CICI 는 개발자가 작성한 코드 변경 사항을 정기적으로 중앙 저장소( 리포지토리 ) 에 통합하고 빌드 및 테스트를 자동으로 수행하는 프로세스입니다. CI 를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이나 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로, 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 ..
spring boot 는 jar 파일로, spring framework 는 war 파일로 배포해야 한다. 라는 관행처럼 간주되는 내용에 대해,정확히 어떤 이유로부터 파생된 결론인지 궁금해 정리해 보았습니다. JAR ( Java Archive )JAVA 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일입니다.class( Java resource, 속성 파일 ), 라이브러리 파일을 포함하며 JRE 만 있어도 실행이 가능합니다.장점독립적인 Java 애플리케이션을 패키징할 수 있고, 실행 가능한 JAR 파일로 만들어서 개발자가 쉽게 애플리케이션 개발이 가능합니다. 또한 압축된 형식으로 클래스, 리소스, 라이브러리 등을 포함하므로 배포와 전달도 용이합니다.마지막으로 Java 애플리케이션의 진입점인 ma..
Gradle과 Maven 을 설명하기 전에 우선 빌드와 빌드도구가 무엇인지에 대해서 알아야 합니다.빌드란 프로그램을 실행 가능한 배포 파일을 만들어 내는 것을 의미합니다. 즉, 소스 코드를 컴파일하고, 컴파일된 클래스 파일과 리소스 파일등 프로그램 실행에 관련된 파일들을 패키징 하여, 배포 가능한 형태로 만드는 것을 의미합니다.빌드가 생성되는 과정에서 이루어지는 과정컴파일, 테스트, 패키징, 의존성 관리, 배포, 클린업, 리포트 빌드 도구는 이러한 일련의 빌드 과정을 자동화해주는 소프트웨어입니다. 설정 파일을 통해 필요한 작업을 정의하고 클릭 한 번으로 모든 의존 라이브러리(jar 파일) 을 다운로드해 컴파일하고, 테스트하고, 패키징하여 배포까지 자동으로 처리할 수 있습니다. 이로 인해 배포 작업이 간편..
메세지화면에서 공통으로 사용되는 다양한 메세지를 한 곳에서 관리하도록 하는 기능을 메세지 기능이라고 합니다.메세지 기능을 사용하지 않을 경우 우리는 모든 메세지를 각각 하드코딩으로 입력해야 합니다. 상품 ID 상품명 가격 수량 아이템 상세를 보여주는 위 HTML 태그들에는 각각 하드코딩으로 상품ID, 상품명, 가격, 수량이 적혀있습니다.또한 해당 명칭들은 나머지 다른 많은 페이지에서 공통으로 쓰이고 있다고 할 대 기획 변경으로 상품명을 제품명으로 바꿔야 한다면 어떻게 할까요? 메세지 기능을 사용하지 않았다면 모든 소스파일에서 하나하나 상품명이라 적혀있는 곳을 찾아 제품명이라 바꿔주어야 합니다. 하지만 메세지 기능을 사용했다면 다음과 같이 메세지를 변수화 ..