JPA 를 사용하는 일이 많아지면서 데이터를 물리삭제 (repository.delete)보다 논리삭제를 진행하는 경우가 더 많아졌습니다. 왜냐면 데이터를 관리하는 입장에서 데이터가 사라지는 것보다 남은 데이터이지만 사용자에게 보이게 만들기 위한 처리를 하는 관점이 훨씬 유리하기 때문입니다. JPA Soft Delete vs JPA Hard Delete Soft Delete 는 말 그대로 데이터를 논리 삭제하는 것을 말합니다. (특정 컬럼을 업데이트) UPDATE entity SET deleted = true WHERE id = ? Hard Delete 데이터를 물리 삭제합니다. DELETE FROM entity WHERE id = ? JPA Annotation 구현 JPA 에서 데이터를 Soft하게 관리..
안녕하세요! 오늘은 현업에서 많이 사용하는 DTO 클래스에 생성자 이후 자동으로 적용하는 어노테이션을 적어보려고 글을 작성하게 되었습니다. DTO 클래스는 우리가 API 호출을 할 때 엔티티 클래스를 사용하여 우리가 소유하고 있는 데이터베이스의 내용을 은닉하기 위해 사용하는 클래스라고 생각해주시면 됩니다. 예를 들어 데이터베이스에 account_id, username, email 등과 같이 되어 있는 엔티티가 존재하는 경우 이를 그대로 사용하면 사용자의 정보와 account_id 가 그대로 노출되기 때문에 이를 방지하고자 만드는 것입니다. 아래에는 Account class의 예제를 적어보았습니다. 이 클래스에는 이거 말고도 다른 사용자의 개인 정보를 담을 수 있는 컬럼들이 여럿 있겠죠. @Entity @..
Spring 4 에서 새로 소개된 @Order 어노테이션은 같은 타입의 Bean이 Collection에 Autowired 될 때 순서를 지정하기 위해 사용합니다. 아무래도 인증이나 보안과 관련되어 가장 우선적으로 필터링할 클래스에 주로 사용합니다. 먼저 사용하기 위한 샘플 소스를 작성해보도록 하겠습니다. Work.java public interface Work { public void work(); } Programmer.java @Service @Order(value=1) public class Programmer implements Work { public void work() { System.out.println("Programmer Working..."); } } Designer.java @Ser..
Spring MVC는 다들 알고 계실겁니다. Model-View-Controller의 기본 웹 코드 작성기법이며, 대부분 MVC 패턴이라고 알고 계신 분들도 많으실 거에요. MVC는 Servlet을 기반으로 작성된 하나의 템플릿이며, 작동 방식이 Blocking-Synchronous 방식이었습니다. 블로킹과 동기처리방식은 이전에 Java의 Files를 사용하며 잠시 체크하고 넘어갔었는데요, 해당 글이 필요하시다면 링크는 여기있습니다. Servlet도 마찬가지로 서버에서 Response를 기다리는 동안 쓰레드 풀 내에 쓰레드들을 기다리는 블로킹 방식입니다. 그렇기 때문에 인터럽트가 발생하지 않는 이상 그 쓰레드들을 다른 곳에 사용할 수 없는 것이죠. 그리고 지연되는 시간도 문제인 것이 작지만 쌓이고 쌓이면..
스프링 프레임워크 사용하다가 궁금한 것이 생겼습니다. 다 같은 어노테이션인데 굳이 왜 나누어 놓았을까? 분명 이유가 있겠죠? 모르는 것은 바로 궁금증을 해결해보아야 되죠!! 이번 글에서는 @Bean과 @Component의 차이에 대해 살펴보려고 합니다. @Bean 외부 라이브러리지만 개발자가 컨트롤이 불가능한 경우 사용한다고 합니다. 예를 들어, Redis를 사용하는 경우가 있습니다. @Configuration public class RedisConfig { private @Value("${spring.redis.host}") String redisHost; private @Value("${spring.redis.port}") int redisPort; @Bean public JedisConnection..
이전에 Annotation 글을 작성하면서 Lombok에 대해 간단히 정의해보았었습니다. 이전에는 전반적인 Annotation들에 대해 설명하게 되면서 lombok은 생략이 되었었는데요, 이번 글에서는 현재 제가 실무에 사용하고 있는 lombok에 대해 정리해보려고 글을 작성하게 되었습니다. 먼저, IntelliJ 기준의 lombok의 사용법은 다음과 같습니다. gradle 기반의 프로젝트이며 dependencies 에 다음과 같이 추가하면 사용할 수 있습니다. dependencies { ... compileOnly('org.projectlombok:lombok') annotationProcessor('org.projectlombok:lombok') ... } 간혹의 경우 lombok을 implement..
기존에 자바 소스에서는 @Override, @Deprecated, @SuppressWarnings 의 형태로 사용했다. Spring Framework에서는 위의 기능들 말고 좀 더 효율적으로 개발을 하기 위해 '@'라는 단어를 앞에 붙여 사용하고 있다. @: at이라고도 읽지만 Spring 내에서는 Annotation(어노테이션, 애노테이션이라고도 함)으로 읽고 있다. 어노테이션은 스프링 프레임워크 3.0부터 본격적으로 사용되기 시작하였고, (현재는 5.2) 모든 어노테이션은 org.springframework 의 하위 패키지 클래스에 내장되어 있다. * build.gradle의 설정에 따라 각각 호출되는 어노테이션 명 및 기능이 다를 수도 있다. 또, 어노테이션은 각각의 레벨이 있고 그 레벨마다 호출되..