프로그래밍 노트

개발 환경 ㄴ springBoot : 2.4.13 ㄴ spock : 1.2 ㄴ groovy : 2.4.1 ㄴ gradle : 3.7 PR을 올리면 CI 서버에서 자동으로 테스트 코드를 수행하게 되는데, 어느날 배포나간 테스트 코드를 IDE에서 실행해보니 깨지는 것을 발견했다. 애초에 테스트가 통과되지 않는 코드인 것인데 CI 서버에서는 어찌 통과를 했던 것일까? 한참을 삽질을 하던 나는 IDE 에서의 직접 테스트코드 실행이 아닌 그래들 래퍼로 test task를 실행하였을 때 재현이 되는 것을 발견했다. ./gradlew test 실행시 테스트코드가 실행되지 않고 SUCCESS가 되는 것...! $ ./gradlw test BUILD SUCCESSFUL in 10s 테스트할 클래스를 명시적으로 지정을 하..
그래들, 메이븐과 같은 빌드툴이 나오게 된 이유는 무엇일까? 빌드툴에 대한 역사를 찍먹해보고 그래들의 장점을 알아보도록 하자아. 빌드툴이란 무엇인가? 자바 애플리케이션 개발과정을 살펴보면, 반복된 작업들이 있다는 것을 볼 수 있다. 이런 반복된 작업들 (정형화된 작업)을 자동화하기 위한 소프트웨어를 빌드툴 이라 한다. 소스코드(.java)를 컴파일하여 클래스 파일(.class) 파일 생성 코딩 규약에 맞게 작성했는지 확인 코드를 정적으로 해석 테스트를 하고 테스트 결과나 커버리지 측정 결과를 리포트로 출력 Javadoc과 같은 문서를 작성 클래스 파일과 리소스 파일을 패키징하여 압축파일을 만듬(.jar 혹은 .war) 압축 파일을 테스트 혹은 스테이징 환경에 배포 압축 파일을 저장소에 등록 으잉? 이클립..
트랜잭션은 가장 작은 작업의 단위로, 우리는 여러개의 SQL이 사용되는 작업을 하나의 트랜잭션으로 취급해야하는 경우가 존재한다. 대표적인 예가 우리가 모두 알고 있는 계좌이체 같은 경우이다. 스프링에서 트랜잭션을 위해 여러가지 기술들을 제공하고 있는데 관련해서 알아보자. 트랜잭션 경계설정 JDBC를 이용하게되면 아래와 같이 트랜잭션 경계를 설정하여 2개의 작업을 한 트랜잭션으로 묶을 수 있게 된다. Connection c = dataSource.getConnection(); c.setAutoCommit(false); // 트랜잭션 시작 (자동 커밋 옵션 false) try { // 하나의 트랜잭션으로 묶인 단위 작업 ProparedStatement st1 = c.prepareStatement("출금계좌에..
2022.03.23 - [데이터베이스 노트/데이터베이스] - Database의 레플리케이션(Replication) (Master/Slave DB) 앞에서 Master/Slave DB 환경을 구축하였을 때의 이점을 살펴보았으니 애플리케이션단에서 구현하는 방법을 살펴보자. 개발환경 : MyBatis 일단 각 DB 별 DataSource가 필요하므로 DataSoruce를 정의해 준다. ... // Master DataSource @Bean(name = MASTER_DATASOURCE) public HikariDataSource masterDataSource() throws SQLException { return new HikariDataSource(getHikariConfig(getOracleDataSourc..
Spock을 이용하여 MockBean을 생성하였는데, 정의한 행위대로 동작하지 않는 이슈를 발견했다. 간단히 작성해보자면 아래와 비스무리한 코드였다. @Autowired private SimpleMapper simpleMapper; ... @TestConfiguration def setup() { def factory = new DetachedMockFactory() @Bean SimpleMapper simpleMapper() { return factory.Mock(SimpleMapper) } } def "test"() { given: simpleService.selectSomething(_) >> "SUCCESS" expect: "SUCCESS" == simpleService.selectSomethin..
자주쓰는 명령어 $ docker login -- registry 로그인 $ docker search nginx -- 검색 $ docker pull nginx -- pull $ docker run -p 80:80 --name web nginx -- 실행 $ docker ps -- 실행중인 docker 프로세스 $ docker ps -a -- 생성/실행/중지 중인 docker 프로세스 $ docker stop web -- web 이란 컨테이너 중지 $ docker rm web -- web 이란 컨테이너를 삭제 (running 중인 컨테이너는 삭제가 불가) $ docker rm -f web -- web 실행중이어도 강제로 중지하고 삭제 $ docker rmi nginx -- nginx 이미지 삭제 $ dock..
매핑 RDB에서 테이블을 생성할 때 컬럼의 이름, 데이터 타입을 정하는 것 처럼 매핑은 RDB의 스키마와 비슷한 역할을 한다. JSON 형태의 데이터를 루씬이 이해할 수 있도록 바꿔주는 작업 전문 검색과 대용량 데이터를 빠르게 실시간으로 검색할 수 있는 이유 다이내믹 매핑 JSON 도큐먼트의 데이터 타입에 맞춰 엘라스틱서치가 자동으로 인덱스 매핑을 해주는 것 {"age": 20} → 숫자 타입은 무조건 범위가 가장 넓은 long으로 매핑시켜 불필요한 메모리를 차지하게 만들 수 있으니 기억해두자. → GET index1/_mapping mapping API 를 활용하여 인덱스 매핑값을 확인할 수 있다. 명시적인 매핑 인덱스 매핑을 직접 정의하는 것 // 인덱스 생성시 mappings 지정 PUT "인덱스명..
인덱스와 도큐먼트가 무엇인지 알아보기 전에, 엘라스틱 서치 API 관련해서 알아보자. 엘라스틱서치 요청과 응답 엘라스틱 서치는 모든 요청과 응답을 REST API 형태로 제공한다. REST API를 활용하여 엘라스틱에 데이터를 적재하거나 조회할 수 있다. 2021.12.30 - [프로그래밍 노트/인프라] - [엘라스틱 스택] 맥북 실습 환경 구성 이전에 설치한 엘라스틱서치 서버에 curl로 API 요청을 해도 되고, 키바나에서 제공해주는 Dev Tools를 이용해서 손쉽게 API를 호출할 수 있다. (Management > Dev Tools) // es_index 라는 인덱스를 생성하고, 1번 도큐먼트를 생성한다. POST es_index/_doc/1 {"name":"corn", "age": 30} //..
실습환경을 구성해보자. 엘라스틱 스택에서 필수 요소인 엘라스틱서치와 키바나를 설치해보자. 도커 실습 환경도 있으나, 나중에 구성해보기로하고 현재 PC인 맥북에서 실습환경을 구성해 보자. 엘라스틱 서치 설치 공식홈페이지에서 쉽게 다운로드받을 수 있다. 초보자들도 쉽게 다운로드 및 사용할 수 있게 가이드가 되어 있다. https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 공식사이트 정보 > 문서 > Elasticsearch Guide > Set up Elasticsearch > Installing Elasticsearch https://www.elastic.co/guide/en/elasticsearch/reference/curr..
엘라스틱 스택? 키바나 - 시각화 엘라스틱서치 - 데이터 저장 & 검색 엔진 비츠/로그스태시 - 데이터 수집 엘라스틱서치: 분산 검색 엔진 모든 레코드를 JSON 도큐먼트 형태로 입력하고 관리 검색 엔진이면서 데이터베이스이기도 함(일종의 NoSQL 이라고 생각해도..?) 키바나: 시각화와 엘라스틱서치 관리 도구 엘라스틱 스택의 UI를 담당한다. 가장 중요한 기능은 시각화와 대시보드 라인 차트, 파이 차트 등과 테이블, 지도 등의 다양한 시각화 요소들을 클릭 몇 번으로 쉽게 구성할 수 있게 해준다. 로그스태시: 이벤트 수집과 정제를 위한 도구 데이터 수집과 가공 기능을 제공하는 로그스태시를 사용하면 로그, 메트릭, 웹 애플리케이션 등 다양한 소스로부터 로그를 수집할 수 있다. 형식에 무관하게 데이터를 동적..
깡냉쓰
'프로그래밍 노트' 카테고리의 글 목록 (6 Page)