전체 글60 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. 글또 7기를 시작하는 글 7기 시작을 굉장히 기다렸는데 드디어 시작되었다! 글또 페이스북 글또 노션 페이지 나는 이 전 6기에 글또를 처음 진행했었고, 7기는 두 번째 이다. 글또 7기는 5월 1일 OT를 시작으로, 5월 15일부터 10월 16일까지 2주에 1회씩 글을 작성하는 방식으로 진행된다. 왜 신청했나 6기에서의 경험이 너무 좋았다. 덕분에 글쓰기에 관심을 갖고 노력해볼 수 있었고, 좋은 인연을 만날 수 있었다. 6기가 끝나자마자 멈춰버린 나의 블로그가 아쉬웠다. 약간의 강제성을 더해 다시 한번 힘내보고자 신청하게 되었다. 이전엔 티스토리 블로그를 통해 글을 썼는데, 불편한 점이 너무 많아 벨로그로 이사해볼까 하고있다. 6기에서 아쉬웠던 점들과 7기에서 하고싶은 것들 가장 큰 아쉬움으로, 6기 다짐글을 작성하지 않았다. .. 2022. 6. 12. 유스콘 쿠버네티스 복습하기 - 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. 2021년도 회고 나에게 정말 많은 일이 있었던 2021년이 지나갔다. 나는 어떤 고민들을 했었고 어떤 부분이 발전했을까? 남들에게 나에 대해 얘기할 때 무난한 삶을 살아왔다고 했었다. (사실 내가 내 삶에 무관심했을지도 모른다) 올해는 평소와 같지 않았고, 스토리가 잔뜩 있다. 처음으로 하는 1년치 회고이기 때문에 어떤 방법이 효율적일까 고민해봤는데, 시간순으로 대표적인 키워드를 적고 기억을 되살리는 식으로 작성했다. 그러다 동일한 시간대에 두 가지 이상의 이벤트가 발생하는 경우 글의 흐름을 방해하거나 적는걸 포기해야 했다. 이 문제를 해결하기 위해 이동욱님과 한정수님의 회고 작성 방식을 참고해서 키워드 단위로 재작성했다. 2020년 말에 퇴사를 하고 백수인 채로 2021년을 맞이했었다. 2020년 회고가 따로 없었고,.. 2022. 1. 2. @Cacheable은 this 호출로 동작하지 않는다. 1. 프록시 스프링의 Cache, AOP, Transaction은 Proxy를 사용합니다. 여긴 조금 더 조사가 필요하지만, 스프링에서 CGLIB 이라는, 동적으로 프록시 객체를 구성하는 라이브러리를 사용하고 있습니다. 프록시 객체는 실제 사용되는 객체를 상속받아, 원하는 작업(AOP, cache 등)을 수행하고 실제 객체를 호출하는 역할을 합니다. 프록시에 대한 예제 코드는 여기를 참고하시면 좋을 것 같습니다 2. Autowired @Autowired 어노테이션은 ApplicationContext에서 알맞은 Bean을 찾아 주입해주는 역할을 합니다. @EnableCaching 어노테이션이 사용된 경우, 의존성 주입 시에 @Cacheable이 사용된 Bean은 실제 구현체 대신 스프링에서 한번 더 감싼 .. 2021. 12. 5. 2021년 11월 이달의 생각 키워드 (이직, 3년차, 레거시, 테스트, 외로움) 이직 개발자에게 이직은 직업 특성이 된 것 같다. 인력 수급이 힘든 중소기업 입장에서는 개발자의 이직, 즉 사람의 이탈이 큰 짐이 될 테지만 그럼에도 불구하고 사람은 적당히 순환해야 한다. 이직을 통해 잃는 점들은 무엇이 있을까? 자리를 오래 지킴으로 인해서 얻는 장점들이 있다. 개발 히스토리를 파악하고 있고, 개발 도메인에 대한 이해가 깊어지며, 주변 동료들과의 유대감이 깊어질 수 있다(모두 그런것은 아니다) 그래도 이직을 해야하는 이유는? 한 자리에 오래 있다 보면 익숙함으로 인해 변화하지 않는 것, 개선할 수 있음에도 유지하는 것들이 생긴다. 의식적인 노력을 한다고 해도 바쁘다는 이유로 넘어가다보면 익숙해져 버린다. 극단적으로 고여버리면 발전하지 않는 조직이 될 수도 있다. 왜? 지금 상태로도 잘 .. 2021. 11. 21. 이전 1 2 3 4 5 6 7 다음