본문 바로가기

분류 전체보기

컨테이너 용량이 계속해서 증가하는 문제에 대한 해결책 안녕하세요.일평균 접속이 100,000건 이상, 동시접속이 1,000건 이상인 어린이집 출결관리 시스템을 운영 중에 알 수 없는 문제가 발생하였습니다. 문제문제는 컨테이너 용량이 계속해서 증가한다는 것이었는데요. 초기에는 원인 파악이 어려워 일단 호스트 파티션 용량을 늘려 조치를 하고 원인을 분석한 결과 문제는 Docker 이미지의 /tmp 디렉토리였습니다. 저희는 AWS S3를 사용하고 있으니 용량 문제는 발생하지 않을 거라고 생각했지만, 사실 어린이집에서 업로드하는 영상이나 사진들이 모두 호스트를 거쳐 S3에 업로드되는 구조다 보니 임시 파일(/tmp)이 계속해서 쌓이더군요. 더군다나 리눅스에서 /tmp 경로는 시스템이 재부팅될 때 청소가 된다고 하니 무중단 시스템에서는 정기적으로..
호스트 디스크 용량이 갑자기 부족한 경우 서론 저희가 유지보수를 하는 고객사 시스템은 대부분 AWS EC2 인스턴스에서 Docker를 기반으로 구축되어 구동되고 있습니다. 간혹 디스크 용량이 100%에 임박하는 경우가 발생하는데 저희 서비스는 파일을 S3에서 관리하도록 개발되기 때문에 디스크 용량이 부족할 수가 없는 경우라 난감한 경우가 있었습니다. 원인 원인 분석 결과 Docker에서 구동중인 컨테이너에서 발생한 로그가 제한(max-size) 없이 계속 쌓이다 보니 디스크 용량을 지속적으로 갉아먹고 있던 문제였고, 다른 서비스 또한 시간이 지나면 같은 문제를 만날 수 밖에 없는 상황이었습니다. 결론 결론적으로 개별 컨테이너에 로그 용량 제한을 걸면 되는데요. 해결방법은 아주 단순합니다. 적용 즉시 max-size를 초과하는 모든 로그가 삭제되..
[GitLab] 이슈 또는 MR(Merge Request)에 템플릿 적용하기 안녕하세요. 유저인사이트 박태양입니다. GitLab을 사용하면서 이슈/MR을 작성할때, 특별한 양식을 정하지 않고 사용하고 있었습니다. 자유롭게 작성할 수 있다는 장점이 있지만, 때로는 다른 개발자가 이해하기 위한 정보가 부족하게 작성될 때가 있습니다. 최소한의 통일성을 갖기 위해 GitLab에서 제공하는 템플릿 기능을 사용하게 되었습니다. 1. 프로젝트 Code > Repository 메뉴에 진입합니다. 2. 플러스 버튼을 눌러 New File을 클릭합니다. 3. 에디터 상단 Filename을 다음과 같이 입력합니다. (맨 앞에 . 점이 있으니 유의하세요) 이슈 : .gitlab/issue_templates/default.md MR : .gitlab/merge_request_templates/defau..
Querydsl 에서 Order By 구문에 조건문이 있을 시 생기는 오류 처리 (unexpected AST node) 안녕하세요 유저인사이트 박준호 선임입니다. 상품들의 별도의 정렬 기준이 있는 상태에서, 재고가 0 인 상품은 하단에 몰리도록 처리하는 부분에 문제가 생겼습니다. final JPQLQuery query = from(product).where(builder).orderBy(product.stock.eq(0).asc()) .leftJoin(plant).on(product.plant.eq(plant)) .leftJoin(pot).on(product.pot.eq(pot)) .groupBy(product.pot.potGroup, product.plant.plantGroup); :7:24: unexpected AST node: = 혹시나 문법 오류가 있는지 확인하기 위해 Sql로 테스트 해봤는데, 문제가 없었습니다...
IntelliJ에 SonarQube 연동하기 (SonarLint) 안녕하세요. 유저인사이트 박태양입니다. 이번 시간에는 IntelliJ에 정적 분석 도구인 SonarQube를 연동하는 방법을 알아보도록 하겠습니다. 순서는 아래와 같이 진행됩니다. 1. 소나큐브 설치 및 키 발급 2. IntelliJ에 SonarLint 플러그인 설치 후 연동 우선 아래 링크를 통해 소나큐브를 다운로드 합니다. https://www.sonarsource.com/products/sonarqube/downloads/ Download | SonarQube Get the latest LTS and version of SonarQube the leading product for Code Quality and Security from the official download page. www.sona..
랜덤한 IV(Initial Vector)를 사용하여 AES256 암호화, 복호화 하기 안녕하세요 유저인사이트 박태양입니다. 프로젝트를 진행하다 보면, 개인정보와 같은 암호화가 필요한 필드들이 있습니다. AES256 관련된 코드를 구글링 해보면 대부분의 블로그에서 IV값을 고정값으로 사용하고 있습니다. 이는 권장되지 않는 방식입니다. 저희는 소나큐브를 통해 아래와 같은 메시지를 확인할 수 있었습니다. Use a dynamically-generated, random IV 왜 문제가 되는것일까요? IV를 고정된 값으로 처리하면, 입력한 값이 동일한 경우 동일한 암호화 결과를 제공합니다. 예를들면 "박태양"이라는 문자열을 암호화할때 1회차 : $2a$12$lYImjNoPVvNn30O 2회차 : $2a$12$lYImjNoPVvNn30O IV를 랜덤한 값으로 처리하면 아래와 같이 결과가 미세하게 달..
OWASP Top 10 보안 취약점과 대응 방안 안녕하세요 유저인사이트 박준호입니다. 저는 이번에 웹 개발자라면 알아야 할 OWASP Top 10 보안 취약점과 대응 방안에 대해 정리 해봤습니다. 이 취약점이 가리키는 내용들과 해당 취약점의 대처 방안을 Spring Security 기준에서 알아보도록 하겠습니다. OWASP OWASP (Open Web Application Security Project)는 웹 애플리케이션 보안을 위한 오픈 소스 프로젝트로, 매년 많은 전문가들이 참여해 웹 애플리케이션 보안 취약점을 조사하고, OWASP Top 10이라는 보안 취약점 목록을 발표합니다. OWASP Top 10은 현재 가장 흔한 웹 애플리케이션 보안 취약점들을 정리한 목록입니다. 매년 목록들이 갱신되는데, 해가 넘어가면서 사라지거나 취합되기도 합니다. O..
Spring Boot 개발 중 자주 하는 실수 모음 안녕하세요. 유저인사이트 박태양입니다. 코드리뷰를 하다보면 제가 신입시절에 했던 실수들을, 실습생 혹은 다른 개발자도 반복하고 있었습니다. 주니어 개발자분들에게 조금이나마 도움이되고자, Spring Boot 개발 중 자주 하는 실수들을 정리해보았습니다. 1. @NotNull @NonNull import javax.validation.constraints.NotNull; 엔티티나 DTO 필드의 Validation에 주로 사용됩니다. import lombok.NonNull; null이 입력되면 NPE를 발생시킵니다. 생성자를 통한 의존성 주입 시 주로 사용됩니다. 보통 IntelliJ의 자동완성 기능을 사용하다가 발생하는 실수입니다. 2. @NotNull @NotEmpty @NotBlank @NotNull ..