목록삶../프로그래밍 (41)
오늘이군
프로젝트를 잘 못 선택했거나, 병합하지 않을 브랜치 등을 만들었을 때 원격 레파지토리에 있는 브랜치를 삭제하는 방법입니다. 삭제할 브랜치가 다음과 같다고 한다면 feature/TICKET-1000-abc 방법1. 원격 브랜치 삭제 git push origin --delete feature/TICKET-1000-abc 방법 2. 로컬 브랜치 삭제 후 push git branch -d feature/TICKET-1000-abc git push origin feature/TICKET-1000-abc (팁) 브랜치를 만들 때 예제의 abc와 같은 특정 단어(이니셜 등)를 suffix 로 붙여 주면 내가 생성한 브랜치를 쉽게 확인할 수 있습니다. git branch -r | grep 'abc'
develop 에서 feature/epic 브랜치를 따고 feature/epic 에서 각자 브랜치를 따서 작업하는 중간에 공통으로 사용하는 entity 같은 것을 누군가가 feature/epic 에 merge 를 해서 내 브랜치에 받아야 할 때 방법은 두가지가 있습니다. 1. merge merge 는 intellij 우측하단의 Git Branches 에서 feature/epic 브랜치를 선택하여 Merge into Current 를 하면 merge 가 됩니다. 쉽지만 단점은 merge 를 위한 커밋을 하나 더 생성하게 되고, 이력 또한 모두 가지고 있게 되므로 git log 가 보기 어렵게 된다는 단점이 있습니다. 2. rebase 말 그대로 브랜치의 base 를 다시 설정하는 기능입니다. git che..
1. 일반적인 로그수집/리포팅 시스템 구조 컴포넌트 역할 솔루션 API 서버 로그를 클라이언트로 부터 수집하고 데이터를 정제한다. node.js, ruby, php (일반적인 웹서버) Log Storage 로그 저장소 Elastic Search Hadoop, HBase (하둡) Drill, Druid (SQL 기반 빅데이터 플랫폼) Message Consumer MQ 로 부터 로그를 Message Consumer 가 순차적으로 읽어서 Log Storage 에 저장한다. Multi Thread(or Process) + Timer 를 조합하여 메시지를 폴링 방식으로 읽어오는 어플리케이션 개발 Message Q 로그 저장소가 순간적으로 많은 트래픽을 감당할 수 없는 경우가 많기 때문에, 중간에 MQ 를 넣어서..
1. Redis Redis 는 오픈소스(BCD licensed) 이며 데이터를 메모리에 저장하며 영속성을 위해서만 디스크를 사용합니다. 장점 및 특징 1) 초당 110,000 건을 저장할 수 있고, 81,000 건을 조회 할 수 있습니다. 2) 다양한 데이터유형을 지원합니다. 3) Redis 의 동작은 atomic(한번에 하나의 커맨드를 실행하는 싱글 스레드 기반 동작) 하기 때문에 race condition(경쟁상태)이 발생하지 않습니다. 4) 멀티 유틸리티 툴이며 다양한 케이스에 사용이 가능합니다. (캐싱, 메시지 큐, 세션, 방문자수 등 짧은 기간동안에만 필요한 데이터를 저장하기 위해 사용 될 수 있습니다.) 데이터 보존 방법 1) Master/slave 로 구성하여 Master 서버가 down 되..
이전 글에서 Request 를 Wrapping 하여 악의적인 공격 구문을 필터링하여 입력하기도 하고 Mapper가 JSON 문자열을 생성할 때 char 를 변환하여 출력하기도 하였습니다. 막상 배포를 해보니 char 를 변환하여 출력하는 것에는 일정한 규칙(예외) 를 적용 하지 못하여 Request 를 Wrapping 한 것 처럼 Response 를 Wrapping 할 수 있지 않을까 하여 찾아본 내용을 공유 합니다. stackoverflow 에서 가져 왔고요 아래 filter 를 web.xml, WebConfig, WebMvcConfig 같은 곳에 적용해주시면 됩니다. import com.navercorp.lucy.security.xss.servletfilter.XssEscapeFilter; impor..
1. 정의 악의적인 사용자가 공격 하려는 사이트에 스크립트를 넣는 기법을 말하며 자세한 내용은 위키를 참조하시면 좋겠습니다. 2. Lucy 의 한계 XSS 공격에 대한 방어를 하기 위해서 네이버에서 개발한 lucy-xss-sevlet-filter 를 사용합니다. 해당 라이브러리는 웹어플리케이션으로 들어오는 모든 요청 파라미터에 대해서 기본적으로 XSS 방어 필터링을 수행합니다. package com.navercorp.lucy.security.xss.servletfilter; public class XssEscapeServletFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse res..
JPA 를 사용하면서 좀 더 객체지향적으로 좀 더 쉽게 짜야겠다는 고민이 있어.. 이런식으로 안짜려고 하고 있지만, mybatis 쿼리에 익숙한 동료가 물어보던 참에 같이 해결하다 보니 별다른 예제가 없어서 남깁니다. 이런 형태의 쿼리를 수행하고 싶은 경우 JPQL 은 다음과 같이 짭니다. public List qLastOrderedProducts() { JPQLQuery query = from(qProduct1); query.where( Expressions.list(qProduct1.id, qProduct1.salesDt).in( JPAExpressions .select(Expressions.list(qProduct2.id, qProduct2.salesDt.max())) .from (qProduct2..
마이크로서비스(microservice)는 애플리케이션을 느슨히 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기법이다. 다소 어려운 부분이 있어 MSA 가 나오기 이전의 아키텍처를 살펴보겠습니다. monolithic architecture monolithic architecture 라고 불리우는 기존 아키텍쳐인데요, 하나의 또는 다수의 WAS 에 모든 컴포넌트가 하나의 인스턴스에 올라가있는 형태 입니다. 모든 컴포넌트가 하나의 프로젝트 Git Repository에 구성이 되어 있죠. 이러한 아키텍처는 하나의 컴포넌트에 문제가 발생되었을 때 다른 모든 서비스가 문제가 되는 상황이 발생하곤 합니다. 또한 특정한 서비스에 부하가 많이 걸리는 경우 그 특정 서..