반응형

JAVA 158

[241030] 우아콘 2024 참여 후기

우아한형제들 주관 테크컨퍼런스인 WOOWACON 2024에 참여했다!https://2024.woowacon.com/ WOOWACON 2024한 번의 배달을 위해 필요한 모든 기술들2024.woowacon.com 작년 11월에는 우아콘 2023을 팀원분 한분과 함께 갔다왔었다. (후기: https://kth990303.tistory.com/468) 올해는 비교적 일찍인 10월 말에 우아콘이 열렸고, 팀원분 한분 뿐만이 아닌 팀원 5분 + 내 지인들 + 우테코 동료들 등등 엄청나게 많은 지인들과 함께 우아콘에 참여하였다. 지난 해와 다르게 이번에는 쿠키를 굿즈에 포함시켜주었다.아마 WOOWACON 내의 알파벳으로 구성된 쿠키 중 랜덤하게 주는 듯? 우아콘 2024 영상들은 추후 유튜브에 올라올 예정이라고 한..

[240831] 유스콘 2024 컨퍼런스 후기-이제는 발표자 신분으로! (다중 서버에서 똑똑하게 캐싱하기)

나는 꾸준히 유스콘에 참여했었다. 유스콘 2021 에 지인의 안내로 처음 참여해보고 유익하다는 생각이 들어서유스콘 2022, 2023 에도 청중(?) 신분으로 신청했었다.그리고 매번 후기를 작성했었다. 유스콘 2023 에서, 유스콘의 주최자인 제이슨이 이렇게 말한 적이 있었다.'케이, 발표자 한 번 하셔야죠~'(여담으로 케이는 내 우테코 시절 닉네임이다.) 사실 진심인지 아니면 가벼운 인사치레인지 모르겠지만ㅋㅋ (진심이라 말해줘요 제이슨~)그 말을 듣고, 나도 한번 내가 얻은 실무경험 중 신기하고 재밌었던 내용을 공유해보고 싶단 생각이 들었다.그리고 2024년 7월 경으로 기억하는데, 그 쯤에 발표자 신청 폼을 제출하여 다행히 발표자로 선정이 되었다!   그렇게 나는 유스콘 2024에서 `다중 서버에서 ..

[Hibernate] fetchJoin 시에 중복문제, 페이징을 사용하는 경우엔 미발생?

fetchJoin을 하는 경우, 카테시안 곱으로 인해 중복 문제가 발생한다.아래와 같이 클라이밍 팀 관련 데이터가 존재한다고 해보자.1팀, 2팀은 클라이밍고수 라는 동일한 팀 이름을 가지고 있다.(2팀에 계신 분들은 국가대표 선수들이라 진짜 고수고, 1팀은 클라이밍 고수가 되고 싶은 팀이라고 하자 ㅎㅎ) querydsl 메서드아래 querydsl 코드로 '팀이름으로 해당 팀의 회원 명단을 반환'하는 메서드를 생성했다.12345678@Overridepublic ListTeam> findAllMembersByTeamName(String teamName) {    return jpaQueryFactory.selectFrom(team)                          .join(team.member..

[Spring Data JPA] Custom Repository 구현체 클래스명 주의점

Spring Data JPA 를 사용한다면 (특히 querydsl) 아래와 같은 생각이 들 때가 있다. '클래스명 xxxRepositoryImpl 말고 xxxRepositoryImplementation 이라든지, HappyRepositoryImpl 처럼 좀 줄이거나 바꿔서 작성할 수 없나?' 안된다. 아래 에러를 만나게 된다. Failed to load ApplicationContextCaused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name defined in file  빈을 아예 못찾아서 위 에러가 발생하게 된다.원인을 찾기 위해 내려보면, No property foun..

[Java] 불변 객체와 UnsupportedOperationException

기본적이지만 놓치기 쉬운 부분을 기록해보려 한다. 이해하기 쉽게 예시를 들어, 코드와 함께 상황극으로 설명하려 한다. 아래와 같은 코드가 있다.1234567891011121314151617181920@Getterpublic class BoulderingCrewSignupRequest {     private ListLong> memberId;    private String crewName;     public BoulderingCrewSignupRequest(ListLong> memberId, String crewName) {        this.memberId = memberId;        this.crewName = crewName;    }     public static Bouldering..

[Spring] Spring Boot + Shedlock 이용한 API 응답 캐싱 폴링

우리 팀 API가 아닌 타 팀(또는 타사) API를 호출하여 응답을 이용하긴 하는데, 응답이 너무 반복적으로 같은 경우가 있다.예를 들어 국가 별 수도 목록을 구하는 api를 매번 호출한다고 하자. 수도는 웬만해서는 변하지 않기 때문에, 이런 경우에는 응답을 캐싱해두면 좋아보인다. 하지만 가끔 캐싱만으로는 걱정되는 경우가 존재한다.이번에 나는 캐싱 뿐 아니라, 폴링 로직을 추가하는 경험을 해보았는데 처음 경험해보는 것이어서 기록용으로 포스팅에 남겨두려고 한다. 포스팅 작성 시점 기준으로, 사내 개발환경에만 도입해보았고 실제 운영환경에 작성되지 않아 틀린점이 존재할 수 있습니다. 틀린 점 및 보완할 점은 댓글로 남겨주세요!폴링을 고려하게 된 계기응답을 캐싱해두면, 그 다음번부터는 api를 호출할 필요 없이..

[240525] Spring Camp 2024 갔다온 후기

스프링캠프 2024에 다녀왔다! (여담으로, 넥스터즈 23기 때 진행한 장소와 같아서 지리가 굉장히 익숙했다.) 2023에 다녀온지 얼마 안된 것 같은데, 2024가 벌써 열리다니.지난 스프링캠프 2023 후기는 여기서 볼 수 있다.https://kth990303.tistory.com/440 [230422] Spring Camp 2023 갔다온 후기KSUG에서 주최한 스프링캠프 2023 컨퍼런스에 다녀왔다~ https://springcamp.ksug.org/2023/ Spring Camp 2023 '스프링 캠프'는 애플리케이션 서버 개발자들과 함께 가치있는 기술에 관한 지식과 정보를 '공유'하kth990303.tistory.com  이번 스프링캠프 2024도 2023때와 마찬가지로 인프런에서 신청을 받았..

[Spring] JUnit5 에서 OutputCapture를 이용한 로그 테스트 해보기

최근에 우연히 로그를 테스트하는 방법에 대해 알게돼서 기록용으로 남겨보려 한다.바로 Spring Boot 에서 제공해주는 OutputCaptureExtension 이다.  Spring Boot 2.2.0 이상의 환경이라면 gradle에 별도의 추가설정 없이 사용이 가능하다.안내돼있는 것처럼, System.out, System.err 로 출력되는 코드들을 캡처해서 AssertJ, JUnit 테스트에서 로그 출력 여부를 확인할 수 있다. 참고로 @Slf4j 의 log.info, log.error 로그 출력 캡처도 가능하다.따라서 Java, Kotlin의 웬만한 환경에서는 다 사용이 가능하리라 생각한다.테스트회원가입 (signUp 메서드)을 진행하면 아래 코드와 같이 log.info 로 회원가입 로그를 찍는다..

[240406] GDSC Konkuk KPrintf 행사 참여 후기

아는 지인 중 샤인(https://github.com/zbqmgldjfh)이랑 수지누나(https://github.com/sujileelea)가 발표한다고 해서 참여한 행사. GDSC Konkuk 리더이신 현우님(https://github.com/l2hyunwoo) 이 준비하신 걸로 알고 있다. (맞나?) 샤인이 발표하는 헥사고날 아키텍처는 우리 팀의 일부 프로젝트에서 사용하기도 하고, 샤인이 발표하기도 해서 들어보려고 하고, Vision Pro로 접해보는 공간 컴퓨팅도 수지누나가 발표하고, 아예 새로운 분야여서 들어보기로 했다. 그리고 CS와 함께하는 BE 이야기 세션은 흥미로워보여서 중간에 2시부터라도 들어보려 했다. 일정 상 12시부터 3시까지만 참여하긴 했지만 이에 대해 후기를 적어보려 한다. ..

[Spring] @Transactional(readOnly=true)에서 write 시 예외 좀 더 살펴보기

개발하던 도중 아래 에러를 만났다. The MySQL server is running with the --read-only option so it cannot execute this statement 에러 발생 원인은 @Transactional(readOnly=true) 어노테이션이 붙어진 메서드에서 save 로직을 했기 때문이다. 근데 이 readOnly 옵션에 대해 의견이 분분했다. 그래서 이번 기회에 조금 더 살펴보려 한다. 코드 쪽을 쭉 살펴보면서 분석해봤으며, 혼자서 분석해본 것이라 틀린 내용이 포함될 수 있다. 결론부터 말하자면 아래와 같다. H2 DB는 readOnly 무시됨. (정말 유명한 사실이다.) MySQL, MariaDB는 readOnly 시 락 걸고, 여기에 위배되는 로직 작성 시..

반응형