전체 글 77

[스프링 핵심 원리 - 기본편] 스프링이란?

스프링 생태계 1. 스프링 프레임워크 핵심기술 : DI 컨테이너, AOP. 이벤트 등 웹 기술: MVC, WebFlux 등 데이터 접근 기술: JDBC ORM 등 을 아우르는 프레임워크 2. 스프링 부트 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성, 내장 Tomcat 지원으로 웹서버를 별도로 설치하지 않아도 됨 Spring starter로 손쉬운 빌드 구성 가능 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 가능 ( 운영 모니터링 등) 관례에 의한 간결한 설정 스프링이라는 단어란 무엇인가 - 스프링 DI 컨테이너 기술 - 스프링 프레임워크, 스프링 부트 모두를 포함한 생태계 스프링은 왜 만들었을까?( 핵심 개념 ) 객체 ..

스터디-Spring 2021.12.28

Querydsl Tech Talk 정리

사내에서 Querydsl에 대해 Tech Talk 진행할 기회가 생겨 준비한 내용을 기록합니다 Querydsl 타입에 안전한 방식으로 HQL 쿼리를 실행하기 위한 목적으로 만들어짐 타입에 안전하도록 도메인 모델을 변경하면 소프트웨어 개발에서 큰 이득을 얻게 됨 도메인 변경이 직접적으로 쿼리에 반영됨 쿼리 작성 과정에서 코드 자동완성 기능을 사용함으로써 쿼리를 더 빠르고 안전하게 만들 수 있게 됨 JPA, JDO, JDBC, Lucene, Hibernate Search, MongoDB, Collections 그리고 RDFBean을 지원 사용하기 도메인 타입 작성(ex: Customer) Querydsl에 의해 자동으로 QCustomer라는 쿼리타입 생성 (JPA의 경우) JPAQuery 인스턴스로 쿼리 작..

Spring 2021.08.10

Git reset hard 취소하기, 되돌리기, 복원하기

git reset --hard는 HEAD(커밋 포인터)의 위치를 변경하는 것 예를 들어 원래의 HEAD의 위치가 d937ea20인데 git reset --hard 4251c50f1 명령어로 reset했다고 해보자. git reflog로 reference 로그를 확인 할 수 있는데(커밋 포인터의 위치 변경 로그 등) 위와 같이 확인 할 수 있다. ( git reset --hard 4251c50f1 명령어를 사용했다는 걸 확인 할 수 있음 ) 이를 원복한다는 의미는 다시 원래의 커밋으로 HEAD를 변경해주면 된다는 의미와 같다. git reset --hard d937ea20a로 원래의 커밋위치로 HEAD를 변경해주면 된다.

프로그래밍 2021.05.04

OpenGraph로 검색엔진 노출, SNS공유 최적화

검색엔진의 로봇의 경우 사이트에 메타데이터가 설정되어 있지 않으면 웹사이트의 내용을 크롤링하여 보여준다. 대체적으로 이상하게 노출된다고 생각하면 된다. 위와 마찬가지로 웹사이트의 내용을 그대로 긁어 보여주기 때문에 사이트의 정체성을 나타내기가 힘들다, 그럼 로봇이 수집할 수 있게 뭐를 설정해야 한단 말인가? html의 기본 메타태그인 title, description은 기본적으로 잡아주는게 좋다. 많은 로봇들이 해당 데이터를 기본정보로 크롤링한다. (네이버-콘텐츠 마크업) 그렇다면 SNS 공유, 메신저 공유(라인, 페이스북, 카카오톡)의 경우는 어떤식으로 노출되는 걸까? 이에 대한 방법중 대중적인 방법이 페이스북의 OpenGraph 프로토콜이다. (Open Graph) OpenGraph란? HTML 문서..

IT Tip 2021.03.09

Vuetify - select에 검색기능을 추가하려면? autocomplete

개인서비스의 select 컴포넌트에 데이터가 많아져서 조회기능을 넣으면 좋지 않을까 하여 개선해보았다. vuetify의 기존 select 컴포넌트는 다음과 같은데 ... ... 위와 같은 모습으로 나오게 된다. 항목이 적을 경우는 편리하긴한데 조회기능이 없어서 많아지면 불편하다. 이를 Autocomplete 컴포넌트가 해결할 수 있다. ... ... v-select 를 v-autocomplete로만 변경해주면 완료 위와 같이 검색도 되는 select 컴포넌트로 개선 가능하다. 여담 직접 만들기 전에 제공되는 api, 컴포넌트를 조회 후, 라이브러리를 찾아보고, 그리고 없으면 구현하는게 좋다. 거인의 어깨는 서비스 개발 속도에 아주 큰 도움이 되니까..

