전체 글

전체 글

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

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

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

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

    들어가면서 웹 자동차 경주 미션이 끝나고 다음 미션은 장바구니 웹페이지 기능을 구현하는 것이었다. 지난 번 미션처럼 프론트 단 HTML 페이지와 JS파일은 작성되어 있는 상태였어서 해당 페이지에서 넘어오는 Request 메세지를 처리하고 적합한 Response를 반환할 수 있는 CRUD API를 작성하는 것이 목표였다. 이번 장바구니 미션 페어는 마코였다. 마코와는 우테코 시작부터 친했던 크루였어서 편하게 미션을 바로 시작할 수 있었다. 개인적으로 step1의 최소 요구사항만 따지고 본다면 자동차 경주 미션보다 좀 더 쉽지 않았나 싶었다. 이전 미션을 통해 Spring에 좀 더 익숙해진 상태로 미션을 진행해서 더 그렇게 느낀 건지도 모르겠다. 이번 레벨2에서 설정했던 목표는 '미션을 진행하며 이해나 내부..

    [Level 2] Repository와 Dao를 분리하는 기준

    본 포스팅은 우아한테크코스 레벨2 웹 자동차 경주 미션을 진행하며 고민했던 내용 중 일부를 정리한 것입니다. 개인의 주관이 들어간 글인지라 틀린 내용이 있을 수 있음을 미리 말씀드립니다. 처음에는 단순하게 Repository가 Dao들을 사용해서 기능을 수행하면 된다고만 생각했다. 아래는 미션에서 구현했던 웹 기반 자동차 경주 프로그램의 Repository 클래스이다. 코드를 살펴보면 Repository는 자동차 경주 게임을 진행한 결과 정보를 담은 Dto를 넘겨받아 저장하는 save 기능만을 수행한다. @Repository public class WebRacingCarRepository implements RacingCarRepository { private final RacingGameDao raci..

    [Level 2] 공식문서를 통한 프레임워크 학습 방법에 대한 고찰

    우아한테크코스 레벨2에서는 스프링 프레임워크에 대한 학습을 진행하게 된다. 하지만 첫날 OT를 듣고 나니 개인적으로 스프링 자체보다는 처음 접하는 기술에 대해 학습하는 방법을 찾으려고 노력해야 한다는 것이 핵심이라고 느껴졌다. 생각해보면 아무리 지금 스프링을 열심히 공부해둔다고 해도 현업에 가서는 전혀 다른 기술을 사용하게 될 가능성이 더 높았다. 그럴 때 결국 도움이 되는 본질적인 스킬은 신기술을 올바르게 사용하는 방법을 빠르게 학습하는 것이라는 생각이 들었다. 그래서 개인적인 레벨2 목표를 신기술을 접했을 때 학습하는 방법을 찾고 연습하는 것으로 결정했다. (물론 스프링 자체에 대한 학습도 빼먹지 말자...!) 첫 번째 미션을 진행하는 중 Spring JDBC에 대한 학습 테스트를 진행하게 되었다. ..

    [우아한테크코스] LV1 - 체스 미션 회고

    [우아한테크코스] LV1 - 체스 미션 회고

    우아한테크코스 LV1 마지막 미션은 체스 게임을 구현하는 것이었다. step1,2는 콘솔에서 체스판을 초기화 하고 말을 움직여서 게임을 진행할 수 있도록 하는 것이 목표였다. step 3,4는 상대 편의 King을 잡았을 때 게임을 종료하고 점수를 계산해 승패 여부를 출력하도록 하고 DB와 연동해서 중간에 진행되던 게임을 다시 불러와서 진행할 수 있도록 하는 것이 목표였다. 이번 step1,2 페어는 엔초였다. 당시 테코톡 발표와 각종 야크 쉐이빙으로 밀린 task에 허덕이던 상황이었어서 체력적으로 많이 힘든 상황이었다. 그런데 엔초는 도메인을 분석해서 객체에게 책임을 분배하는 능력이 정말 뛰어난 크루였다. 함께 미션을 진행하면서 객체를 설계하는 관점에 대해 많은 것을 배울 수 있었다. 그 덕분에 ste..

    [우아한테크코스] LV1 - 블랙잭 미션 회고

    [우아한테크코스] LV1 - 블랙잭 미션 회고

    우아한테크코스 LV1 세 번째 미션은 블랙잭 게임을 구현하는 것이었다. step1은 플레이어의 이름을 입력받아 블랙잭 게임을 진행하고 플레이어 별 승패 결과를 출력하는 것이 목표였다. 그 다음 step2는 배팅 시스템을 도입하여 플레이어가 배팅 금액을 입력하고 승패 결과에 따라 상금을 받아갈 수 있도록 하는 것이 목표였다. step1 페어는 민트였으며 페어프로그래밍 기간 내내 데드라인에 쫓겨 굉장히 익스트림하게(?) 진행했었던 미션이었다. 그래도 페어 기간 내내 많이 웃으면서 정말 재미있게 진행할 수 있었던 것 같다. 하지만 이후 리팩토링과 step2를 진행하면서 굉장히 코드를 많이 뒤엎었기에 전반적인 설계에 대한 중요성을 뼈저리게 체감할 수 있었던 미션이기도 했다. 개인적으로 정말 애증이 많이 남은 미..

    [글쓰기] Level1 - 우테코 1달 생활기

    [글쓰기] Level1 - 우테코 1달 생활기

    우테코 1달 생활기 매몰된 사람 고등학교 때부터였을까? 항상 목표가 있었다. 원하는 대학교에 합격하고 싶었고 선택한 분야의 학위를 받아내고 싶었다. 그때그때 목표는 달랐다. 그럼에도 당시 갖고 있던 목표를 위해 매몰되어 살았던 건 항상 같았다. 사람들도 만나지 않았고 밥 먹는 시간조차도 아깝다고 여기며 노력했다. 하지만 단 한 번도 노력을 쏟았던 것만큼 결실을 얻은 경험은 없었다. 왜 실패했을까 수 없이 고민하며 괴로워했다. 하지만 별다른 이유는 찾을 수 없었다. 그래서 매번 내가 부족한 사람이었기 때문이라고 치부했다. 그렇게 해야만 지금의 실패를 이해할 수 있었고 견뎌낼 수 있었다. 혼자 매몰되어 할 수 있는 건 아무것도 없다. 목표를 잃고 방황하던 중 우연히 한 공고를 접했다. 우아한테크코스 5기 모..

    [Level 1] 인터페이스와 추상클래스에 대한 개인적인 고찰

    [Level 1] 인터페이스와 추상클래스에 대한 개인적인 고찰

    블랙잭 미션에서 상태 패턴을 적용하려고 시도 하면서 인터페이스와 추상클래스를 모두 사용하게 되었다. 미션을 진행할 때 당시에는 다형성에 대한 개념도 잘 모르면서 무작정 인터페이스와 추상클래스를 사용했었는데 각각에 대해 공부해보고 언제 사용해야 하는지 개인적인 기준을 정립해보고자 했다. 해당 포스팅은 인터페이스와 추상클래스에 대한 개인적인 생각을 정리한 것이지 정답이 아니기에 틀린 내용이 있을 수 있습니다. 😂 인터페이스에 대한 특징들을 간단하게 정리하면 다음과 같다. 인터페이스는 모든 메서드가 추상 메서드로 선언된다. 미리 사용할 메서드를 인터페이스에 선언해두고 구현 시 선언된 추상 메서드들을 구현하면 된다. 이는 자식 클래스에게 구현을 강제시켜 구현 객체의 동일 동작을 보장한다고 볼 수 있다. 상속보다..