분류 전체보기 166

[ JPA ] - Jpa entity 관련 어노테이션

JPA entity 관련 어노테이션 @MappedSuperclass 엔티티 클래스에 공통적으로 사용되는 필드나 상속관계를 정의하기 위해 사용하는 어노테이션이다. @MappedSuperclass를 사용한 클래스를 상속한 자식 클래스에서 슈퍼클래스에 정의된 필드들을 상속받게 된다. 예를 들어 데이터 생성시점, 생성자 등 모든 엔티티 클래스에서 공통적으로 사용될 필요가 있는 필드들을 따로 모아 @MappedSuperclass로 생성 후 하위 엔티티 클래스에서 상속받게 하면 공통적인 필드 등에 대한 중복적인 코드를 줄일 수 있다. import jakarta.persistence.MappedSuperclass; import java.io.Serializable; import java.time.LocalDateTi..

JAVA/JPA 2023.11.03

[ JPA ] - Jpa 기본 사용 방법과 Repository 인터페이스

Jpa 기본 사용 방법과 Repository 인터페이스 1. 의존성 추가 기본적으로 jpa를 사용하기 위해서는 spring-data-jpa를 설치하고, 관련된 설정을 해주어야 하는데,스트링 부트 스타터의 일종인 spring-boot-starter-data-jpa를 의존성 추가해주면 jpa 관련한 라이브러리들과 설정을 해준다. 이와 더불어 데이터베이스와 연결하기 위해 mysql-connector-j를 함께 추가해준다. 즉 build.gradle에 아래와 같이 두 라이브러리를 추가해준다. 그 위에 어노테이션이나 테스트, 스프링 부트 스타터 등은 jpa 사용과 직접적 연관이 있는 것은 아니며, 기본적인 어플리케이션 구성을 위해 필요한 라이브러리들이다. 또한 접속한 데이터베이스 정보를 설정해주어야 하는데, ap..

JAVA/JPA 2023.11.01

[ Java ] - 입출력 하기, 스트림 종류 및 예시 코드

자바 입출력 (I/O) * 스트림 : 자바에서 데이터를 운반하는데 사용되는 연결통로라고 할 수 있다.(데이터를 저장하는 방식인 스트림과는 용어만 같을 뿐 다른 개념이다.) * 스트림은 단방향으로만 이루어지기 때문에 하나의 스트림으로 동시에 입력과 출력 작업을 수행하는 것은 불가능하다. 동시에 처리하기 위해서는 입력 스트림과 출력 스트림이 각각 존재 한다. 스트림의 종류 입출력 대상에 따라 아래와 같은 스트림 종류가 존재한다. 종류 입력 스트림 출력 스트림 파일 메모리 프로세스 오디오 장치 FileInputStream ByteArrayInputStream PipedInputStream AudioInputStream FileOutputStream ByteArrayOutputStream PipedOutputS..

JAVA 2023.10.30

[ JAVA ] - 람다식이란?

람다식이란? Java 8부터 추가된 기능인 람다식은 메서드를 익명함수로 정의할 수 있게 해줍니다. 람다식은 코드를 간결화하고, 객체지향언어인 자바를 통해서 함수형 프로그래밍이 가능하도록 하였습니다. 기본적으로 람다식은 아래와 같은 구문으로 이루어집니다. ( 매개변수 ) -> { 수행 코드 } ex) (int a, int b) -> { return a + b; } ex) (int a, int b) -> a + b ; 수행 코드가 단일 문장으로 끝나는 경우에는 {} 를 생략하고 바로 반환값을 출력할 수 있다. 함수형 인터페이스 자바에서의 함수형 프로그래밍에서 또 하나 빼놓을 수 없는 개념이 함수형 인터페이스 입니다. 함수형 인터페이스는 하나의 추상메서드만을 가지는 인터페이스로 함수를 객체처럼 다룰 수 있게 ..

JAVA 2023.10.19

[ Java ] - 프로세스와 쓰레드 - 02)