Vue.js 2021.03.03

RSS Parse

RSS 피드를 파싱 해보자 rss-parser 라이브러리를 사용하겠다. 이유는 작고 가볍고 편하다. 그리고 주간 다운로드 수가 현재 17만을 육박한다.(등록일 기준) www.npmjs.com/package/rss-parser rss-parser A lightweight RSS parser, for Node and the browser www.npmjs.com node v14.15.0 환경에서 실시 1. 설치 npm install --save rss-parser 2. 사용 샘플로 연합뉴스의 최신피드를 파싱할 예정, 최대한 샘플 코드를 따라해보았다. (샘플주소: www.yonhapnewstv.co.kr/browse/feed/) import RssParser from 'rss-parser' async pars..

Node.js 2021.02.24

컴퓨터 화면 녹화 하는 방법 - 윈도우 10 기본기능

프로그램 별도 설치 없이 윈도우 10 기본기능으로 녹화 하는 방법 바로 설명 들어갑니다. 1. Win key + G 를 누릅니다( 윈도우 로고 키 + G ) "게임바를 여시겠습니까?" 라는 메세지가 나오면 체크하시면 됩니다. 위와 같은 화면에서 빨간 화살표가 위치한 버튼이 영상 녹화 버튼입니다. 2. 누르게되면 다음과 같이 녹화 상태 패널이 생깁니다. 마이크 버튼을 누르면 마이크 기능도 사용할 수 있습니다. 녹화 영상은 내 PC > 동영상 폴더에서 확인 하실 수 있습니다.

IT Tip 2021.02.17

객체는 인터페이스를 사용해 참조하자

객체는 인터페이스를 사용해 참조하라 이전에 매개변수 타입으로 클래스가 아닌 인터페이스를 사용하라고 하였다, 이를 확장하면 객체는 클래스가 아닌 인터페이스로 참조하라고 할 수 있다 즉 적합한 인터페이스만 있으면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라. // 좋은 예, 인터페이스를 타입으로 사용 Set itemSet = new LinkedHashSet(); // 나쁜 예, 클래스를 타입으로 사용 LinkedHashSet itemSet = new LinkedHashSet(); 인터페이스를 타입으로 사용하는 습관을 길러두면 프로그램이 훨씬 유연해진다, 나중에 구현 클래스를 교체하고자 한다면 그저 새 클래스의 생성자(혹은 다른 정적 팩터리)를 호출해주기만 하면 된다. Set i..

Java 2021.02.10

메서드 시그니처를 신중히 설계하라.

메서드 시그니처를 신중히 설계하라 개별 아이템으로 두기 애매한 API 설계 요령들을 모아 놓았다. 배우기 쉽고, 쓰기 쉽고, 오류 가능성이 적은 API를 만들기 위함이다. 메서드 이름을 신중히 짓자. 항상 표준 명명 규칙(아이템68)을 따라야 한다. 이해할수 있고, 같은 패키지에 속한 다른 이름들과 일관되게 짓는 게 최우선 목표다. 그다음은 개발자 커뮤니티에서 널리 받아들여지는 이름을 사용하는 것이다. 긴 이름은 피하자. 애매하면 자바 라이브러리의 API 가이드를 참조하라. 자바 라이브러리가 워낙 방대하다 보니 일관되지 않은 이름도 제법 많지만 대부분은 납득할 수준이다. 편의 메서드를 너무 많이 만들지 말자 모든 메서드는 각각 자신의 소임을 다해야 한다. 메서드가 너무많으면 익히고 사용하고 문서화하고 테..

Java 2021.02.09

문자열 연결을 고민한다면 String 보다는 StringBuilder

성능을 생각한다면 String 대신 StringBuilder 문자열 연결 연산자(+)는 편리하지만, 성능 위주의 환경에서는 성능 저하를 감내하기 어려울 것이다. 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다. 문자열은 불변이라서 두 문자열을 연결할 경우 양쪽의 내용을 모두 복사해야 하므로 성능 저하는 피할 수 없다. public String statement() { // 문자열 연결을 잘못 사용한 예 - 느리다! String result = ""; for (int i = 0; i < numItems(); i++) { result += lineForItem(i); // 문자열 연결 } return result; } 성능을 포기하고 싶지 않다면 StringBuilder를 사용하자 publ..

Java 2021.02.08