본문 바로가기

전체 글11

Embeddable 객체의 필드가 모두 null인 경우 인스턴스화 하지 못하는 이슈 문제 상황 객체를 생성하고 업데이트하는 로직에서 NulPointException이 발생했다. 정확히는 업데이트를 위한 조회 과정에서 예외가 발생했다. 원인 특정 객체의 embeddable 객체의 필드가 모두 null인 경우 hibernate는 객체의 필드뿐만 아니라 객체 자체를 null로 반환한다고 한다. 해당 객체는 non-null이었기에 조회과정에서 예외가 발생했다. 해결방법 1 Embedded 객체에 null을 허용한다. 해결방법 2 Embedded 객체에 non-null 필드를 추가한다. 해결방법 3 hibernate.create_empty_composites.enabled hibernate 가이드 문서에서 이 옵션을 키면 가능하다고 한다. 하지만 실험적 기능으로 운영 환경에서 사용을 권장하지.. 2023. 6. 26.
당근 SRE 밋업 2회 세션 정리 - 당근페이, 6개월 간의 인프라 구축 이야기 늦었지만 당근 SRE 밋업의 세션을 보고 떠오른 생각들을 정리했다. 당근페이, 6개월 간의 인프라 구축 이야기 당근페이 인프라팀에서는 6개월간 새로운 인프라를 구축하면서 아래의 6가지 포인트들을 고민했다고 한다. 1. 로그인 시스템 구성 2. 서버 접근 3. 애플리케이션 구성 4. 배포 파이프라인 5. 관측 시스템 6. 성능 테스트 1. 로그인 시스템 로그인 시스템의 경우 아래의 조건들을 만족하는 것을 최우선으로 고려했다. - 계정 별로 환경이 분리되어야 한다. -> 개발 계정, 운영 계정 분리 - 로그인 할 수 있는 창구가 최소화 -> 로그인은 대표 계정 하나에서만 - 계정 탈취 시 여파를 최소화 -> 탈취되어도 볼 수 있는 정보가 없도록 => 로그인을 위한 security 계정이 별도로 있는 게 인상.. 2021. 12. 24.
[Logging] Springboot에서 logback 커스터마이징하기 Logging이란? Logging이란 정보를 제공하는 일련의 기록인 로그(log)를 생성하도록 시스템을 작성하는 활동을 말한다. Logging 라이브러리 예전에는 log4j를 많이 사용했는데 구조적인 문제 등으로 현재는 업데이트를 중단했다. 최근에는 log4j를 개선한 logback과 log4j2를 주로 사용한다. 프레임워크에서는 애플리케이션 개발자가 직접 로깅 라이브러리를 선택할 수 있도록 logback이나 log4j2와 같은 실질적인 구현체가 아닌 로깅 추상화 라이브러리를 제공한다. Spring은 예전에 로깅 추상화 라이브러리로 JCL(Apache Commons Logging)을 선택했었다. 하지만 JCL의 클래스 로더나 메모리 누수 등의 문제로 스프링 3.0부터는 JCL을 SLF4J로 교체하였다. .. 2020. 6. 14.
[우아한테크코스] 레벨1 - 자동차 경주게임에서 인터페이스를 통해 테스트 가능한 코드 만들기 우아한테크코스(이하 우테코) 레벨1의 2주차 미션은 자동차 경주게임이였습니다. 프리코스 때의 2번째 미션과 동일한 내용이였는데요. 우테코에서 배운 내용을 토대로 프리코스 때 제출한 코드를 보다 객체지향적으로 리팩토링 해보겠습니다. 자동차 경주게임의 요구사항 중 한가지는 '1~9까지의 랜덤한 정수를 뽑아 4이상일 경우 전진한다.'입니다. 아래의 코드는 프리코스 때 제출한 코드의 일부 입니다. public class Cars { public void play() { for (Car car : cars) { if (getRandomNumber() >= 4) { car.proceed(); } } } private int getRandomNumber() { return new Random().nextInt(MAX.. 2020. 4. 16.