본문 바로가기

개발42

TestContainers를 Spring Bean으로 등록해보자 TestContainers 소개와 이어지는 글입니다. 기본 사용법과 단점 인터넷에 올라온 예제에서는 대부분 상속 형태로 TestContainers를 사용한다. @Testcontainers abstract class SampleContainersTest { @Container static GenericContainer postgresSQLContainer = new GenericContainer("postgres"); } public class Sample extends SampleContainersTest { @Test void test() { System.out.println("hello world!"); } } 이 방식의 단점은 여러 클래스에서 상속받은 경우, 각각의 클래스마다 docker run이 .. 2022. 9. 18.
Docker volume, mount 알아보기 참고 https://docs.docker.com/storage/volumes/ https://www.daleseo.com/docker-volumes-bind-mounts/ 컨테이너의 데이터는 컨테이너의 삭제와 함께 사라진다. 데이터를 영속성 있게 관리하기 위해서는 마운트를 통해 호스트 시스템에 데이터를 기록해야 한다. 이 방법은 bind mount, volume, tmpfs mount 세 가지로 나뉜다. bind mount 볼륨 개념에 대해 잘 모를때부터 사용하게 됐던 방법이고, 사용이 편리하여 주로 사용하게 되는 방법이다. 개인적인 경험으로는 로컬 환경에서는 바인드 마운트로 충분했다. 공식 document에 나오는 그림인데, 모르고 볼땐 전혀 도움이 되지 않았고, 알고 보니 한번에 이해되는 그림이었다... 2022. 8. 21.
TestContainers 소개 TestContainers TestContainers는 JUnit 테스트를 지원하는 Java 라이브러리이다. 테스트 시작시 도커 컨테이너를 띄워주고 테스트 종료시 컨테이너를 제거해준다. 데이터베이스를 포함한 통합 테스트를 위해 사용되며, 실제 데이터베이스 컨테이너를 띄우기 때문에 H2 데이터베이스를 사용한 테스트보다 좀 더 정확성 높은 테스트를 제공한다. 단점은 테스트시마다 도커 이미지 빌드, 컨테이너 생성, 실행, 종료, 제거가 수행되기 때문에 테스트 시간이 오래걸린다. 주의사항으로는 테스트시에 도커 이미지만큼의 메모리가 추가로 필요하다. 혼돈을 피하기 위해 역할 정의만 다시 하자면 Java 테스트코드에서 Docker Container 라이프사이클 관리라고 표현할 수 있다. 따라서 테스트, Docker.. 2022. 7. 24.
MSSQL SP(Stored Procedure) 테스트 환경 구축하기 테스트란? 테스트(test)란? : 위키백과 시험(試驗): 지식, 기술, 능력 따위를 평가하고 검사하는 일 실험(實驗): 가설이나 이론이 실제로 들어맞는지를 확인하기 위해 다양한 조건 아래에서 여러가지 측정을 실시하는 일 테스트 코드 코드가 실제로 원하는 동작을 수행하는지 측정을 실시하는 코드 테스트 방법 사람이 하기 1. 원하는 값을 DB에서 찾아서.. 2. 서비스(앱 또는 웹)에서 특정 동작 수행 3. 바뀐 결과 확인 (DB에 잘 저장됐나?) 4. POSTMAN으로 API 호출… 5. 호출 결과 확인.. (응답이 잘 왔나? DB값이 원하는대로 바꼈나?) 6. 에러났으면 다시 데이터, 코드 수정 7. 반복 코드로 하기 1. 원하는 값 세팅(코드 또는 SQL 파일) 2. 테스트 코드 작성 3. 실행 4... 2022. 7. 10.
유스콘 쿠버네티스 복습하기 - 1. 환경 설정 https://github.com/youthcon-21-k8s/k8s-init GitHub - youthcon-21-k8s/k8s-init Contribute to youthcon-21-k8s/k8s-init development by creating an account on GitHub. github.com 유쾌한 스프링방, 루기님을 비롯한 도움을 주신 모든 분들께 다시 한 번 감사드립니다. 실무에서 쿠버네티스를 사용하지 않고 있어 일부 잘못된 설명이 있을 수 있습니다. 댓글로 알려주면 감사하겠습니다. 글은 공부한 내용을 정리하는 느낌으로 편하게 작성했습니다. 실습 환경 구성하기 실습에서는 VirtualBox와 Vagrant가 사용된다. MacOS macOS의 경우 brew를 통해 설치 가능하다. br.. 2022. 6. 12.
@Cacheable은 this 호출로 동작하지 않는다. 1. 프록시 스프링의 Cache, AOP, Transaction은 Proxy를 사용합니다. 여긴 조금 더 조사가 필요하지만, 스프링에서 CGLIB 이라는, 동적으로 프록시 객체를 구성하는 라이브러리를 사용하고 있습니다. 프록시 객체는 실제 사용되는 객체를 상속받아, 원하는 작업(AOP, cache 등)을 수행하고 실제 객체를 호출하는 역할을 합니다. 프록시에 대한 예제 코드는 여기를 참고하시면 좋을 것 같습니다 2. Autowired @Autowired 어노테이션은 ApplicationContext에서 알맞은 Bean을 찾아 주입해주는 역할을 합니다. @EnableCaching 어노테이션이 사용된 경우, 의존성 주입 시에 @Cacheable이 사용된 Bean은 실제 구현체 대신 스프링에서 한번 더 감싼 .. 2021. 12. 5.
[Concurrency in go] 비정상 고루틴의 치료 Go 동시성 프로그래밍(concurrency in go) 책의 5장 비정상 고루틴의 치료 부분을 참고하여 스터디 발표용으로 작성한 자료입니다. 코드는 여기서 볼 수 있습니다. ⚠️ 주의! 함수 반환, 클로저 등의 설명이 발표자의 언어로 충분히 번역되지 않았습니다. 비정상 고루틴의 치료 치료 고루틴이 건강한 상태인지 확인하고 건강한 상태가 아니라면 재시작하는 메커니즘 치료하기 위해 생존여부를 확인하려는 목적으로 하트비트 패턴을 사용. 패턴사용시 작업을 잘 수행하고 있다는 추가 정보를 포함시켜야 함. 이 절에서는 단순화를 위해 고루틴의 작동여부만을 고려 나쁜 상태에서 스스로 회복하는 방법을 알아내기 위한 작업을 수행하는것이 고루틴의 관심사가 되어서는 안된다. 하트비트 동시 프로세스가 외부로 생존 신호를 보내.. 2021. 11. 7.
GORM 맛보기 1 - 퀵스타트 이 글은 공식 홈페이지의 Quick Start 가이드에 설명을 덧붙이는 형태로 작성되었다. ORM이란? Object Relation mapping. 객체와 db를 매핑해주는 것. 매핑된 정보를 바탕으로 자동으로 SQL을 생성해준다. 자세히 설명된 블로그가 있어 링크로 대체한다. Golang의 ORM 과거에는 XORM(솜)을 사용했으며 현재는 GORM(곰)이 많이 사용되는 것으로 보인다. Quick start gorm 공식 홈페이지에서 제공하는 quick start를 약간 변형하여 사용했다. db는 docker postgresql을 사용하였다. docker run --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=1234 -d postgres package main .. 2021. 8. 29.
Cobra를 사용하여 CLI 개발 맛보기 이 글은 Cobra Github 를 참고하여 작성했습니다. 최근에 디스코드 봇을 개발할 일이 있었는데, 명령어는 어떤 형태로 내부적으로 구현하고 실행하는 것이 좋을까?를 고민하다가 다른 사람들은 어떻게 만들었을지 궁금했습니다. Saturday night 스터디를 통해 알게된 Cobra가 명령어와 관련된 유명한 예시라고 생각되어 사용해보고, 다른사람들의 코드를 찾아보기로 했습니다. 😀 Cobra와 CLI Command line interface는 간단히 말해 터미널에 텍스트를 입력하여 명령을 실행하는 방식을 의미합니다. 예를 들면 아래와 같은 형태로 명령을 실행합니다. docker start application git init 다른 패키지의 도움을 받고 싶지 않다면, os.Args 에서 매개변수를 직접 .. 2021. 8. 1.