개발 22

웹 서비스 출시 전 확인사항

개발자로 일하며 수 차례 서비스를 출시했지만 서비스 오픈은 언제나 설렌다. 정상적으로 작동할까? 장애가 발생하지 않을까? 걱정된다. 내가 그동안 봐온 서비스 장애는 오픈 전 체크 리스트 or 성능 테스트를 통해 해결할 수 있던 것들이었다. 생각나는대로 정리해봤다. 로그 설정 로그 레벨 에러를 INFO레벨로 사용하지는 않았는가 확인한다. 그 반대 경우도 마찬가지다. 불필요한 DEBUG정보가 운영 환경에서 남도록 하지 않았는가 확인한다. 에러 로그 False 알람이 발생하지 않도록한다. 개발자가 정말 알아야 하는 (새벽에 slack으로 에러 알림을 받고 기상해서 바로 패치 후 hotfix로 내보내야 하는) 에러인 경우만 ERROR레벨을 사용한다. 로테이션 로그가 적절히 로테이션+삭제 되는지 확인한다. 이 설..

개발 2019.12.04 (3)

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 (3)

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 (2)