개발은 재밌어야 한다
article thumbnail
[Oracle] MERGE INTO -> 데이터가 있는지 확인(SELECT) 하고 데이터를 삽입하거나 업데이트(INSERT, UPDATE)하자
RDBMS 2022. 9. 17. 01:37

보통 데이터를 처리할때 데이터의 존재 여부를 확인(SELECT)하고 해당 값이 없으면 삽입(INSERT)하고 있으면 업데이트(UPDATE)를 하게 된다. 이렇게 되면 데이터를 확인하는 쿼리, 데이터를 삽입 하는 쿼리, 데이터를 업데이트 하는 쿼리 3개의 쿼리를 작성해줘야합니다. 오라클에서는 이러한 처리를 한번에 가능 할 수 있습니다 ! 바로 MERGE INTO 를 사용하는 것입니다 오라클 9i 버전부터 MEGER 문을 사용할 수 있으며, DELETE를 사용하는 MERGE 문은 10g 버전부터 사용할 수 있다. 사용 문법 MERGE INTO [TABLE / VIEW] -- update 또는 insert할 테이블 혹은 뷰 USING [TABLE / VIEW / DUAL] -- 비교할 대상 테이블 혹은 뷰 (..

article thumbnail
[React] 리액트 기초 예시 -2
javascript/React 2022. 7. 30. 01:36

6. PropTypes props구성 요소에는 React에서 호출되는 많은 특정 속성이 있으며 모든 유형이 될 수 있습니다. 때때로 이러한 props를 검증하는 방법이 필요합니다. 사용자가 구성 요소에 아무 것도 입력할 수 있는 자유를 원하지 않습니다. React에는 이에 대한 솔루션이 있으며 이를 PropTypes라고 합니다. class MyTitle extends React.Component { static propTypes = { title: PropTypes.string.isRequired, } render() { return {this.props.title} ; } } 위의 구성 요소 MyTitle에는 title있습니다. PropTypes는 제목이 필수이고 값이 문자열(PropTypes.stri..

article thumbnail
[React] 리액트 기초 예시 - 1
javascript/React 2022. 7. 29. 09:12

1. Render JSX React의 템플릿 구문을 JSX라고 합니다. JSX에서는 HTML 태그를 JavaScript 코드에 직접 넣을 수 있습니다. ReactDOM.render()는 JSX를 HTML로 변환하고 지정된 DOM 노드로 렌더링하는 메소드입니다. 실행결과 2. JSX에서 자바스크립트 사용하기(Use JavaScript in JSX) JSX에서 JavaScript를 사용할 수도 있습니다. HTML 구문의 시작으로 꺾쇠 괄호( < )를 사용하고 JavaScript 구문의 시작으로 중괄호( { )를 사용합니다. Tips. https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/map map() 메서드는..

article thumbnail
[디자인패턴] 템플릿 메서드 패턴 (Template Method Pattern)

템플릿 메서드 패턴 볼트라고 하는 이름의 강아징와 키티라는 이름의 고양이를 키운다고 상상해보자. 볼트, 키티와 함께 재미있는 시간을 보내는 세계를 프로그래밍으로 표현한다면 다음과 같은 2개의 클래스가 필요 할 것입니다. Dog클래스와 Cat 클래스 안에 있는 playWithOwner() 메서드를 보면 서로 짖는 부분(멍멍, 야옹야옹)만 빼고는 모두 동일한 것을 볼 수 있다. 코드를 보고 있으면 객체 지향의 4대 특성 가운데 상속을 통해 동일한 부분(중복)은 상위 클래스로, 달라지는 부분만 하위 클래스로 분할하고 싶은 객체 지향 설계에 대한 욕구가 자극될 것입니다. 따라서 이 코드를 개선해보겠습니다. 상위 클래스인 Animal에는 템플릿(견본)을 제공하는 playWithOwner() 메서드와 하위 클래스에..

article thumbnail
Apache Kafaka의 주요 요소 - Consumer
Kafka 2022. 7. 15. 14:47

Consumer Offset 해당 Consumer가 읽은 파티션의 위치의 그 다음번째를 저장한다. 위의 예시로 Consumer Group A가 MyTopic 파티션에서 2번째에 있는 위치를 가져가서 사용을 했다면 그 다음 읽어갈 위치인 3번째의 위치를 저장합니다. 카프카의 내부 인터널 토픽에 저장을 한다(Topic __consumer_offsets) 컨슈머가 하나이고 해당 컨슈머가 모든 파티션의 데이터를 읽어간다하면 해당 컨슈머는 모든 파티션의 모든 레코드를 Consume한다. 동일한 컨슈머 그룹을 가지고 싶다면 group.id가 같기만 하면 된다. 위와 같은 경우 파티션4개, 컨슈머4개 이므로 각자 하나의 컨슈머에서 하나의 파티션을 consume할 수 있다. 멀티 컨슈머 그룹 다른 Consumer Gr..

article thumbnail
Apache Kafaka의 주요 요소 - Producer
Kafka 2022. 7. 15. 14:42

Producer Producer : 메세지를 생산(Produce)해서 Kafka의 Topic으로 메세지를 보내는 애플리케이션 Consumer: Topic의 메세지를 가져와서 소비(Consume)하는 애플리케이션 Consumer Group: Topic의 메세지를 사용하기 위해 협력하는 Consumer들의 집합 하나의 Consumer는 하나의 Consumer Group에 포함되며, Consumer Group 내의 Consumer들을 협력하여 Topic의 메세지를 병렬 처리함 Producer와 Consumer의 분리 (Decoupling) Producer와 Consumer의 기본 동작 방식 Producer와 Consumer는 서로 알지 못하며, Producer와 Consumer는 각각 고유의 속도로 Commi..

article thumbnail
Apache Kafaka의 주요 요소 - Broker, Zookeeper
Kafka 2022. 7. 12. 18:35

아파치 카프카의 주요 구성 요소는 주키퍼라고 하는 상위에 있는것과 아래의 카프카 클러스터로 구성되어 있습니다. 카프카 클러스터 내에는 여러개의 브로커들로 구성되어 있습니다. 카프카 브로커는 토픽과 파티션을 유지 및 관리를 해주는 소프트웨어 카프라 브로커란? 카프카 서버라고 부르기도 함 토픽 내의 파티션들을 분산, 유지 및 관리 각각의 브로커들은 ID로 식별됨 (단, ID는 숫자) 토픽의 일부 파티션들을 포함 → 토픽 데이터의 일부분을 갖을 뿐 데이터 전체를 갖고 있지 않음 카프카 클러스터 : 여러개의 브로커들로 구성됨 클라이언트는 특정 브로커에 연결하면 전체 클러스터에 연결됨 최소 3대 이상의 브로커를 하나의 클러스로 구성해야함 → 이왕이면 안정성을 위해서 4대 이상을 권장함 파티션도 번호를 가지고 있고..

article thumbnail
Apache Kafaka의 주요 요소 - Topic, Partition, Segment
Kafka 2022. 7. 12. 18:28

Apache Kafaka의 주요 요소 - Topic, Partition, Segment 토픽은 파일이나 디렉토리처럼 눈에 보이는게 아닌 논리적인 표현 Producer: 메세지를 생산(Produce)해서 Kafka의 Topic으로 메세지를 보내는 애플리케이션 Consumer: Topic의 메세지를 가져와서 소비(Consume)하는 애플리케이션 Consumer Group: Topic의 메세지를 사용하기 위해 협력하는 Consumer들의 집합 하나의 Consumer는 하나의 Consumer Group에 포함되며, Consumer Group 내의 Consumer들은 협력하여 Topic의 메세지를 분산 병렬 처리함 프로듀서와 컨슈머 동작방식 프로듀서와 컨슈머 애플리케이션은 서로 알지 못한다. 그저 각각의 고유의 ..

article thumbnail
스프링 부트 config 사용법
Spring/Spring 2022. 7. 12. 14:01

스프링 부트에서 컨피그 서비스 사용법 1 Spring에서 제공하는 Environment를 활용하는 방법이다. Legacy( Spring3.x) 에서 사용한 방법과 동일하다. 사용법 2가 스프링 부트에서 권장하는 방법이다. @Slf4j @Service public class TempService { @Autowired private ConfigurableEnvironment environment; public void test() { environment.getProperty("gateway.test"); } } 스프링 부트에서 컨피그 서비스 사용법 2 스프링부트에서 지원하는 @ConfigurationProperties를 활용하는 방법이다. 스프링 부트에서 설정이 편리해진 이유 중 하나이다. https:/..

article thumbnail
[디자인패턴] 싱글턴 패턴(Singleton Pattern)

싱글턴 패턴이란 인스턴스를 하나만 만들어 사용하기 위한 패턴이다. 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 경우 인스턴스를 여러 개 만들게 되면 불필요한 자원을 사용하게 되고, 프로그램이 예상치 못한 결과를 낳을 수 있다. 싱글턴 패턴은 오직 인스턴스를 하나만 만들고 그것을 계속해서 재사용한다. 싱글턴 패턴을 적용할 경우 의미상 두 개의 객체가 존재할 수 없다. 이를 구현하려면 객체 생성을 위한 new에 제약을 걸어야 하고, 만들어진 단일 객체를 반환할 수 있는 메서드가 필요하다. 따라서 필요한 요소들이 3가지가 필요하다. new를 실행할 수 없도록 생성자에 private 접근 제어자를 지정한다. 유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요하다. 유일한 단일 객체를 참조할 정적 ..

article thumbnail
[디자인패턴] 프록시패턴 (Proxy Pattern)

프록시(proxy)는 대리자, 대변인이라는 뜻을 가진 단어이다. 대리자/대변인이라고 하면 다른 누군가를 대신해 그 역할을 수행하는 존재를 말한다. 뉴스에는 항상 청와대 대변인, 백악관 대변인 등등 다양한 대변인이 등장한다. 디자인 패턴에서도 이렇게 대리자/대변인이 등장합니다. 우선 대리자를 사용하지 않고 직접 호출하는 코드를 보면 Service라는 클래스를 호출하는 ClientWithNoProxy라는 클래스는 대변인의 존재를 사용하지않은 즉, 프록시 패턴을 적용하지 않은 클래스이다. Service클래스에서 직접적으로 runSomething 메소드를 호출해서 서비스 호출!!! 이라는 결과를 보여준다. 그럼 프록시 패턴이 적용된 경우를 보면, 프록시 패턴의 경우 실제 서비스 객체가 가진 메서드와 같은 이름의..

article thumbnail
@RequiredArgsConstructor란?
Spring/Spring 2022. 6. 10. 19:08

Lombok으로 스프링에서 DI(의존성 주입)의 방법 중에 생성자 주입을 임의의 코드없이 자동으로 설정해주는 어노테이션이다. @RequiredArgsConstructor는 초기화 되지않은 final 필드나, @NonNull 이 붙은 필드에 대해 생성자를 생성해 줍니다. 새로운 필드를 추가할 때 다시 생성자를 만들어서 관리해야하는 번거로움을 없애준다. (@Autowired를 사용하지 않고 의존성 주입) 예시) @RequiredArgsConstructor 를 사용한 예시 @RestController @RequiredArgsConstructor @RequestMapping("/example") public class RequiredArgsConstructorControllerExample { private f..