본문 바로가기

분류 전체보기90

Type Erasure Deep Dive 제네릭에 사용되는 타입 소거(type erasure)에 대해 알아보고 이로 인해 생기는 제약과 문제들에 대해 탐구합니다. Type Erasure(타입 소거)란 제네릭 타입에 사용된 타입 정보를 컴파일 타임에만 사용하고 런타임에는 소거하는 것을 말한다. 타입 소거 규칙 자바 컴파일러는 아래의 규칙에 따라 타입 소거 과정을 실행한다. 모든 타입 파라미터를 그들의 바운드나 Object 타입으로 교체한다. 제네릭 타입을 제거한 후 타입이 일치하지 않으면 타입 캐스팅을 추가한다 확장된(extended) 제네릭 타입의 다형성을 보존하기 위해 브릿지 메서드를 생성한다. 예를들어 아래처럼 언바운드 타입 T로 제네릭 클래스를 선언하고 컴파일을 한 뒤 바이트코드를 까보면 타입 변수가 사라지고 Object 타입으로 바뀐 것.. 2022. 3. 6.
[Spring] 스프링 이벤트를 활용하여 서비스 간의 의존성 제거하기 작년 12월 19일에 진행한 유스콘에서 스프링 이벤트 처리에 대한 세션이 있었는데요, 내용이 너무 좋아서 포스팅으로 정리하며 제대로 이해해보고자 합니다. 반태형님이 지식 공유를 해주셨고 예제 코드는 여기서 확인하실 수 있습니다. 스프링 공식 문서에서 이벤트에 관한 내용을 참고하고 싶으시면 여기를 보시면 됩니다. 애플리케이션을 만들다보면 아래처럼 서로 다른 서비스 간에 의존성이 발생하는 경우가 생깁니다. @Service public class UserService { private final UserRepository userRepository; private final AdminService adminService; private final EmailService emailService; private .. 2022. 2. 5.
우아한테크코스 4기 최종합격 후기 정말 감사하게도 우테코 4기에 합류할 수 있게 되었습니다. 최종 테스트와 합격 발표 사이 2주 정도 되는 시간 동안 마음이 붕 뜬 상태로 지냈습니다. 최종 합격 여부가 자꾸 신경 쓰여서 공부가 손에 잡히질 않더라고요. 개발 관련 공부가 아얘 집중이 안됐습니다. 여태 나름 멘탈이 강하다고 스스로를 평가했었는데… 그만큼 간절했나 봅니다. 최종 코딩 테스트를 치고 나서 든 느낌은 ‘나쁘지 않게 잘했다’였습니다. 비록 예외처리 하나를 빼먹긴 했지만 미션의 대부분의 요구사항을 구현했고, 코드도 결코 좋은 코드라고 할 순 없지만 그래도 미션의 프로그래밍 제약사항과 프리코스 기간의 피드백 사항에서 많이 벗어나지 않았다고 생각했기 때문입니다. 뭐 개인적인 감상 같은 건 차치하고 두 번의 프리코스 과정을 거치면서 느낀 .. 2022. 1. 7.
[스프링 시큐리티] 스프링 시큐리티의 구조를 살펴보자! 스프링 시큐리티의 구조 스프링 시큐리티는 웹 애플리케이션의 인증과 인가 및 그 외 일반적인 웹 공격에 대한 방어를 제공하는 스프링의 하위 프레임워크이다. 인증: 내 신원을 확인하는 과정 인가: 내가 특정 리소스에 접근할 권한이 있는지 확인하는 과정 스프링 시큐리티는 주로 서블릿 필터와 이들로 구성된 필터체인을 통해 웹 요청에 대한 보안 관련 처리를 수행한다. 서블릿 필터란 HTTP 요청을 가로채 전처리 및 후처리를 수행할 수 있도록 만들어진 자바 표준 기술이다. 필터는 체인으로 구성될 수 있으며, 하나의 필터가 자신의 역할을 한 후 요청과 응답 객체를 다음 필터로 넘길 수 있다. public void doFilter(ServletRequest request, ServletResponse response,.. 2021. 11. 23.
우테코 4기 1차 합격 후기(feat.재수) 우아한 테크코스 4기 모집에 지원했고 1차 심사에 합격해 프리코스에 참여하게 되었다. 작년 3기 모집 최종 테스트에서 탈락했었기 때문에 1차 합격이 작년처럼 막 뛸 듯이 기쁘지는 않았다. 당시에는 최종에서 떨어질 거라곤 생각도 안 했기 때문에(경쟁률이 대략 2대 1이었다) '아 드디어 우테코에 참여하는구나' 생각했었는데 이번에는 '또 최종에서 떨어지면 어떡하지?'라는 걱정이 먼저 들었다. 지원서는 일 년간 몰입한 경험이나 개발을 시작하게 된 동기 같이 변하지 않은 내용들은 작년의 내용을 그대로 썼다. 대신 문장을 좀 더 정갈하게 다듬고, 우테코 설명회를 보면서 강조하는 인재상에 맞는 부분을 조금 더 부각하려고 노력했다. 프로그래밍 학습 경험은 아무래도 일 년이 지났기 때문에 거의 새로 썼다. 또 당시에는.. 2021. 11. 21.
프로젝트 회고(당근마켓 API 클론코딩) 2주간 데브코스 팀원들과 함께 당근마켓 API 서버를 클론코딩 해보는 시간을 가졌습니다. 짧은 시간동안 협업을 진행하면서 느꼈던 점들을 정리해보려고 합니다. 1. 협업, 정말 쉽지 않구나 사실 이번에 제대로 된 협업을 처음 해봤습니다. 이전에도 웹 프로젝트 협업을 한 번 해보긴 했지만, 저는 서비스에 필요한 데이터를 수집하는 역할이었어서 프로젝트 내내 크롤러만 만드느라 다른 사람의 코드를 읽거나 고치는 경험을 못 해봤었거든요. 다른 팀원들도 웹 프로젝트는 처음이었기 때문에 프로젝트 기간 동안 기술적인 고민보다는 협업에 대한 고민을 한 시간이 더 많았어서 아쉬웠습니다. 작업은 어느 정도로 분할해야 하고, 기능은 어떻게 나눠서 작업해야 하는지도 잘 모르겠고, 작업 내용을 합칠 때마다 Conflict를 해결하.. 2021. 11. 8.