본문 바로가기

프로그래밍49

LocalDateTime 사용 시 주의할 몇몇 오류사례 오늘은 프로젝트를 진행하다가 당황스러운 실수를 해서, 블로그에 간단히 기록해보려고 한다. 요약하자면 다음과 같다. LocalDateTime.MIN / LocalDateTime.MAX 값이 얼마인지 미리 알아두자 MySQL의 timestamp의 범위를 미리 숙지하자 LocalDateTime의 MIN/MAX 전기차 충전소 정보 프로젝트를 진행하던 중, 문자열로 된 날짜/시간 정보를 받을 일이 생겼다. 전기차 충전기의 최근 충전 시간 정보였는데, LocalDateTime.parse로 파싱하다 보니 에러가 났다. 알고 보니 공공 API의 해당 필드에 빈 값이 들어가는 경우가 존재했던 것이다. 찜찜하지만 그렇다고 API를 바꿀 수는 없으니...임시변통으로 다음과 같은 방법을 취했다. (...) if(Objects.. 2021. 10. 27.
2021 라인 공채 1차면접 후기 이 글은 라인 채용을 준비중이거나, 혹은 추후에 참고하실 분을 위해 작성되었다. 나 역시 준비하며 좋은 글을 읽으며 도움을 많이 받았고, 한편으론 그래도 후기가 많이 부족해 답답함을 느꼈기 때문이다. 다만 정확한 내용을 모두 올릴 수는 없으므로, 대략적인 이야기만 하려고 한다. 일정 2021 라인 공채의 일정은 위와 같다. 지원서 접수때에는 도움이 되도록 각 부서를 소개하는 영상을 Line Careers 유튜브 채널에 업로드해 주셨는데, 부서를 선택하는데에 있어 도움이 많이 되었다. 혹시 라인에 지원하게 된다면 꼭 미리 보고 가기를! 흥미로운 기술적 도전에 대한 이야기도 많고, 면접자가 아닌 한명의 팀원으로서 어떤 사람과 일하고 싶은지 구체적으로 이야기해 주셔서 좋았다. 서류 질문은 다른 회사와 크게 차.. 2021. 10. 22.
[JPA] 비관적 락과 낙관적 락, 트랜잭션의 격리 수준 얼마 전 면접에서 질문을 받았지만 전혀 몰랐던 비관적 락과 낙관적 락 개념. 다행히 김영한님의 자바 ORM 표준 JPA 프로그래밍에서 관련 내용을 소개하고 있어, 참고하여 정리해 보았다. 이 글은 다음 내용을 다룬다. 트랜잭션의 격리에 대해 알아본다. 낙관적 락과 비관적 락에 대해 알아본다. 트랜잭션과 격리 수준 트랜잭션은 ACID라고 하는, 원자성, 일관성, 격리성, 지속성을 보장해야 한다. 그 중 격리성의 경우, 동시에 실행되는 트랜잭션들이 서로에게 영향을 끼치지 못하게 격리한다 라는 의미를 가진다. 사실 이를 제일 완벽히 구현하는 방법은 트랜잭션이 여러 개일때 순차적으로 실행하는 것이지만, 이는 성능에 너무 큰 영향을 준다는 점. 그래서 트랜잭션의 격리는 4단계로 나눠서 수행하게 된다. 이에 대해서.. 2021. 10. 15.
DB 커넥션 풀과 HikariCP 며칠 전에 면접을 봤는데, 거기서 커넥션 풀에 대한 질문이 나왔다. 그런데 대답을 잘 못해서 아쉽기도 했고, 면접 직후 찾아보니 HikariCP에 대한 이야기도 나오길래 어? 맨날 springboot 켜면 나오는 hikari가 커넥션 풀을 관리해주는 거였어? 하고 관심을 가지게 됐다. 그래서 이번 글은 커넥션 풀과 hikariCP에 대한 소개. DB 커넥션 풀 커넥션 풀은 데이터베이스와 연결된 커넥션을 미리 만들어 풀에서 관리하고, 필요시 이를 사용하고 반환하는 기법이다. 이는 데이터베이스 연결 수행 및 읽기/쓰기 작업에 관련된 오버헤드를 줄이는 것이 주 목적인 데이터 엑세스 패턴이다. 또한 이는, 가장 기본적인 수준의 DB 연결 캐시라고 할 수 있다. 이렇게만 들으면 감이 안올텐데, 일단 예시를 먼저 .. 2021. 10. 14.
jobLauncher로 Job 실행시 runIdIncrementer가 작동하지 않는 경우 이 글은 다음 상황에 대처한 경험을 작성한 글이다. Spring Batch 사용 중, Job을 JobLauncher로 실행했을 때 실행되지 않는 경우를 확인했다. runIdIncrementer가 작동하지 않았음을 확인하고, 이에 대한 조치를 수행했다. Job의 중복 실행 Spring Batch의 경우, Job과 Step에 대한 실행 기록을 DB의 메타 테이블에 저장한다. 그리고 job 실행 시 해당 테이블을 조회하여, 만약 job의 parameter가 이전에 실행된 job의 parameter와 동일하다면 해당 job을 실행하지 않는다. 처음에는 왜 이런 번거로운 옵션이 있을까, 하고 난감했다. 하지만 다시 생각해 보니, 위 옵션을 통해 우리는 아래 상황을 방지할 수 있다. 파라미터 별로 한 번만 수행되어.. 2021. 10. 12.
H2로 SpringBoot 테스트 도중 SQL이 실행되지 않는 경우 대응법 이 글은 다음 상황에 대처한 경험을 작성한 글이다. MySQL, PostgreDB 등에서 사용하던 SQL이 H2 DB에서 실행되지 않는 경우를 확인한다. H2 모드를 조정하여 테스트 환경 등에서 쿼리가 정상 실행되도록 한다. 여러 환경에서의 DB 운영 현재 졸업 프로젝트를 진행하면서, 아래처럼 DB 환경을 나눠 구축하고 있다. application.yml에서 여러 yaml 파일을 import하여 관리한다. application-prod.yml에서 운영서버 실행 환경을 설정한다. DB는 MariaDB를 사용하며, flyway를 사용한다. application-local.yml에서 로컬 실행 환경을 설정한다. DB는 MySQL을 사용하며, flyway를 사용한다. application-test.yml에서 테.. 2021. 10. 8.
반응형