Spring MVC Custom Validation 일반적으로, 사용자 입력 검증이 필요할 경우 Spring MVC는 미리 정의된 검증자를 제공한다. 하지만, 좀 더 특정한 유형의 입력을 검증해야 할 경우 사용자 정의 검증 로직을 자체적으로 생성할 수 있다. . Dependency Spring Boot를 사용한다면 spring-boot-starter-web 라이브러리에서 hibernate-validator을 의존하고 있으므로 추가할 필요는 없다. org.hibernate:hibernate-validator . Custom Validation 들어가기 전에 검증 로직 구현을 위해 필요한 ConstraintValidator 인터페이스를 살짝 확인해 보자. 주어진 객체 유형 T에 대하여 주어진 제약 조건 A를..
11ST MSA 11번가 Spring Cloud 기반 MSA로의 전환 - 지난 1년간의 이야기 영상을 정리한 글이다. . 입사 전에 이미 본 영상이긴 하지만(당시에는 이해가 되지 않았던 부분이 많았다는 사실..), 입사 후 1년 반이 지난 지금은 입사 전보다는 이해가 잘 될 것이라는 기대를 안고.. 지금으로부터는 약 5년 전 영상이지만 회사 기술을 다시 한번 복기하고자 새로운 마음으로 정리를 해보려고 한다. 💪🏼 Before MSA 도입 전의 모습. 초대형 거대 Monolithic System 낙후된 S/W stack 거대한 라인의 공통 모듈 . 이로 인해.. 많은 개발팀의 코드를 한 번에 배포 한 명의 실수로 모든 코드를 롤백 다른 팀의 코드에 영향 범위를 알 수 없으므로 버전업의 어려움 거대한 공통 ..
SocketUtils.findAvailableTcpPort() BindException: 주소가 이미 사용 중입니다 Jenkins Build periodically Schedule 기능을 활용하여 스프링 배치를 주기적으로 빌드해 주고 있다. . 그러던 어느 날..🌅 Jenkins 에 새로운 배치 아이템이 추가될수록 아래 에러가 종종 발생하기 시작했다. org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server ... Caused by: java.net.BindException: 주소가 이미 사용 중입니다 . 로그를 보아하니.. 포트는 랜덤으로 할당되고 있는 것 같아서 관련 코드를 확인해 보았다...
Nginx 무중단 배포 System Architecture . Install Nginx # 도커 이미지 가져오기 $ docker pull nginx # nginx 서버 기동 $ docker run -itd -p 80:80 -v /home/ec2-user/app/nginx:/usr/share/nginx/conf --restart=always --name nginx -u root nginx # 가동 서비스 확인 $ docker ps -itd i: t 옵션과 같이 사용. 표준입력 활성화. 컨테이너와 연결되어있지 않더라도 표준입력 유지 t: i 옵션과 같이 사용. TTY 모드로 사용하며 bash 사용을 위해 반드시 필요 d: 컨테이너를 백그라운드로 실행. 실행시킨 뒤 docker ps 명령어로 컨테이너 실행 확..
Docker & Jenkins 배포 자동화 구축 System Architecture . Install Docker # Install $ sudo yum update -y # 인스턴스에 있는 패키지 업데이트 $ sudo yum install -y docker # docker 설치 $ docker -v # 버전 확인 # Setting $ sudo systemctl enable docker.service # 재부팅 시 docker 자동 실행 설정 # Start $ sudo systemctl start docker.service # docker 서비스 실행 $ systemctl status docker.service # docker 서비스 상태 확인 . Install Jenkins docker search, p..
AWS EC2 & RDS Free Tier 구축 System Architecture . AWS EC2 & RDS 구축 AWS EC2 & RDS 구축 방법은 향로님의 블로그 가 참고하기 좋은 것 같다. 2023년 10월 기준 UI 가 블로그 이미지와 약간 다르긴 하지만 기본적인 설정은 동일하다. . 그 밖에도 자세한 구축 방법은 많은 블로그에서 다루고 있어서 구축 과정에서 참고하면 좋을 내용들을 다뤄보려고 한다. . AWS 프리티어 무료 사용량 EC2(Amazon Elastic Compute Cloud) : 클라우드에서 제공되는 크기 조정 가능한 컴퓨팅 월별 750시간 무료 (EC2 인스턴스 하나를 풀로 돌려도 남는 시간) EC2 인스턴스 하나당 750시간 가동이 기준이므로, EC2 인스턴스 두 개를 돌린..
Java CompletableFuture java 5에서 Future interface 는 비동기식 연산이 기능하도록 추가되었지만, 계산을 결합하거나 발생 가능한 오류를 처리할 수 있는 방법은 없었다. . java 8은 Future interface, CompleteStage interface 를 구현한 CompletableFuture class 를 선보였다. CompletableFuture 클래스는 다른 단계들과 결합할 수 있는 비동기 연산 단계에 대한 계약을 정의한다. 추가로, 비동기 연산 단계 및 오류 처리를 위한 약 50가지의 다양한 방법을 제공한다. CompletableFuture with Encapsulated Computation Logic public static CompletableFut..
Java Garbage Collection(GC) Effective Java 3/E 책을 보면서 GC에 대한 이야기가 많이 언급되었다. 한 번쯤 공부해 두면 도움이 될 것 같다는 생각에 관련 기사를 읽어보며 정리를 해보았다. ... 애플리케이션에서 성능의 가장 중요한 측면 중 하나는 올바른 GC를 선택하고 이를 최적화는 것이다. 최적의 GC 선택은 각 애플리케이션의 동작 및 요구사항에 따라 달라지므로 자바 개발자는 GC를 이해하는 것이 중요하다. Memory management and avoiding memory leaks 자바는 객체 사용 후 메모리에서 각 객체를 제거하는 자동 GC 실행 애플리케이션에서 생성된 자바 객체는 힙이라는 메모리 세그먼트에 저장 애플리케이션이 새 객체를 생성하고 힙이 가득 차..