쓰레드의 동기화 방법 HTML 삽입 미리보기할 수 없는 소스 임계 영역으로 설정하려는 부분에 synchronized를 사용하면 되며, 메서드에 적용할 수 도 있고, 특정 영역으로 축소하여 적용할 수 있습니다. 이때 임계 영역을 너무 넓게 설정하는 경우 프로그램의 성능이 저하될 수 있기 때문에 임계 영역을 최소화하는 것이 좋습니다. synchronized가 붙은 메서드가 호출된 후 해당 작업이 종료되기 이전까지 해당 임계 영역에 다른 쓰레드가 접근하는 것을 허용하지 않습니다. 위의 코드를 아래와 같이 수정할 수 있습니다. public class ThreadEx21 { public static void main(String[] args){ Runnable r = new RunnableEx21(); new T..

JAVA 2023.10.17

[ Java ] - 프로세스와 쓰레드 - 01)

[ Java ] - 프로세스와 쓰레드 - 01) 프로세스란? * 프로그램 설치 시 (설치한 프로그램은)하드 디스크에 저장되며, 프로그램을 실행하는 것은 하드디스크에 저장된 프로그램 내용을 메모리로 올리는 것(Loading)을 의미합니다. 이와 같이 실행을 위해 메모리로 올라온 프로그램을 프로세스라고 합니다. 즉 하드 디스크 - 메모리 - CPU 과정을 통해 프로그램이 실행 됩니다. * 멀티 프로세스(Multi-process)란 동일한 프로그램을 여러 개 실행시키는 것을 의미합니다. 프로세스(Process)란 기본적으로는 현재 실행 중인 프로그램을 의미하며, 자바 프로그래밍 관점에서 자세히 설명하면 JVM(=Java Virtual Machine)을 실행하는 하나의 인스턴스로 볼 수 있습니다. 프로그램은 운..

JAVA 2023.10.16

[ Spring boot ] 서버 실행 시 애플리케이션 초기화 로직 실행 코드 구현

서버 실행 시 기본 로직 실행(init)하기 스프링 프레임워크에서 초기화를 위해 제공하는 인터페이스 initializingBean을 사용하였다. 예를 들어 서버에서 기본적으로 관리자 계정을 초기화 설정해두어야 할 필요가 있는 경우 등에 사용할 수 있다. 기본적으로는 아래와 같은 모습으로 사용한다. - 초기화 로직을 담고 있는 클래스는 InitializingBean을 구현한다. - afterPropertiesSet() 메서드를 오버라이드 하여 해당 메서드에 초기화 시킬 로직을 구현하여 준다. - initializingBean은 스프링에서 초기화를 위해 제공하는 인터페이스로, 스프링 컨텍스트에 의해 관리되기 때문에 초기화 하려는 로직을 구현한 클래스도 스프링 컨텍스트에 의해 관리될 수 있도록 @Compone..

JAVA/Spring Boot 2023.08.10

[ Spring Boot ] - 간단 스케줄링 작업하기

@EnableScheduling와 @Schedule를 활용한 스케쥴링 작업 서버 실행 하는 클래스에 @EnableScheduling을 아래와 같이 붙여 준다. 일정 시간대나 또는 일정 시간 마다 실시하려는 작업을 수행할 클래스를 아래와 같이 작성해준다. 해당 클래스에는 @Component를, 실질적으로 작업을 수행하는 메서드에는 @Scheduled(cron="[cron식]")을 붙여준다. 또는 fixedRate를 통해 일정 시간마다 작업이 수행되도록 할 수 있다. 아래의 경우 5초마다 반복하여 'fixed rate 5000------'를 출력한다. Q) @EnableScheduling는? 스프링 프레임워크에서 제공하는 어노테이션으로 @Scheduled가 붙은 메서드인 경우 스케쥴 작업을 활성화하여 준다...

JAVA/Spring Boot 2023.08.09

[ Kafka ] - 카프카란 무엇인가?

카프카 (Kafka)란 무엇인가 흔히 카프카로 불리우는 아파치 카프카는 대용량 실시간 데이터 스트리밍 플랫폼으로, 분산형 메시징 시스템입니다. 카프카는 글로벌 구인/구직 소셜 네트워크 서비스사인 Linkedin에서 기존의 레거시 프로그램 아키텍처가 가지는 앤드투앤드 연결 방식으로 인한 데이터 연동의 복잡성, 시스템 확장의 어려움 등을 극복하기 위해 개발한 오픈소스 소프트웨어입니다. * 링크드인의 기존 앤드투앤드 방식의 데이터 파이프라인 모습 * 이벤트 스트리밍 플랫폼인 카프카를 적용한 이후의 데이터 파이프라인 모습 위의 두 데이터 파이프 라인 모습을 비교해 보면 알 수 있듯이, 기존에 각각의 어플리케이션이 직접 연결되어 복잡한 구조를 띄었던 데이터 구조가, 중앙의 범용 파이프 라인(즉 카프카)을 중심으로..

Kafka 2023.08.04