Programming/Spring23 JPA Entity의 @Setter를 지양하는 이유에 대해서 (feat. @Builder) 서론 이번 포스팅에선 JPA의 Entity를 사용할 때 @Setter를 지양해야하는 이유에 대해 알아보려합니다. 물론 @Setter의 사용이 100% 잘못되었다는 것이 아닙니다. 양방향 바인딩 시 Setter 사용이 더 용이할 수 있으나 이번 포스팅에선 일반적인 케이스만 다뤄보도록 하겠습니다. @Setter를 지양해야하는 이유 @Setter는 사용 의도/목적이 분명치 않다. (Update인지 Create인지) Entity를 만들 때는 외부에서 쉽게 변경할 수 없게 @Setter를 사용하지않는다. 그 이유는 @Setter를 사용하면 의도가 불명확하고 변경하면 안되는 중요한 값임에도 불구하고 변경 가능한 값으로 착각할 수 있다. (== 안정성 보장이 안된다.) 그러면 만약 값을 업데이트 시켜줘야하는 상황일 .. Programming/Spring 2022. 9. 10. [Spring] 스프링 빈 생명 주기에 대해서 (Spring Bean Life Cycle) 서론 보통 스프링 빈이 생성되거나 소멸될 때 특정한 작업을 하고싶은 경우가 있다. 예를 들어, 빈이 생성될 때 데이터베이스 커넥션 풀을 미리 생성하는 경우가 있다. 이러하게 빈이 생성되거나 종료될 때 빈의 라이프 사이클을 관리하는데 유용한 @PostConstruct, @PostDestroy 어노테이션을 사용하여 어떻게 작업을 진행하는지 알아보려한다. 스프링 빈의 라이프사이클 스프링 컨테이너 생성 빈 생성 의존관계 주입 초기화 콜백 사용 소멸 전 콜백 스프링 종료 초기화 콜백: 빈이 생성되고 빈의 의존관계 주입이 완료된 후 호출되는 것을 말한다. 소멸전 콜백: 빈이 소멸되기 직전에 호출된다. @PostConstruct란? @PostConstruct public void init() { System.out... Programming/Spring 2022. 8. 8. 원활한 MSA를 위한 Spring Cloud란? (개념/ 종류/ Config Server/ Gateway) 서론 이번 글에서는 MSA(마이크로 서비스 아키텍처)의 개발, 배포, 운영에 필요한 아키텍처를 쉽게 구성할 수 있도록 지원하는 Spring Boot기반의 프레임 워크인 Spring Cloud에 대해 알아보려한다. MSA에 대한 전반적인 지식은 알고있다는 전제하에 Spring Cloud를 중점적으로 알아볼 것이다. Spring Cloud란? Spring Cloud는 서론에서 말했듯 분산 시스템 개발에 효과적인 기능을 제공해주는 프레임 워크이다. 보통 분산 시스템이라 하면 circuit breakers, routing, proxy, load balancing 등이 있는데, 이때 이 spring cloud를 이용해서 이러한 분산 시스템을 쉽고 빠르게 서비스를 개발할 수 있게 해준다. 마지막으로 MSA를 곁들여.. Programming/Spring 2022. 6. 16. [Spring Boot] JPA Entity 현재시간(current_timestamp) 적용 방법(@CreationTimestamp/ @UpdateTimestamp) 서론 JPA를 사용할 때 현재시간 current_timestamp의 값을 넣고 싶을 때가있다. 이번 글에서 다루는 어노테이션만 잘 알아두면 아주 손쉽게 해당 기능을 적용시킬 수 있다. Hibernate Hibernate에서 엔터티 객체에 대해 Insert와 Update 쿼리가 발생할 때 자동으로 현재 서버 시간을 기입시켜주는 어노테이션을 제공해준다. Spring Framework 스프링 프레임워크에서도 하이버네이트와 같은 기능을 제공을 해주는데 이번 포스팅에서는 하이버네이트에서 지원해주는 두 가지 키워드에 대해서만 알아보려한다. 스프링 프레임워크에서 지원해주는 것은 검색어에 CreatedDate를 입력하면 좋은 자료들이 많이 나오니 참고하기 바란다. @CreationTimestamp 해당 어노테이션은 I.. Programming/Spring 2022. 6. 9. [Spring Boot] Jackson을 이용하여 Response값 Filtering 방법 (개념/ 예제) 서론 이번 글에서는 Jackson이라는 Dependency를 이용하여 Response의 값을 Filter하는 방법에 대해 알아보려한다. 개념부터 활용 예제까지 정리해보자. Jackson 라이브러리란? (@JsonIgnore, @JsonIgnoreProperties) 스프링 부트 환경에서 우리가 보통 아래와 같이 Json을 사용할 때 이 Jackson 라이브러리를 사용한다. Json -> Object Object -> Json 이 두 개의 변환(직렬화, 역직렬화)은 스프링 부트 웹 스타터 킷 org.springframework.boot:spring-boot-starter-web에 기본적으로 포함된 jackson 라이브러리를 사용하게 된다. 그러나 이번 글에서는 Jackson의 특정 기능을 사용하여 위해 아.. Programming/Spring 2022. 6. 7. [Spring] 의존성 주입(Dependency Injection)이란? (개념/ 예제/ 총 정리) 서론 이번글에서는 스프링을 이용한 의존성 주입에 대해서 알아보려한다. 의존성 주입(DI)은 크게 4가지 방법이 있다. 1. 생성자 주입 2. 수정자 주입(setter 주입) 3. 필드 주입 4. 일반 메서드 주입 위와 같이 4가지 방법이 있는데, 네가지 중 어떤 방식이 효율적이고 실제 실무에서 어떻게 쓰이는지 간략히 정리해보려한다. 의존성 주입(Dependency Injection)이란? Sprng Framework의 3가지 핵심 프로그래밍 중 하나인 의존성 주입(DI)는 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관게를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다. 여기서 말하는 .. Programming/Spring 2022. 5. 31. [Spring Boot] MyBatis 카멜케이스 변환 방법 (Snake -> Camel Case) 서론 보통 DB 컬럼을 생성할 때 우리는 스네이크케이스를 사용하여 만든다. 예를들어 사용자 이름을 만든다고하면 user_nm 이런식으로 _가 붙여져있는 것을 스네이크케이스라고 한다. 근데 클래스에서 생성하는 변수명은 보통 카멜케이스이다. 예로 userNm 이런식으로 새로운 단어가 합쳐지는 부분을 대문자로 사용하는 것을 카멜케이스라고 한다. 그럼 아래의 예시에서 보면 알겠지만 mybatis에서 쿼리를 돌릴 때의 명과 vo의 명이 다른 것을 알 수 있다. 이때 mybatis 쿼리에서 alias를 사용하여 vo 변수명과 맞춰주어도 되지만 이것은 컬럼 하나씩 다 해줘야 되기때문에 매우 비효율적이다. 그렇다면 이제 간단한 변환방법을 알아보자. 변환 전 상황 1. vo 클래스 (스네이크 케이스로 사용 중) @Get.. Programming/Spring 2022. 5. 2. [Spring Boot] @SessionAttridutes, @ModelAttribute란? 서론 이번글에서는 타이틀에서 언급한 세션 관련된 애노테이션에 대해 학습해보려한다. 바로 알아보도록 하자. @ModelAttridute란? 사용자가 요청 시 전달하는 값을 오브젝트 형태로 매핑해주는 애노테이션이다. @SessionAttridutes란? 모델 정보를 HTTP 세션에 저장해주는 애노테이션이다. 1. 컨트롤러 메서드 중 @SessionAttridutes에 지정한 이름과 동일한 이름이 있다면 이를 세션에 저장시켜주는 역할을 한다. >> 뷰가 이 모델을 참조해서 기존 사용자 정보를 폼에 바인딩 시키기 위해서이다. 2. 여러 화면에서 사용해야 하는 객체를 세션에서 공유할 때 사용한다. 3. @ModelAttribute가 지정된 파리미터가 있을 때 해당 파라미터에 전달해줄 오브젝트를 세션에서 가져온다... Programming/Spring 2022. 4. 9. [Spring Boot] Thymeleaf Caching의 의미와 설정 (템플릿 캐싱) 서론 이번 글에서는 템플릿 엔진 중 하나인 타임리프의 캐시에 대해 알아보려한다. 기본적으로 템플릿은 최초 사용될 때 한 번만 파싱되는 성격을 갖고있다. 파싱된 결과는 향 후 사용을 위해 캐시에 저장되는데, 이것은 프로덕션에서 애플리케이션을 사용할 때 좋은 기능이다. 매번 요청을 처리할 때마다 불필요하게 템플릿 파싱을 하지 않으므로 성능을 향상시킬 수 있기 때문이다. 이러한 캐싱이 개발할 때는 오히려 불편한 요소로 작용된다. 애플리케이션을 시작하고 디자인 수정 후 새로고침을 하더라도 수정 전의 페이지만 나오는 것을 확인할 수 있는데 이를 보완하기 위해 해당 캐싱의 속성을 설정할 수 있게끔 지원해준다. 이번 글에서는 해당 내용을 설정하는 방법에 다뤄보려한다. 템플릿 엔진 캐싱 방법 필자같은 경우는 타임리프로.. Programming/Spring 2022. 4. 8. [Spring Boot] @Vaild 유효성 검사 하는 방법 (개념/ 예제) 서론 이번 글에서는 입력하는 부분에 대한 @Vaild 애노테이션을 이용하여 유효성 검사하는 방법에 대해 알아보려한다. 필자는 SpringInAction5 교재에 있는 내용을 활용하여 작성했다. 유효성 검사란? 1. 데이터의 값이 유효한지, 조건에 타당한지 확인하는 것을 말한다. 2. 올바르지 않은 데이터를 서버 또는 DB로 전송되는것을 막기 위함이다. @Vaild를 이용한 유효성 검사 방법 #01. Dependency 추가 @Vaild를 사용하기 전 pom.xml에 Dependency를 아래와 같이 추가해줘야 한다. org.springframework.boot spring-boot-starter-validation ** Validation 어노테이션 정리 Anotation 제약조건 @NotNull Nul.. Programming/Spring 2022. 4. 8. [Spring Boot] DevTools는 무슨 역할을 할까? (기능 / 특징) 서론 Spring Boot 에서는 여러 도구를 제공하는데, 그 중 하나인 DevTools에 대해 알아보자. DevTool란? 이름에서 암시하듯, DevTools는 스프링 개발자들에게 편리한 도구를 제공한다. [제공 기능] 1. 코드가 변경될 때 자동으로 애플리케이션을 다시 시작시킨다. > DevTools는 변경을 감시하며, 뭔가 변경되었음을 알게 되면 자동으로 애플리케이션을 다시 시작시켜주는 속성이 있다. 변경이 감지되는 경우 DevTools는 우리 프로젝트 코드를 포함하는 클래스 로더만 다시 로드하고 스프링 애플리케이션 컨텍스트를 다시 시작시켜준다. 그러나 다른 클래스 로더와 JVM은 그대로 둔다. 따라서 애플리케이션이 시작하는데 걸리는 시간을 조금이나마 단축해준다. 2. 브라우저로 전송되는 리소스 (.. Programming/Spring 2022. 4. 7. [Spring Boot] JAR / WAR 배포는 무엇으로 결정할까? (개념 / 특징 / 차이점) 서론 이번 글에서는 jar와 war가 각자 갖고있는 특징이 있고 상황에 맞게 배포를 해야하는데 이 부분에 대해 정리를 해보려한다. ** 필자는 SpringInAction5의 책을 참고하여 작성했다. JAR는 언제 쓰일까? JAR 패키징은 클라우드를 염두에 둔 선택이다. WAR 파일은 기존의 자바 애플리케이션 서버에 애플리케이션을 배포할 때는 적합하지만 대부분의 클라우드 플랫폼을 구성하는데는 잘 맞지 않는다. 일부 클라우드 플랫폼에서는 WAR파일을 배포하고 실행할 수 있다. 그러나 모든 자바 클라우드 플랫폼은 실행 가능한 JAR파일을 사용한다. 따라서 Spring Initializer에서도 JAR 패키징을 기본값으로 사용하는 것이다. JAR의 특징을 정리해보면.. 1. JAR는 자바로 만든 어플리케이션의 .. Programming/Spring 2022. 4. 6. 이전 1 2 다음 💲 많이 본 글