개념 모델 vs 논리모델 vs 물리모델 개념 모델이란? 데이터 모델의 첫 단계로 고객의 요구사항을 수집, 분석해 전체적인 모양을 결정짓습니다. 이 단계에서는 전체 모델에서 중요한 골격이 되는 엔티티와 관계 위주로 모델링이 됩니다. 엔티티, 관계 위주의 모델링을 통해 전반적인 골격을 파악하는데 중점을 두기 때문에 데이터 모델의 속성 표현을 불필요할 수도 있습니다. 사용자가 요구하는 데이터의 범위 및 구조를 용이하게 확인이 가능하며 사용자와 함께 검토를 통해 신규 시스템에 해당 요구사항을 반영할지 여부를 결정하여 개발범위를 정하는데도 도움을 줍니다. 논리 모델이란? 데이터베이스 설계 프로세서의 Input으로 비지니스 정보의 구조, 규칙등을 명확하게 표현해야 합니다. 즉, 데이터 모델링이 최종적으로 완료되어 ..
Backend
Blue/Green 무중단 배포를 진행해보자. 무중단 배포란? 예전에는 배포라고 하면 팀의 아주 큰 이벤트로 배포날을 결정해 새벽시간에 남아서 배포를 해야했습니다. 잦은 배포가 있다면 매 새벽마다 남아서 배포를 해야 했습니다. 이럴때 치명적인 문제가 발견되면 새벽에 문제 해결 후에 아침이 되면 긴급 점검을 올리고 수정을 해야 했습니다. 이렇게 배포가 서비스를 정지해야만 가능할때는 롤백조차 어렵기 때문에 고생이 많았습니다. 그래서 서비스를 정지시키지 않고 배포하는 방법을 찾기 시작했습니다. 이렇게 서비스를 정지시키지 않고 배포를 계속하는 것이 무중단 배포라고 합니다. Blue/Green 이란? 가장 간단하고 쉽게 무중단 배포를 구현할 수 있습니다. 기본적으로 릴리즈와 관련된 모든 시간을 줄이기 위한 기술입..
정적분석도구 SonarQube 정적분석도구란? 정적분석이란 프로그램의 실행 없이 코드를 분석하는 것 입니다. 비용이 추가로 들지 않으면서 코드의 품질을 검토하고, 잘못된 부분을 옳은 방향으로 고칠 수 있도록 도와주는 다양한 도구들을 말한다. 개발자의 역량 향상과 미래의 장애 발생 확률을 줄이는 역할을 한다. 잘 알고 있는 JavaScript의 ESLint나 Prettier도 정적분석도구로 불린다. 또한 테스트 커버리지를 확인할 수 있는 Jacoco도 정적분석도구라 불린다. SonarQube란? 코드를 분석하여 중복, 테스트 커버리지, 코드 복잡도, 버그, 보안 취약성 등을 리포팅 해주며 IDE, 빌드도구, CI 도구와 통합하여 사용해 분석할 수 있다. 위와 사진처럼 여러가지의 도구를 이용해 코드 품질을 ..
Spring에서으로 Log를 Slack으로 받아보기 예제코드 Log를 사용하는 이유 최소한으로 로그는 서비스 동작 상태를 파악하고 장애를 파악하기 위해 사용합니다. 이러한 로그들은 분석하면서 서비스 지표 확인, 트랜잭션, 성능, 버그 등을 다양한 정보로 확인이 가능합니다. LogBack이란? Log를 효율적으로 관리하기 위해서 사용하는 것입니다. 현재 core, classic, access의 세가지 모듈로 나눠져 있다. 코어 모듈은 다른 두 개의 모듈을 위한 기반이며, classic 모듈은 코어를 확장하는데 사용하며 access는 서블릿 컨테이너와 통합되어 HTTP-access 로그 기능을 제공한다. 스프링에서는 기본적으로 logback을 사용한다. Spring Boot Base Logback Sprin..
Jacoco 설정하기 예제코드 Jacoco란? Java 코드의 커버리지를 체크하는 라이브러리다. 커버리지 결과를 눈으로 보기 좋도록 html, xml, csv 같은 report로 생성한다. 또한 테스트 결과가 내가 설정한 커버리지 기준을 만족하는지 확인하는 기능도 있다. JaCoCo 플러그인 추가 apply plugin: 'jacoco' jacoco { toolVersion = '0.8.6' // 현재 최신 버전 } 버전을 명시하면 jaCoCo를 사용할 수 있다. 이걸 추가하고 gradle 새로고침을 실행하면 아래와 같이 jaCoCo Task가 생성된다. JaCoCo Gradle Task jacocoTestReport 커버리지 결과를 사람이 읽기 좋은 형태의 리포트(html,..
[프로그래머스] 이름이 없는 동물 아이디 문제 설명 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다. NAME TYPE NULLABLE ANIMAL_ID VARCHAR(N) FALSE ANIMAL_TYPE VARCHAR(N) FALSE DATETIME DATETIME FALSE INTAKE_CONDITION VARCHAR(N) FALSE NAME VARCHAR(N) TRUE SEX..
[프로그래머스] 이름이 있는 동물 아이디 문제 설명 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다. NAME TYPE NULLABLE ANIMAL_ID VARCHAR(N) FALSE ANIMAL_TYPE VARCHAR(N) FALSE DATETIME DATETIME FALSE INTAKE_CONDITION VARCHAR(N) FALSE NAME VARCHAR(N) TRUE SEX..
Spring Logback profile 조합 전략 예제코드 이전 코드 최근 프로젝트를 진행하면서 Logback 관련 공부를 하다가 조합을 이용한 Profile 전략 방식을 발견했다. 전에는 아래와 같이 각 프로파일마다 파일을 만들었고, 사실 dev와 prod는 슬랙 알림 방식과 파일 방식은 중복이였다. logback-local.xml logback-dev.xml ${LOG_PATH}/logback/logback_dev_${dailyLog}.log [%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n ${LOG_PATH}/logback/logback_dev_${dailyLog}.%d\(.%i\).log 100MB [%d{..
Spring Boot Base logback LogBack이란? Log를 효율적으로 관리하기 위해서 사용하는 것입니다. 현재 core, classic, access의 세가지 모듈로 나눠져 있다. 코어 모듈은 다른 두 개의 모듈을 위한 기반이며, classic 모듈은 코어를 확장하는데 사용하며 access는 서블릿 컨테이너와 통합되어 HTTP-access 로그 기능을 제공한다. 스프링에서는 기본적으로 logback을 사용한다. base.xml include는 다른 로그 관련 설정 파일을 불러오기 위해 사용한다. property는 값을 변수처럼 사용하기 위해 사용한다. 현재 이 파일을 보면 defaults.xml과 console.appender.xml, file-appender.xm의 파일을 불러오고 있으며..
[프로그래머스] 여러 기준으로 정렬하기 문제 설명 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다. NAME TYP NULLABLE ANIMAL_ID VARCHAR(N) FALSE ANIMAL_TYPE VARCHAR(N) FALSE DATETIME DATETIME FALSE INTAKE_CONDITION ARCHAR(N) FALSE NAME VARCHAR(N) TRUE SEX_UP..