목록TIL (45)
사적인 개발자

grails에 장착되어있는 Spock를 활용해 TDD 샘플코드를 테스트 해 보았다.grails의 경우에는 도메인을 만들면 테스트 파일을 스캐폴딩을 통해 같이 만들어주는데,아직 실무에서는 거의 쓰지 않고있어 성능 확인차, 그리고 TDD는 어떻게 진행되는건가 보고싶어 테스트를 진행했다.TDD TDD 실행 순서 1. Red: 실패하는 테스트를 먼저 작성한다 2. Green: 테스트를 통과시키기 위한 최소한의 코드를 작성3. Refactor: 코드를 리팩터링하며 구조를 개선 생성한 파일- Book.groovy- BookService.groovy- BookServiceSpec.groovy Book.groovypackage testclass Book { String title Date dueDate}..

1탄 : [Linux] Fluentd 로그파일 자동 모니터링 스크립트 crontab 적용기2탄 : [Linux] Fluentd 로그파일 자동 모니터링 스크립트 crontab 적용기 - 후기 지난이야기 요약1. fluentd 로그 자꾸 쌓이는거 귀찮음2. 자동 리셋 쉘 만듦3. crontab 적용시킴 (월수금 10:00)4. cron 안돌아서 원인파악함(경로명 문제) 2탄에서 끝내고 싶었는데, 후기의 후기까지 나와버렸다. 월/수/금 10:00 cron으로 적용해놓았기에, 오늘(금) 10시에 쉘이 잘 돌아가는지 모니터링을 하고있었는데.. 문제 발생 - fluentd.log가 삭제되지 않는다?! 로그는 성공으로 잘 찍히는데, 파일이 삭제되지 않은것이 아닌가!# fluentd_filesize_check.log..

1탄 : [Linux] Fluentd 로그파일 자동 모니터링 스크립트 crontab 적용기1탄 세 줄 요약1. fluentd 로그 자꾸 쌓이는거 귀찮음2. 자동 리셋 쉘 만듦3. crontab 적용시킴 (월수금 10:00) 정상 작동을 확인한 후, 첫 crontab이 돌아가는 날이 오늘 오전 10시였다. 로그 모니터링을 하려 준비를 다 하고있었는데 이게 왠걸, 10시 1분이 넘어가는데 로그가 조금도 쌓이지 않는 것이 아닌가! 실패했으면 실패했다고라도 떠야하는데, 전혀 쌓이지 않는 것으로 보아 crontab 자체가 쉘을 돌리지 못하는 것으로 보였다. 우선 생각해볼 수 있는 원인은 크게 2가지.1. 파일 실행권한이 부여되지 않았는지?2. 쉘 로직 중 cron으로 돌릴 수 없는 부분이 있는지? 일단 원인 1..

0. 문제 설명SSH 실습을 위한 문제입니다. 문제 서버에 SSH로 접속하세요!플래그의 형식은 DH{...} 입니다.ssh withid: challpassword: dhbgssh# 서버정보Host: host8.dreamhack.gamesPort: 23846/tcp → 31337/tcp 1. 풀이일단 cmd로 ssh 접속을 붙어줬다. cmd에서 ssh 접속 방법은 아래와 같다ssh [사용자 ID]@[접속하려는 컴퓨터의 IP주소 또는 도메인]# 예시ssh userId@127.0.0.1 그런데 이 문제의 경우 port번호가 따로 설정되어 있기 때문에 해당 포트번호도 같이 작성해주어야하는데 이 경우 명령어에 -p가 추가된다.ssh -p 22 [사용자 ID]@[접속하려는 컴퓨터의 IP주소 또는 도메인]# 예시s..

지난 화 줄거리 요약1. 배포할때마다 서버에서 지난 톰캣 로그 압축하는거 귀찮음2. Jenkins 에서 돌리는 로그 자동 압축 쉘 만듦3. QA 테스트 완료됨 1탄 : [CI/CD] tomcat 배포 후 자동 압축 시스템 (feat.Jenkins, linux) 지난 시간에 QA서버에서 자동압축 쉘이 잘 돌아가는건 확인하였으니이젠 Live 적용으로 넘어갈 시간이다! 현재 회사에서 사용하는 Live 서버는 프론트 5대, 백엔드 5대이고기존 배포시에는 pipeline을 사용해서 배포를 진행하고있었음.해당 설계를 비슷하게 가져와서 동시배포로 진행했음. 일단 QA를 성공했다고 해서 Live에서 쉘을 냅다 돌릴 순 없으니,아래와 같은 순서로 Live 적용을 진행했다. 자동압축 쉘 Live 적용 순서1. 자동..

