우아한테크코스

    [우아한테크코스] LV2 - 웹 지하철 미션 Step2, 3 회고

    [우아한테크코스] LV2 - 웹 지하철 미션 Step2, 3 회고

    들어가면서 레벨2에서 가장 어렵다고 여겨지는 지하철 미션이 모두 끝났다. 페어미션인 step1 때부터 지금까지 폭풍처럼 시간이 지나갔던 것 같다. step2, 3는 생각보다 쉽게 구현할 수 있었다. 오히려 리팩토링 기간에 가장 시간을 많이 투자한 부분은 step1 에서 설계했던 도메인 객체인 sections였다. 처음 설계할 때 외부 라이브러리인 jGrapht를 사용할 것을 염두에 두고 설계를 했었는데 이게 결과적으로 독이 되었던 것 같다. 개인적으로 당장 필요하지 않은 기능을 고려해서 설계를 진행하는 것이 오히려 더 큰 복잡함을 낳을 수 있다는 것을 새삼 깨닫게 되었다. 그리고 객체지향의 목적에 대해 다시 한 번 생각하게 되는 계기가 되는 미션이었던 것 같다. 여태까지 객체지향을 현실의 객체들에 대한 ..

    [글쓰기] Level2 - 스프링을 학습하는 방법에 관한 고찰

    스프링을 학습하는 방법에 관한 고찰 묻지 말고 일단 행하라 레벨2에 들어와서 코치님들이 가장 먼저 해주신 말들이 있다. 스프링이 왜 이런 방식으로 동작하는지에 집착하지 말 것. 일단 스프링을 사용해볼 것. 그다음에는 어떻게 잘 사용할 수 있는지에 대해 고민하고 학습할 것. 분명 레벨1에서는 보이는 모든 것에 의문을 품어야 한다고 배웠다. 몇 달 동안 배우고 유지해 온 방향성이 흔들리는 순간이었다. 왜 스프링의 동작 방식을 이해하려 하지 말고 일단 사용해 보라 하는 걸까? 마치 이해하지 못한 공식을 외워서 수학 문제를 푸는 것 같은 기분이었다. 코드를 작성하면서도 지금 무언가를 공부하고 있긴 한 건가 싶었다. 모니터 앞에서도 의미 없는 시간을 보내고 있다는 괴리감을 지우기 힘들었다. 왜 먼저 행해야 하는가..

    스프링의 예외처리 과정 및 처리 방법에 대하여 (2)

    스프링의 예외처리 과정 및 처리 방법에 대하여 (2)

    이전 포스팅에서 이어집니다. 스프링의 예외처리 과정 및 처리 방법에 대하여 (1) 포스팅 배경 우테코 레벨2 두번째 미션인 장바구니 기능 구현을 진행하면서 로그인 인증기능을 구현하기 위해 Interceptor를 구현해서 사용하게 되었다. 이 과정에서 Interceptor 내부에서 예외를 던 makemepositive.tistory.com 스프링이 제공하는 다양한 예외처리 방법 스프링에서는 다양한 예외 처리 전략을 수행하기 위해 HandlerExceptionResolver 인터페이스를 제공한다. public interface HandlerExceptionResolver { @Nullable ModelAndView resolveException( HttpServletRequest request, HttpSe..

    스프링의 예외처리 과정 및 처리 방법에 대하여 (1)

    포스팅 배경 우테코 레벨2 두번째 미션인 장바구니 기능 구현을 진행하면서 로그인 인증기능을 구현하기 위해 Interceptor를 구현해서 사용하게 되었다. 이 과정에서 Interceptor 내부에서 예외를 던져야할 필요성이 생겼는데 여기서 발생하는 예외는 어떻게 처리해야할지 고민하다 스프링의 전체적인 예외 처리 과정이 궁금해졌다. 스프링에서 예외를 처리하는 전체적인 흐름을 살펴보고 어떻게 미션에서 발생했던 문제를 해결할 수 있었는지 정리해보고자 한다. 우리가 직접 구현한 Controller에서 발생하는 Exception들은 어떻게 처리될까? Spring은 기본적인 에러 처리를 위한 BasicErrorController를 구현해뒀다. 이로 인해 별도의 추가 설정이 없다면 스프링 부트는 예외가 발생했을 때 ..

    [우아한테크코스] LV2 - 웹 지하철 미션 Step1 회고

    [우아한테크코스] LV2 - 웹 지하철 미션 Step1 회고

    들어가면서 레벨2 세번째 미션은 지하철 미션이었다. 지하철의 노선과 역 정보를 관리하는 API를 설계하고 구현하는 것이 이번 목표였다. 지하철 노선도라는 복잡한 도메인으로 웹 서비스 API를 설계하는 것이 이번 미션의 취지였다고 한다. 그만큼 도메인을 설계하는 과정에서 고려해야할 사항들이 굉장히 많아서 난이도도 높게 느껴졌고 시간이 많이 부족했다. 이번 미션의 페어는 이리내였다. 이리내는 긴 시간 페어 프로그래밍에도 코드에 대한 집중력을 잃지 않는 크루였다. 덕분에 미션을 진행하면서 고려해야 할 사항들이 너무 많아서 주기적으로 흐름을 놓칠때마다 다시 제자리를 찾아가는데 도움을 많이 받았다. 지난번 장바구니 미션에서 도메인의 설계가 외적인 부분에 영향을 받는 것이 굉장히 맘에 걸렸었다. 그래서 이번에는 반..

    [우아한테크코스] LV2 - 웹 장바구니 미션 Step2 회고

    [우아한테크코스] LV2 - 웹 장바구니 미션 Step2 회고

    들어가면서 웹 장바구니 step2 미션은 사용자 인증 기능과 등록된 상품을 사용자 별로 선택해서 담을 수 있는 장바구니 기능을 구현하는 것이었다. step1 머지는 빨리된 편이었어서 step2도 최대한 빠르게 진행하고 마무리하고 싶었으나 중간에 여러 고민들을 하면서 많이 헤매서 결국 예상보다 2~3일은 더 걸리고 말았다. 어떤 점들 때문에 미션 진행 속도가 더뎌졌었는지, 고민하다가 헤맨 부분은 어떤 것이었는지, 반드시 필요한 고민이었는지 돌아보고자 한다. 그리고 이번 주 내내 미션을 진행하면서 굉장히 무기력함을 느꼈다. 미션을 하면서 새롭게 알게 되는 것은 없고 쌓인 숙제하듯이 미션을 하고 있는 것 같아 더 힘들고 오래걸렸던 것 같다. 이 부분에 대해서도 왜 이런 감정을 느꼈는지, 어떻게 앞으로 해결할 ..

    [우아한테크코스] LV2 - 웹 자동차 경주 미션 회고

    [우아한테크코스] LV2 - 웹 자동차 경주 미션 회고

    들어가면서 10초 같은 10일의 방학이 지나고 어느덧 레벨2가 시작했다. 레벨2 첫번째 미션은 레벨1에서 구현했던 콘솔기반 자동차 경주 프로그램을 웹 기반으로 다시 구현해보는 것이었다. 이번 페어는 오리였으며 굉장히 금방 지나간 것 같은 3일이었다. 1년 전에 무료 스프링 입문 강의를 노베이스로 한 번 들었던 것 말고는 경험이 전무했던 나와는 다르게 오리는 스프링을 사용하는 것에 익숙해보였다. 덕분에 해메일 수 있었던 레벨 초반에 감을 빠르게 잡을 수 있었던 것 같다. 레벨 초반 미션이고 스프링을 처음 시작하는 사람들도 진행할 수 있도록 해야 했기에 요구사항이 많이 빡세지 않다는 것이 느껴졌다. 하지만 스프링을 거의 처음 접하는 입장으로서 시시각각 쏟아져 나오는 키워드들과 모르는 개념들은 충분히 사람을 ..

    [Level 2] Layered Architecture에 대한 개인적인 고찰

    자바 콘솔 기반 프로그램을 구현하던 레벨1에서 웹 기반 프로그램을 구현하는 레벨2로 넘어오면서 Layered Architecture를 계속 접하게 되었다. 인터넷을 조금만 찾아봐도 Layered Architecture의 각 계층들이 어떤 책임을 지는지에 대해 설명하는 글들을 쉽게 접할 수 있다. 그러나 미션을 진행하면서 궁금했던 것은 Layered Architecture로 설계된 프로그램에서 각 계층들이 어떻게 정보를 주고 받게 할 것인가였다. 레벨1에서 MVC 구조를 사용하며 VIew와 Model이 상호 독립적으로 최대한 의존하지 않도록 해야했고 그 완충 작용을 해주는 역할이 Controller였다. 그런데 Layered Architecture로 설계된 웹 프로젝트에서 각 계층들은 왜 분리해야 하는지,..