분류 전체보기

    지난 2개월간의 인생 리뷰 - 사이드프로젝트 DND

    살면서 가장 주도적으로 살았던 기간이었다. 2개월동안, 마음속에만 품어왔던 도전들을 하나씩 꺼내보았다. 그리고 그 도전들을 하나씩 리뷰해보려고 한다. 첫번째 이야기 - 멘토링 사이드프로젝트 - DND 8주동안 DND 에서 [쉽고 빠른 약속시간 정하기 - 모두의시간]을 만들었다. https://www.dnd.ac/ DND 프로젝트에 즐거움을, 모두에게 기회를 www.dnd.ac 프로젝트 백엔드 레포지토리 시작 프로젝트 아이디어를 정하는 과정에서 여러가지 좋은 의견들이 나왔다. 우리는 8주라는 기간동안 완성할 수 있는지 여부가 가장 중요하다고 판단했고, 개인적으로는 실제로 사용되는 서비스를 만들고 싶었다. 시간 약속을 잡는 불편함은 당장 하고 있던 회의시간을 잡는 중에도 느꼈던 불편함이었고, 살아가면서도 시..

    지난 2개월간의 인생 리뷰 - 멘토링

    살면서 가장 주도적으로 살았던 기간이었다. 2개월동안, 마음속에만 품어왔던 도전들을 하나씩 꺼내보았다. 그리고 그 도전들을 하나씩 리뷰해보려고 한다. 멘토링 미니 우테코를 직접 기획하고 운영했었다. 프리코스처럼 사전과제로 지원자를 받았고, 지원자 모두에게 공통피드백을 드렸다. 멘토링 지원서 링크 4명의 멘티들을 선발했었고 4주동안 2개의 미션으로 강의, 코드리뷰, 멘토링 등을 진행했다. [ 자동차 미션 PR ] https://github.com/hongik-dev-mentoring/java-racingcar/pulls?q=is%3Apr+is%3Aclosed GitHub - hongik-dev-mentoring/java-racingcar: 자동차 경주 게임 미션 저장소 자동차 경주 게임 미션 저장소. Co..

    서비스 제공자의 시각으로 살아가기

    시작 문을 열고 나오면 부쩍 쌀쌀해진 공기가 피부로 느껴진다. 옷이 한 겹씩 늘어날 때마다 올해도 점점 끝이 다가오는 것 같다. 요즘 입을 옷을 꺼내놓으면서 올해 초와 참 닮아있다는 생각이 든다. 그때도 아직은 쌀쌀한 날씨였기에 차마 얇게는 입고 다니지 못했었다. 꿈만 같았던 합격 날의 기쁨도 아직 가시지 않았었다. 나는 그토록 이곳에 왜 오고 싶어 했을까? 다시 떠올려본다. 기술이 필요했다. 창업을 하면서, 내가 고민한 결과물로 다른 사람들에게 편리함을 주는 것에 희열을 느끼고 있다는 것을 깨달았다. 책의 작은 오타가 혹시나 학생의 시험에 영향이 가진 않을지, 배송 중 책이 조금이라도 손상되어 글씨가 잘 안 보이게 되면 학생이 다른 글씨로 오해하진 않을지 학생의 시점에서 항상 고민했다. 그동안 소비자로..

    [DI 구현하기] 의존성 주입이 필요한 이유와 DI 컨테이너의 탄생

    스프링을 사용하는 핵심이유중 하나는 DI (Dependency Injection) 의존성 주입입니다. 우리는 의존성 주입이 왜 필요한 것인지, 또 스프링이 의존성 주입을 어떻게 해주는지 제대로 이해하고 사용하고 있을까요? 간단한 UserService와 UserDao 예제로 의존성 주입이 왜 필요한 것인지 간단히 이해해보고, 나아가서 스프링이 제공하는 DI 컨테이너를 직접 만들어 보겠습니다. 1단계 : 생성자 주입(?) 현재, 사용할 UserDao 인스턴스를 생성자를 통해 외부에서 전달받는 UserService가 존재합니다. UserService class UserService { private final UserDao userDao; public UserService(UserDao userDao) { t..

    [Servlet 구현하기] Controller Scanner와 JSON View

    지난 시간에 어노테이션 기반의 MVC 프레임워크를 만들어 보았습니다. 아직은 개선할 점이 있었습니다. 컨트롤러 어노테이션 스캔 역할 분리 JSON view 지원 프레임워크에서 기본으로 어노테이션 핸들러 지원하기 위의 개선점들을 해결하기 전에, 생각해봐야할 점이 있었습니다. MVC 프레임워크 패키지가 아닌 APP (어플리케이션) 패키지에서 지원하는 핸들러와 어댑터를 추가해주고 있었습니다. 저희가 스프링 MVC를 사용할때 어노테이션 매핑을 따로 추가해주지 않아도 기본으로 지원하는 것 처럼, 개발자는 어노테이션 매핑에 대한 추가설정 없이 기본적으로 제공받도록 구현하고 싶었습니다. 그래서 MVC 프레임워크 패키지에 DefaultApplicationInitializer를 만들어주었습니다. package nexts..

    [Servlet 구현하기] 어노테이션 기반 MVC 프레임워크 구현

    톰캣 코드 저장소 : https://github.com/dongho108/jwp-dashboard-http/tree/step234 어노테이션기반 MVC 프레임워크 코드 저장소 : https://github.com/dongho108/jwp-dashboard-mvc/tree/step1 지난 시간에는 서블릿 컨테이너인 톰캣을 구현해보았습니다. 구현했던 톰캣 기능 요청당 쓰레드 생성 (쓰레드관리) 커넥션관리 서버소켓 생성 HttpRequest, HttpResponse 변환 컨트롤러 찾기 컨트롤러 실행 그래서 4~6번은 아래와 같은 구조가 만들어졌습니다. 위와 같은 구조에는 문제점이 있었습니다. Request에 맞는 Controller를 찾아주는 메서드와 클래스가 전혀 다른 곳에 있는 패키지를 의존하고 있습니다...

    [Tomcat 구현하기] 2. HttpRequest, HttpResponse, RequestMapper, Controller

    이번에는 지난번에 구현한 톰캣을 이용해 요구사항을 구현해보겠습니다. 다음과 같이 기능 요구사항이 주어졌습니다. 기능요구사항 GET /login 요청에 로그인 페이지를 보여준다. GET /register 요청에 회원가입 페이지를 보여준다. POST /register , body를 포함한 요청에 회원가입을 시키고 login 페이지로 redirect 시킨다. POST /login 요청에 로그인 처리를 한다. - 서버에서 세션을 생성해 로그인 정보를 저장한다. - 쿠키에 JSESSION 아이디를 담아서 로그인을 유지시킨다. 로그인 처리가 된 사용자에게는 index.html 페이지를 보여준다. HttpRequest 구현 socket 에 쓰여진 inputStream을 사용하기 편하도록 HttpRequest로 변환해..

    [Tomcat 구현하기] 1. Tomcat, Connector, Socket

    SpringBoot를 사용해 클라이언트-서버 통신을 하게되면 내장된 톰캣을 사용합니다. Tomcat에 대한 이해가 없더라도 우리는 어렵지 않게 외부와 통신을 할 수 있습니다. 그런데 정말 Tomcat을 모르고 웹 어플리케이션 서버를 만들어도 되는 걸까요? 우리는 서버에 요청이 많아져 부하가 생긴다면 Tomcat 설정을 바꿔야할 수도 있습니다. 미리 Tomcat에 대한 이해가 있다면 어느부분에서 문제가 생겼는지, 파악이 가능하고 튜닝까지 가능할 것입니다. 이번 시간에는 Tomcat을 직접 구현해보며 Tomcat을 알아가보겠습니다. 더 나아가 서블릿을 직접 구현하며 웹서버 통신의 흐름을 다뤄봅니다. 다음과 같이 기능 요구사항이 주어졌습니다. 기능요구사항 GET /login 요청에 로그인 페이지를 보여준다...

    팀 프로젝트가 나에게 남긴 것

    시작 처음으로 팀 프로젝트를 해보며 깨달은 점이 많았다. 팀 안에서 얻어간 교훈과 팀에서 어떤 역할을 해야 할 지에 대한 고민이 담겨있는 글을 적어보려고 한다. 같이 고민하기 방학 중에 팀 아이디어를 내는 시간이 있었다. 당시에 나는 칭찬 하나 없이 다른 크루의 아이디어가 안될 것 같은 점만 말했다. 팀 아이디어 하나에 7명의 몇 개월이 달려있다고 생각하고 혼자 심각했던 것 같다. 그때는 나름 이 방식이 맞다고 착각했었다. 그런데 소통하는 방식에 대한 글을 여러 개 읽고 생각이 많이 바뀌었다. 도메인 지식 탐구를 위한 이벤트 스토밍이라는 기법이 있다. 이벤트 스토밍의 첫 단계는 토론하지 않고 각자가 자신이 옳다고 생각하는 방식을 기록하는 시간을 보장하는 것이다. 이 방식을 알고 큰 충격을 받았다. 아이디..

    CIDR 읽는 법과 원리

    CIDR(Classless Inter-Domain Routing) VPC와 서브넷이라는 개념을 이해하기 위해서는 먼저 CIDR 블록 표현 방식을 이해해야 합니다. 위에서 언급했듯 우리는 다른 네트워크와 분리된 네트워크를 만들 필요가 있습니다. CIDR는 32비트로 표현되는 IPv4를 나누기위한 방법중 하나입니다. IPv4를 나누기위한 방법 클래스 구분 법 CIDR 기존의 클래스 구분법을 사용하면 서브넷 마스크는 8자리로만 끊기게 되어 낭비되는 IP들이 존재하게 됩니다. CIDR는 기존의 클래스로만 구분된 네트워크의 한계를 극복하기 위한 수단으로 개발되었습니다. CIDR는 IPv4주소의 4개의 옥텟그룹 뒤에 /숫자 를 붙이면서 표현합니다. xxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxx..