의존성 주입(Dependency Injection)이란? Spring 프레임워크는 3가지 핵심 프로그래밍 모델을 지원하는데, 그 중 하나가 의존성 주입(Dependency Injection, DI)이다.
스프링 컨테이너 & 빈 스프링 빈이란? 스프링 빈은 스프링 컨테이너에 의해 관리되는 자바 객체(POJO)를 의미한다. 스프링 컨테이너 스프링 컨테이너는 스프링 빈의 생명 주기를 관리하며, 생성된 스프링 빈들에게 추가적인 기능을 제공하는 역할을 한다. IoC와 DI의
Aspect Oriented Programming: 관점 지향 프로그래밍여러 객체에서 공통적으로 사용하고 있는 기능을 분리해서 모듈화하고 재사용하는 프로그래밍 기법핵심 기능과 공통 기능의 구현을 분리하여 핵심 기능의 코드 수정없이 공통 기능 적용 가능여러 클래스, 메소
Spring-Boot 프로젝트를 진행하던 중에 JPA를 사용하게 되었는데, DTO와 Entity를 굳이 나누어서 사용하는 이유가 알고싶어 찾아보고 알게 된 내용을 정리해두려고 한다.DB의 테이블에 존재하는 Column을 필드로 가지는 객체이다.Entity는 DB의 테이
스프링 패키지를 나눌 때 전체적인 그림은 일반적으로 위와 같다. 이렇게 계층을 나누어 관리하면 유지보수하기에 용이하며 디버깅 하기도 쉽다. 각각의 기능과 역할에 대해서 알아보자.(Entity와 DTO에 관해서는 따로 여기에 따로 정리해두었다.)DAO는 실제 DB에 접근
Model은 HashMap 형태를 갖고 있으며, key, value값을 가지고 있다. 또한 addAttribute()와 같은 기능을 통해 모델에 원하는 속성과 그것에 대한 값을 주어 전달할 뷰에 데이터를 전달할 수 있다.Spring에서 Controller의 메서드를 작
좋은 소트프웨어 설계를 위해서는 결합도(coupling)는 낮추고 응집도(cohesion)는 높여야 한다.💡결합도모듈(클래스)간의 상호 의존 정도를 나타내는 지표결합도가 낮으면 모듈간의 상호 의존성이 줄어들어 객체의 재사용 및 유지보수가 유리하다.💡응집도하나의 모듈
Mock이란? 객체간 의존성이 있는 객체를 대신하는 가짜 객체 개발한 프로그램을 테스트 할 경우 테스트를 수행할 모듈과 연결되는 외부의 다른 서비스나 모듈들을 실제 사용하는 모듈을 사용하지 않고 실제의 모듈을 흉내내는 가짜 모듈을 작성하여 테스트의 효용성을 높이는데
Persistence(영속성)이란 데이터를 생성했던 프로그램이 종료되더라도 데이터는 사라지지않는 것을 의미한다.예를들어, 일정관리 어플리케이션을 사용하다 종료하더라도 저장했던 일정들이 사라지지않고 그대로 남아있는 것으로 보아 데이터의 영속성이 유지되고 있는 것을 알 수
데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위를 말한다.여기서 말하는 작업 단위는 프로젝트 별, 상황 별로 정의하기 나름이다.예를 들어, 트랜잭션: 오늘 일기 작성하기 라면...(1)오늘 날씨 데이터를 가져와서, (2)일기를 DB에 저장하기(1)과 (2)
스프링 스케쥴러는 일정 주기마다 특정 작업을 수행하기 위해서 사용된다.개발자가 하나하나 신경쓰지 않더라도 Scheduler의 기능을 이용하면 원하는 기능을 수행할 수 있게된다.fixedDelay : 이전 수행이 종료된 지점을 기준으로 일정시간이 경과했을 때 다음을 수행
앞의 글에서 스프링에서 스케줄링 하는 내용을 다뤘는데, 스케줄링으로 실행되어야 할 기능이 여러개 일 경우에는 한 가지 더 고려해야하는 것이 있다.바로 Thread Pool이다.위의 코드를 봤을 땐 test1()이 한번 시행될 때 test2()가 10번 시행되어야 할 것
캐시는 광범위하게 사용되는 개념인데, 임시로 데이터를 저장하는 역할을 하는 공간들을 뜻한다.CPU내에도 캐시 공간이 있고 서비스에서도 캐시 서버를 따로 두기도 하며, DB에서도 필요에 따라 캐시를 사용하기도 한다.(용어는 캐시로 같이 쓰이지만 각각 가리키는 공간은 다르
캐시를 삭제해 주어야 하는 이유에는 여러가지가 있다.캐시에 데이터가 계속 있게 되는 경우, 해당 key를 가지는 데이터가 업데이트 되었는데 캐시에 데이터가 남아있게 된다면 클라이언트의 요청과는 다르게 캐시에 있는 데이터를 내려주게 된다.따라서 데이터가 업데이트가 되면
토큰 기반 인증 시스템은 클라이언트가 서버에 접속을 하면 서버에서 해당 클라이언트에게 인증되었다는 의미로 Token을 부여한다.이 토큰은 유일하며 토큰을 발급받은 클라이언트는 다시 서버에 요청을 보낼 때 요청 헤더에 토큰을 심어서 보낸다.그러면 서버에서는 클라이언트로부
사전적 의미로는 주석이라는 뜻이지만, 자바에서 Annotaion(@)은 코드 사이에 특별한 의미, 기능을 수행하도록 하는 기술이다.프로그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공하고, 코드에 정보를 추가하는 정형화된 방법이다.어노테이션을 사용하면 코드가 깔끔
부모 엔티티가 영속화될 때 자식 엔티티도 같이 영속화되고, 부모 엔티티가 삭제될 때 자식 엔티티도 삭제되는 등 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 전이되는 것을 의미한다.JPA에서는 이러한 연관된 엔티티간의 의존성(dependency)
@Id는 데이터베이스 테이블의 기본 키(PK)와 객체의 필드를 매핑시켜주는 어노테이션이다.@Id만 사용할 경우엔 기본 키를 직접 할당해 주어야 한다.기본 키를 직접 할당하는 대신 데이터베이스가 생성해주는 값을 사용하려면 @GeneratedValue를 사용하면 된다.@G
주특기 심화주차에 들어서 백엔드 팀과제를 진행하면서 기술 매니저님이 "DTO에 @Getter가 필요한 이유가 뭐에요?"라고 물어보셨는데, 지금까지 의식적으로 DTO에는 당연히 @Getter 써야지 라고만 생각했던 터라 질문에 대답을 할 수가 없었다.그래서 이 글을 통해
개발을 진행하다보면 생성자를 통해 객체를 많이 만들게 된다.객체가 가지고 있는 인자들이 많을 경우, 그 인자들이 어떠한 것인지 헷갈리는 경우가 있다.또한 생성자 호출을 위해서 설정하고싶지 않는 매개변수의 값까지 지정해줘야 하는 불편함도 있다.즉, 생성자를 빌더 패턴으로