본문 바로가기

전체 글265

Jenkins 동시 빌드 제한하기 지난주 개발 서버 배포 후 개발 서버에 접속이 안 된다는 연락이 와서 서버를 확인해 보니 정말 서버에 들어가지지 않았다. 톰캣이 제대로 실행되고 있지 않았는데 이는 젠킨스에서 배포를 두 번 하면서 파이프라인 마지막 스텝인 서버 재시작이 두 번 이뤄지면서 생긴 일이었다. 현재 해당 프로젝트(잡)는 깃허브에 폴링 방식으로 최신 커밋을 확인하고 새로운 커밋이 제출됐다면 빌드를 실행한다. 그런데 어찌 된 일인지 같은 커밋인데도 불구하고 다른 커밋으로 인식하여 새로운 빌드를 수행했다. 그러다 보니 위에서 언급한 서버 재시작 스텝이 겹쳐서 실행돼 버린 것이다. 같은 커밋을 새로운 훅으로 인식한 문제는 일단 차치하고 이미 빌드가 시작된 프로젝트에서 또다시 빌드가 이뤄질 수 있는 것은 문제다. 하나의 작업에 대해 두 .. 2024. 5. 15.
enum 어떻게 잘 활용할까? 자바 1.5 버전부터 도입된 enum은 여러 상수들을 한 곳에서 정의하기 위해 사용하는 타입이다. 벌써 자바 21 버전이 등장했지만 아직도 enum의 매력을 모르는 이들을 위해 enum을 소개하려고 한다. 먼저, enum의 특징에 대해 간단히 정리하고 활용법을 설명하겠다. Enum의 특징enum은 상수 이름, 멤버 변수, 생성자, 메서드로 구성된다.public enum Sns { // 상수의 이름과 필드에 해당하는 값들 NAVER("naver", "네이버"), KAKAO("kakao", "카카오"), GOOGLE("google", "구글"), APPLE("apple", "애플"), X("x", "트위터"), INSTAGRAM("instagram", "인스타그램"); .. 2024. 5. 8.
Concurrency Issue and Thread-safety 자원 공유 시 발생하는 문제인 동시성 문제(concurrency issue)에 대해 알아본다. 여러 스레드 및 애플리케이션에서 하나의 자원을 동시에 사용하려고 하면 경쟁 상태(race condition)가 발생한다. 이를 동시성 문제라고 하고 이런 상황이 발생되지 않는 성질을 스레드 안전성(thread-safety)라고 한다. 이를 달성하기 위한 방법에 대해 살펴보려고 한다. Java API를 이용한 해결 방안 - synchronized - 메서드나 코드 블록에 synchronized 예약어를 사용하여 락을 걺 - 하나의 프로세스에서만 락이 가능하고 여러 프로세스 또는 앱에서 접근 시 사용 불가 - 따라서, 여러 애플리케이션 혹은 서버가 데이터에 접근해야 하는 실무 환경에서는 거의 사용되지 않음 Data.. 2024. 4. 6.
스프링 국제화(Internationalization, I18N) 스프링 웹 MVC는 국제화를 단순화하도록 지원해 준다. 국제화를 위해서는 LocaleResolver, MessageSource, LocaleChangeInterceptor의 빈 등록이 필요하다. LocaleResolver는 사용자의 로케일을 얻는다. AcceptHeaderLocaleResolver - 요청의 Accept-Language 헤더 상의 로케일을 반환한다. SessionLocaleResolver - 세션에 저장된 로케일을 반환한다. FixedLocaleResolver - 고정된 기본 로케일을 반환한다. MessageSource는 현재 로케일에 맞는 메시지를 가져온다. ResourceBundleMessageSource - 특정 빈 이름으로 자원 번들에 접근하는 MessageSource 구현체 Re.. 2024. 4. 2.
728x90