일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- OS
- hiberbate
- 함수형 인터페이스
- Spring
- rainbow table
- 롬복주의점
- Thread Multiplexing
- strict stubbing
- python-socketio
- 도커
- task_struct
- 문자열 불변성
- java.util.function
- Process
- sql-mappler
- none이미지
- 문자열 리터럴
- Thread Library
- SystemCall
- 프로세스
- 운영체제
- @Header
- django-crontab
- FunctionalInterface
- spring-data-jpa
- 쓰레드 라이브러리
- ReflectUtils
- AOP
- custom annotation
- functional interface
- Today
- Total
목록Spring (16)
JH's Develog

Java 진영의 DB기술들을 공부하다 보면 필연적으로 MyBatis, Hibernate, Spring Data JPA을 접하게 되는데 다들 비슷해 보이고 개념에 혼동이 오곤 했습니다. 각 모듈들에 대한 정확한 개념을 정리하고자 포스팅을 작성합니다. MyBatis MyBatis는 SQL Mapper의 일종입니다. SQL Mapper란 RDBMS 쿼리문의 실행 결과를 실제 자바 코드에 매핑하기 위한 프레임워크로 이를 활용하면 프로그램 코드와 SQL을 분리할 수 있다는 장점을 가집니다. MyBatis는 별도의 XML파일에 SQL문을 작성하고 이를 자바 프로그램의 메서드에 매핑해줍니다. 위와 같은 표기법으로 작성된 XML파일은 아래 자바 프로그램의 메서드에 매핑되고 이 메서드를 활용해서 데이터베이스에 접근하게 ..

롬복은 getter&setter, toString등의 bolierplate 코드들을 어노테이션 하나로 줄여주어 생산성을 향상 시켜주는 자바 진영의 대표적인 라이브러리 입니다. 그러나 롬복은 편한만큼 조심해야할 부분이 많은데요 그 부분에 대해서 알아보겠습니다. 프로그래머의 의도를 피하는 동작(1) Item 클래스를 예시로 들어보겠습니다. 사용자가 Item의 필드에 final을 붙일 때 name이라는 필드는 한번 초기화 된 후 변하지 않기 때문에 null값으로 초기화 되기는 기대하지 않을 것 입니다. 그러나 @Builder에 의해 적용된 빌더 패턴으로 인해 name은 의도하지 않은 null 값으로 초기화 될 수 있습니다. 물론 프로그래머의 실수인지 아닌지 논쟁의 여지가 있는 부분이지만 롬복을 사용할 때 주의..

application.properties 파일에 환경변수를 설정하고 코드에서 값을 가져오는 방법을 알아보겠습니다. 의존성은 다음과 같습니다. dependencies { ... annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' } 먼저 application.properties에 설정 값들을 추가합니다. @ConfigurationProperties 어노테이션이 핵심입니다. application.properties 파일에서 키 값이 "my"인 설정값을 추가했기 ..

@Component Component 어노테이션은 클래스에 붙어서(Class-level) 이 클래스를 Custom Bean으로 만들어줍니다. ComponentScan을 통해서 @Component가 붙은 클래스는 필요한 의존성을 모두 주입받고 스프링 컨테이너에 등록되며, 등록하려는 Bean의 클래스 소스가 편집가능한 경우에 사용됩니다. Component에는 @Controller, @Service, @Repository라는 스테레오 타입 어노테이션들이 있으며 목적에 맞게 선택하여 사용할 수 있습니다. @Bean Bean 어노테이션은 메서드에 붙는 Method-level 어노테이션이며 인스턴스화 하는 코드가 수동으로 작성됩니다. 빈의 인스턴스 코드와 클래스의 정의가 분리된 구조이기 때문에 외부 라이브러리나 써..

Validation이란 어떤 데이터 (주로 사용자 또는 다른 서버의 request)의 값이 유효한지, 잘못된 내용이 있는지 확인하는 단계를 뜻합니다. 예를들어 이메일 주소의 양식은 "email@email.com"의 양식어어야 하는데, 이 양식과 일치하지 않는 값이 들어온다면 해당 값의 저장을 막을 수 있습니다. Validation을 진행하는 방법은 크게 두 가지로 나눌 수 있습니다. i) Java Bean Validation (어노테이션 기반) ii) Spring validator 인터페이스 구현을 통한 validation 먼저 Java Bean Validation부터 살펴보겠습니다. Java Bean Validation 스프링 부트에서는 gradle에 의존성 하나만 추가해주면 간단하게 사용할 수 있습니..

이번 포스팅에서는 Custom Annotation과 @Around를 활용해서 메서드의 실행시간을 측정 해보겠습니다. 커스텀 어노테이션 생성 먼저 Timer라는 Custom Annotation을 생성해줍니다. @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface Timer {} @Target은 어노테이션을 붙일 수 있는 대상을 지정하는 역할을 하며 들어가는 파라미터는 다음과 같습니다. ElementType.TYPE : 클래스, 인터페이스, 열거 타입에 어노테이션을 붙일 수 있습니다. ElementType.CONSTRUCTOR : 생성자에 어노테이션을 붙일 수 있습니다. Eleme..

관점 지향 프로그래밍 - Aspect Oriented Programming OOP로 처리하기에는 다소 까다로운 부분을 AOP라는 처리 방식을 도입하여, 특정한 함수 호출 전이나 후에 함수의 로직을 건드리지 않고 손쉽게 공통적인 처리를 수행할 수 있도록 하는 기능입니다. 주로 로깅, 트랜잭션, 인증 등 에서 자주 사용되며, AOP를 과도하게 사용할 경우 코드의 분석이 다소 어려워질 수 있음을 주의 해야합니다. 위 그림처럼 A사, B사, C사에 공통적으로 나타나는 기능을 횡단 관심(cross-cutting concern)이라고 하며, 이 부분에 AOP를 적용하여 중복을 분리하고 한 곳에서 관리할 수 있습니다. AOP의 기본 개념 정리 용어 의미 Aspect 횡단 관심사를 의미하며 이들을 모듈화 하는 것이 A..

Bean이란? 자바에서의 Bean은 데이터를 저장하기 위해 '자바 빈 규약'을 따르는 구조체입니다. private 속성만 있으며 속성은 getter와 setter로만 접근가능하고 파라미터가 없는 기본 생성자가 있습니다. 스프링에서의 Bean과 IoC 컨테이너 IoC컨테이너란 SpringApplicationContext 인터페이스를 통해 제공되는 스프링 컨테이너이며 Bean 객체의 생성 및 Bean들의 조립/의존성 관리를 담당합니다. 일반적인 class를 Bean으로 등록하겠다는 설정을 추가해줌으로써 Spring의 IoC 컨테이너에 담기게 되면 Spring에서의 Bean이 됩니다. 각각의 Bean들 끼리는 서로를 편리하게 의존(사용)할 수 있습니다. Bean의 등록은 @Bean, @Controller, @..