반응형

Kotlin 24

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

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

[OOP] 전략 패턴 안에 전략 패턴을 넣어 의존성을 더욱 줄여보았다

우리는 객체지향을 배우면서 추상화의 장점을 배운다. Java, Spring에서는 이 장점들을 적극적으로 활용할 수 있도록 굉장히 많은 지원을 해준다. 참고: https://kth990303.tistory.com/359 [JAVA] IoC, DI, DIP 친구와 얘기하던 중, Spring IoC, DIP 개념에 대한 얘기가 나왔다. 이 개념들은 구글링하면 워낙 잘 정리된 글들이 많아 별도로 작성하지 말까 고민도 했다. 하지만 해당 개념들은 객체지향에서 매우 kth990303.tistory.com 인터페이스, 추상클래스, DI 등의 장점에는 의존성이 적어진다는 점이 존재한다. 이러한 점 덕분에 구현을 하다가 if문이 굉장히 많이 나오거나, 추상화할 수 있게 리팩터링할만한 부분이 나온다면 우리는 추상화를 이용..

[Nexters] 넥스터즈 22기, 23기 최종 수료 후기

2023년 8월 19일 토요일, 넥스터즈 23기를 이수하였다. 그와 동시에 나는 22기와 23기를 모두 이수하여 최종적으로 넥스터즈 수료증을 획득하였다! 22기와 23기는 나에게 있어 사뭇 다른 느낌이었다. 22기는 대학생 신분으로서, 그리고 넥스터즈 신입으로서 아예 낯선 환경에서 으쌰으쌰했다면, 23기는 직장인 신분으로서, 그리고 넥스터즈 두번째 활동으로 어느정도 나름 (넥스터즈 한정) 중니어 신분으로 활동했기 때문이다. 그리고 실제로 22기와 23기는 다른 점들이 꽤나 존재했다. 크게 다른 점 몇 가지를 적어보자면 아래와 같다. 22기는 장소 매번 변경됨 / 23기는 장소 고정 (SBA 아카데미) 22기는 넥나잇이 오후 1~9시까지만 진행 / 23기는 넥나잇이 오후 6시 ~ 다음날 오전 9시까지 진행..

[230715] 넥스터즈 23기 2~3주차 세션 후기

