목록전체 글 (124)
지나공 : 지식을 나누는 공간
리액티브 프로그래밍(Reactive Programming)이란? In computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change. 변화의 전파와 데이터 흐름에 관련된 선언형 프로그래밍 패러다임이다. 변화의 전파와 데이터 흐름 : 데이터가 변경될 때마다 이벤트를 발생시켜서 데이터를 계속적으로 전달한다. 선언형 프로그래밍 : 실행할 동작을 구체적으로 명시하는 명령형 프로그래밍과 달리 목표만 선언한다. 명령형 프로그래밍 vs 선언형 프로그래밍 1. 명령형 프로그래밍 프로그래밍의 상태와 상태를 변경시키는 구문의 관점으로 접근하는 프로그래밍 방식..
설정 사항들 @EnableBatchProcessing 스프링배치가 작동하려면 이 어노테이션을 선언해야 한다. - 총 4개의 설정 클래스를 실행시키고 스프링 배치의 모든 초기화 및 실행 구성이 이루어진다. - 스프링 부트 배치의 자동 설정 클래스가 실행되면서 빈으로 등록된 모든 Job을 검색해서 초기화와 동시에 Job을 수행할 수 있도록 구성된다. 설정 클래스 4가지는 아래와 같다. 1. BatchAutoConfiguration 스프링 배치가 초기화될 때 자동으로 실행되는 설정클래스 Job을 수행하는 JobLauncherApplicationRunner 빈을 생성한다. JobLauncerApplicationRunner는 자동으로 배치 Job들을 실행시키는 클래스다. 2. SimpleBatchConfigura..
개요 1. Spring Batch 탄생 배경 간략히 자바에는 I/O 기술, 네트워크(tcp, udp 등) 기술, 스레드(병렬처리 가능) 기술, jdbc 기술 등이 표준으로 정의되어 있다. 하지만 배치 처리에서 요구하는 재사용 가능한 자바 기반의 배치 아키텍처는 없었어서 이에 대한 필요성으로 탄생했다. 2. 배치 핵심 패턴 Read : 데이터베이스나 파일이나 큐에서 다량의 데이터를 조회 Process : 특정한 방법으로 데이터를 가공 Write : 데이터를 수정된 양식으로 다시 저장 데이터베이스의 ETL ( Extract 추출하다 - Read, Transform 변형하다 - Process, Load 적재하다 - Write)와 매칭되는 개념인데 배치에서 쓰이는 용어는 Read, Process, Write이다..
신입 과제에서 Scheduler를 사용할 것 같다. 주된 과제가 이건 아니고 Open API 데이터 매핑이 중요한거라 이걸 고민하는게 우선이긴 한데, 그래도 Scheduler를 조금이라도 다루고 있어서 배치 카테고리를 열었다. 게다가 해당 프로젝트를 나중에 Spring Boot Batch로 옮길 예정이라 하셨다. (이 업무가 나중에 내 업무가 될지는 모르겠지만) 암튼 내가 해당 업무를 맡지 않더라도 예전에 Spring Batch 공부를 아주 잠깐 했었으니 Scheduler 보는 김에 같이 보려 한다. 전에 급해서 아무 레포에나 Spring Batch를 정리해둔 적이 있는데 다시 볼 겸 첨부...! 관련 업무도 적혀있는 추억의 이슈ㅋㅋㅋ https://github.com/Hae-Riri/today-alco..
이번 포스팅은 올해 5월에 올렸던 포스팅에 대한 후속 포스팅이다. https://eocoding.tistory.com/74 @Transactional에서 JPA로 delete한 뒤 insert가 안될 때, duplicate entry 에러가 날 때 해결하기 일단 원인과 해결 방법부터 적고 내 사례와 해봤던 시도들을 구체적으로 적는 건 다음 포스팅으로 넘기려고 한다. Spring Data JPA 사용 중에 데이터를 삭제한 뒤 추가하려고 했더니 duplicate entry 에 eocoding.tistory.com 댓글로도 후속 포스팅을 궁금해하신 분이 계셨는데 그동안 인턴도 하고 취업 준비도 하느라 블로그 포스팅을 못 쓰고 있었다. 대체 얼마만의 포스팅이지 ㅎㅎ 그럼 이제 본론을! 목차는 아래와 같다. 1...
마지막으로 회고록을 쓴 7월 17일 이후로 무려 4개월 만에 블로그를 켰다. 평소에 멀티가 안되기 때문에 입사 시험을 준비할 때는 블로그를 잘 안 썼는데, 지금 당장은 근무를 막 시작한 때라 더 늦기 전에 네웹 인턴십 후기를 작성하려고 한다. 네이버웹툰 전환은 되지 못했고 타사 근무다. 토스, 현대자동차, LG CNS, 등등.. 여러 회사의 최종 면접도 겪었다. 아무튼 취업준비 근황도 있는데 이건 나중에 다른 후기 포스팅을 남길 거고, 여기선 네웹만! 채용 전형 관련은 아래 포스팅에서 확인하세욤. 네이버웹툰 인턴십 합격후기 + 상반기 취준 회고 (tistory.com) 네이버웹툰 인턴십 합격후기 + 상반기 취준 회고 서론이 좀 길 것 같으니 네웹 인턴십 전형이 궁금하다면 서론 읽지 말고 아래로 아래로~ ..
계속 추가되어 수정될 예정입니다. 입력받기 (BufferedReader, Scanner) 컬렉션 프레임워크와 종류, 차이, 주요 메소드 스택, 큐 등 해시, 해시 순회 등 다양한 정렬 : comparable, comparartor, stream 활용 등 BFS, DFS 투포인터 다익스트라 MST : 크루스칼, 프림 입력 받기 Scanner와 BufferedReader 차이 1) Scanner의 버퍼 크기는 1024 chars, BufferedReader는 8192 chars 2) BufferedReader는 문자열을 단순히 읽고 저장하지만 Scanner는 문자열을 구분해서 분석할 수 있다. 3) BufferedReader는 동기화가 지원되어 Thread-safe하고 Scanner는 지원되지 않는다. 4)..
코루틴의 취소에 대해 알아본다. 코루틴의 취소를 알아야 리소스도 해제할테니 잘 알아두자! Canceling coroutine execution fun maini() = runBlocking { val job = luanch{ repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) println("main : I'm tired of waiting!") job.cancel() job.join() println("main : Now, I can quit") } launch는 코루틴 job을 반환하는데 이 job은 취소하는 기능도 가지고 있다. 1000번을 반복하면서 0.5초 간격으로 숫자를 출력하고, 1.3초 지났..
코루틴을 정리하면 비동기 처리를 순차적으로 간단하게 하고, 콜백을 대체할 수 있는 도구다. 뭐가 편해지는 건지 한번 코드로 확인해보자. 코루틴, 뭐가 편해지는걸까? val user = fetchUserData() textView text = user.name 위처럼 코드를 짜면 참 편하다. 바로 서버를 호출하고, 그 결과를 바로 텍스트뷰에 삽입할 수 있으니까. 하지만 위처럼 할 수는 없다. 서버를 호출하는 부분은 네트워크 부분이기 때문에 NetworkOnMainThreadException이 발생하기 때문이다. 지난 포스팅에서 말했듯, 네트워크 작업은 main thread가 아니라 IO thread에서 작업하는 것이다. 근데 지금은 메인스레드에서 네트워크 콜을 하고 있네? 문제다. fetchUserData..
서론이 좀 길 것 같으니 네웹 인턴십 전형이 궁금하다면 서론 읽지 말고 아래로 아래로~ 취업 준비의 시작, 그리고 올해 상반기 결과 2021년 2월에 졸업을 하고, 올해 초에 시작한 동아리 활동을 마쳤더니 4월이 되어 있었다. 조금 부끄러운 소리지만, 당시 동아리 활동이 바쁘다는 핑계로 여느 취준생처럼 열심히 자소서를 제출하지는 않았고 그냥 남들 다 쓴다는 삼성전자에만 3월에 자소서를 제출했었다. 그리고 4월 중순에 서류 합격의 결과를 받았다. 그때는 잠시 미쳤던건지, 뭔가 합격할 것 같은 느낌이 마구 들어서 바로 다음 날부터 2주간 삼성전자의 코딩테스트만을 준비했다. 정말 막막했지만 일단 뭔가 붙을 거 같다라는 이상한 자신감 덕분에(?) 계속 틀려도 계속 몰아붙이면서 매일 8-10시간씩 삼성전자의 기출..