본문 바로가기

Java23

Java 17 학습테스트 제가 개발을 처음 시작할 즈음 Java 17 버전이 나왔고, 최근에는 Java 19 버전까지 나온 것으로 알고 있는데요. 17, 19 버전 내용을 훑어보니 꽤나 재미있는 내용들이 있는 것 같아 간단하게 학습 테스트를 진행해보았습니다. 특히 코틀린을 사용하셨던 분들이라면 꽤나 익숙한 것들이 있을 거에요. 깊이 있게는 아니고, 그냥 간단하게 Java 17 버전을 학습테스트 한 내용을 정리해보겠습니다. Record 기존에는 VO를 만들기 위해, 각 field에 private final 키워드를 붙이고, Getter를 재정의 해주고, Equals & hashcode를 재정의 해야 합니다. 많은 boilerplate 때문에 lombok을 주로 사용해왔는데요. java 17 버전부터는 그러지 않아도 됩니다. 과거에.. 2022. 10. 3.
부하테스트(2) - 부하테스트 적용하기 안녕하세요. 이번 글에서는 부하테스트 적용하기에 대해서 포스팅해보겠습니다. 앞선 글을 보며 우리 서비스는 왜 부하테스트를 해야할까, 부하테스트에는 어떤 종류가 있고 어떻게 실행을 계획할 수 있을까에 대해 충분히 고민할 수 있었을 것입니다. 이제 부하테스트를 진행하면서 예상하는 성능, 안정성에 도달하기 위해 개선 - 테스트의 반복적인 과정이 진행될텐데요. 서비스의 부하를 잘 측정하기 위해서는 적절한 부하테스트 도구를 먼저 선정해야 합니다. 1. 부하테스트 도구 선정 서비스에 대한 세밀한 부하테스트를 진행하기 위해서는 시나리오 기반의 부하테스트가 가능한 도구를 사용하는 것이 주요합니다. 저는 JMeter, Ngrinder, K6를 사용해보았고, 각 툴에 대해 제가 느낀 점은 아래와 같습니다. JMeter J.. 2022. 9. 20.
의존관계 분리 경험 공유(2) 안녕하세요. 땡쿠팀의 백엔드 개발자 후니입니다. 지난 포스팅에 이어서 강한 의존관계를 분리하는 방법을 소개하고자 하는데요. Separated Interface 패턴을 이용하여 의존관계를 분리한 제 경험을 작성해보겠습니다. Separated Interface? 개발을 하다보면, 서로 다른 두 개의 시스템 파트의 결합도를 줄임으로써 설계의 수준을 개선할 수 있습니다. 일반적인 구조를 부정하고 다른 패키지를 참조해야 할 때 이 패턴을 주로 사용할 수 있는데요. 구현체를 상대 패키지에 두고, 인터페이스를 현재 패키지에 위치시키는 것입니다. 그러면 클라이언트는 구현체에 대한 정보는 참조할 필요 없이 현재 패키지의 인터페이스만 참조하게 되겠죠? 문제 상황 단건 쿠폰을 조회할 때, 쿠폰과 연관된 예약 / 만남 정보를.. 2022. 8. 10.
[Spring] 스프링의 일관된 예외처리 스프링에서 제공하는 데이터 접근 객체는 데이터 접근 기술을 쉽고 일관된 방법으로 사용하게 만들고자 하는 목적을 갖고 있습니다. 덕분에 데이터 접근 기술을 변경이 쉽죠. 그 중에서도 각 기술이 변경되더라도 에러 처리에 대한 걱정을 하지 않아도 되는 부분이 발군입니다. 이번 포스팅에서는 스프링이 어떤 방식으로 일관된 예외처리를 제공하는지 살펴보고자 합니다. 일관된 예외 계층 구조 스프링은 데이터 접근 기술 중심적인 예외를 일관된 방법으로 처리하는 것을 지원합니다. 아래 코드를 통해 간단히 살펴보겠습니다. jdbcTemplate에서 update 메서드를 이용하면 JdbcOperation에서 상속한 update를 이용하여 쿼리를 날립니다. JDBC api의 executeUpdate를 써서 만약 에러가 발생하면 .. 2022. 5. 12.
[레벨 1 돌아보기] 테스트 코드 작성을 위한 규칙 레벨 1 미션의 주요 학습 목표는 TDD입니다. 그 이후 모든 과제를 TDD로 수행하다보니, 좋은 테스트 코드를 작성하기 위한 규칙을 만들어야 했는데요. 레벨 1을 돌아보며 좋은 테스트 코드를 작성하기 위한 규칙을 재정립하고자 이 포스팅을 작성하게 됐습니다. 먼저 좋은 테스트 코드라는 정의를 내리기 전에 테스트 코드를 왜 작성해야 하는지가 중요합니다. 저도 지금 생각해보니 학습목표이기 때문에 관성적으로 작성했다 라는 답변이 가장 먼저 떠올랐습니다. 이건 이유가 되지 않는 것 같고 다른 이유를 좀 더 고민해보았습니다. 테스트는 왜 작성하는가? 저는 아래 3가지 이유로 테스트 코드를 작성해왔습니다. 1. 시간 단축 하나의 기능을 구현할 때마다 실제 애플리케이션을 실행한다면 얼마나 불편할까요? 특히 나중에 여.. 2022. 4. 17.
[레벨 1 돌아보기] dao 테스트 중 lock wait? 레벨 1에서의 학습목표와는 조금 동떨어진 이야기지만.. Dao를 테스트 하는 과정에서 어떤 에러를 만났습니다. com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction 에러를 확인해보니 락을 획득하기 위한 시간이 초과되어 트랜잭션을 다시 시작하라 라고 말합니다. 어떤 상황이기에 이 에러가 발생했고, 이 문제를 어떻게 해결하는지 적어보고자 합니다. 락 발생 db의 커밋 모드 설정을 수동 커밋 모드로 전환하면 특정 쿼리가 실행되는 순간 해당 세션에서 트랜잭션이 열립니다. 이를 트랜잭션 a라고 칭하겠습니다. 트랜잭션 a는 다른 트랜잭션으로 부터 격리하고 트.. 2022. 4. 15.