요새 Dreamhack 문제들 하나씩 풀어보는 재미가 쏠쏠한데 꽤 구성을 잘해놓은것같다!지금은 워게임을 해보고있는데, 나름 잘 푼것같은 문제가있어 정리 ㄱㄱ 문제 설명리눅스 명령어를 실행하는 웹 서비스가 작동하고 있습니다.해당 웹 서비스의 코드가 첨부파일로 주어집니다.flag.txt 파일을 찾아 출력하여 플래그를 획득하세요!플래그 형식은 DH{...} 입니다. 문제 파일 내용#!/usr/bin/env python3import subprocessfrom flask import Flask, request, render_templateAPP = Flask(__name__)@APP.route('/', methods=['GET', 'POST'])def index(): if request.method == '..

기:현재 우리회사 프로세스에서는 tomcat 배포를 할때, Jenkins 빌드 -> 빌드후 조치로 서버 내 배포쉘 돌림 -> 배포쉘 success시 jenkins 배포완료로 간다.이때 배포쉘 내에서 usr/local/tomcat 하위에 기존의 /logs 폴더에 있던 애들을 싹 모아 logs_{배포날짜시간} 폴더를 만들고배포가 끝난 후에 수동으로 bzip2 를 해준다. 뭐 사실 한 번에 배포되는 서버가 두자리수를 넘어갈일은 거의 없어서,서버마다 들어가서 압축해주는게 그렇게까지 큰 공수는 아닌데내 성격상 서버에 쓰잘데기없는 용량차는 꼴을 못보다보니 용량확보에 집착아닌 집착을 좀 하게되어서(서버 용량차서 셧다운되는 사이렌소리를 새벽+주말에 몇번 들으면 이렇게된다...^^....)대체로 도맡아하다보니 좀 귀찮아..
정규화 : 테이블을 효율적으로 저장하기 위한 것 1. 정규화의 개념- RDBMS의 목적 : 속성을 모아서 그룹화하고, 릴레이션으로 생성 - 속성의 그룹화 : 모델링모델링이 잘못되면 효율성이 무척 떨어짐그럼 효율성은 어떤 기준으로 판단하는가? 정규화의 기준으로 해보자고 - 삽입/삭제/수정/이상- 데이터가 불필요하게 중복되는 릴레이션은 나쁘다 - 정규화 : 릴레이션을 무손실분해(재구성)하는 과정 2. 정규화의 방식 - 함수적 종속성 (FD Functional Dependency)릴레이션의 모든 인스턴스에 대해 적용되는 제약조건- X의 값들이 단 하나의 Y값과 연관되면, 릴레이션 R의 속성 X는 속성Y를 함수적으로 결정 - 함수적 종속성을 이용해 수퍼키 및 후보키 증명이 가능수퍼키 : 속성K가 릴레이션 전..
너무 간단한데 너무 중요한걸 깨달음 기:세션시간을 늘려달라는 유저요청으로 세션시간만료를 어디서 잡고있는지 찾으셨는데몇가지 해결방안 중, 서버의 tomcat 설정을 바꾸는 아이디어가 있었다.web.xml session-timeout 과 context.xml의 maxInactiveInterval 값을 변경. 60 그런데... 이 tomcat 설정을 소스코드에서는 찾을수가 없었고배포서버의 Tomcat의 1. conf/web.xml2. conf/context.xml경로에서 파일을 찾을수있었다. 왜? 소스코드의 tomcat 설정과 서버의 tomcat 설정이 차이가 나는가?!🥴 승:Spring MVC 소스코드에는 web.xml 파일은 없고, context.xml 파일..

발단:게임사 런쳐기능을 맡아 진행하는도중, 레지스트리에는 대체 언제 game사가 심어놓은 프로토콜이 저장되는건지 궁금해짐 전개:Setup.exe 파일을 분해하기위해 dotPeek켬. 그러나 바이너리로 신명나게 깨짐=> dotPeek는 .NET 기반의 실행 파일 (즉, C# 등)만 제대로 분석=> 설치 프로그램은 보통 NSIS, Inno Setup, InstallShield, C++ 기반 인스톨러인 경우가 많대요=> 알아보려면? Setup.exe notepad로 열고, 일단 검색날려본다설치 프로그램찾을 수 있는 문자열NSISNullsoft Install SystemInno SetupInno Setup Setup Data , This installation was built with Inno SetupIn..