개발 31

webpack에서 splitChunks 무시하기 (Vue.js)

문제 npm run build를 실행하면 js, css 한 개씩 번들링이 되는게 아니라 chunk되어 생성된다. 이렇게 되면 index.html head에 들어가는 파일명이 매번 바뀌게 된다. 그러면 배포시 계획에 차질이 생기므로 반드시 해결해야 하는 문제였다. 그리고 내가 이쪽 지식이 없는게 문제였다. 현재 버젼 webpack: 4.41.2 vue-cli: 4.0.5 삽질 vue.config.js에 뭔 짓을 하면 될것 같은데? 라는 생각으로 찾아보기 시작했다. module.exports = { chainWebpack: (config) => { config.optimization.delete('splitChunks') }, webpack에 optimization 설정을 무시하려는건데 아무튼..

개발/Frontend 2019.11.27

우아한 Redis - 강대명

우아한 Redis - 강대명 11월 21일 우아한형제들(잠실)에서 강대명님의 Redis 세미나가 있었습니다. 주요 포인트 Redis는 자료구조가 Atomic 하기 때문에 Race Condition을 피할 수 있다. SortedSet의 Score는 실수형이기 때문에 부동 소수점에 유의하자. 하나의 컬렉션에 너무 많은 아이템을 담으면 좋지 않다. 수천개가 적당함. Expire는 Collection에 걸림 메모리 관리를 잘하자. Swap이 발생하면 메모리 Page 접근시마다 느려짐 큰 메모리를 사용하는 instance 하나보다 적은 메모리를 사용하는 여러 instance 여러개가 안전함 데이터의 사이즈가 다양한 것 보다는 유사한게 유리하다. 메모리를 줄이기 위해서 Ziplist를 이용하자. O(N) 명령어를 ..

개발/Linux,Server 2019.11.21

우아한 테크세미나 - 스프링 배치

배치 사람과 상호작용이 없는 애플리케이션 시간이 얼마나 걸리든 해당 시스템에서 완결이 난다. Web vs Batch Web: 실시간 처리 / 상대적인 속도 / QA 용이성 Batch: 후속 처리 / 절대적인 속도 / QA 복잡성 배치는 QA분들이 테스트하기 힘들기 때문에 반드시 테스트 코드를 작성 해야한다. Spring Batch와 Quartz Quartz: 스케쥴링 프레임워크. ex: 매 시간 / 마지막 주 금요일에 실행 Quartz는 Spring Batch의 보안제 역할이지 대체제가 아니다. 배치 애플리케이션이 필요한 상황 일정 주기로 실행되어야 할 때 실시간 처리가 어려운 대량의 데이터를 처리 할 때 대용량 데이터 처리가 절대적인 요구 사항 스프링 배치 모든 데이터를 메모리에 쌓지 않는 방식이 기본..

개발/Java,Spring 2019.09.27

SpringSecurity에서 anonymous()

Spring에서 테스트를 돌리는 중 Unauthorized(401)가 아닌 Forbidden(403)이 발생하는 문제가 생겼다. @RestController @RequiredArgsConstructor public class PostController { private final PostService postService; @PreAuthorize("isAuthenticated()") @PostMapping("/api/bbs/{name}/posts") public void post(@PathVariable String name, @Valid @RequestBody WritePost request, @AuthenticationPrincipal ExternalUser externalUser) { postSe..

개발/Java,Spring 2019.08.15

Spring Boot 2.x, 3.x Security에서 hasPermission 사용

Spring Boot2.x에서 Spring Security를 이용해 권한을 관리 할 수 있다. 기본적으로 Override된 configure(HttpSecurity http)에서 AntMatcher를 이용해 Role확인을 할 수 있다. 하지만 관리 대상과 요구사항이 많아지면 Role만으로는 문제 해결이 용이하지 않다. 그래서 MethodSecurity를 이용한 권한 관리 방법을 간략히 정리한다. Gradle 설정 compile("org.springframework.boot:spring-boot-starter-security") compile("org.springframework.security:spring-security-oauth2-client") compile("org.springframework.s..

개발/Java,Spring 2019.08.11

SpringBoot Batch에서 JobParameter로 받을 수 있는 Type

개요 SpringBoot Batch에서 JobParameter로 받을 수 있는 타입에 대하여 이야기 합니다. 이슈 SpringBoot Batch 실행 시 JobParameter로 받을 수 있는 타입은 한정되어 있다. String, Boolean, Integer, Date. 하지만 지금은 2019년.. Date는 상당히 골치아프다. 나는 LocalDate를 사용하고 싶었다. 그래서 아래와 같이 JobParameter를 받아줄 수 있는 Class를 만들었다. public class MyJobParameter { @Value("#{jobParameters[requestDate]}") private LocalDate requestDate; public void setRequestDate(String reques..

개발/Java,Spring 2019.05.17

Nginx에서 upstream서버 keealive 설정

Nginx upstream 웹 애플리케이션 서버를 (Spring, flask..) Container 자체적으로 실행하는 경우는 거의 없고 대부분 nginx에서 proxy 하는 경우가 많다. 이렇게 하면 ssl, auth, cache 등의 요구사항을 쉽게 적용, 변경할 수 있다. 이때 nginx는 client 입장이 되는데, keepalive 설정을 할 수 있다. keepalive upstream 접속에 사용될 connection 수. 각 worker process에서 cache 하고 있으며 최대 수에 도달하면 가장 최근에 사용된 connection이 closed 된다. upstream backend { server backend1.example.com; keepalive 32; } server { loc..

개발/Linux,Server 2019.04.30

Nginx socket 개수 확인

보통 웹 애플리케이션을 구동할 때 nginx + upstream 조합을 많이 이용한다. 이때 nginx 서버는 client, upstream은 server가 된다. Nginx 설정, 성능과 관련하여 TCP 연결 상태를 확인할 때가 종종 있다. $ netstat -napo | fgrep nginx 위 명령어를 이용하면 현재 nginx에서 맺은 연결 정보를 얻을 수 있다. ss 명령어로도 대체할 수 있다. 하지만 두 명령어 결과의 개수가 정확히 일치하지는 않는다. $ ss -natp | fgrep nginx TCP 상태별 개수를 확인하려면 아래 명령어를 이용하면 된다. $ netstat -napo | fgrep nginx | awk '{print $6}' | sort | uniq -c 24 CONNECTED..

개발/Linux,Server 2019.04.26

리눅스 설치일자 확인하기

CentOS6.x에서 리눅스 설치 일자를 확인할 일이 생겼다. 몇 가지 좋은 아이디어를 얻을 수 있었는데 아래 두 가지 방법이 가장 무난해 보였다. 오래 된 파일 확인 리눅스에서 설정 파일이 주로 위치하는 /etc 폴더 하위 목록을 시간 순으로 뽑아낸 결과 $ ls -lact --full-time /etc |tail파일 시스템 생성 일자 dumpe2fs 툴을 사용하여 파일 시스템 생성 일자를 확인한다. $ dumpe2fs $(mount | grep 'on \/ ' | awk '{print $1}') | grep 'Filesystem created:'100% 정확하지는 않더라도 가장 가까운 결과를 얻어낼 수 있을 것 같다.

개발/Linux,Server 2019.04.12

CentOS에서 python3, pip3 설치

Repo 주소 등록 현재 CentOS 배포판에 맞는 주소를 복사한다. 배포판을 확인하는 명령어는 아래와 같다. $ cat /etc/*-release CentOS 6: https://centos6.iuscommunity.org/ius-release.rpm CentOS 7: https://centos7.iuscommunity.org/ius-release.rpm 설치 $ sudo yum install -y 위주소 $ sudo yum install -y python36u python36u-libs python36u-devel python36u-pip $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py PIP 설치 위 명령어로 pip도 설치되기 때문에 별도 설치..

개발/Linux,Server 2019.04.01