벌써 넥스터즈 23기도 3/8 정도가 지나갔다. 세월이 진짜 빠른 듯하다. (내가 귀찮으므로 ㅋㅋ) 거두절미하고 바로 본론으로 가보도록 하겠다! 2~3주차 세션 2주차에는 기획발표, 3주차에는 레크레이션 및 UT 진행이 안내됐다. UT는 애플리케이션 기획안에 대해 PPT 또는 피그마로 소개해주는 시간을 의미한다. 22기 때와 세션 커리큘럼이 거의 비슷했어서 낯설지는 않았던 듯하다. 확실히 22기 때의 경험 덕분에 부담감이 훨씬 적은 느낌? 그래서 그런지 발표도 완전 막장(?) 으로 진행됐다! 2주차 때에는 PM이 탈주를 하는 바람에, 내가 발표를 하게 됐다. (진짜 탈주는 아니고, PM 형이 그날 기업 코딩테스트가 있었다) (그리고 애초에 우리팀은 탈주 허용으로 유명한 팀이다 ㅎㅎ 나도 4주차는 탈주 예..

[230703] 넥스터즈 23기 첫 주차 세션 후기

넥스터즈는 두 기수 이상 이수해야 수료 처리가 된다. 나는 22기 때 활동을 진행했으므로, 23기까지 활동을 해야 최종적으로 수료가 되기 때문에 이번 23기에도 활동을 진행했다. 22기 합격 후기 및 활동 후기는 아래에서 확인할 수 있다. https://kth990303.tistory.com/401 [221204] 넥스터즈 22기 면접 후기 및 질문리스트 IT 유명 연합동아리 중 하나로 알려진 `넥스터즈`에 지원했다! 넥스터즈는 개발자, 디자이너와 연합해서 두달 간 몰입하여 프로젝트를 진행하는 연합동아리이다. https://teamnexters.com/ NEXTERS : IT Comm kth990303.tistory.com https://kth990303.tistory.com/429 [Nexters] 넥..

[Kotlin] Refresh Token을 Redis에 저장하는 코드 작성 및 고찰

인증 방법에는 토큰을 이용하는 방식, 세션을 이용하는 방식이 존재한다. 나는 주로 토큰을 이용하는 방식을 선호하는데 그 이유는 아래와 같다. 세션 기반 인증은 쿠키를 사용해야 한다. 그러나 쿠키는 네이티브 앱에서 지원하지 않고 브라우저에서만 사용할 수 있다. 다중 WAS 환경에서 세션은 동기화 이슈가 존재한다. 따라서 확장성이 낮다. sticky session, session clustering 등 다양한 방법이 존재하지만, 토큰 방식은 이러한 점을 고려할 필요가 없다. 물론 토큰 방식은 별도의 구현이 좀 더 필요하지만, 한 번 구현해놓으면 어렵지 않고 편리하게 이용가능하기 때문에 큰 거부감이 없는 편이다. 토큰 방식의 인증은 또 두 가지 방법으로 나뉜다. Access Token만을 이용하는 방식과 Re..

[Nexters] 넥스터즈 22기 최종 이수 후기

3월 4일, 마지막 8주차가 지나가고 넥스터즈 22기를 최종적으로 이수했다. 넥스터즈를 두 기수 이상 이수해야 받을 수 있는 `수료` 조건을 만족한 것은 아니지만, 나름 한 기수를 좋은 점수로 `이수`했기 때문에 후기를 작성해보려 한다. (수료 조건: 두 기수 이상 이수 / 이수 조건: 한 기수 이상 일정 점수 이상 획득) 타이트한 일정, 그럼에도 성공적으로 마무리된 프로젝트 우리 팀은 대부분 직장인으로 구성돼있다. 디자이너, 프론트 팀원들은 전부 직장인이었고, 백엔드 팀원들은 나랑 한명을 제외하곤 모두 직장인이었다. 백엔드는 6년차 개발자 한 분, 나, 우테코 4기 정, 우테코 5기 애쉬로 구성돼있다. 다들 회사 또는 우테코 생활때문에 굉장히 바빴음에도 불구하고 열심히 임해주셔서 누락된 api 없이 모..

[Nexters] 넥스터즈 22기 6~7주차 활동 후기

시간이 정말 빠르다. 어느덧 넥스터즈 활동도 한 주 정도만 남겨둔 상태이다. 6주차에는 온라인 세미나를, 7주차는 밤까지 코딩하는 `넥나잇`을 진행했다. 특히 7주차는 굉장히 바쁜 하루였다. 8주차 때 최종 배포를 했어야 하는 상황이었고, 우리 팀원분들은 다들 직장인이거나 학교 졸업반인 사람들이 많았기 때문에 `넥나잇`시간에 최대한 불태워서 거의 마무리를 지어야 했기 때문. 간단하게 후기를 남겨보도록 하겠다. 6주차 6주차는 위와 같이 온라인으로 컨퍼런스 시간을 가졌다. 디자이너와 개발자가 따로 진행이 됐는데, 나는 백엔드 개발을 맡고 있어서 개발자쪽 세션을 쭉 들었다. 개발자 강연은 총 4개가 진행됐다. 새로운 데이터베이스 소개부터 이직썰, 오픈소스 얘기까지 다양한 얘기가 나왔다. `이직썰`은 특히 우..

[Spring] ArgumentResolver 사용 시 주의점 (feat. OSIV)

ArgumentResolver는 컨트롤러 단에서 요청값으로부터 원하는 객체 또는 프로퍼티를 반환하게 할 수 있다. 보통은 커스텀 유저 객체를 반환할 때 HandlerMethodArgumentResolver의 구현체를 이용하여 많이 사용한다. Java에서의 ArgumentResolver 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 @Component @RequiredArgsConstructor public class AuthenticationPrincipalArgumentResolver implements HandlerMethodArgumentResolver { private final JwtTokenProvider jwtTokenProvider; @Ov..

[Kotlin] Swagger 문서에 DTO 필드 required 표시해주기

프론트 측에서 swagger 문서의 request Body에 required 옵션을 추가해달라는 요청이 들어왔다. 현재는 request에 required 표시인 레드닷(red dot)이 하나도 적용되지 않는 상황이다. 심지어 swagger는 Java와 Kotlin에서 서로 약간 다르게 동작하기도 한다. 어떻게 해야 할까? @ApiParam? @Parameter? Swagger 3.0 버전 이후부터는 @ApiParam이 @Parameter로 변경됐다. import io.swagger.v3.oas.annotations.Parameter 실제로 Java에서는 해당 어노테이션을 적용하면 잘 뜰것이다. 하지만 코틀린은? @Parameter(required=true)로 해봤자 전혀 변함이 없다. 심지어 @field..

반응형