반응형

분류 전체보기 486

[241030] 우아콘 2024 참여 후기

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

[Kotlin] mock 테스트를 작성할 때 기억하면 좋은 점들

스프링 환경에서 테스트 코드를 작성할 때, unit test가 아닌 이상 모킹을 이용해야 하는 경우가 참 많다.나의 경우는 테스트를 하고 싶은 객체의 함수 외에, 관심사가 아닌 함수들과 의존객체들을 주로 mock 으로 처리하는 듯. 이번 포스팅에서는 어떻게 보면 굉장히 단순하지만, 최근 내가 잊고 있었던 내용들을 기록해보려 한다.`굳이 기록까지 해야되나?` 싶기도 하다. 하지만 가끔씩 상기시키면 좋을 듯한, 그리고 요즘같이 바쁜 시기에 이걸 잊으면 맞왜틀? (맞게 작성했는데 왜 테스트 안돌아감?) 을 할 수 있을듯한 내용들이라.. 나를 위해 기록하려 한다. data class 는 mock 이 불가능하다.아무 생각없이 data class mock을 반환하는 테스트 코드를 작성한 적이 있을 것이다. 하지만 ..

[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..

[240720] 만 1년차 백엔드 주니어 개발자 후기

우아한형제들에서 근무한지 벌써 만 1년이 넘었다.우리 팀에서 벌써 내가 막내를 탈출하기도 했고 (실력은 아직 내가 막내가 맞는듯 ㅜㅜ), 벌써 입사할 때 후덥지근했던 계절이었던 여름이 다가오기도 했다. 배운 것도 정말 많고 해서 후기를 작성해보려 한다.그리고 근황도 함께.(깃허브 잔디 접었다는 소문이 많은데, 그렇지 않다. 그 계정을 거의 안쓸뿐... 뒤에 후술하겠다.)개발 기술적으로 느낀 점들API 개발은 신중하게. 도메인 책임 위치는 생각보다 매우 중요!사이드프젝을 개발할 때에는 유즈케이스 추가에 따른 API 개발 및 필드 추가를 아무 생각없이 하곤 했다.하지만 실무경험이 조금 쌓인 지금은, 필드 추가 및 API 개발을 굉장히 조심스럽게 하고 있다. 규모가 크고 복잡한 곳에서는 API 개발 또는 응답..

Coding Diary 2024.07.20

[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 로 회원가입 로그를 찍는다..

반응형