본문 바로가기

튜나 개발일기79

[kafka] 메세지큐/ 카프카의 구조, 구성요소, 작동원리 [kafka] 메세지큐, 카프카의 구성요소, 작동원리 카프카(apache kafka)는 메세지큐 방식으로 대용량 데이터를 수집하고 이를 사용자들이 실시간 스트림으로 소비할 수 있게 만들어주는 역할을 하며, 다양한 기업에서 여러 스토리지와 분석 시스템에 데이터를 연결하기 위한 필수 도구로 인식되고 있다. 💡 카프카 탄생 배경 카프카는 '링크드인'에서 탄생하게 되었으며, 현재는 아파치 카프카로 오픈소스로 제공되고 있다. 기존의 링크드인 시스템에서는 하나의 서비스가 너무 많은 시스템과 연결되어 발생하는 문제를 해결하기 위해 아래와 같은 목표로 새로운 시스템을 만들었다. 프로듀서와 컨슈머의 분리 메시징 시스템과 같이 영구 메시지 데이터를 여러 컨슈머에게 허용 높은 처리량을 위한 메시지 최적화 데이터가 증가함에 .. 2021. 1. 19.
[Linux ] wget으로 파일 다운로드 하기/압축해제 [Linux ] wget으로 파일 다운로드 하기/압축해제 인터넷에서 파일을 다운받는 방법은 많이 있지만, 그중에서 가장 쉽게 사용할 수 있는 것 중 하나가 wget입니다. wget은 (World Wide Web Get)의 약자로 웹 서버로 부터 원하는 웹 사이트의 정보를 가져오는 역할을 합니다. wget은 내장 프로그램이라 따로 설치할 필요없이 명령어로 간편하게 다운이 가능합니다. wget은 HTTP, HTTPS, FTP 프로토콜을 이용하여서 다운로드 받을 수 있도록 되어 있기때문에 http:// https:// ftp://로 시작하는 URL에서는 원하는 파일을 다운 받을 수 있습니다. 사용법은 간단하게 wget [URL]을 하면 됩니다. 그 외 자세한 사용법이 궁금하다면 'wget -help'를 입력하.. 2021. 1. 19.
정적타입 언어 vs. 동적타입 언어 특징 비교하기 [Groovy] 정적타입 언어 vs. 동적타입 언어 특징 비교하기 자바를 사용하다 최근 그루비를 사용하며 개인적으로 느꼈던 가장 큰 차이 하나를 꼽자면 바로 자료형에 대한 명시 여부였습니다. groovy는 자바스크립트와 같은 동적타입을 지원하는 언어이므로, 따로 자료형에 대한 명시하지 않아도 런타임시 알아서 자료형을 넣어줍니다. (적응되니 너무 편했지만 상황에 따라 타입에러가 발생하는 경우도 있으니 주의!) 정적타입(Statically typed) vs 동적타입 (Dynamically typed) 먼저, 변수의 타입이란 int, short, float, String, 객체 와 같은 자료형을 뜻합니다. 💡 정적타입 언어란? 정적타입 언어(Statically typed language)는 컴파일 시 변수의 .. 2020. 9. 10.
[hibernate]org.hibernate.HibernateException: No Session found for current thread 에러 해결 org.hibernate.HibernateException: No Session found for current thread 가 발생했을 경우 높은 확률로 @Transactional이 빠진 상태이다. 따라서, service나 해당 메소드가 거쳐가는 클래스에 아래와 같이 @Transactional 어노테이션을 추가해주면 해당 에러가 해결된다. 2020. 9. 4.
[REST API] HTTP 응답 코드 간단 정리 💡 HTTP 응답 코드 1️⃣ 200번대 : 성공 200: Ok, 클라이언트의 요청을 정상적으로 수행함. 201: Created, 클라이언트에게 생성 작업을 요청받았고, 생성 작업을 성공함. 204: No Content, 요청은 성공했으나 응답할 콘텐츠가 없음. 205: Reset Content, 요청은 성공했으나 클라이언트의 화면을 새로 고침하도록 권고 206: Partial Content, 요청은 성공했으나 일부 범위의 데이터만 반환함. 2️⃣ 300번대 : 리다이렉션 301: Moved Permantly, 클라이언트가 요청한 리소스에 대한 URI가 영구적으로 변경되었음을 의미. 302: Found, 요청한 URI가 일시적으로 주소가 바뀌었을 경우를 의미. 303: See Other, 요청한 자원이 .. 2020. 8. 25.
[REST API] URL 규칙, RESTful한 URL이란? REST API URL 규칙, RESTful한 URL이란?RESTful API REST API 설계시 가장 중요한 항목은 아래 두가지이다. 1️⃣ URI는 정보의 자원을 표현해야 한다는 점 2️⃣ 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다는 점 두 가지를 기억하며, 좀 더 RESTful한 URL을 설계해보자!(REST API에 대해 더 알아보려면? 👉 클릭 ) 1. 소문자를 사용한다. 주소에서 대소문자를 구분하므로, 카멜방식이 아닌 소문자를 사용하여 작성한다. Bad http://restapi.example.com/users/postComments Good http://restapi.example.com/users/post-comments 2. 언더바를.. 2020. 8. 25.
[REST API] REST API 규칙/PUT과 POST 차이/PUT과 PATCH 차이 먼저, REST란? Representational State Transfer의 약자이며, 다음과 같이 구성되어 있다. 자원(Resource): URI 행위(Verb): HTTP Method 표현(Representations) 즉 REST는 URI를 통해 자원을 표시하고, HTTP Method를 이용하여 해당 자원의 행위를 규정하여 그 결과를 받는 것을 말한다. HTTP Method는 크게 GET, POST, PUT, DELETE가 대표적이며, 보통 CRUD에서 조회는 GET, 등록은 POST, 수정은 PUT, 삭제는 DELETE를 이용한다. GET과 DELETE는 비교적 그 행위가 명확하지만, POST와 PUT을 구분하기 위해서는 멱등성의 개념을 알아야 한다. 참고 💡 멱등성(Idempotence)이란?.. 2020. 8. 25.
[IDE] 이클립스 인텔리제이 장단점 비교(eclipse/IntelliJ) [IDE] 이클립스 인텔리제이 장단점 비교(eclipse/intelliJ) 1. 이클립스(eclipse) 역사가 오래되어 잘 작성된 문서, 수 많은 플러그인들이 존재하며 가장 대중적으로 사용되고 있는 IDE이다. 가장 큰 강점은 아마 무료라는 것이 아닐까 한다. 웹, 모바일, 데스크탑, 엔터프라이즈, 엠베디드 시스템 어플리케이션 개발등에 두루두루 사용되며 Eclipse 는 자바(JAVA)로 개발되어 있어 윈도우즈, 리눅스, 맥OS 등 대부분의 OS를 지원한다. 장점 - 무료다! - 여러 프로젝트를 동시에 관리할 수 있다. 단점 - 다른 IDE 툴들에 비해 느림, 하지만 하드웨어의 비약적인 발달로 인해 엄청많이 차이가 나지는 않음. - 자바로 만들어져서 자바가상머신(JVM) 위에서 실행되므로 다른 IDE에.. 2020. 8. 14.
[IntelliJ] 인텔리제이 자주 쓰는 단축키 정리 [IntelliJ] 인텔리제이 자주 쓰는 단축키 정리 처음 개발을 시작할 때 이클립스로 입문하여 사용하다, 최근 프로젝트부터 인텔리제이를 사용하게 되었다. 초반에는 인텔리제이의 단축키들이 너무 손에 익지 않아 매번 찾아보느라 꽤 시간을 썼었다. 지금 익숙해지니 전체 검색, 똑똑한 자동완성, 여러 플러그인 등 편한 기능들이 많아 만족하며 사용하고 있다!👍 자주 사용하는 단축키만 몇가지 정리해보자면 ( window 기준 ) 💡 기본 - 디렉토리, 패키지, 클래스 등 생성 목록 보기 : Alt + Insert - 한줄 아래로 복붙 : Ctrl+d - 자동정렬 : Ctrl+Alt_L - 코드 한줄 삭제 : Ctrl + y - 문자열 라인 합치기 : Ctrl+shift +j - 라인 단위로 옮기기 1) 문법에 관.. 2020. 8. 14.
[JPA/Hibernate] Restrictions 다중 조건 설정하기 [JPA/Hibernate] Restrictions 다중 조건 설정하기 최근 Groovy&Grails를 사용하면서 JPA ORM 과 유사한 GORM을 사용하고 있다. GORM이란? GORM과 ORM은 기본 문법이나, 큰 틀이 거의 유사하다. 하이버네이트 쿼리문을 작성하는 과정에서 조건을 2개 설정할때 오류가 발생했는데 원하는 equal 조건을 담은 다음 and로 연결하니 쿼리가 아주 잘 돌아갔다😂 1. 먼저 Criterion으로 eq 조건을 담아준다. Criterion period = Restrictions.eq('period', searchPeriod) Criterion type = Restrictions.eq('type', searchType) Criterion username = Restrictio.. 2020. 8. 5.